src/main/java/com/zy/asrs/controller/OpenController.java
@@ -228,4 +228,94 @@ return R.ok().add(openService.digitalTwinOverview()); } /** * 近期订单 近期订单数量,默认7天 */ @RequestMapping("/digitalTwin/recentOrder") public R digitalTwinRecentOrder(@RequestHeader(required = false) String appkey, @RequestBody DigitalTwinRecentOrderParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } return R.ok().add(openService.digitalTwinRecentOrder(param)); } /** * 6.3近期剩余库位 近期剩余库位数量,默认7天 */ @RequestMapping("/digitalTwin/recentIdleLoc") public R digitalTwinRecentIdleLoc(@RequestHeader(required = false) String appkey, @RequestBody DigitalTwinRecentIdleLocParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } return R.ok().add(openService.digitalTwinRecentIdleLoc(param)); } /** * 近期出库入库 */ @RequestMapping("/digitalTwin/recentInAndOutBound") public R digitalTwinRecentInAndOutBound(@RequestHeader(required = false) String appkey, @RequestBody DigitalTwinRecentInAndOutBoundParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } return R.ok().add(openService.digitalTwinRecentInAndOutBound(param)); } /** * 6.5近期呆滞品 */ @RequestMapping("/digitalTwin/recentDetainMat") public R digitalTwinRecentDetainMat(@RequestHeader(required = false) String appkey, @RequestBody DigitalTwinRecentDetainMatParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } return R.ok().add(openService.digitalTwinRecentDetainMat(param)); } /** * 6.6设备监控 */ @RequestMapping("/digitalTwin/equipment") public R digitalTwinEquipment(@RequestHeader(required = false) String appkey, @RequestBody DigitalTwinEquipmentParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } return R.ok().add(openService.digitalTwinEquipment(param)); } /** * 6.7库位及库存信息 */ @RequestMapping("/digitalTwin/warehouseDetail") public R digitalTwinWarehouseDetail(@RequestHeader(required = false) String appkey, @RequestBody DigitalTwinWarehouseDetailParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); } return R.ok().add(openService.digitalTwinWarehouseDetail(param)); } } src/main/java/com/zy/asrs/entity/ViewStockUseBeanDigitalTwin.java
@@ -9,12 +9,12 @@ */ @Data public class ViewStockUseBeanDigitalTwin { private Long totalLoc; //库位总数 private Long useLoc; //已用库位 private Long idleLoc; //剩余库位 private Long todayOutbound; //今日出库 private Long todayWarehousing; //今日入库 private Long remainingStock; //剩余库存 private Long totalLoc = 0L; //库位总数 private Long useLoc = 0L; //已用库位 private Long idleLoc = 0L; //剩余库位 private Long todayOutbound = 0L; //今日出库 private Long todayWarehousing = 0L; //今日入库 private Long remainingStock = 0L; //剩余库存 private String nowData; //剩余库存 } src/main/java/com/zy/asrs/entity/param/DigitalTwinEquipmentParam.java
New file @@ -0,0 +1,32 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.ArrayList; import java.util.List; /** * Created by vincent on 2020/6/13 */ @Data public class DigitalTwinEquipmentParam { private int areaId = 0; //库区ID,不传默认全部 private List<DataCode> dataCodeList = new ArrayList<>(); @Data public static class DataCode { private String equipmentId = "1"; //设备ID private String equipmentName = "号堆垛机"; //设备名称 private int equipmentType = 1; //设备类型:1 堆垛机;2 CTU;3 AGV; private String belongAreaId = "1"; //归属库区ID private String belongAreaName = "1"; //归属库区名称 private int verticalSpeed = 10; //垂直速度,单位:M/min private int horizontalSpeed = 10; //水平速度,单位:M/min private int voltage = 320; //电压,单位:v private int status = 1; //设备状态:1 正常;2 待机;3 故障; private int operateMethod = 1; //操作方式:1 自动;2 半自动;3 手动; } } src/main/java/com/zy/asrs/entity/param/DigitalTwinRecentDetainMatParam.java
New file @@ -0,0 +1,45 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; /** * Created by vincent on 2020/6/13 */ @Data public class DigitalTwinRecentDetainMatParam { private int areaId = 0; //库区ID,不传默认全部 private int overDayNum = 30; //呆滞品认定天数,如超过10传值:10。默认30。 private int pageIndex = 1; //分页页码,从1开始。需要分页时使用。 private int pageSize = 9999; //分页页码大小。 private List<DataCode> dataCodeList; @Data public static class DataCode { private int belongAreaId; //归属库区ID private String belongAreaName; //归属库区名称 private String matId; //物料ID private String matName; //物料名称 private String lokId; //所属库位ID private String lokName; //所属库位名称 private int detainTime; //呆滞时间,计算单位:分钟 private String inBoundTime; //入库时间,格式:2025-10-11T11:15:16,预留 public DataCode() { } public DataCode(VwLocDetlSummaryParam vwLocDetlSummaryParam) { this.belongAreaId = vwLocDetlSummaryParam.getAreaId(); this.matId = vwLocDetlSummaryParam.getMatId(); this.matName = vwLocDetlSummaryParam.getMaktx(); this.lokId = vwLocDetlSummaryParam.getLocNo(); this.lokName = vwLocDetlSummaryParam.getLocNo(); this.detainTime = vwLocDetlSummaryParam.getDetainTime(); this.inBoundTime = vwLocDetlSummaryParam.getInBoundTime(); } } } src/main/java/com/zy/asrs/entity/param/DigitalTwinRecentIdleLocParam.java
New file @@ -0,0 +1,35 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; /** * Created by vincent on 2020/6/13 */ @Data public class DigitalTwinRecentIdleLocParam { private int areaId; // 开始日期,格式:20251022。不传默认7天。 private String startDate; // 结束日期,格式:20251022。配合startDate使用。 private String endDate; private String memo; private List<DataCode> dataCodeList; @Data public static class DataCode { private int areaId; // 库存日期,格式:2025-10-22 private String locDate; // 数字 剩余库位数量 private Long idleNum; } } src/main/java/com/zy/asrs/entity/param/DigitalTwinRecentInAndOutBoundParam.java
New file @@ -0,0 +1,35 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; /** * Created by vincent on 2020/6/13 */ @Data public class DigitalTwinRecentInAndOutBoundParam { private int areaId; // 开始日期,格式:20251022。不传默认7天。 private String startDate; // 结束日期,格式:20251022。配合startDate使用。 private String endDate; private String memo; private List<DataCode> dataCodeList; @Data public static class DataCode { // 库存日期,格式:2025-10-22 private String boundDate; // 入库数量 private Long inBoundNum; // 数字 出库数量 private Long outBoundNum; } } src/main/java/com/zy/asrs/entity/param/DigitalTwinRecentOrderParam.java
New file @@ -0,0 +1,33 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; /** * Created by vincent on 2020/6/13 */ @Data public class DigitalTwinRecentOrderParam { // 开始日期,格式:20251022。不传默认7天。 private String startDate; // 结束日期,格式:20251022。配合startDate使用。 private String endDate; private String memo; private List<DataCode> dataCodeList; @Data public static class DataCode { // 物料编号 private String orderDate; // 物料数量 private Long orderNum; } } src/main/java/com/zy/asrs/entity/param/DigitalTwinWarehouseDetailParam.java
New file @@ -0,0 +1,46 @@ package com.zy.asrs.entity.param; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.LocMast; import lombok.Data; import java.util.ArrayList; import java.util.List; /** * Created by vincent on 2020/6/13 */ @Data public class DigitalTwinWarehouseDetailParam { private int areaId = 0; //库区ID,不传默认全部 private List<DataCode> dataCodeList = new ArrayList<DataCode>(); @Data public static class DataCode { private String locNo;//设备ID private String locSts;//设备名称 private int areaId;//设备类型 private String areaName;//设备类型 private int row1;//设备类型 private int bay1;//设备类型 private int lev1;//设备类型 private List<LocMast> locMast;//设备类型 private List<LocDetl> locDetl;//设备类型 public DataCode(LocMast locMast,List<LocDetl> locDetl) { ArrayList<LocMast> locMasts = new ArrayList<>(); locMasts.add(locMast); this.locNo = locMast.getLocNo(); this.locSts = locMast.getLocSts(); this.areaId = locMast.getCrnNo(); this.areaName = ""; this.row1 = locMast.getRow1(); this.bay1 = locMast.getBay1(); this.lev1 = locMast.getLev1(); this.locMast = locMasts; this.locDetl = locDetl; } } } src/main/java/com/zy/asrs/entity/param/ViewLocDailyLogParam.java
New file @@ -0,0 +1,44 @@ package com.zy.asrs.entity.param; /** * Created by vincent on 2020/6/13 */ public class ViewLocDailyLogParam { private String ymd; private int area; private Long qty; private String sts; public String getYmd() { return ymd; } public void setYmd(String ymd) { this.ymd = ymd; } public int getArea() { return area; } public void setArea(int area) { this.area = area; } public Long getQty() { return qty; } public void setQty(Long qty) { this.qty = qty; } public String getSts() { return sts; } public void setSts(String sts) { this.sts = sts; } } src/main/java/com/zy/asrs/entity/param/ViewOrderParam.java
New file @@ -0,0 +1,20 @@ package com.zy.asrs.entity.param; /** * Created by vincent on 2020/6/13 */ public class ViewOrderParam { // 物料编号 private String ymd; // 物料数量 private Long qty; public String getYmd() { return ymd; } public void setYmd(String ymd) { this.ymd = ymd; } public Long getQty() { return qty;} public void setQty(Long qty) { this.qty = qty;} } src/main/java/com/zy/asrs/entity/param/VwLocDetlSummaryParam.java
New file @@ -0,0 +1,22 @@ package com.zy.asrs.entity.param; import lombok.Data; /** * Created by vincent on 2020/6/13 */ @Data public class VwLocDetlSummaryParam { private String locNo; private int areaId; private String matId; private String inBoundTime; private int detainTime;//库龄(天数) // 物料编号 private String maktx; private String batch; private String zpallet; // 物料数量 private Double anfme; } src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java
@@ -1,6 +1,9 @@ package com.zy.asrs.mapper; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.ViewLocDailyLogParam; import com.zy.asrs.entity.param.ViewOrderParam; import com.zy.asrs.entity.param.VwLocDetlSummaryParam; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -80,4 +83,10 @@ Integer selectWorkCountInSum(String matnr, @Param("start") String startTime, @Param("end") String endTime); Integer selectWorkCountOutSum(String matnr, @Param("start") String startTime, @Param("end") String endTime); List<ViewOrderParam> getAsrOrderView(@Param("ymdS") String startTime, @Param("ymdD") String endTime); List<ViewLocDailyLogParam> getAsrLocDailyLogO(@Param("areaId")int areaId, @Param("ymdS") String startTime, @Param("ymdD") String endTime); List<ViewLocDailyLogParam> getAsrLocDailyLog2(@Param("areaId")int areaId, @Param("ymdS") String startTime, @Param("ymdD") String endTime); List<VwLocDetlSummaryParam> getVwLocDetlSummaryParam(@Param("areaId")int areaId,@Param("overDayNum")int overDayNum, @Param("curr") Integer curr, @Param("limit") Integer limit); void insertAsrLocDailyLog(); } src/main/java/com/zy/asrs/service/OpenService.java
@@ -49,4 +49,10 @@ * 库存统计 */ ViewStockUseBeanDigitalTwin digitalTwinOverview(); DigitalTwinRecentOrderParam digitalTwinRecentOrder(DigitalTwinRecentOrderParam digitalTwinRecentOrderParam); DigitalTwinRecentIdleLocParam digitalTwinRecentIdleLoc(DigitalTwinRecentIdleLocParam digitalTwinRecentIdleLocParam); DigitalTwinRecentInAndOutBoundParam digitalTwinRecentInAndOutBound(DigitalTwinRecentInAndOutBoundParam digitalTwinRecentIdleLocParam); DigitalTwinRecentDetainMatParam digitalTwinRecentDetainMat(DigitalTwinRecentDetainMatParam digitalTwinRecentIdleLocParam); DigitalTwinEquipmentParam digitalTwinEquipment(DigitalTwinEquipmentParam digitalTwinRecentIdleLocParam); DigitalTwinWarehouseDetailParam digitalTwinWarehouseDetail(DigitalTwinWarehouseDetailParam digitalTwinRecentIdleLocParam); } src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.core.common.SnowflakeIdWorker; import com.core.exception.CoolException; import com.zy.asrs.entity.*; @@ -14,6 +15,7 @@ import com.zy.asrs.service.*; import com.zy.asrs.utils.MatUtils; import com.zy.asrs.utils.OrderInAndOutUtil; import com.zy.asrs.utils.TimeCalculatorUtils; import com.zy.common.model.DetlDto; import com.zy.common.utils.NodeUtils; import lombok.extern.slf4j.Slf4j; @@ -609,7 +611,7 @@ viewStockUseBeanDigitalTwin.setIdleLoc(Integer.toUnsignedLong(selectCountLocMastO)); List<ViewInOutBean> list = reportQueryMapper.getViewInOutAll(new ViewInOutBean()); Date date = new Date(); String format = new SimpleDateFormat("yyyy-MM-dd").format(date); String format = new SimpleDateFormat(DateUtils.yyyyMMdd_F).format(date); viewStockUseBeanDigitalTwin.setNowData(format); for (ViewInOutBean view : list) { if (view.getYmd().equals(format)) { @@ -621,4 +623,135 @@ return viewStockUseBeanDigitalTwin; } @Override @Transactional public DigitalTwinRecentOrderParam digitalTwinRecentOrder(DigitalTwinRecentOrderParam param) { Date date = new Date(); if (Cools.isEmpty(param.getStartDate()) || !TimeCalculatorUtils.isValidDateFormat(param.getStartDate(), DateUtils.yyyyMMdd) || TimeCalculatorUtils.isFutureDate(param.getStartDate(), DateUtils.yyyyMMdd)) { param.setMemo("开始日期异常 :"+param.getStartDate()); String timeFrontSevenYesterday = new SimpleDateFormat(DateUtils.yyyyMMdd).format(TimeCalculatorUtils.timeFrontSevenYesterday6(date));//七天前 param.setStartDate(timeFrontSevenYesterday); String format = new SimpleDateFormat(DateUtils.yyyyMMdd).format(date);//当天 param.setEndDate(format); param.setMemo(param.getMemo()+";初始化日期为 :"+param.getStartDate()+"===>" + param.getEndDate()); } else if (Cools.isEmpty(param.getEndDate()) || !TimeCalculatorUtils.isValidDateFormat(param.getEndDate(), DateUtils.yyyyMMdd)) { param.setMemo("结束日期异常 :"+param.getEndDate()); String format = new SimpleDateFormat(DateUtils.yyyyMMdd).format(date);//当天 param.setEndDate(format); param.setMemo(param.getMemo()+";初始化日期为 :"+param.getStartDate()+"===>" + param.getEndDate()); } List<ViewOrderParam> asrOrderView = reportQueryMapper.getAsrOrderView(param.getStartDate(), param.getEndDate()); List<DigitalTwinRecentOrderParam.DataCode> dataCodes = new ArrayList<>(); for (ViewOrderParam view : asrOrderView) { DigitalTwinRecentOrderParam.DataCode dataCode = new DigitalTwinRecentOrderParam.DataCode(); dataCode.setOrderDate(view.getYmd()); dataCode.setOrderNum(view.getQty()); dataCodes.add(dataCode); } param.setDataCodeList(dataCodes); return param; } @Override @Transactional public DigitalTwinRecentIdleLocParam digitalTwinRecentIdleLoc(DigitalTwinRecentIdleLocParam param) { Date date = new Date(); if (Cools.isEmpty(param.getStartDate()) || !TimeCalculatorUtils.isValidDateFormat(param.getStartDate(), DateUtils.yyyyMMdd) || TimeCalculatorUtils.isFutureDate(param.getStartDate(), DateUtils.yyyyMMdd)) { param.setMemo("开始日期异常 :"+param.getStartDate()); String timeFrontSevenYesterday = new SimpleDateFormat(DateUtils.yyyyMMdd).format(TimeCalculatorUtils.timeFrontSevenYesterday6(date));//七天前 param.setStartDate(timeFrontSevenYesterday); String format = new SimpleDateFormat(DateUtils.yyyyMMdd).format(date);//当天 param.setEndDate(format); param.setMemo(param.getMemo()+";初始化日期为 :"+param.getStartDate()+"===>" + param.getEndDate()); } else if (Cools.isEmpty(param.getEndDate()) || !TimeCalculatorUtils.isValidDateFormat(param.getEndDate(), DateUtils.yyyyMMdd)) { param.setMemo("结束日期异常 :"+param.getEndDate()); String format = new SimpleDateFormat(DateUtils.yyyyMMdd).format(date);//当天 param.setEndDate(format); param.setMemo(param.getMemo()+";初始化日期为 :"+param.getStartDate()+"===>" + param.getEndDate()); } // List<ViewLocDailyLogParam> asrLocDailyLogO = reportQueryMapper.getAsrLocDailyLogO(param.getAreaId(), param.getStartDate(), param.getEndDate()); List<ViewLocDailyLogParam> asrLocDailyLogO = reportQueryMapper.getAsrLocDailyLog2(param.getAreaId(), param.getStartDate(), param.getEndDate()); List<DigitalTwinRecentIdleLocParam.DataCode> dataCodes = new ArrayList<>(); for (ViewLocDailyLogParam view : asrLocDailyLogO) { DigitalTwinRecentIdleLocParam.DataCode dataCode = new DigitalTwinRecentIdleLocParam.DataCode(); dataCode.setLocDate(view.getYmd()); dataCode.setIdleNum(view.getQty()); dataCode.setAreaId(view.getArea()); dataCodes.add(dataCode); } param.setDataCodeList(dataCodes); return param; } @Override @Transactional public DigitalTwinRecentInAndOutBoundParam digitalTwinRecentInAndOutBound(DigitalTwinRecentInAndOutBoundParam param) { Date date = new Date(); if (Cools.isEmpty(param.getStartDate()) || !TimeCalculatorUtils.isValidDateFormat(param.getStartDate(), DateUtils.yyyyMMdd) || TimeCalculatorUtils.isFutureDate(param.getStartDate(), DateUtils.yyyyMMdd)) { param.setMemo("开始日期异常 :"+param.getStartDate()); String timeFrontSevenYesterday = new SimpleDateFormat(DateUtils.yyyyMMdd).format(TimeCalculatorUtils.timeFrontSevenYesterday6(date));//七天前 param.setStartDate(timeFrontSevenYesterday); String format = new SimpleDateFormat(DateUtils.yyyyMMdd).format(date);//当天 param.setEndDate(format); param.setMemo(param.getMemo()+";初始化日期为 :"+param.getStartDate()+"===>" + param.getEndDate()); } else if (Cools.isEmpty(param.getEndDate()) || !TimeCalculatorUtils.isValidDateFormat(param.getEndDate(), DateUtils.yyyyMMdd)) { param.setMemo("结束日期异常 :"+param.getEndDate()); String format = new SimpleDateFormat(DateUtils.yyyyMMdd).format(date);//当天 param.setEndDate(format); param.setMemo(param.getMemo()+";初始化日期为 :"+param.getStartDate()+"===>" + param.getEndDate()); } ViewInOutBean viewInOutBean = new ViewInOutBean(); viewInOutBean.setBegin_date(param.getStartDate()); viewInOutBean.setEnd_date(param.getEndDate()); List<ViewInOutBean> list = reportQueryMapper.getViewInOutAll(viewInOutBean); List<DigitalTwinRecentInAndOutBoundParam.DataCode> dataCodes = new ArrayList<>(); for (ViewInOutBean view : list) { DigitalTwinRecentInAndOutBoundParam.DataCode dataCode = new DigitalTwinRecentInAndOutBoundParam.DataCode(); dataCode.setBoundDate(view.getYmd()); dataCode.setOutBoundNum(view.getRet_qty()); dataCode.setInBoundNum(view.getSto_qty()); dataCodes.add(dataCode); } param.setDataCodeList(dataCodes); return param; } @Override @Transactional public DigitalTwinRecentDetainMatParam digitalTwinRecentDetainMat(DigitalTwinRecentDetainMatParam param) { List<VwLocDetlSummaryParam> vwLocDetlSummaryParam = reportQueryMapper.getVwLocDetlSummaryParam(param.getAreaId(), param.getOverDayNum(), param.getPageIndex(), param.getPageSize()); List<DigitalTwinRecentDetainMatParam.DataCode> dataCodes = new ArrayList<>(); for (VwLocDetlSummaryParam view : vwLocDetlSummaryParam) { DigitalTwinRecentDetainMatParam.DataCode dataCode = new DigitalTwinRecentDetainMatParam.DataCode(view); dataCodes.add(dataCode); } param.setDataCodeList(dataCodes); return param; } @Override @Transactional public DigitalTwinEquipmentParam digitalTwinEquipment(DigitalTwinEquipmentParam param) { DigitalTwinEquipmentParam.DataCode dataCode = new DigitalTwinEquipmentParam.DataCode(); dataCode.setEquipmentId(""+param.getAreaId()); dataCode.setEquipmentName(param.getAreaId()+dataCode.getEquipmentName()); dataCode.setBelongAreaId(""+param.getAreaId()); dataCode.setBelongAreaName(""+param.getAreaId()); param.getDataCodeList().add(dataCode); return param; } @Override @Transactional public DigitalTwinWarehouseDetailParam digitalTwinWarehouseDetail(DigitalTwinWarehouseDetailParam param) { List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<>()); for (LocMast locMast : locMastList) { List<LocDetl> locDetlList = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo())); DigitalTwinWarehouseDetailParam.DataCode dataCode = new DigitalTwinWarehouseDetailParam.DataCode(locMast,locDetlList); param.getDataCodeList().add(dataCode); } return param; } } src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
@@ -26,4 +26,9 @@ public void executeOrder(){ orderMoveHistoryHandler.startOrder(); } @Scheduled(cron = "59 59 23 * * ?") public void executeAsrLocDailyLog(){ orderMoveHistoryHandler.startAsrLocDailyLog(); } } src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java
@@ -3,7 +3,9 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.ReportQueryMapper; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.LocMastServiceImpl; import com.zy.asrs.service.impl.OrderDetlPakinServiceImpl; import com.zy.asrs.service.impl.OrderPakinServiceImpl; import com.zy.asrs.task.AbstractHandler; @@ -31,6 +33,8 @@ private OrderDetlPakinServiceImpl orderDetlPakinService; @Autowired private OrderDetlPakoutService orderDetlPakoutService; @Autowired private ReportQueryMapper reportQueryMapper; public ReturnT<String> start(){ // List<Order> settleEqual6 = orderService.selectList(new EntityWrapper<Order>() @@ -114,4 +118,9 @@ } } public ReturnT<String> startAsrLocDailyLog(){ reportQueryMapper.insertAsrLocDailyLog(); return SUCCESS; } } src/main/java/com/zy/asrs/utils/TimeCalculatorUtils.java
New file @@ -0,0 +1,406 @@ package com.zy.asrs.utils; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; import java.time.temporal.WeekFields; import java.util.*; public class TimeCalculatorUtils { //获取七天前的日期(日期天数减七) public static Date timeFrontSevenYesterday(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -7); return calendar.getTime(); } //获取七天前的日期(日期天数减七,包含当天) public static Date timeFrontSevenYesterday6(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -6); return calendar.getTime(); } //获取七天后的日期(日期天数加七) public static Date timeAfterSevenYesterday(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, 7); return calendar.getTime(); } //获取相差n天的日期(日期天数加N) public static Date timeYesterdayN(Date date,int day){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, day); return calendar.getTime(); } //获取年月日 public static String timeYestMonthDay(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; // 月份从0开始,需要加1 int day = calendar.get(Calendar.DAY_OF_MONTH); return year+"年"+month+"月"+day+"日"; } //获取年 public static int timeYest(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.YEAR); } //获取月 public static int timeMonth(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MONTH) + 1; } //获取日 public static int timeDay(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.DAY_OF_MONTH); } //获取年差异 public static int DifferenceYest(Date startDay,Date endDay){ int startYest = timeYest(startDay); int endYest = timeYest(endDay); return endYest-startYest; } //获取月差异 public static int DifferenceMonth(Date startDay,Date endDay){ int startMonth = timeMonth(startDay); int endMonth = timeMonth(endDay); return endMonth-startMonth; } //获取天差异 public static int DifferenceDayInt(Date startDay,Date endDay){ return DifferenceDayLong(startDay,endDay).intValue(); } //获取天差异 public static Long DifferenceDayLong(Date startDay,Date endDay){ LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay)); LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay)); return ChronoUnit.DAYS.between(a, b)+1; } //获取天差异 public static Double DifferenceDayMorningAfternoon(Date startDay,Date endDay,int startTime,int endTime){ double between = DifferenceDayLong(startDay, endDay).doubleValue(); if (startTime==2){ between = between-0.5; } if (endTime == 1){ between = between-0.5; } return between; } //获取毫秒差异 public static Long differenceInMilliseconds(Date startDay, Date endDay) { if (startDay == null || endDay == null) { throw new IllegalArgumentException("Dates cannot be null"); } // 获取毫秒差异 return endDay.getTime() - startDay.getTime(); } //获秒差异 public static long differenceInSeconds(Date startDay, Date endDay) { if (startDay == null || endDay == null) { throw new IllegalArgumentException("Dates cannot be null"); } // 获取毫秒差异,并转换为秒 long millisecondsDifference = endDay.getTime() - startDay.getTime(); return millisecondsDifference / 1000; } public static boolean CompareData(Date startDay,Date endDay){ // 将日期字符串解析为LocalDate对象 LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay)); LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay)); // 比较日期 if (a.isAfter(b)) { return false; } else if (a.isBefore(b)) { return true; } else { return true; } } //java.time.LocalDate 转换为 java.util.Date; public static Date DateLocalDate(LocalDate localDate) { return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } //获取现在日期是当月第几周 public static int WeeklyNowMonthDay(Date date) { // int day = timeDay(date); // if (day<7){ // if (WeeklyNowMonth(WeeklyMonday(date))>2){ // return 1; // } // } return WeeklyNowMonth(WeeklyMonday(date)); } public static int WeeklyNowMonth(Date date) { // LocalDate currentDate = LocalDate.now(); LocalDate currentDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date)); WeekFields weekFields = WeekFields.of(Locale.getDefault()); int weekOfMonth = currentDate.get(weekFields.weekOfMonth()); return weekOfMonth; } //限制两个日期是周一和周末 工作日 周一到周六 public static void WeeklySix(Date date) { // LocalDate startDate = LocalDate.of(2022, 9, 5); // 假设开始日期是2022年9月5日,周一 LocalDate startDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date)); System.out.println("当前日期 " + startDate + " 周"); LocalDate endDate = startDate.plus(6, ChronoUnit.DAYS); // 结束日期是开始日期加上6天 System.out.println("当前日期加上6天是 " + endDate + " 周"); // 如果开始日期不是周一,则将它调整到下一个周一 if (startDate.getDayOfWeek() != DayOfWeek.MONDAY) { startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } // 如果结束日期不是周末(即周六或周日),则将它调整到下一个周末 if (endDate.getDayOfWeek() != DayOfWeek.SATURDAY && endDate.getDayOfWeek() != DayOfWeek.SUNDAY) { endDate = endDate.with(TemporalAdjusters.next(DayOfWeek.SATURDAY)); } // 确保两个日期之间相隔七天 while (startDate.plus(7, ChronoUnit.DAYS).isBefore(endDate)) { startDate = startDate.plus(7, ChronoUnit.DAYS); } System.out.println("开始日期:" + startDate); System.out.println("结束日期:" + endDate); } //限制两个日期是周一和周末 周一到周日 public static List<Date> WeeklySeven(Date date) { // LocalDate startDate = LocalDate.of(2022, 9, 5); // 假设开始日期是2022年9月5日,周一 LocalDate startDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date)); // System.out.println("当前日期 " + startDate + " 周"); LocalDate endDate = startDate.plus(6, ChronoUnit.DAYS); // 结束日期是开始日期加上6天 // System.out.println("当前日期加上6天是 " + endDate + " 周"); // 如果开始日期不是周一,则将它调整到下一个周一 if (startDate.getDayOfWeek() != DayOfWeek.MONDAY) { startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } // 如果结束日期不是周日,则将它调整到下一个周日 if (endDate.getDayOfWeek() != DayOfWeek.SUNDAY) { endDate = endDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); } // 确保两个日期之间相隔七天 while (startDate.plus(7, ChronoUnit.DAYS).isBefore(endDate)) { startDate = startDate.plus(7, ChronoUnit.DAYS); } List<Date> dateList = new ArrayList<>(); dateList.add(DateLocalDate(startDate)); dateList.add(DateLocalDate(endDate)); return dateList; // System.out.println("开始日期:" + startDate); // System.out.println("结束日期:" + endDate); } //判断是不是周一 public static boolean WeeklyOneSign(Date date) { LocalDate localDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date)); // 判断是不是周一 if (localDate.getDayOfWeek() != DayOfWeek.MONDAY) { return false; } return true; } //获取本周周一 public static Date WeeklyMonday (Date date) { LocalDate localDate = LocalDate.of(timeYest(date), timeMonth(date), timeDay(date)); // 下周周一 localDate = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); // 将LocalDate转换为Date Date monday = DateLocalDate(localDate); // 则将它调整到本周周一 return timeFrontSevenYesterday(monday); } //获取当前日期所在的周一及周日时间 public static List<Date> WeeklyMondayAndSundayNow(Date date) { Date nowMonday = WeeklyMonday(date); return WeeklySeven(nowMonday); } //获取当前日期上一周周一及周日时间 public static List<Date> WeeklyMondayAndSundayFront(Date date) { Date nowMonday = WeeklyMonday(date); Date frontSevenYesterday = timeFrontSevenYesterday(nowMonday); return WeeklySeven(frontSevenYesterday); } //获取当前日期下一周周一及周日时间 public static List<Date> WeeklyMondayAndSundayAfter(Date date) { Date nowMonday = WeeklyMonday(date); Date afterSevenYesterday = timeAfterSevenYesterday(nowMonday); return WeeklySeven(afterSevenYesterday); } //获取周一到周末 public static List<Date> WeeklyDays(Date date){ Date nowMonday = WeeklyMonday(date); List<Date> dateList = new ArrayList<>(); dateList.add(nowMonday); for (int i = 1; i<7 ; i++){ dateList.add(timeYesterdayN(nowMonday,i)); } return dateList; } //获取周一到周末 public static List<Date> WeeklyListDays(List<Date> dates){ Date date = dates.get(0); Date nowMonday = WeeklyMonday(date); List<Date> dateList = new ArrayList<>(); dateList.add(nowMonday); for (int i = 1; i<7 ; i++){ dateList.add(timeYesterdayN(nowMonday,i)); } return dateList; } public static void main(String[] args) { Date now = new Date(); int weeklyNowMonth = WeeklyNowMonthDay(now); System.out.println("当前日期是第 " + weeklyNowMonth + " 周"); LocalDate startDate1 = LocalDate.of(2024, 2, 29); int weeklyNowMonth1 = WeeklyNowMonthDay(DateLocalDate(startDate1)); System.out.println("当前日期是第 " + weeklyNowMonth1 + " 周"); LocalDate startDate2 = LocalDate.of(2024, 3, 5); int weeklyNowMonth2 = WeeklyNowMonthDay(DateLocalDate(startDate2)); System.out.println("当前日期是第 " + weeklyNowMonth2 + " 周"); LocalDate startDate3 = LocalDate.of(2024, 3, 10); int weeklyNowMonth3 = WeeklyNowMonthDay(DateLocalDate(startDate3)); System.out.println("当前日期是第 " + weeklyNowMonth3 + " 周"); LocalDate startDate4 = LocalDate.of(2024, 3, 31); int weeklyNowMonth4 = WeeklyNowMonthDay(DateLocalDate(startDate4)); System.out.println("当前日期是第 " + weeklyNowMonth4 + " 周"); LocalDate startDate5 = LocalDate.of(2024, 4, 1); int weeklyNowMonth5 = WeeklyNowMonthDay(DateLocalDate(startDate5)); System.out.println("当前日期是第 " + weeklyNowMonth5 + " 周"); LocalDate startDate6 = LocalDate.of(2024, 4, 7); int weeklyNowMonth6 = WeeklyNowMonthDay(DateLocalDate(startDate6)); System.out.println("当前日期是第 " + weeklyNowMonth6 + " 周"); } // public static void main(String[] args) { // Date now = new Date(); // //本周 // List<Date> dateList = WeeklyMondayAndSundayNow(now); // for (Date date : dateList){ // System.out.println("------------------------------"); // System.out.println(date); // } // //上周 // List<Date> dateList1 = WeeklyMondayAndSundayFront(now); // for (Date date : dateList1){ // System.out.println("------------------------------"); // System.out.println(date); // } // //下周 // List<Date> dateList2 = WeeklyMondayAndSundayAfter(now); // for (Date date : dateList2){ // System.out.println("------------------------------"); // System.out.println(date); // } // //周 // List<Date> dateList3 = WeeklyDays(now); // for (Date date : dateList3){ // System.out.println("------------------------------"); // System.out.println(date); // } // } /** * 校验字符串是否是指定格式的合法日期 * @param dateString 待校验的日期字符串,如 "20260104" * @param dateFormat 预期的日期格式,如 "yyyyMMdd" * @return true 表示格式合法且是有效日期,false 表示格式错误或日期无效 */ public static boolean isValidDateFormat(String dateString, String dateFormat) { if (dateString == null || dateFormat == null || dateString.length() != dateFormat.length()) { return false; } DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat); try { LocalDate parsedDate = LocalDate.parse(dateString, formatter); return true; // 解析成功说明格式正确且日期有效 } catch (DateTimeParseException e) { return false; // 解析失败说明格式错误或日期无效 } } /** * 校验字符串是否表示未来时间(首先会校验格式是否正确) * @param dateString 待校验的日期字符串,如 "20260104" * @param dateFormat 预期的日期格式,如 "yyyyMMdd" * @return true 表示是未来时间,false 表示不是未来时间或格式无效 */ public static boolean isFutureDate(String dateString, String dateFormat) { if (!isValidDateFormat(dateString, dateFormat)) { return false; // 格式无效直接返回false } DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat); LocalDate inputDate = LocalDate.parse(dateString, formatter); LocalDate today = LocalDate.now(); return inputDate.isAfter(today); // 与当前日期比较 } } src/main/resources/mapper/ViewWorkInMapper.xml
@@ -50,6 +50,19 @@ </if> </sql> <sql id="viewAsrOrderView"> <if test="ymdS!=null and ymdS!='' "> <![CDATA[ and ymd >= #{ymdS} ]]> </if> <if test="ymdD!=null and ymdD!='' "> <![CDATA[ and ymd <= #{ymdD} ]]> </if> </sql> <sql id="viewWorkOutConditionSql"> <if test="loc_no!=null and loc_no!='' "> and loc_no like '%' + #{loc_no} + '%' @@ -157,4 +170,71 @@ Order by a.io_time desc </select> <!-- 不分页查询所有信息 --> <select id="getAsrOrderView" parameterType="com.zy.asrs.entity.param.ViewOrderParam" resultType="com.zy.asrs.entity.param.ViewOrderParam"> select * from asr_order_view where 1=1 <include refid="viewAsrOrderView"></include> Order by ymd desc </select> <!-- 不分页查询所有信息 --> <select id="getAsrLocDailyLogO" parameterType="com.zy.asrs.entity.param.ViewLocDailyLogParam" resultType="com.zy.asrs.entity.param.ViewLocDailyLogParam"> select * from asr_loc_daily_log_view where 1=1 <choose> <when test="areaId != null and areaId != 0"> and sts = 'O' and area = #{areaId} </when> <otherwise> and sts = 'BFQ' and (area IS NULL OR area = 0) </otherwise> </choose> <include refid="viewAsrOrderView"></include> Order by ymd desc </select> <!-- 不分页查询所有信息 --> <select id="getAsrLocDailyLog2" parameterType="com.zy.asrs.entity.param.ViewLocDailyLogParam" resultType="com.zy.asrs.entity.param.ViewLocDailyLogParam"> select * from asr_loc_daily_log_view where 1=1 and sts = 'O' <if test="areaId != null and areaId != 0"> and area = #{areaId} </if> <include refid="viewAsrOrderView"></include> Order by ymd desc </select> <insert id="insertAsrLocDailyLog"> INSERT INTO asr_loc_daily_log (loc_count, area_id) SELECT COUNT(*), crn_no FROM asr_loc_mast WHERE loc_sts = 'O' GROUP BY crn_no; </insert> <select id="getVwLocDetlSummaryParam" resultType="com.zy.asrs.entity.param.VwLocDetlSummaryParam"> SELECT * FROM ( select ROW_NUMBER() OVER(Order by a.areaId desc) as row , * FROM( SELECT * FROM vw_loc_detl_summary WHERE 1=1 and detainTime >= #{overDayNum} <if test="areaId != null and areaId != 0"> and area = #{areaId} </if> ) a ) b WHERE 1=1 and b.row between ((#{curr}-1)*#{limit}+1) and (#{curr}*#{limit}) </select> </mapper>