From 7eb9b6f8c60a244e1a96597319c7b54963ba6612 Mon Sep 17 00:00:00 2001 From: zhangc <zc@123> Date: 星期二, 07 一月 2025 09:03:09 +0800 Subject: [PATCH] 优化MES库存同步逻辑及AGV告警字段 --- src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java | 25 ++ src/main/resources/mapper/AgvBasMapper.xml | 12 + src/main/java/com/zy/asrs/entity/AgvWarn.java | 3 src/main/java/com/zy/asrs/entity/AgvWarnLog.java | 20 + src/main/java/com/zy/asrs/entity/Agv.java | 19 + src/main/java/com/zy/asrs/task/AgvWarnScheduler.java | 85 +++++--- src/main/resources/mapper/AgvWarnLogMapper.xml | 1 src/main/java/com/zy/asrs/mapper/AgvBasMapper.java | 20 ++ src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java | 2 src/main/java/com/zy/asrs/controller/AgvWarnController.java | 41 ++- src/main/resources/mapper/MesLocDetlMapper.xml | 43 ++++ src/main/java/com/zy/asrs/entity/MesLocDetl.java | 152 ++++++++------ src/main/webapp/static/js/agvLocDetlStatis/locDetlStatis.js | 111 +++++----- src/main/java/com/zy/asrs/entity/param/AgvWarnCallBackParam.java | 1 src/main/java/com/zy/asrs/task/ReportDataScheduler.java | 10 src/main/resources/application.yml | 2 src/main/webapp/views/agvLocDetlStatis/locDetlStatis.html | 18 17 files changed, 372 insertions(+), 193 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/AgvWarnController.java b/src/main/java/com/zy/asrs/controller/AgvWarnController.java index 518fc41..4d1a0e9 100644 --- a/src/main/java/com/zy/asrs/controller/AgvWarnController.java +++ b/src/main/java/com/zy/asrs/controller/AgvWarnController.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.annotations.AppAuth; import com.core.common.Cools; +import com.core.common.DateUtils; import com.zy.asrs.entity.AgvWarn; import com.zy.asrs.entity.AgvWrkMast; import com.zy.asrs.entity.param.AgvWarnBody; @@ -12,11 +13,13 @@ import com.zy.asrs.service.AgvWarnService; import com.zy.asrs.service.AgvWrkMastService; import com.zy.asrs.service.ApiLogService; +import com.zy.asrs.utils.AppAuthUtil; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; @@ -40,6 +43,7 @@ */ @Slf4j @RestController +@RequestMapping("/agv") public class AgvWarnController extends BaseController { @@ -58,24 +62,31 @@ @AppAuth(memo = "AGV鍛婅鍥炶皟") public Object taskEventStaus(@RequestBody AgvWarnCallBackParam param, HttpServletRequest request) { log.info("AGV鍛婅鍥炶皟:{}", JSON.toJSONString(param)); - List<AgvWarnBody> data = param.getData(); + AppAuthUtil.auth("", param, request); + List<AgvWarnBody> agvWarnBodies = param.getData(); + // List<AgvWarnBody> agvWarnBodies = JSONArray.parseArray(data, AgvWarnBody.class); AgvWarn agvWarn = null; List<AgvWarn> agvWarns = new ArrayList<>(); List<AgvWarn> updates = new ArrayList<>(); - for (AgvWarnBody body : data) { + for (AgvWarnBody body : agvWarnBodies) { List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>().eq("robot_code", body.getRobotCode()).eq("begin_time", body.getBeginTime()).eq("warn_content", body.getWarnContent())); if (Cools.isEmpty(agvWarnList)) { agvWarn = new AgvWarn(); agvWarn.setBeginTime(body.getBeginTime()); agvWarn.setAppeTime(new Date()); agvWarn.setTimes(0); + agvWarn.setModiTime(DateUtils.convert(body.getBeginTime(), DateUtils.yyyyMMddHHmmss_F)); agvWarn.setRobotCode(body.getRobotCode()); agvWarn.setWarnContent(body.getWarnContent()); if (body.getTaskCode() != null) { - AgvWrkMast agvWrkMast = agvWrkMastService.selectById(body.getTaskCode()); - if (agvWrkMast != null) { - agvWarn.setLocNo(agvWrkMast.getLocNo()); - agvWarn.setSourceLocNo(agvWrkMast.getSourceLocNo()); + try { + AgvWrkMast agvWrkMast = agvWrkMastService.selectById(Math.abs(Integer.parseInt(body.getTaskCode()))); + if (agvWrkMast != null) { + agvWarn.setLocNo(agvWrkMast.getLocNo()); + agvWarn.setSourceLocNo(agvWrkMast.getSourceLocNo()); + } + } catch (Exception e) { + log.info("浠诲姟涓嶅瓨鍦�"); } } agvWarns.add(agvWarn); @@ -84,10 +95,14 @@ agvWarn.setWarnContent(agvWarn.getWarnContent().contains(body.getWarnContent()) ? body.getWarnContent() : agvWarn.getWarnContent() + "銆�" + body.getWarnContent()); agvWarn.setModiTime(new Date()); if (body.getTaskCode() != null) { - AgvWrkMast agvWrkMast = agvWrkMastService.selectById(body.getTaskCode()); - if (agvWrkMast != null) { - agvWarn.setLocNo(agvWrkMast.getLocNo()); - agvWarn.setSourceLocNo(agvWrkMast.getSourceLocNo()); + try { + AgvWrkMast agvWrkMast = agvWrkMastService.selectById(body.getTaskCode()); + if (agvWrkMast != null) { + agvWarn.setLocNo(agvWrkMast.getLocNo()); + agvWarn.setSourceLocNo(agvWrkMast.getSourceLocNo()); + } + } catch (Exception e) { + log.info("浠诲姟涓嶅瓨鍦�"); } } updates.add(agvWarn); @@ -100,20 +115,20 @@ agvWarnService.updateBatchById(updates); } Map<String, Object> result = new HashMap<>(); - logPost(param, JSONObject.toJSONString(result), true); + logPost(JSONObject.toJSONString(param), JSONObject.toJSONString(result), true); result.put("code", 0); result.put("message", "鎴愬姛"); result.put("reqCode", param.getReqCode()); return result; } - private void logPost(AgvWarnCallBackParam param, String response, boolean success) { + private void logPost(String param, String response, boolean success) { apiLogService.save( "ESS浠诲姟鍥炶皟", "/phyzwms/agv/task/event/status", null, null, - JSONObject.toJSONString(param), + param, response, success ); diff --git a/src/main/java/com/zy/asrs/entity/Agv.java b/src/main/java/com/zy/asrs/entity/Agv.java new file mode 100644 index 0000000..4279954 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/Agv.java @@ -0,0 +1,19 @@ +package com.zy.asrs.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import lombok.Data; + +import java.io.Serializable; + +@TableName("agv_bas") +@Data +public class Agv implements Serializable { + + @TableId("agv_no") + private String agvNo; + + @TableField("region") + private String region; +} diff --git a/src/main/java/com/zy/asrs/entity/AgvWarn.java b/src/main/java/com/zy/asrs/entity/AgvWarn.java index cd44e98..91f6744 100644 --- a/src/main/java/com/zy/asrs/entity/AgvWarn.java +++ b/src/main/java/com/zy/asrs/entity/AgvWarn.java @@ -47,6 +47,9 @@ @TableField("modi_time") private Date modiTime; +// @TableField("report_time") +// private Date reportTime; + @TableField("memo") private String memo; diff --git a/src/main/java/com/zy/asrs/entity/AgvWarnLog.java b/src/main/java/com/zy/asrs/entity/AgvWarnLog.java index 1b015f5..526abb7 100644 --- a/src/main/java/com/zy/asrs/entity/AgvWarnLog.java +++ b/src/main/java/com/zy/asrs/entity/AgvWarnLog.java @@ -1,6 +1,7 @@ package com.zy.asrs.entity; import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import lombok.Data; @@ -13,7 +14,14 @@ private static final long serialVersionUID = 1L; @TableField("id") + @TableId private Long id; + + /** + * 涓婃姤娆℃暟 + */ + @TableField("times") + private Integer times; @TableField("robot_code") private String robotCode; @@ -21,8 +29,8 @@ @TableField("begin_time") private String beginTime; - @TableField("warnContent") - private String warn_content; + @TableField("warn_content") + private String warnContent; @TableField("task_code") private String taskCode; @@ -30,7 +38,7 @@ @TableField("loc_no") private String locNo; - @TableField("source_locNo") + @TableField("source_loc_no") private String sourceLocNo; @TableField("appe_time") @@ -38,5 +46,11 @@ @TableField("modi_time") private Date modiTime; + +// @TableField("report_time") +// private Date reportTime; + + @TableField("memo") + private String memo; } diff --git a/src/main/java/com/zy/asrs/entity/MesLocDetl.java b/src/main/java/com/zy/asrs/entity/MesLocDetl.java index 7cec7e6..24eb98d 100644 --- a/src/main/java/com/zy/asrs/entity/MesLocDetl.java +++ b/src/main/java/com/zy/asrs/entity/MesLocDetl.java @@ -3,6 +3,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.core.common.Cools; import com.core.common.SpringUtils; @@ -24,175 +25,180 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty(value= "搴撲綅鍙�") + @TableId + private Long id; + + @ApiModelProperty(value = "搴撲綅鍙�") @TableField("loc_no") private String locNo; - @ApiModelProperty(value= "鎵樼洏鏉$爜") + @ApiModelProperty(value = "鎵樼洏鏉$爜") private String zpallet; - @ApiModelProperty(value= "鏁伴噺") + @ApiModelProperty(value = "鏁伴噺") @ExcelProperty("鏁伴噺") private Double anfme; - @ApiModelProperty(value= "鐗╂枡鍙�") + @ApiModelProperty(value = "鐗╂枡鍙�") @ExcelProperty("鐗╂枡鍙�") private String matnr; - @ApiModelProperty(value= "鐗╂枡鍙�") + @ApiModelProperty(value = "鐗╂枡鍙�") @ExcelProperty("鐗╂枡鍙�") private String maktx; - @ApiModelProperty(value= "搴忓垪鐮�") + @ApiModelProperty(value = "搴忓垪鐮�") @ExcelProperty("搴忓垪鐮�") private String batch; - @ApiModelProperty(value= "鍗曟嵁缂栧彿") + @ApiModelProperty(value = "鍗曟嵁缂栧彿") @ExcelProperty("鍗曟嵁缂栧彿") @TableField("order_no") private String orderNo; - @ApiModelProperty(value= "瑙勬牸") + @ApiModelProperty(value = "瑙勬牸") private String specs; - @ApiModelProperty(value= "鎵规") + @ApiModelProperty(value = "鎵规") private String model; - @ApiModelProperty(value= "棰滆壊") + @ApiModelProperty(value = "棰滆壊") private String color; - @ApiModelProperty(value= "鍝佺墝") + @ApiModelProperty(value = "鍝佺墝") private String brand; - @ApiModelProperty(value= "鍗曚綅") + @ApiModelProperty(value = "鍗曚綅") private String unit; - @ApiModelProperty(value= "鍗曚环") + @ApiModelProperty(value = "鍗曚环") private Double price; - @ApiModelProperty(value= "sku") + @ApiModelProperty(value = "sku") private String sku; - @ApiModelProperty(value= "鍖呮暟") + @ApiModelProperty(value = "鍖呮暟") private Double units; - @ApiModelProperty(value= "鏉$爜") + @ApiModelProperty(value = "鏉$爜") private String barcode; - @ApiModelProperty(value= "鐗╂枡鐘舵��") + @ApiModelProperty(value = "鐗╂枡鐘舵��") private String origin; - @ApiModelProperty(value= "鍘傚") + @ApiModelProperty(value = "鍘傚") private String manu; - @ApiModelProperty(value= "鍗曟嵁鏃堕棿") + @ApiModelProperty(value = "鍗曟嵁鏃堕棿") @TableField("manu_date") private String manuDate; - @ApiModelProperty(value= "鍝侀」鏁�") + @ApiModelProperty(value = "鍝侀」鏁�") @TableField("item_num") private String itemNum; - @ApiModelProperty(value= "瀹夊叏搴撳瓨閲�") + @ApiModelProperty(value = "瀹夊叏搴撳瓨閲�") @TableField("safe_qty") private Double safeQty; - @ApiModelProperty(value= "閲嶉噺") + @ApiModelProperty(value = "閲嶉噺") private Double weight; - @ApiModelProperty(value= "闀垮害") + @ApiModelProperty(value = "闀垮害") private Double length; - @ApiModelProperty(value= "浣撶Н") + @ApiModelProperty(value = "浣撶Н") private Double volume; - @ApiModelProperty(value= "涓夋柟缂栫爜") + @ApiModelProperty(value = "涓夋柟缂栫爜") @TableField("three_code") private String threeCode; - @ApiModelProperty(value= "渚涘簲鍟�") + @ApiModelProperty(value = "渚涘簲鍟�") private String supp; - @ApiModelProperty(value= "渚涘簲鍟嗙紪鐮�") + @ApiModelProperty(value = "渚涘簲鍟嗙紪鐮�") @TableField("supp_code") private String suppCode; - @ApiModelProperty(value= "鏄惁鎵规 1: 鏄� 0: 鍚� ") + @ApiModelProperty(value = "鏄惁鎵规 1: 鏄� 0: 鍚� ") @TableField("be_batch") private Integer beBatch; - @ApiModelProperty(value= "淇濊川鏈�") + @ApiModelProperty(value = "淇濊川鏈�") @TableField("dead_time") private String deadTime; - @ApiModelProperty(value= "棰勮澶╂暟") + @ApiModelProperty(value = "棰勮澶╂暟") @TableField("dead_warn") private Integer deadWarn; - @ApiModelProperty(value= "鍒惰喘 1: 鍒堕�� 2: 閲囪喘 3: 澶栧崗 ") + @ApiModelProperty(value = "鍒惰喘 1: 鍒堕�� 2: 閲囪喘 3: 澶栧崗 ") private Integer source; - @ApiModelProperty(value= "瑕佹眰妫�楠� 1: 鏄� 0: 鍚� ") + @ApiModelProperty(value = "瑕佹眰妫�楠� 1: 鏄� 0: 鍚� ") private Integer inspect; - @ApiModelProperty(value= "鍗遍櫓鍝� 1: 鏄� 0: 鍚� ") + @ApiModelProperty(value = "鍗遍櫓鍝� 1: 鏄� 0: 鍚� ") private Integer danger; - @ApiModelProperty(value= "淇敼浜哄憳") + @ApiModelProperty(value = "淇敼浜哄憳") @TableField("modi_user") private Long modiUser; - @ApiModelProperty(value= "淇敼鏃堕棿") + @ApiModelProperty(value = "淇敼鏃堕棿") @TableField("modi_time") private Date modiTime; - @ApiModelProperty(value= "鍒涘缓鑰�") + @ApiModelProperty(value = "鍒涘缓鑰�") @TableField("appe_user") private Long appeUser; - @ApiModelProperty(value= "娣诲姞鏃堕棿") + @ApiModelProperty(value = "娣诲姞鏃堕棿") @TableField("appe_time") private Date appeTime; - @ApiModelProperty(value= "澶囨敞") + @ApiModelProperty(value = "澶囨敞") private String memo; @TableField("stock_freeze") - @ApiModelProperty(value= "搴撳瓨鍐荤粨{1:姝e父,0:鍐荤粨}") + @ApiModelProperty(value = "搴撳瓨鍐荤粨{1:姝e父,0:鍐荤粨}") private Integer stockFreeze; /** * 搴撳瓨鏁伴噺 */ - @ApiModelProperty(value= "鍙嚭鏁伴噺") + @ApiModelProperty(value = "鍙嚭鏁伴噺") @TableField(exist = false) private Double stock; /** * 搴撳瓨鏁伴噺 */ - @ApiModelProperty(value= "鍙嚭鏁伴噺") + @ApiModelProperty(value = "鍙嚭鏁伴噺") @TableField(exist = false) private String locSts; /** * 搴撳瓨鏁伴噺 */ - @ApiModelProperty(value= "鍙嚭鏁伴噺") + @ApiModelProperty(value = "鍙嚭鏁伴噺") @TableField(exist = false) private String locSts$; /** * 宸ュ簭鐘舵�� */ - @ApiModelProperty(value= "宸ュ簭鐘舵�� 1锛氬緟鍔犲伐锛�2锛氬凡鍔犲伐锛�3锛氭棤闇�鍔犲伐") + @ApiModelProperty(value = "宸ュ簭鐘舵�� 1锛氬緟鍔犲伐锛�2锛氬凡鍔犲伐锛�3锛氭棤闇�鍔犲伐") @TableField("process_sts") private Integer processSts; - public String getProcessSts$(){ - if (null == this.processSts){ return null; } - switch (this.processSts){ + public String getProcessSts$() { + if (null == this.processSts) { + return null; + } + switch (this.processSts) { case 0: return "鍏朵粬"; case 1: @@ -206,18 +212,20 @@ } } - public String getLocNo$(){ + public String getLocNo$() { LocMastService service = SpringUtils.getBean(LocMastService.class); LocMast locMast = service.selectById(this.locNo); - if (!Cools.isEmpty(locMast)){ + if (!Cools.isEmpty(locMast)) { return String.valueOf(locMast.getLocNo()); } return null; } - public String getBeBatch$(){ - if (null == this.beBatch){ return null; } - switch (this.beBatch){ + public String getBeBatch$() { + if (null == this.beBatch) { + return null; + } + switch (this.beBatch) { case 1: return "鏄�"; case 0: @@ -227,9 +235,11 @@ } } - public String getSource$(){ - if (null == this.source){ return null; } - switch (this.source){ + public String getSource$() { + if (null == this.source) { + return null; + } + switch (this.source) { case 1: return "鍒堕��"; case 2: @@ -241,9 +251,11 @@ } } - public String getInspect$(){ - if (null == this.inspect){ return null; } - switch (this.inspect){ + public String getInspect$() { + if (null == this.inspect) { + return null; + } + switch (this.inspect) { case 1: return "鏄�"; case 0: @@ -253,9 +265,11 @@ } } - public String getDanger$(){ - if (null == this.danger){ return null; } - switch (this.danger){ + public String getDanger$() { + if (null == this.danger) { + return null; + } + switch (this.danger) { case 1: return "鏄�"; case 0: @@ -265,33 +279,33 @@ } } - public String getModiUser$(){ + public String getModiUser$() { UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.modiUser); - if (!Cools.isEmpty(user)){ + if (!Cools.isEmpty(user)) { return String.valueOf(user.getUsername()); } return null; } - public String getModiTime$(){ - if (Cools.isEmpty(this.modiTime)){ + public String getModiTime$() { + if (Cools.isEmpty(this.modiTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); } - public String getAppeUser$(){ + public String getAppeUser$() { UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.appeUser); - if (!Cools.isEmpty(user)){ + if (!Cools.isEmpty(user)) { return String.valueOf(user.getUsername()); } return null; } - public String getAppeTime$(){ - if (Cools.isEmpty(this.appeTime)){ + public String getAppeTime$() { + if (Cools.isEmpty(this.appeTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); @@ -302,7 +316,7 @@ } public String getStockFreeze$() { - if (Cools.isEmpty(this.stockFreeze)){ + if (Cools.isEmpty(this.stockFreeze)) { return ""; } return this.stockFreeze == 1 ? "姝e父" : "鍐荤粨"; diff --git a/src/main/java/com/zy/asrs/entity/param/AgvWarnCallBackParam.java b/src/main/java/com/zy/asrs/entity/param/AgvWarnCallBackParam.java index b680451..6f4534e 100644 --- a/src/main/java/com/zy/asrs/entity/param/AgvWarnCallBackParam.java +++ b/src/main/java/com/zy/asrs/entity/param/AgvWarnCallBackParam.java @@ -17,6 +17,7 @@ private String tokenCode; + private List<AgvWarnBody> data; } diff --git a/src/main/java/com/zy/asrs/mapper/AgvBasMapper.java b/src/main/java/com/zy/asrs/mapper/AgvBasMapper.java new file mode 100644 index 0000000..e9f8b07 --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/AgvBasMapper.java @@ -0,0 +1,20 @@ +package com.zy.asrs.mapper; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.zy.asrs.entity.Agv; +import com.zy.asrs.entity.AgvBasDevp; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +@Mapper +@Repository +public interface AgvBasMapper extends BaseMapper<Agv> { + + +} diff --git a/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java b/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java index d2531ac..c242ad2 100644 --- a/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java +++ b/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java @@ -6,7 +6,9 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; +import com.zy.asrs.entity.Agv; import com.zy.asrs.entity.AgvWarn; +import com.zy.asrs.mapper.AgvBasMapper; import com.zy.asrs.service.AgvWarnService; import com.zy.asrs.task.handler.AgvWarnHandler; import com.zy.common.utils.HttpHandler; @@ -40,39 +42,53 @@ @Autowired private ConfigService configService; + @Autowired + private AgvBasMapper agvBasMapper; + /** - * 瓒呰繃 + * 瓒呰繃涓�鍒嗛挓娌℃洿鏂扮殑锛屽垹闄� */ - @Scheduled(fixedDelay = 30000) + @Scheduled(fixedDelay = 10000) private void del() { - String format = DateUtil.format(DateUtil.offsetMinute(new Date(), -3), "yyyy-MM-dd HH:mm:ss"); - List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>().ge("modi_time", format)); + String format = DateUtil.format(DateUtil.offsetMinute(new Date(), -1), "yyyy-MM-dd HH:mm:ss"); + List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>().le("modi_time", format)); for (AgvWarn agvWarn : agvWarnList) { agvWarnHandler.start(agvWarn); } } - @Scheduled(fixedDelay = 10000) + @Scheduled(fixedDelay = 20000) private void report() { - List<Config> config = configService.selectList(new EntityWrapper<Config>().eq("code", "AGV_WARN_REPORT_URL")); + List<Agv> agvs = agvBasMapper.selectList(new EntityWrapper<Agv>()); + Config first = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE1")); + Config second = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE2")); + Config third = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE3")); + Config url = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_REPORT_URL")); List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>()); StringBuffer buffer; for (AgvWarn agvWarn : agvWarnList) { - Integer warnTime = getWarnTime(agvWarn.getTimes()); + Integer warnTime = getWarnTime(agvWarn.getTimes(), first.getValue(), second.getValue(), third.getValue()); DateTime begin = DateUtil.parse(agvWarn.getBeginTime(), "yyyy-MM-dd HH:mm:ss"); - if (DateUtil.offsetMinute(begin, warnTime).after(new Date())) { + if (DateUtil.offsetMinute(begin, warnTime).before(new Date())) { buffer = new StringBuffer(); - buffer.append(agvWarn.getRobotCode() + "鍙稟GV灏忚溅鎶ヨ:"); - buffer.append(agvWarn.getWarnContent()); + buffer.append(processRegion(agvs, agvWarn.getRobotCode()) + "[" + agvWarn.getRobotCode() + "]鍙稟GV灏忚溅鎶ヨ浜哱n"); + buffer.append("鎶ヨ绫诲瀷锛�" + agvWarn.getWarnContent() + "\n"); + if (!Cools.isEmpty(agvWarn.getSourceLocNo())) { + buffer.append("浠�:[" + agvWarn.getSourceLocNo() + "]鍒癧" + agvWarn.getLocNo() + "]\n"); + } + buffer.append("寮�濮嬫椂闂�:" + agvWarn.getBeginTime() + "\n"); + int i = agvWarn.getTimes() + 1; + buffer.append("绗琜" + i + "]娆℃姤璀�"); HashMap<String, Object> param = new HashMap<>(); HashMap<String, Object> data = new HashMap<>(); data.put("content", buffer.toString()); param.put("msgtype", "text"); param.put("text", data); + log.info("鍙戦�佹姤璀︿俊鎭細{}", JSON.toJSONString(param)); String response = null; try { response = new HttpHandler.Builder() - .setUri(config.get(0).getValue()) + .setUri(url.getValue()) .setJson(JSON.toJSONString(param)) .setHttps(true) .build() @@ -82,6 +98,8 @@ } JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.get("errmsg").equals("ok")) { + agvWarn.setTimes(agvWarn.getTimes() + 1); + agvWarnService.updateById(agvWarn); //鍙戦�佹垚鍔� return; } else { @@ -96,32 +114,29 @@ * @param times * @return */ - private Integer getWarnTime(Integer times) { - try { - List<Config> config = configService.selectList(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE1")); - if (!Cools.isEmpty(config)) { - String value = config.get(0).getValue(); - if (Cools.isEmpty(value)) { - return 5; - } else { - String[] split = value.split(","); - if (split.length < times + 1) { - Config config2 = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE2")); - int t = 0; - for (String s : split) { - t = t + Integer.parseInt(s); - } - return t + Integer.parseInt(config2.getValue()) * (times + 1 - split.length); - } else { - return Integer.parseInt(split[times]); - } - } - } - return 5; - } catch (Exception e) { - return 5; + private Integer getWarnTime(Integer times, String first, String second, String thrid) { + switch (times) { + case 0: + return Integer.parseInt(first); + case 1: + return Integer.parseInt(second); + case 2: + return Integer.parseInt(thrid); + default: + return (times - 2) * Integer.parseInt(thrid) + Integer.parseInt(first) + Integer.parseInt(second) + Integer.parseInt(thrid); } } + private String processRegion(List<Agv> agvs, String agvNo) { + if (agvNo == null) { + return "鏈煡灏忚溅"; + } + for (Agv agv : agvs) { + if (agv.getAgvNo() != null && agv.getAgvNo().equals(agvNo)) { + return agv.getRegion(); + } + } + return "鏈煡"; + } } diff --git a/src/main/java/com/zy/asrs/task/ReportDataScheduler.java b/src/main/java/com/zy/asrs/task/ReportDataScheduler.java index eb29c45..84cd5cb 100644 --- a/src/main/java/com/zy/asrs/task/ReportDataScheduler.java +++ b/src/main/java/com/zy/asrs/task/ReportDataScheduler.java @@ -60,7 +60,7 @@ private String stock; - @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 30000) public void execute() { log.info("瀹氭椂浠诲姟寮�濮嬫墽琛�"); if (!flag) { @@ -121,12 +121,12 @@ } - + @Scheduled(fixedDelay = 1000 * 60 * 30) public void executeStock() { log.info("Stock瀹氭椂浠诲姟寮�濮嬫墽琛�"); - if (!flag) { - return; - } +// if (!flag) { +// return; +// } Map<String, Object> mesTokenInfo = getMesTokenInfo(); reportDataHandler.stock(mesTokenInfo); log.info("Stock瀹氭椂浠诲姟缁撴潫鎵ц"); diff --git a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java index 4adb66f..db9ffb0 100644 --- a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java @@ -573,7 +573,7 @@ return SUCCESS; } catch (Exception e) { //TODO - log.error("淇敼AGV鍏ュ簱閫氱煡妗g姸鎬佸叆鍑虹姸鎬佷负Y,{}", e.getMessage()); + //log.error("淇敼AGV鍏ュ簱閫氱煡妗g姸鎬佸叆鍑虹姸鎬佷负Y,{}", e.getMessage()); } return FAIL; } diff --git a/src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java b/src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java index e9b0f01..c46da1d 100644 --- a/src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java @@ -27,6 +27,7 @@ import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * Created by vincent on 2020/7/7 @@ -114,7 +115,7 @@ throw new CoolException("mes鎺ュ彛璋冪敤澶辫触锛岃繑鍥炰俊鎭�:" + jsonObject); } success = true; - return null; + return response; } catch (Exception e) { log.error("mes鎺ュ彛璋冪敤澶辫触锛岃繑鍥炰俊鎭細{}", e.getMessage()); @@ -128,7 +129,22 @@ @Transactional public ReturnT<String> stock(Map<String, Object> mesTokenInfo) { - mesLocDetlService.delete(new EntityWrapper<MesLocDetl>().eq("1", 1)); + List<MesLocDetl> all = mesLocDetlService.selectList(new EntityWrapper<>()); + if (all != null) { + List<Long> collect = all.stream().map(MesLocDetl::getId).collect(Collectors.toList()); + boolean del = true; + int d = 1; + while (del && collect.size() > 0) { + if (collect.size() > d * 1000) { + mesLocDetlService.deleteBatchIds(collect.subList((d - 1) * 1000, d * 1000)); + } else { + mesLocDetlService.deleteBatchIds(collect.subList((d - 1) * 1000, collect.size())); + del = false; + } + d++; + } + } + boolean flag = true; Map<String, Object> req = new HashMap<>(); int i = 1; @@ -155,16 +171,19 @@ mesLocDetl.setBatch(mesStock.getBatchNo()); mesLocDetl.setAnfme(mesStock.getOpAmount().getAmount().getAmount()); mesLocDetls.add(mesLocDetl); + mesLocDetlService.insert(mesLocDetl); } } else { flag = false; } } if (!mesLocDetls.isEmpty()) { - mesLocDetlService.insertBatch(mesLocDetls); + //mesLocDetlService.insertBatch(mesLocDetls); } i++; } return SUCCESS; } + + } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f2026f2..22524fb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: #dev loc prod - active: prod \ No newline at end of file + active: loc \ No newline at end of file diff --git a/src/main/resources/mapper/AgvBasMapper.xml b/src/main/resources/mapper/AgvBasMapper.xml new file mode 100644 index 0000000..7cfa09e --- /dev/null +++ b/src/main/resources/mapper/AgvBasMapper.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.zy.asrs.mapper.AgvWarnMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.zy.asrs.entity.Agv"> + <id column="agv_no" property="agvNo" /> + <result column="region" property="region" /> + + </resultMap> + +</mapper> diff --git a/src/main/resources/mapper/AgvWarnLogMapper.xml b/src/main/resources/mapper/AgvWarnLogMapper.xml index ada11f2..3f63440 100644 --- a/src/main/resources/mapper/AgvWarnLogMapper.xml +++ b/src/main/resources/mapper/AgvWarnLogMapper.xml @@ -3,5 +3,4 @@ <mapper namespace="com.zy.asrs.mapper.AgvWarnLogMapper"> - </mapper> diff --git a/src/main/resources/mapper/MesLocDetlMapper.xml b/src/main/resources/mapper/MesLocDetlMapper.xml index 1112e33..54dfcf7 100644 --- a/src/main/resources/mapper/MesLocDetlMapper.xml +++ b/src/main/resources/mapper/MesLocDetlMapper.xml @@ -2,6 +2,49 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zy.asrs.mapper.MesLocDetlMapper"> + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.zy.asrs.entity.AgvLocDetl"> + <result column="loc_no" property="locNo"/> + <result column="zpallet" property="zpallet"/> + <result column="anfme" property="anfme"/> + <result column="matnr" property="matnr"/> + <result column="maktx" property="maktx"/> + <result column="batch" property="batch"/> + <result column="order_no" property="orderNo"/> + <result column="specs" property="specs"/> + <result column="model" property="model"/> + <result column="color" property="color"/> + <result column="brand" property="brand"/> + <result column="unit" property="unit"/> + <result column="price" property="price"/> + <result column="sku" property="sku"/> + <result column="units" property="units"/> + <result column="barcode" property="barcode"/> + <result column="origin" property="origin"/> + <result column="manu" property="manu"/> + <result column="manu_date" property="manuDate"/> + <result column="item_num" property="itemNum"/> + <result column="safe_qty" property="safeQty"/> + <result column="weight" property="weight"/> + <result column="length" property="length"/> + <result column="volume" property="volume"/> + <result column="three_code" property="threeCode"/> + <result column="supp" property="supp"/> + <result column="supp_code" property="suppCode"/> + <result column="be_batch" property="beBatch"/> + <result column="dead_time" property="deadTime"/> + <result column="dead_warn" property="deadWarn"/> + <result column="source" property="source"/> + <result column="inspect" property="inspect"/> + <result column="danger" property="danger"/> + + <result column="modi_user" property="modiUser"/> + <result column="modi_time" property="modiTime"/> + <result column="appe_user" property="appeUser"/> + <result column="appe_time" property="appeTime"/> + <result column="memo" property="memo"/> + <result column="stock_freeze" property="stockFreeze"/> + </resultMap> </mapper> diff --git a/src/main/webapp/static/js/agvLocDetlStatis/locDetlStatis.js b/src/main/webapp/static/js/agvLocDetlStatis/locDetlStatis.js index b9255a6..0a45078 100644 --- a/src/main/webapp/static/js/agvLocDetlStatis/locDetlStatis.js +++ b/src/main/webapp/static/js/agvLocDetlStatis/locDetlStatis.js @@ -1,23 +1,27 @@ var pageCurr; + function getCol() { var cols = [ - {field: 'anfme', align: 'center',title: '搴撳瓨鏁伴噺', style: 'font-weight: bold'} + {field: 'anfme', align: 'center', title: 'WMS搴撳瓨鏁伴噺', style: 'font-weight: bold'} + , {field: 'anfme2', align: 'center', title: 'MES搴撳瓨鏁伴噺', style: 'font-weight: bold'} + , {field: 'matnr', align: 'center', title: '缂栫爜'} + , {field: 'maktx', align: 'center', title: '鐗╂枡鍚嶇О'} ]; - arrRemove(detlCols, "field", "anfme"); - arrRemove(detlCols,"field","suppCode"); - arrRemove(detlCols, "field", "zpallet"); - arrRemove(detlCols, "field", "orderNo"); - arrRemove(detlCols, "field", "threeCode"); - arrRemove(detlCols, "field", "deadTime"); - arrRemove(detlCols, "field", "batch"); - cols.push.apply(cols, detlCols); + // arrRemove(detlCols, "field", "anfme"); + // arrRemove(detlCols,"field","suppCode"); + // arrRemove(detlCols, "field", "zpallet"); + // arrRemove(detlCols, "field", "orderNo"); + // arrRemove(detlCols, "field", "threeCode"); + // arrRemove(detlCols, "field", "deadTime"); + // arrRemove(detlCols, "field", "batch"); + //cols.push.apply(cols, detlCols); // cols.push({field: 'anfme', align: 'center',title: '鏁伴噺', style: 'font-weight: bold'} // ) return cols; } -layui.use(['table','laydate', 'form'], function(){ +layui.use(['table', 'laydate', 'form'], function () { var table = layui.table; var $ = layui.jquery; var layer = layui.layer; @@ -28,7 +32,7 @@ tableIns = table.render({ elem: '#locDetlStatis', headers: {token: localStorage.getItem('token')}, - url: baseUrl+'/agv/locDetl/statis/auth', + url: baseUrl + '/agv/locDetl/statis/auth', page: true, limit: 20, limits: [20, 30, 50, 100, 200, 500], @@ -51,17 +55,17 @@ response: { statusCode: 200 }, - done: function(res, curr, count) { + done: function (res, curr, count) { if (res.code === 403) { - top.location.href = baseUrl+"/"; + top.location.href = baseUrl + "/"; } - pageCurr=curr; + pageCurr = curr; limit(); form.on('checkbox(tableCheckbox)', function (data) { - var _index = $(data.elem).attr('table-index')||0; - if(data.elem.checked){ + var _index = $(data.elem).attr('table-index') || 0; + if (data.elem.checked) { res.data[_index][data.value] = 'Y'; - }else{ + } else { res.data[_index][data.value] = 'N'; } }); @@ -69,9 +73,9 @@ * 鏄剧ず搴撳瓨鎬绘暟閲� */ $.ajax({ - url: baseUrl+"/agv/locDetl/count", + url: baseUrl + "/agv/locDetl/count", headers: {'token': localStorage.getItem('token')}, - contentType:'application/json;charset=UTF-8', + contentType: 'application/json;charset=UTF-8', method: 'POST', success: function (res) { $("#countNum").text(res.data + '涓�'); @@ -84,7 +88,7 @@ // 鐩戝惉鎺掑簭浜嬩欢 table.on('sort(locDetlStatis)', function (obj) { var searchData = {}; - $.each($('#search-box [name]').serializeArray(), function() { + $.each($('#search-box [name]').serializeArray(), function () { searchData[this.name] = this.value; }); searchData['orderByField'] = obj.field; @@ -96,9 +100,9 @@ }, done: function (res, curr, count) { if (res.code === 403) { - top.location.href = baseUrl+"/"; + top.location.href = baseUrl + "/"; } - pageCurr=curr; + pageCurr = curr; limit(); } }); @@ -107,11 +111,11 @@ // 鐩戝惉澶村伐鍏锋爮浜嬩欢 table.on('toolbar(locDetlStatis)', function (obj) { var checkStatus = table.checkStatus(obj.config.id); - switch(obj.event) { + switch (obj.event) { case 'exportAll': - layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){ - var titles=[]; - var fields=[]; + layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function () { + var titles = []; + var fields = []; obj.config.cols[0].map(function (col) { if (col.type === 'normal' && col.hide === false && col.toolbar == null) { titles.push(col.title); @@ -119,7 +123,7 @@ } }); var exportData = {}; - $.each($('#search-box [name]').serializeArray(), function() { + $.each($('#search-box [name]').serializeArray(), function () { exportData[this.name] = this.value; }); var param = { @@ -128,19 +132,19 @@ }; var loadIndex = layer.msg('姝e湪瀵煎嚭...', {icon: 16, shade: 0.01, time: false}); $.ajax({ - url: baseUrl+"/agv/locDetl/statis/export", + url: baseUrl + "/agv/locDetl/statis/export", headers: {'token': localStorage.getItem('token')}, data: JSON.stringify(param), - dataType:'json', - contentType:'application/json;charset=UTF-8', + dataType: 'json', + contentType: 'application/json;charset=UTF-8', method: 'POST', success: function (res) { layer.close(loadIndex); layer.closeAll(); if (res.code === 200) { - table.exportFile(titles,res.data,'xls'); + table.exportFile(titles, res.data, 'xls'); } else if (res.code === 403) { - top.location.href = baseUrl+"/"; + top.location.href = baseUrl + "/"; } else { layer.msg(res.msg) } @@ -149,9 +153,9 @@ }); break; case 'exportData': - layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){ - var titles=[]; - var fields=[]; + layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function () { + var titles = []; + var fields = []; obj.config.cols[0].map(function (col) { if (col.type === 'normal' && col.hide === false && col.toolbar == null) { titles.push(col.title); @@ -159,7 +163,7 @@ } }); var exportData = {}; - $.each($('#search-box [name]').serializeArray(), function() { + $.each($('#search-box [name]').serializeArray(), function () { exportData[this.name] = this.value; }); var param = { @@ -167,18 +171,18 @@ 'fields': fields }; $.ajax({ - url: baseUrl+"/agv/locDetl/export/auth", + url: baseUrl + "/agv/locDetl/export/auth", headers: {'token': localStorage.getItem('token')}, data: JSON.stringify(param), - dataType:'json', - contentType:'application/json;charset=UTF-8', + dataType: 'json', + contentType: 'application/json;charset=UTF-8', method: 'POST', success: function (res) { layer.closeAll(); if (res.code === 200) { - table.exportFile(titles,res.data,'xls'); + table.exportFile(titles, res.data, 'xls'); } else if (res.code === 403) { - top.location.href = baseUrl+"/"; + top.location.href = baseUrl + "/"; } else { layer.msg(res.msg) } @@ -190,7 +194,7 @@ }); // 鐩戝惉琛屽伐鍏蜂簨浠� - table.on('tool(locDetlStatis)', function(obj){ + table.on('tool(locDetlStatis)', function (obj) { var data = obj.data; switch (obj.event) { // 璇︽儏 @@ -202,11 +206,12 @@ area: [top.detailWidth, top.detailHeight], shadeClose: false, content: 'locDetl_detail.html', - success: function(layero, index){ + success: function (layero, index) { setFormVal(layer.getChildFrame('#detail', index), data, true); top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); - layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); + layer.iframeAuto(index); + layer.style(index, {top: (($(window).height() - layer.getChildFrame('#data-detail', index).height()) / 3) + "px"}); layero.find('iframe')[0].contentWindow.layui.form.render('select'); layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); } @@ -244,13 +249,13 @@ }); // 鍏抽棴鍔ㄤ綔 -$(document).on('click','#data-detail-close', function () { +$(document).on('click', '#data-detail-close', function () { parent.layer.closeAll(); }); function tableReload(child) { var searchData = {}; - $.each($('#search-box [name]').serializeArray(), function() { + $.each($('#search-box [name]').serializeArray(), function () { searchData[this.name] = this.value; }); (child ? parent.tableIns : tableIns).reload({ @@ -260,14 +265,14 @@ }, done: function (res, curr, count) { if (res.code === 403) { - top.location.href = baseUrl+"/"; + top.location.href = baseUrl + "/"; } - pageCurr=curr; + pageCurr = curr; if (res.data.length === 0 && count !== 0) { tableIns.reload({ where: searchData, page: { - curr: pageCurr-1 + curr: pageCurr - 1 } }); pageCurr -= 1; @@ -279,13 +284,13 @@ function detailScreen(index) { var detail = layer.getChildFrame('#data-detail', index); - var height = detail.height()+60; - if (height > ($(window).height()*0.9)) { - height = ($(window).height()*0.8); + var height = detail.height() + 60; + if (height > ($(window).height() * 0.9)) { + height = ($(window).height() * 0.8); } layer.style(index, { // top: (($(window).height()-height)/3)+"px", - height: height+'px' + height: height + 'px' }); } diff --git a/src/main/webapp/views/agvLocDetlStatis/locDetlStatis.html b/src/main/webapp/views/agvLocDetlStatis/locDetlStatis.html index bcfc8b6..b7bfca3 100644 --- a/src/main/webapp/views/agvLocDetlStatis/locDetlStatis.html +++ b/src/main/webapp/views/agvLocDetlStatis/locDetlStatis.html @@ -26,14 +26,14 @@ <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆 </button> </div> - <div class="layui-inline"> - <fieldset class="layui-elem-field"> - <legend>鎬昏鏁伴噺</legend> - <div class="layui-field-box" id="countNum"> - 璇风◢绛� - </div> - </fieldset> - </div> +<!-- <div class="layui-inline">--> +<!-- <fieldset class="layui-elem-field">--> +<!-- <legend>鎬昏鏁伴噺</legend>--> +<!-- <div class="layui-field-box" id="countNum">--> +<!-- 璇风◢绛�--> +<!-- </div>--> +<!-- </fieldset>--> +<!-- </div>--> </div> <!-- 琛ㄦ牸 --> @@ -52,7 +52,7 @@ <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> -<script type="text/javascript" src="../../static/js/agvLocDetlStatis/locDetlStatis.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/agvLocDetlStatis/locDetlStatis.js?v=1" charset="utf-8"></script> </body> </html> -- Gitblit v1.9.1