diff --git a/shkj-framework/src/main/java/com/shkj/framework/web/service/SysLoginService.java b/shkj-framework/src/main/java/com/shkj/framework/web/service/SysLoginService.java index acad58e..9aab8d7 100644 --- a/shkj-framework/src/main/java/com/shkj/framework/web/service/SysLoginService.java +++ b/shkj-framework/src/main/java/com/shkj/framework/web/service/SysLoginService.java @@ -69,13 +69,13 @@ public class SysLoginService { if (username.contains(",")) { throw new ServiceException("账号非法"); } - String wid = branchId == null ? "" : branchId.toString(); + String wid = branchId == null ? "1" : branchId.toString(); // 用户验证 Authentication authentication = null; try { // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername 这里为了简单直接使用用户账号+仓库id 后面在进行分割 authentication = authenticationManager - .authenticate(new UsernamePasswordAuthenticationToken(username + "," + wid, password)); + .authenticate(new UsernamePasswordAuthenticationToken(username, password)); } catch (Exception e) { if (e instanceof BadCredentialsException) { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); diff --git a/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/AgvTaskContorller.java b/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/AgvTaskContorller.java index 7815341..452d0f3 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/AgvTaskContorller.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/AgvTaskContorller.java @@ -47,8 +47,6 @@ public class AgvTaskContorller { @Autowired private IBusinDataTaskService iBusinDataTaskService; - @Autowired - private WCSUtil wcsUtil; /** diff --git a/shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java b/shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java index d4d66ad..4bda9aa 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java @@ -50,49 +50,24 @@ public class BusinDataTask implements Serializable { private String taskPath; - /** 是否是置顶 */ - @Excel(name = "是否是置顶") - private String isTop; /** 任务优先级 */ @Excel(name = "任务优先级") private String priority; - /** 出行 */ - @Excel(name = "出行") - private String fromRow; - /** 出高 */ - @Excel(name = "出高") - private String fromColumn; - - /** 出列 */ - @Excel(name = "出列") - private String fromLayer; /** 出边 */ @Excel(name = "出边") private String fromSide; - /** 入行 */ - @Excel(name = "入行") - private String toRow; - - /** 入高 */ - @Excel(name = "入高") - private String toColumn; - /** 入列 */ - @Excel(name = "入列") - private String toLayer; /** 入边 */ @Excel(name = "入边") private String toSide; - /** 巷道 */ - @Excel(name = "巷道") - private String tunnel; + /** 设备编号 */ @Excel(name = "设备编号") @@ -118,35 +93,15 @@ public class BusinDataTask implements Serializable { private String agvNo; - /** 立库输送线 */ - @Excel(name = "立库输送线") - private String dpsNoOne; - - - /** 过点时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+7") - @Excel(name = "过点时间", width = 30, dateFormat = "yyyy-MM-dd") - private Date traverseDate; /** 治具编号 */ @Excel(name = "治具编号") private String containerCode; - /** 业务单据 */ - @Excel(name = "业务单据") - private String transId; - - /** 仓库ID */ - @Excel(name = "仓库ID") - private Long branchId; private String remark; - /**AGV点位 */ - private String points; - /** AGV形态 */ - private String isDown; /** * 创建时间 */ @@ -166,6 +121,11 @@ public class BusinDataTask implements Serializable { */ private String destination; + /** + * AGV模板 + */ + private String agvType; + /** * AGV任务状态 */ diff --git a/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java b/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java index 9ba409c..d39d755 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java @@ -1,37 +1,52 @@ package com.shkj.wcs.plc; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.shkj.common.constant.RedisConstant; import com.shkj.common.core.domain.Result; import com.shkj.common.enums.BusinessType; +import com.shkj.common.utils.DateUtils; import com.shkj.plc.sdk.device.PlcOperate; import com.shkj.system.service.ISysParameterService; import com.shkj.wcs.bo.WcsPlcConnectQueryBo; +import com.shkj.wcs.domain.BusinDataTask; import com.shkj.wcs.domain.WcsPlcConnect; import com.shkj.wcs.domain.WcsPlcProperty; import com.shkj.wcs.mapper.WcsPlcConnectMapper; +import com.shkj.wcs.service.IBusinDataTaskService; import com.shkj.wcs.service.IWcsPlcConnectService; import com.shkj.wcs.service.IWcsPlcPropertyService; +import com.shkj.wcs.third.rcs.CounterService; import com.shkj.wcs.third.rcs.RCSUtil; +import com.shkj.wcs.third.rcs.dto.CarrierInfoList; +import com.shkj.wcs.third.rcs.dto.RcsCreateTaskDto; +import com.shkj.wcs.third.rcs.dto.RcsIdList; +import com.shkj.wcs.third.rcs.enums.RCSOperation; +import com.shkj.wcs.third.rcs.vo.RcsResponseVo; import com.shkj.wcs.third.workbinWcs.WCSUtil; -import com.shkj.wcs.third.workbinWcs.dto.WCSQueryAreaStatusBody; -import com.shkj.wcs.third.workbinWcs.dto.WCSQueryTaskStatusBody; -import com.shkj.wcs.third.workbinWcs.dto.WcsIncomingTaskRequestBody; -import com.shkj.wcs.third.workbinWcs.dto.WcsIncomingTrayCheckBody; +import com.shkj.wcs.third.workbinWcs.dto.*; import com.shkj.wcs.vo.TaskStatusBody; import com.shkj.wcs.vo.WcsPlcConnectVo; import com.shkj.wcs.vo.WcsResponseVo; import com.shkj.wms.enums.BusinTaskTypeEnum; +import com.shkj.wms.enums.MapEnum; +import com.shkj.wms.enums.TaskStatusEnum; import com.shkj.wms.enums.TaskTypeEnum; +import com.shkj.wms.utils.IntIdUtil; import com.shkj.wms.utils.JsonUtil; import com.shkj.wms.vo.PlanOrderLocationVo; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.exceptions.TooManyResultsException; +import org.mvel2.util.Make; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.EnableScheduling; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.*; @@ -58,10 +73,7 @@ public class PlcEventTask { IWcsPlcPropertyService iWcsPlcPropertyService; @Autowired - ISysParameterService isysParameterService; - - @Resource - WcsPlcConnectMapper wcsPlcConnectMapper; + IBusinDataTaskService iBusinDataTaskService; @Autowired @@ -70,7 +82,7 @@ public class PlcEventTask { @Autowired WCSUtil wcsUtil; - @Scheduled(fixedDelay = 5000) + @Scheduled(fixedDelay = 5000) public void init() { //查询需要连接的PLC,初始化连接对象 List plcList = (List) redisTemplate.opsForValue().get(RedisConstant.redisPlcListConnect); @@ -128,28 +140,28 @@ public class PlcEventTask { //根据连接的plcId获取属性 PlcOperate plcOperate = plcInit.getPlcOperate_dpj(); if (plcOperate != null) { - PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite(); - Map readPointMap = new HashMap<>(); - String heartbeat = "DB5100.0.0"; - readPointMap.put(heartbeat, "Boolean"); - Map pointMap = plcReadAndWrite.readPlcData(plcOperate, JsonUtil.toJSONString(readPointMap)); + PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite(); + Map readPointMap = new HashMap<>(); + String heartbeat = "DB5100.0.0"; + readPointMap.put(heartbeat, "Boolean"); + Map pointMap = plcReadAndWrite.readPlcData(plcOperate, JsonUtil.toJSONString(readPointMap)); - //读取心跳,并判断是写入true还是false; - Boolean heartbeatV = false; + //读取心跳,并判断是写入true还是false; + Boolean heartbeatV = false; - if (pointMap.containsKey(heartbeat)) { - heartbeatV = Boolean.valueOf(pointMap.get(heartbeat).toString()); - } - heartbeatV = (heartbeatV == true) ? false : true; - Map writeHbMap = new HashMap<>(1); - writeHbMap.put("Boolean", heartbeatV); - Map allHbMap = new HashMap<>(1); - allHbMap.put("DB5110.0.0", writeHbMap); - Boolean heartType = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allHbMap)); - if (!heartType) { - log.info("stk心跳写入失败,重连服务器"); - plcInit.connect(); - } + if (pointMap.containsKey(heartbeat)) { + heartbeatV = Boolean.valueOf(pointMap.get(heartbeat).toString()); + } + heartbeatV = (heartbeatV == true) ? false : true; + Map writeHbMap = new HashMap<>(1); + writeHbMap.put("Boolean", heartbeatV); + Map allHbMap = new HashMap<>(1); + allHbMap.put("DB5110.0.0", writeHbMap); + Boolean heartType = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allHbMap)); + if (!heartType) { + log.info("stk心跳写入失败,重连服务器"); + plcInit.connect(); + } } } @@ -159,7 +171,7 @@ public class PlcEventTask { //根据连接的plcId获取属性 PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite(); Map pointMap = plcReadAndWrite.readPlcData(plcOperate, pointTables); - log.info("连接的IP:"+conn.getPlcIp()+":设备:"+conn.getConnectName()+" 读取的点位内容:"+pointMap); + log.info("连接的IP:" + conn.getPlcIp() + ":设备:" + conn.getConnectName() + " 读取的点位内容:" + pointMap); List propertyList = (List) redisTemplate.opsForValue().get(RedisConstant.redisPlcProperty + plcId); if (propertyList == null || propertyList.size() == 0) { @@ -272,6 +284,23 @@ public class PlcEventTask { String retInOutSwitVt = ""; + //空托上报请求序列号 + String rptEySeria = ""; + + //空托上报条码 + String rptEyBarcod = ""; + + //空托上报确认序列号 + String retEyCfmSeria = ""; + String retEyCfmSeriaVt = ""; + + //空托上报条码确认 + String retEyCfmBarcod = ""; + String retEyCfmBarcodVt = ""; + + //空托上报返回信息 + String retEy = ""; + String retEyVt = ""; for (WcsPlcProperty plcProperty : propertyList) { @@ -331,16 +360,29 @@ public class PlcEventTask { } else if (pointType.equals("retOut1")) { retOut1 = plcProperty.getAddress(); retOutVt1 = plcProperty.getValueType(); + } else if (pointType.equals("rptEySeria")) { + rptEySeria = plcProperty.getAddress(); + } else if (pointType.equals("rptEyBarcod")) { + rptEyBarcod = plcProperty.getAddress(); + } else if (pointType.equals("retEyCfmSeria")) { + retEyCfmSeria = plcProperty.getAddress(); + retEyCfmSeriaVt = plcProperty.getValueType(); + } else if (pointType.equals("retEyCfmBarcod")) { + retEyCfmBarcod = plcProperty.getAddress(); + retEyCfmBarcodVt = plcProperty.getValueType(); + } else if (pointType.equals("retEy")) { + retEy = plcProperty.getAddress(); + retEyVt = plcProperty.getValueType(); } } - //扫码处入库申请 + //生产区扫码处入库申请 //&& Boolean.valueOf(pointMap.get(reqInSeria).toString()) if (pointMap.containsKey(reqInSeria) && !pointMap.get(reqInSeria).equals("0")) { //读取请求序列号内容 String bCR01SeriaV1 = Objects.toString(pointMap.get(reqInSeria), ""); Integer bCR01SeriaV = 0; - if(!bCR01SeriaV1.isEmpty()){ + if (!bCR01SeriaV1.isEmpty()) { bCR01SeriaV = Integer.parseInt(bCR01SeriaV1.toString()); } //读取托盘条码内容 @@ -349,11 +391,11 @@ public class PlcEventTask { log.info("扫码处入库申请时,读取的条码内容:" + s); //根据托盘条码返回正在执行的任务号 WcsIncomingTrayCheckBody body = new WcsIncomingTrayCheckBody(); - body.setStation("SC-G1-00-00-1001"); + body.setStation(MapEnum.oneIn.getValue()); body.setTaskType(TaskTypeEnum.In.getValue()); body.setBussinessType(BusinTaskTypeEnum.trayCheck.getValue()); body.setTrayCode(s); - body.setCreateDt(new Date().toString()); + body.setCreateDt(getNowDate()); WcsResponseVo vo = wcsUtil.wcsIncomingTrayCheck(body); log.info("扫码处入库申请wz-wcs返回:" + vo.getHeader()); Map allMap = new HashMap<>(1); @@ -371,7 +413,7 @@ public class PlcEventTask { allMap.put(reqInDest, destMap); } else { Map destMap = new HashMap<>(1); - destMap.put(reqInDestVt, 1); + destMap.put(reqInDestVt, 2); allMap.put(reqInDest, destMap); } String allMapJson = JsonUtil.toJSONString(allMap); @@ -380,12 +422,12 @@ public class PlcEventTask { log.info("扫码处入库申请时,写入的命令返回结果:" + reqInBoolean.toString()); } //空托盘申请 - if (pointMap.containsKey(reqEmpty) && !pointMap.get(reqEmpty).equals("0")) { + if (pointMap.containsKey(reqEmpty) && !pointMap.get(reqEmpty).equals("0")) { WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); - body.setStation("SC-G1-00-00-1002"); + body.setStation(MapEnum.oneOut.getValue()); body.setTaskType(TaskTypeEnum.Out.getValue()); body.setBussinessType(BusinTaskTypeEnum.stockOut.getValue()); - body.setCreateDt(new Date().toString()); + body.setCreateDt(getNowDate()); //调用agv接口查询库区状态 Map map1 = new HashMap<>(); map1.put("areaInLocation", "SC-A2"); @@ -396,15 +438,15 @@ public class PlcEventTask { map2.put("status", 1); Map map3 = new HashMap<>(); - map1.put("areaInLocation", "SC-C2"); - map1.put("status", 1); + map3.put("areaInLocation", "SC-C2"); + map3.put("status", 1); Map map4 = new HashMap<>(); - map2.put("areaInLocation", "SC-D2"); - map2.put("status", 1); + map4.put("areaInLocation", "SC-D2"); + map4.put("status", 1); - Object[] areaStatus = new Object[] { map1,map2,map3,map4}; - log.info("每个库区的状态:"+Arrays.toString(areaStatus)); + Object[] areaStatus = new Object[]{map1, map2, map3, map4}; + log.info("每个库区的状态:" + Arrays.toString(areaStatus)); body.setAreaStatus(areaStatus); WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); log.info("空托申请wz-wcs返回:" + vo.getHeader()); @@ -428,7 +470,7 @@ public class PlcEventTask { //读取序列号 String IntegeroutSeria = Objects.toString(pointMap.get(rptOutSeria), ""); Integer outSeria = 0; - if(!IntegeroutSeria.isEmpty()){ + if (!IntegeroutSeria.isEmpty()) { outSeria = Integer.parseInt(IntegeroutSeria.toString()); } //读取托盘条码内容 @@ -437,11 +479,11 @@ public class PlcEventTask { log.info("实盘出口上报时,读取的条码内容:" + s); //调用wz-wcs接口 WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); - body.setStation("SC-G2-00-00-2002"); + body.setStation(MapEnum.twoDownIn.getValue()); body.setTaskType(TaskTypeEnum.In.getValue()); body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue()); body.setTrayCode(s); - body.setCreateDt(new Date().toString()); + body.setCreateDt(getNowDate()); //调用agv接口查询库区状态 Map map1 = new HashMap<>(); map1.put("areaInLocation", "SC-A2"); @@ -459,11 +501,11 @@ public class PlcEventTask { map4.put("areaInLocation", "SC-D2"); map4.put("status", 1); - Object[] areaStatus = new Object[] { map1,map2,map3,map4}; - log.info("每个库区的状态:"+Arrays.toString(areaStatus)); + Object[] areaStatus = new Object[]{map1, map2, map3, map4}; + log.info("每个库区的状态:" + Arrays.toString(areaStatus)); body.setAreaStatus(areaStatus); WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); - log.info("agv扫码处申请wz-wcs返回:" + vo.getHeader()); + log.info("实盘出口上报wz-wcs返回:" + vo.getHeader()); Map allMap = new HashMap<>(1); Map seriaMap = new HashMap<>(1); seriaMap.put(rptOutCfmSeriaVt, outSeria); @@ -491,7 +533,7 @@ public class PlcEventTask { //读取序列号 String IntegeroutSeria = Objects.toString(pointMap.get(rptOutSeria1), ""); Integer outSeria = 0; - if(!IntegeroutSeria.isEmpty()){ + if (!IntegeroutSeria.isEmpty()) { outSeria = Integer.parseInt(IntegeroutSeria); } //读取托盘条码内容 @@ -501,11 +543,11 @@ public class PlcEventTask { log.info("实盘出口上报时,读取的条码内容:" + s); //调用wz-wcs接口 WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); - body.setStation("SC-G2-00-00-2001"); + body.setStation(MapEnum.twoUpIn.getValue()); body.setTaskType(TaskTypeEnum.In.getValue()); body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue()); body.setTrayCode(s); - body.setCreateDt(new Date().toString()); + body.setCreateDt(getNowDate()); //调用agv接口查询库区状态 Map map1 = new HashMap<>(); map1.put("areaInLocation", "SC-A2"); @@ -523,8 +565,8 @@ public class PlcEventTask { map4.put("areaInLocation", "SC-D2"); map4.put("status", 1); - Object[] areaStatus = new Object[] { map1,map2,map3,map4}; - log.info("每个库区的状态:"+Arrays.toString(areaStatus)); + Object[] areaStatus = new Object[]{map1, map2, map3, map4}; + log.info("每个库区的状态:" + Arrays.toString(areaStatus)); body.setAreaStatus(areaStatus); WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); log.info("agv扫码处申请wz-wcs返回:" + vo.getHeader()); @@ -532,16 +574,12 @@ public class PlcEventTask { Map seriaMap = new HashMap<>(1); seriaMap.put(rptOutCfmSeriaVt1, outSeria); allMap.put(rptOutCfmSeria1, seriaMap); - -// Map barcodMap = new HashMap<>(1); -// barcodMap.put(rptOutCfmBarcodVt1, s); -// allMap.put(rptOutCfmBarcod1, barcodMap); Map reqMap = new HashMap<>(1); if (Result.isOk(vo.getHeader().getMsgCode())) { reqMap.put(retOutVt1, 1); } else { - reqMap.put(retOutVt1, 1); + reqMap.put(retOutVt1, 2); } allMap.put(retOut1, reqMap); String allMapJson = JsonUtil.toJSONString(allMap); @@ -554,12 +592,13 @@ public class PlcEventTask { //出入库切换 if (pointMap.containsKey(inOutSwit) && !pointMap.get(inOutSwit).equals("0")) { WCSQueryTaskStatusBody body = new WCSQueryTaskStatusBody(); - body.setDestination("SC-G1-00-00-1002"); + body.setDestination(MapEnum.oneOut.getValue()); body.setTaskType("1"); body.setTrayType("2"); WcsResponseVo vo = JSON.parseObject( JSON.toJSONString(wcsUtil.queryTaskStatus(body)), - new TypeReference>() {} + new TypeReference>() { + } ); Integer taskCount = vo.getBody().get(0).getTaskCount(); @@ -581,6 +620,72 @@ public class PlcEventTask { log.info("出入库切换时,写入的命令返回结果:" + inOutSwitBoolean.toString()); } + //空托上报完成 + if (pointMap.containsKey(rptEySeria) && !pointMap.get(rptEySeria).equals("0")) { + //读取序列号 + String IntegeroutSeria = Objects.toString(pointMap.get(rptEySeria), ""); + Integer outSeria = 0; + if (!IntegeroutSeria.isEmpty()) { + outSeria = Integer.parseInt(IntegeroutSeria); + } + //读取托盘条码内容 + String barcodeValueOne = Objects.toString(pointMap.get(rptEyBarcod), ""); + String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", ""); + + Map allMap = new HashMap<>(1); + Map seriaMap = new HashMap<>(1); + Map reqMap = new HashMap<>(1); + + log.info("空托上报完成时,读取的条码内容:" + s); + if(!s.isEmpty()){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper().eq(BusinDataTask::getContainerCode,s) + .eq(BusinDataTask::getTaskStatus,TaskStatusEnum.wait_callback.getValue()); + BusinDataTask businDataTask = iBusinDataTaskService.getOne(lqw); + if(businDataTask != null){ + log.info("空托报完成任务号:"+ businDataTask.getTaskCode()); + businDataTask.setTaskStatus(TaskStatusEnum.finished.getValue()); + businDataTask.setDestination(MapEnum.oneOut.getValue()); + businDataTask.setTaskEntime(new Date()); + iBusinDataTaskService.updateById(businDataTask); + UploadWCSTaskStatusDto uploadWCSTaskStatusDto = new UploadWCSTaskStatusDto(); + WcsCreateTaskHeader header = new WcsCreateTaskHeader(); + header.setBusinessType("stockOutReturn"); + + uploadWCSTaskStatusDto.setHeader(header); + UploadWCSTaskStatusBody body = new UploadWCSTaskStatusBody(); + List bodyList = new ArrayList<>(); + body.setTaskId(businDataTask.getTaskCode()); + body.setTrayCode(businDataTask.getContainerCode()); + body.setTaskType(businDataTask.getTaskType()); + body.setStatus(businDataTask.getTaskStatus()); + body.setDestination(MapEnum.oneOut.getValue()); + body.setMsgCode("200"); + bodyList.add(body); + uploadWCSTaskStatusDto.setBody(bodyList); + log.info("空托任务状态上报请求zk-wcs参数{}", JSONObject.toJSONString(uploadWCSTaskStatusDto)); + WcsResponseVo vo = wcsUtil.uploadWCSTaskStatus(uploadWCSTaskStatusDto); + log.info("空托任务状态上报反馈:"+ JSONObject.toJSONString(vo)); + if (Result.isOk(vo.getHeader().getMsgCode())) { + reqMap.put(retEyVt, 1); + } else { + reqMap.put(retEyVt, 2); + } + }else{ + log.info("未查询到条码为:"+s+"未完成的任务"); + reqMap.put(retEyVt, 2); + } + }else{ + reqMap.put(retEyVt, 2); + } + seriaMap.put(retEyCfmSeriaVt, outSeria); + allMap.put(retEy, reqMap); + allMap.put(retEyCfmSeria,seriaMap); + String allMapJson = JsonUtil.toJSONString(allMap); + log.info("空托上报完成时,给输送线写命令数据:{}", allMapJson); + Boolean rptOutBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); + log.info("空托上报完成时,写入的命令返回结果:" + rptOutBoolean.toString()); + } + } catch (Exception e) { log.error("dpsRealTimeTask:" + e.getMessage()); } @@ -595,6 +700,22 @@ public class PlcEventTask { /** * 叠盘机 */ + + + //叠盘机请求序列号 + String dpjSeria = ""; + + //叠盘机确认序列号 + String retDpjCfmSeria = ""; + String retDpjCfmSeriaVt = ""; + + //叠盘机请求条码 + String dpjBarcod = ""; + + //叠盘机返回条码 + String retDpjCfmBarcod = ""; + String retDpjCfmBarcodVt = ""; + //叠盘机完成 String dpj = ""; @@ -602,6 +723,31 @@ public class PlcEventTask { String retDpj = ""; String retDpjVt = ""; + //叠盘机返回 + String retDpj1 = ""; + String retDpj1Vt = ""; + + //请求叠盘工位1 + String dpjGw1 = ""; + + //请求叠盘工位1返回 + String retDpjGw1 = ""; + String retDpjGw1Vt = ""; + + //请求叠盘工位2 + String dpjGw2 = ""; + + //请求叠盘工位2返回 + String retDpjGw2 = ""; + String retDpjGw2Vt = ""; + + //请求叠盘工位3 + String dpjGw3 = ""; + + //请求叠盘工位3返回 + String retDpjGw3 = ""; + String retDpjGw3Vt = ""; + for (WcsPlcProperty plcProperty : propertyList) { String pointType = plcProperty.getPointType(); @@ -611,18 +757,54 @@ public class PlcEventTask { } else if (pointType.equals("retDpj")) { retDpj = plcProperty.getAddress(); retDpjVt = plcProperty.getValueType(); + } else if (pointType.equals("dpjSeria")) { + dpjSeria = plcProperty.getAddress(); + } else if (pointType.equals("retDpjCfmSeria")) { + retDpjCfmSeria = plcProperty.getAddress(); + retDpjCfmSeriaVt = plcProperty.getValueType(); + }else if (pointType.equals("dpjBarcod")) { + dpjBarcod = plcProperty.getAddress(); + } else if (pointType.equals("retDpj1")) { + retDpj1 = plcProperty.getAddress(); + retDpj1Vt = plcProperty.getValueType(); + } else if (pointType.equals("dpjGw1")) { + dpjGw1 = plcProperty.getAddress(); + } else if (pointType.equals("retDpjGw1")) { + retDpjGw1 = plcProperty.getAddress(); + retDpjGw1Vt = plcProperty.getValueType(); + } else if (pointType.equals("dpjGw2")) { + dpjGw2 = plcProperty.getAddress(); + } else if (pointType.equals("retDpjGw2")) { + retDpjGw2 = plcProperty.getAddress(); + retDpjGw2Vt = plcProperty.getValueType(); + } else if (pointType.equals("dpjGw3")) { + dpjGw3 = plcProperty.getAddress(); + } else if (pointType.equals("retDpjGw3")) { + retDpjGw3 = plcProperty.getAddress(); + retDpjGw3Vt = plcProperty.getValueType(); } } //叠盘机 - if (pointMap.containsKey(dpj) && !pointMap.get(dpj).equals("0")) { + if (pointMap.containsKey(dpjSeria) && !pointMap.get(dpjSeria).equals("0")) { + + //读取序列号 + String IntegeroutSeria = Objects.toString(pointMap.get(dpjSeria), ""); + Integer seria = 0; + if (!IntegeroutSeria.isEmpty()) { + seria = Integer.parseInt(IntegeroutSeria); + } + //读取托盘条码内容 + String barcodeValueOne = Objects.toString(pointMap.get(dpjBarcod), ""); + String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", ""); + log.info("叠盘机入库请求读取的条码:"+ s); WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); - body.setStation("SC-G2-00-00-2003"); + body.setStation(MapEnum.dpj.getValue()); body.setTaskType(TaskTypeEnum.In.getValue()); - body.setTrayCode("TP4077566601"); + body.setTrayCode(s); body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue()); - body.setCreateDt(new Date().toString()); + body.setCreateDt(getNowDate()); //调用agv接口查询库区状态 Map map1 = new HashMap<>(); map1.put("areaInLocation", "SC-A2"); @@ -633,32 +815,193 @@ public class PlcEventTask { map2.put("status", 1); Map map3 = new HashMap<>(); - map1.put("areaInLocation", "SC-C2"); - map1.put("status", 1); + map3.put("areaInLocation", "SC-C2"); + map3.put("status", 1); Map map4 = new HashMap<>(); - map2.put("areaInLocation", "SC-D2"); - map2.put("status", 1); + map4.put("areaInLocation", "SC-D2"); + map4.put("status", 1); - Object[] areaStatus = new Object[] { map1,map2,map3,map4}; - log.info("每个库区的状态:"+Arrays.toString(areaStatus)); + Object[] areaStatus = new Object[]{map1, map2, map3, map4}; + log.info("每个库区的状态:" + Arrays.toString(areaStatus)); body.setAreaStatus(areaStatus); WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); log.info("叠盘机满入库任务申请WZ-WCS返回:" + vo.getHeader()); Map allMap = new HashMap<>(1); Map reqMap = new HashMap<>(1); + Map req1Map = new HashMap<>(1); + Map seriaMap = new HashMap<>(1); + seriaMap.put(retDpjCfmSeriaVt,seria); if (Result.isOk(vo.getHeader().getMsgCode())) { reqMap.put(retDpjVt, 1); + req1Map.put(retDpj1Vt,1); } else { reqMap.put(retDpjVt, 2); + req1Map.put(retDpj1Vt,2); } allMap.put(retDpj, reqMap); + allMap.put(retDpj1, req1Map); + allMap.put(retDpjCfmSeria,seriaMap); String allMapJson = JsonUtil.toJSONString(allMap); log.info("叠盘机叠满上报时,给输送线写命令数据:{}", allMapJson); Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); log.info("叠盘机叠满上报时,写入的命令返回结果:" + bCR01Boolean.toString()); } + //叠盘机搬运1 + if (pointMap.containsKey(dpjGw1) && !pointMap.get(dpjGw1).equals("0")) { + BusinDataTask businDataTask; + boolean save = true; + Map allMap = new HashMap<>(1); + Map reqMap = new HashMap<>(1); + LambdaQueryWrapper lqwTask = new LambdaQueryWrapper() + .eq(BusinDataTask::getFromSide,MapEnum.dpjGw1.getValue()) + .eq(BusinDataTask::getTaskStatus,TaskStatusEnum.wait_put); + businDataTask = iBusinDataTaskService.getOne(lqwTask); + if(businDataTask != null){ + log.info("还未下发的任务:"+businDataTask.getTaskCode()); + }else{ + String taskCode = IntIdUtil.generateIntId().toString(); + businDataTask.setTaskCode(taskCode); + businDataTask.setTaskStatus(TaskStatusEnum.wait_put.getValue()); + businDataTask.setTaskType(TaskTypeEnum.Carry.getValue()); + businDataTask.setTaskPath(MapEnum.dpj.getValue()); + businDataTask.setPriority("1"); + businDataTask.setFromSide(MapEnum.dpjGw1.getValue()); + businDataTask.setToSide(MapEnum.dpj.getValue()); + businDataTask.setCreateTime(DateUtils.getNowDate()); + businDataTask.setAgvType("B113"); + save = iBusinDataTaskService.save(businDataTask); + } + if (!save) { + log.info("叠盘工位1,任务存储失败!"); + reqMap.put(retDpjGw1Vt, 2); + allMap.put(retDpjGw1, reqMap); + }else{ + Result result = iBusinDataTaskService.rcsTaskIssued(businDataTask); + if (!Result.isOk(result)) { + log.info("叠盘工位1,给rcs下发任务失败!"); + reqMap.put(retDpjGw1Vt, 2); + allMap.put(retDpjGw1, reqMap); + }else{ + log.info("叠盘工位1,给rcs下发任务成功!"); + reqMap.put(retDpjGw1Vt, 1); + allMap.put(retDpjGw1, reqMap); + businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue()); + businDataTask.setTaskStarttime(DateUtils.getNowDate()); + businDataTask.setUpdateTime(DateUtils.getNowDate()); + iBusinDataTaskService.updateById(businDataTask); + } + } + String allMapJson = JsonUtil.toJSONString(allMap); + log.info("叠盘工位1叠盘请求时,给输送线写命令数据:{}", allMapJson); + Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); + log.info("叠盘工位1叠盘请求时,写入的命令返回结果:" + bCR01Boolean.toString()); + } + + //叠盘机搬运2 + if (pointMap.containsKey(dpjGw2) && !pointMap.get(dpjGw2).equals("0")) { + BusinDataTask businDataTask; + boolean save = true; + Map allMap = new HashMap<>(1); + Map reqMap = new HashMap<>(1); + LambdaQueryWrapper lqwTask = new LambdaQueryWrapper() + .eq(BusinDataTask::getFromSide,MapEnum.dpjGw2.getValue()) + .eq(BusinDataTask::getTaskStatus,TaskStatusEnum.wait_put); + businDataTask = iBusinDataTaskService.getOne(lqwTask); + if(businDataTask != null){ + log.info("还未下发的任务:"+businDataTask.getTaskCode()); + }else{ + String taskCode = IntIdUtil.generateIntId().toString(); + businDataTask.setTaskCode(taskCode); + businDataTask.setTaskStatus(TaskStatusEnum.wait_put.getValue()); + businDataTask.setTaskType(TaskTypeEnum.Carry.getValue()); + businDataTask.setTaskPath(MapEnum.dpj.getValue()); + businDataTask.setPriority("1"); + businDataTask.setFromSide(MapEnum.dpjGw2.getValue()); + businDataTask.setToSide(MapEnum.dpj.getValue()); + businDataTask.setCreateTime(DateUtils.getNowDate()); + businDataTask.setAgvType("B113"); + save = iBusinDataTaskService.save(businDataTask); + } + if (!save) { + log.info("叠盘工位2,任务存储失败!"); + reqMap.put(retDpjGw2Vt, 2); + allMap.put(retDpjGw2, reqMap); + }else{ + Result result = iBusinDataTaskService.rcsTaskIssued(businDataTask); + if (!Result.isOk(result)) { + log.info("叠盘工位2,给rcs下发任务失败!"); + reqMap.put(retDpjGw2Vt, 2); + allMap.put(retDpjGw2, reqMap); + }else{ + log.info("叠盘工位2,给rcs下发任务成功!"); + reqMap.put(retDpjGw2Vt, 1); + allMap.put(retDpjGw2, reqMap); + businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue()); + businDataTask.setTaskStarttime(DateUtils.getNowDate()); + businDataTask.setUpdateTime(DateUtils.getNowDate()); + iBusinDataTaskService.updateById(businDataTask); + } + } + String allMapJson = JsonUtil.toJSONString(allMap); + log.info("叠盘工位2叠盘请求时,给输送线写命令数据:{}", allMapJson); + Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); + log.info("叠盘工位2叠盘请求时,写入的命令返回结果:" + bCR01Boolean.toString()); + } + + //叠盘机搬运3 + if (pointMap.containsKey(dpjGw3) && !pointMap.get(dpjGw3).equals("0")) { + BusinDataTask businDataTask; + boolean save = true; + Map allMap = new HashMap<>(1); + Map reqMap = new HashMap<>(1); + LambdaQueryWrapper lqwTask = new LambdaQueryWrapper() + .eq(BusinDataTask::getFromSide,MapEnum.dpjGw3.getValue()) + .eq(BusinDataTask::getTaskStatus,TaskStatusEnum.wait_put); + businDataTask = iBusinDataTaskService.getOne(lqwTask); + if(businDataTask != null){ + log.info("还未下发的任务:"+businDataTask.getTaskCode()); + }else{ + String taskCode = IntIdUtil.generateIntId().toString(); + businDataTask.setTaskCode(taskCode); + businDataTask.setTaskStatus(TaskStatusEnum.wait_put.getValue()); + businDataTask.setTaskType(TaskTypeEnum.Carry.getValue()); + businDataTask.setTaskPath(MapEnum.dpj.getValue()); + businDataTask.setPriority("1"); + businDataTask.setFromSide(MapEnum.dpjGw3.getValue()); + businDataTask.setToSide(MapEnum.dpj.getValue()); + businDataTask.setCreateTime(DateUtils.getNowDate()); + businDataTask.setAgvType("B113"); + save = iBusinDataTaskService.save(businDataTask); + } + if (!save) { + log.info("叠盘工位3,任务存储失败!"); + reqMap.put(retDpjGw3Vt, 2); + allMap.put(retDpjGw3, reqMap); + }else{ + Result result = iBusinDataTaskService.rcsTaskIssued(businDataTask); + if (!Result.isOk(result)) { + log.info("叠盘工位3,给rcs下发任务失败!"); + reqMap.put(retDpjGw3Vt, 2); + allMap.put(retDpjGw3, reqMap); + }else{ + log.info("叠盘工位3,给rcs下发任务成功!"); + reqMap.put(retDpjGw3Vt, 1); + allMap.put(retDpjGw3, reqMap); + businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue()); + businDataTask.setTaskStarttime(DateUtils.getNowDate()); + businDataTask.setUpdateTime(DateUtils.getNowDate()); + iBusinDataTaskService.updateById(businDataTask); + } + } + String allMapJson = JsonUtil.toJSONString(allMap); + log.info("叠盘工位3叠盘请求时,给输送线写命令数据:{}", allMapJson); + Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); + log.info("叠盘工位3叠盘请求时,写入的命令返回结果:" + bCR01Boolean.toString()); + } + + } catch (Exception e) { log.error("dpsRealTimeTask:" + e.getMessage()); } @@ -667,6 +1010,14 @@ public class PlcEventTask { } + + + public static String getNowDate() { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); + return LocalDateTime.now().format(formatter); + } + + /** * 单个的plc写入 */ diff --git a/shkj-wms/src/main/java/com/shkj/wcs/service/IBusinDataTaskService.java b/shkj-wms/src/main/java/com/shkj/wcs/service/IBusinDataTaskService.java index 356a77f..643482e 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/service/IBusinDataTaskService.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/service/IBusinDataTaskService.java @@ -1,6 +1,7 @@ package com.shkj.wcs.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.shkj.common.core.domain.Result; import com.shkj.wcs.bo.AGVFeedbackBo; import com.shkj.wcs.domain.BusinDataTask; import com.shkj.wcs.third.rcs.vo.RcsResponseVo; @@ -25,6 +26,13 @@ public interface IBusinDataTaskService extends IService { */ RcsResponseVo rcsFeedbackTask(AGVFeedbackBo bo); + /** + * agv任务下发 + * @param businDataTask + * @return + */ + Result rcsTaskIssued(BusinDataTask businDataTask); + } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java b/shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java index 4ae3d4e..1f59577 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java @@ -27,7 +27,9 @@ import com.shkj.wcs.third.rcs.vo.RcsResponseVo; import com.shkj.wcs.third.workbinWcs.WCSUtil; import com.shkj.wcs.third.workbinWcs.dto.*; import com.shkj.wcs.vo.WcsResponseVo; +import com.shkj.wms.enums.MapEnum; import com.shkj.wms.enums.TaskStatusEnum; +import com.shkj.wms.enums.TaskTypeEnum; import com.shkj.wms.utils.JsonUtil; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.exceptions.TooManyResultsException; @@ -72,6 +74,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl lqwDataTask = new LambdaQueryWrapper() @@ -86,9 +89,11 @@ public class BusinDataTaskServiceImpl extends ServiceImpl rcsIdLists = new ArrayList<>(); - for (int i = 1; i <= 2; i++) { - RcsIdList rcsIdList = new RcsIdList(); - - rcsIdList.setType("SITE"); - if (i == 1) { - rcsIdList.setSeq(0); - rcsIdList.setCode(businDataTask.getFromSide()); - rcsIdList.setOperation(RCSOperation.OT_COLLECT.getValue()); - } else { - rcsIdList.setSeq(1); - String code = businDataTask.getToSide(); - if(code.equals("SC-G1-00-00-1002")){ - code = "SC-G2-00-00-2002"; - } - rcsIdList.setCode(code); - rcsIdList.setOperation(RCSOperation.OT_DELIVERY.getValue()); - } - rcsIdList.setAutoStart(1); - rcsIdLists.add(rcsIdList); - } - rcsCreateTaskDto.setTargetRoute(rcsIdLists); - CarrierInfoList carrierInfoList = new CarrierInfoList(); - int carrierCode = CounterService.incrementAndGet(); - carrierInfoList.setCarrierCode(String.valueOf(carrierCode)); - carrierInfoList.setCarrierType("4"); - carrierInfoList.setLayer("0"); - List carrierInfoLists = new ArrayList<>(); - carrierInfoLists.add(carrierInfoList); - Map extra = new HashMap<>(); - extra.put("carrierInfo", carrierInfoLists); - rcsCreateTaskDto.setExtra(extra); - Result result = rcsUtil.rcsCreateTask(rcsCreateTaskDto); + Result result = rcsTaskIssued(businDataTask); if (!Result.isOk(result)) { return WcsResponseVo.error(200, "接受成功但给rcs下发任务失败"); } businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue()); + businDataTask.setTaskStarttime(DateUtils.getNowDate()); iBusinDataTaskService.updateById(businDataTask); if (fromBinCode.equals("SC-G2-00-00-2003")) { Boolean aBoolean = plcEventTask.plcExecWrite(2); @@ -153,6 +118,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl bodyList = new ArrayList<>(); - body.setTaskId(businDataTask.getTaskCode()); - body.setTrayCode(carrierCode); - body.setTaskType(taskType); - body.setStatus(businDataTask.getTaskStatus()); + boolean bool = iBusinDataTaskService.updateById(businDataTask); + if (!bool) { + log.error("总任务状态更新失败,任务号:{}", robotTaskCode); + return RcsResponseVo.error("总任务状态更新失败"); + } + log.info("总任务状态更新成功,任务号:{}", robotTaskCode); + UploadWCSTaskStatusDto uploadWCSTaskStatusDto = new UploadWCSTaskStatusDto(); + WcsCreateTaskHeader header = new WcsCreateTaskHeader(); + String taskType = businDataTask.getTaskType(); + switch (taskType) { + case "1": + header.setBusinessType("stockOutReturn"); + break; + case "2": + header.setBusinessType("stockInReturn"); + break; + case "3": + header.setBusinessType("transferReturn"); + break; + default: + return RcsResponseVo.error("未知任务类型!"); + } + uploadWCSTaskStatusDto.setHeader(header); + UploadWCSTaskStatusBody body = new UploadWCSTaskStatusBody(); + List bodyList = new ArrayList<>(); + body.setTaskId(businDataTask.getTaskCode()); + body.setTrayCode(carrierCode); + body.setTaskType(taskType); + body.setStatus(businDataTask.getTaskStatus()); // if (businDataTask.getTaskStatus().equals(TaskStatusEnum.finished.getValue())) { + if(slotName.equals("0187000XY0234215")){ + slotName = "SC-G2-00-00-43022"; + } body.setDestination(slotName); // } - body.setMsgCode("200"); - bodyList.add(body); - uploadWCSTaskStatusDto.setBody(bodyList); - log.info("请求zk-wcs参数{}", JSONObject.toJSONString(uploadWCSTaskStatusDto)); - try { - WcsResponseVo vo = wcsUtil.uploadWCSTaskStatus(uploadWCSTaskStatusDto); - log.info("WZ-WCS状态上报反馈:"+ JSONObject.toJSONString(vo)); - } catch (TooManyResultsException e) { - log.error("WZ-WCS状态上报异常,任务号:{}", robotTaskCode, e); - return RcsResponseVo.error("KJ-WCS状态上报异常"); + body.setMsgCode("200"); + bodyList.add(body); + uploadWCSTaskStatusDto.setBody(bodyList); + log.info("请求zk-wcs参数{}", JSONObject.toJSONString(uploadWCSTaskStatusDto)); + try { + WcsResponseVo vo = wcsUtil.uploadWCSTaskStatus(uploadWCSTaskStatusDto); + log.info("WZ-WCS状态上报反馈:"+ JSONObject.toJSONString(vo)); + } catch (TooManyResultsException e) { + log.error("WZ-WCS状态上报异常,任务号:{}", robotTaskCode, e); + return RcsResponseVo.error("KJ-WCS状态上报异常"); + } } + + return RcsResponseVo.success(new JSONObject().fluentPut("data", robotTaskCode)); } + @Override + public Result rcsTaskIssued(BusinDataTask businDataTask) { + String toSide = businDataTask.getToSide(); + RcsCreateTaskDto rcsCreateTaskDto = new RcsCreateTaskDto(); + rcsCreateTaskDto.setTaskType(businDataTask.getAgvType()); + rcsCreateTaskDto.setRobotTaskCode(businDataTask.getTaskCode()); + if (!businDataTask.getPriority().isEmpty()) { + rcsCreateTaskDto.setInitPriority(Integer.parseInt(businDataTask.getPriority())); + } + List rcsIdLists = new ArrayList<>(); + for (int i = 1; i <= 2; i++) { + RcsIdList rcsIdList = new RcsIdList(); + + rcsIdList.setType("SITE"); + if (i == 1) { + rcsIdList.setSeq(0); + rcsIdList.setCode(businDataTask.getFromSide()); + rcsIdList.setOperation(RCSOperation.OT_COLLECT.getValue()); + } else { + rcsIdList.setSeq(1); + if(toSide.equals(MapEnum.oneOut.getValue())){ + toSide = MapEnum.twoDownIn.getValue(); + } + rcsIdList.setCode(toSide); + rcsIdList.setOperation(RCSOperation.OT_DELIVERY.getValue()); + } + rcsIdList.setAutoStart(1); + rcsIdLists.add(rcsIdList); + } + rcsCreateTaskDto.setTargetRoute(rcsIdLists); + CarrierInfoList carrierInfoList = new CarrierInfoList(); + String substring = toSide.substring(4, 5); + int number = Integer.parseInt(substring); + int carrierCode = 0; + if(number ==2){ + carrierCode = CounterService.incrementAndGet(2); + } + + carrierInfoList.setCarrierCode(String.valueOf(carrierCode)); + carrierInfoList.setCarrierType("4"); + carrierInfoList.setLayer("0"); + List carrierInfoLists = new ArrayList<>(); + carrierInfoLists.add(carrierInfoList); + Map extra = new HashMap<>(); + extra.put("carrierInfo", carrierInfoLists); + rcsCreateTaskDto.setExtra(extra); + return rcsUtil.rcsCreateTask(rcsCreateTaskDto); + } + } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/CounterService.java b/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/CounterService.java index 59e1bc3..746ace6 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/CounterService.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/CounterService.java @@ -1,10 +1,47 @@ package com.shkj.wcs.third.rcs; public class CounterService { - private static int i = 200000; // 静态变量,全局共享 + private static int i = 200000; // 2楼 + private static int j = 300000; // 3楼 - public static synchronized int incrementAndGet() { - i++; - return i; + public static synchronized int incrementAndGet(int code) { + if (code == 2) { + return handleIncrement(i, 200000); + } else if (code == 3) { + return handleIncrement(j, 300000); + } else { + throw new IllegalArgumentException("Invalid code: " + code + "楼层错误"); + } + } + + private static int handleIncrement(int current, int base) { + int next = current + 1; + int lastThreeDigits = next % 1000; + + if (lastThreeDigits > 500) { + next = base + 1; + } + + // 更新对应的计数器 + if (base == 200000) { + i = next; + } else { + j = next; + } + + return next; + } + + public static void main(String[] args) { + String toSide = "SC-G3-00-00-2001"; + String substring = toSide.substring(4, 5); + int number = Integer.parseInt(substring); + int carrierCode = 0; + if(number ==2){ + carrierCode = incrementAndGet(2); + }else if(number ==3){ + carrierCode = incrementAndGet(3); + } + System.out.println(carrierCode); } } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java index 140f605..0410c94 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java @@ -136,16 +136,16 @@ public class WCSUtil { jsonObject.put("body",incomingTaskRequestBodies); String json = JSONObject.toJSONString(jsonObject); - log.info("KJ向WZ空托申请参数"+json); + log.info("KJ向WZ入库申请参数"+json); try { String res = HttpRequest.post(wcsIncomingTaskRequestUrl) .body(json) .execute().body(); - log.info("KJ向WZ空托请返回:" + res); + log.info("KJ向WZ入库申请返回:" + res); return parseThirdRcsResult(res); } catch (Exception e) { e.printStackTrace(); - log.error("KJ向WZ空托申请 方法出错了 = {}", e.getMessage()); + log.error("KJ向WZ入库申请 方法出错了 = {}", e.getMessage()); return WcsResponseVo.error(500,e.getMessage()); } } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusBody.java b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusBody.java index 07d5895..4c11305 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusBody.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusBody.java @@ -59,7 +59,7 @@ public class UploadWCSTaskStatusBody implements Serializable { /** * 新增:1 */ - private String bussinessType ="trayCheck"; + private String bussinessType; } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsCreateTaskBody.java b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsCreateTaskBody.java index 30e9294..8f76165 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsCreateTaskBody.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsCreateTaskBody.java @@ -56,6 +56,9 @@ public class WcsCreateTaskBody implements Serializable { @NotBlank(message = "数据类型不得为空") private String dataChange; + @NotBlank(message = "agv模板不得为空") + private String agvType; + /** * 优先级 */ diff --git a/shkj-wms/src/main/java/com/shkj/wms/enums/MapEnum.java b/shkj-wms/src/main/java/com/shkj/wms/enums/MapEnum.java new file mode 100644 index 0000000..efa6d97 --- /dev/null +++ b/shkj-wms/src/main/java/com/shkj/wms/enums/MapEnum.java @@ -0,0 +1,47 @@ +package com.shkj.wms.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum MapEnum { + + /** + * 一楼生产车间入库工作站 + */ + oneIn("SC-G1-00-00-1001", "一楼生产车间入库工作站"), + + /** + * 一楼生产车间出库工作站 + */ + oneOut("SC-G1-00-00-1002", "一楼生产车间出库工作站"), + /** + * 二楼连廊入库扫码工作站(上面) + */ + twoUpIn("SC-G2-00-00-2001", "二楼连廊入库扫码工作站(上面)"), + /** + * 二楼连廊入库扫码工作站(下面) + */ + twoDownIn("SC-G2-00-00-2002", "二楼连廊入库扫码工作站(下面)"), + /** + * 叠盘机工作站 + */ + dpj("SC-G2-00-00-2003", "叠盘机工作站"), + /** + * 叠盘机工位1 + */ + dpjGw1("SC-E2-00-34-01", "叠盘机工位1"), + /** + * 叠盘机工位2 + */ + dpjGw2("SC-E2-00-34-02", "叠盘机工位2"), + /** + * 叠盘机工位3 + */ + dpjGw3("SC-E2-00-34-03", "叠盘机工位3"), + ; + + private String value; + private String desc; +} diff --git a/shkj-wms/src/main/java/com/shkj/wms/enums/TaskStatusEnum.java b/shkj-wms/src/main/java/com/shkj/wms/enums/TaskStatusEnum.java index 2bb474f..fccb19a 100644 --- a/shkj-wms/src/main/java/com/shkj/wms/enums/TaskStatusEnum.java +++ b/shkj-wms/src/main/java/com/shkj/wms/enums/TaskStatusEnum.java @@ -27,7 +27,7 @@ public enum TaskStatusEnum { /** * 异常 */ - err("-1", "异常"), + err("-1", "AGV下发异常"), clean("6","已取消"), ; diff --git a/shkj-wms/src/main/java/com/shkj/wms/enums/TaskTypeEnum.java b/shkj-wms/src/main/java/com/shkj/wms/enums/TaskTypeEnum.java index 3f63a9f..92a1559 100644 --- a/shkj-wms/src/main/java/com/shkj/wms/enums/TaskTypeEnum.java +++ b/shkj-wms/src/main/java/com/shkj/wms/enums/TaskTypeEnum.java @@ -12,7 +12,9 @@ public enum TaskTypeEnum { //任务类型 0 正常入库 1维修异常 2扫码异常 3入库冲孔 4 正常出库 5紧急出库 6越库出库 7手工入库 8呼叫空治具 Out("1", "出"), - In("2", "入"); + In("2", "入"), + Carry("3", "搬运"); + private String value; diff --git a/shkj-wms/src/main/java/com/shkj/wms/service/impl/SysThirdExceptionRequestServiceImpl.java b/shkj-wms/src/main/java/com/shkj/wms/service/impl/SysThirdExceptionRequestServiceImpl.java index 7d84bde..f5d397b 100644 --- a/shkj-wms/src/main/java/com/shkj/wms/service/impl/SysThirdExceptionRequestServiceImpl.java +++ b/shkj-wms/src/main/java/com/shkj/wms/service/impl/SysThirdExceptionRequestServiceImpl.java @@ -117,7 +117,7 @@ public class SysThirdExceptionRequestServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SysThirdExceptionRequest::getStatus, ThirdApiStatusEnum.fail.getValue());