| 3 天以前 | zwl | ![]() |
| 3 天以前 | Administrator | ![]() |
| 3 天以前 | zwl | ![]() |
| 3 天以前 | zwl | ![]() |
| 4 天以前 | Administrator | ![]() |
src/main/java/com/zy/api/controller/params/StopOutTaskParams.java
@@ -18,7 +18,7 @@ private String orderNo; @ApiModelProperty("pause reason") private String reason; private Integer reason; @ApiModelProperty("task list") private List<TaskItem> tasks = new ArrayList<>(); src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -96,8 +96,13 @@ String response; R r = R.ok(); WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", params.getTaskNo())); if (!Objects.isNull(wrkMast) && "out".equalsIgnoreCase(params.getType()) && "Y".equalsIgnoreCase(wrkMast.getPauseMk())) { return R.error("task paused"); if (!Objects.isNull(wrkMast) && "out".equalsIgnoreCase(params.getType())) { if ("Y".equalsIgnoreCase(wrkMast.getPauseMk())) { return R.error("task paused"); } if (requiresOutboundErpConfirm(wrkMast) && !"Y".equalsIgnoreCase(wrkMast.getPdcType())) { return R.error("task not confirmed by erp"); } } try { log.info("下发搬运任务给wcs="+JSON.toJSONString(params)); @@ -179,8 +184,8 @@ } else if (params.getMsgType().equals("task_cancel")) { if (mast.getIoType() != null && mast.getIoType() > 100 && mast.getWrkSts() < 14) { mast.setPauseMk("Y"); mast.setUpdMk("WCS_CANCELLED"); mast.setManuType("WCS_CANCELLED"); // mast.setUpdMk("WCS_CANCELLED"); // mast.setManuType("WCS_CANCELLED"); mast.setModiTime(new Date()); if (!wrkMastService.updateById(mast)) { throw new CoolException("task cancel update fail"); @@ -206,6 +211,11 @@ } return R.ok(); } private boolean requiresOutboundErpConfirm(WrkMast wrkMast) { Integer ioType = wrkMast == null ? null : wrkMast.getIoType(); return ioType != null && (ioType == 101 || ioType == 103 || ioType == 104 || ioType == 107 || ioType == 110); } @Override public R pauseOutTasks(StopOutTaskParams params) { if (params == null || params.getTasks() == null || params.getTasks().isEmpty()) { src/main/java/com/zy/asrs/controller/OpenController.java
@@ -116,20 +116,7 @@ /** * pause out order */ @PostMapping("/order/pakout/pause/default/v1") @AppAuth(memo = "pause out order") public synchronized R pakoutOrderPause(@RequestHeader(required = false) String appkey, @RequestBody OpenOrderPakoutPauseParam param, HttpServletRequest request) { auth(appkey, param, request); if (Cools.isEmpty(param) || Cools.isEmpty(param.getOrderNo())) { return R.error("orderNo is empty"); } return openService.pakoutOrderPause(param); } /** * 出库单回写 @@ -437,15 +424,9 @@ @PostMapping("/comb/auth") public synchronized R comb(@RequestBody ArrayList<MesToCombParam> param){ for (MesToCombParam mesToCombParam : param) { // 判断是否有相同条码的数据 if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). eq("zpallet", mesToCombParam.getPalletId()).eq("io_status", "N")) > 0) { waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", mesToCombParam.getPalletId())); } if (mesToCombParam.getPalletId().length() != 8) { return R.error(mesToCombParam.getPalletId()+"-该托盘码不为8位"); } // if (mesToCombParam.getPalletId().length() != 8) { // return R.error(mesToCombParam.getPalletId()+"-该托盘码不为8位"); // } // if (param.getCombMats().size()>1){ // throw new CoolException("不允许混料===>>" + param.getBarcode()); // } @@ -455,6 +436,11 @@ // int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getPalletId())); if (countLoc > 0 || countWrk > 0) { return R.error(mesToCombParam.getPalletId()+"-工作档/库存条码数据已存在"); } // 判断是否有相同条码的数据 if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). eq("zpallet", mesToCombParam.getPalletId()).eq("io_status", "N")) > 0) { waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", mesToCombParam.getPalletId())); } } for (MesToCombParam mesToCombParam : param) { @@ -477,28 +463,14 @@ } /** * 添加出库单 * pause out order */ @PostMapping("/order/pakout/default/v1") // @AppAuth(memo = "添加订单出库") public synchronized R pakoutOrderCreate(@RequestHeader(required = false) String appkey, @RequestBody OpenOrderPakoutParam param, HttpServletRequest request) { // auth(appkey, param, request); if (Cools.isEmpty(param)) { return R.parse(BaseRes.PARAM); @PostMapping("/order/pakout/pause/default/v1") public synchronized R pakoutOrderPause(@RequestBody OpenOrderPakoutPauseParam param){ if (Cools.isEmpty(param) || Cools.isEmpty(param.getOrderId())) { return R.error("orderNo is empty"); } if (Cools.isEmpty(param.getOrderNo())) { return R.error("单据编号[orderNo]不能为空"); } if (Cools.isEmpty(param.getOrderType())) { return R.error("单据类型[orderType]不能为空"); } if (Cools.isEmpty(param.getOrderDetails())) { return R.error("单据明细[orderDetails]不能为空"); } openService.pakoutOrderCreate(param); return R.ok(); return openService.pakoutOrderPause(param); } } src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -292,7 +292,7 @@ @ApiModelProperty(value= "条码") private String barcode; // Y:销售订单出库任务 // ERP出库确认标记:Y 允许下发WCS,N/空 不允许 @ApiModelProperty(value= "") @TableField("Pdc_type") private String PdcType; src/main/java/com/zy/asrs/entity/param/MesToCombParam.java
@@ -28,7 +28,7 @@ //操作类型,1 组托;2 组托解绑; private Integer operateType; //唯一码 private String BizNo; private String bizNo; //是否散货,0 非散货;1 散货;为了管控出货速率,散货可以出慢点。 private Integer package1; } src/main/java/com/zy/asrs/entity/param/OpenOrderPakoutPauseParam.java
@@ -5,7 +5,7 @@ @Data public class OpenOrderPakoutPauseParam { private String orderNo; private String orderId; private String reason; private Integer reason; } src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -248,6 +248,7 @@ wrkMast.setIoTime(now); wrkMast.setWrkSts(11L); // 工作状态:101.生成出库 wrkMast.setIoType(104); // 入出库状态 wrkMast.setPdcType("N"); wrkMast.setIoPri(13D); // 优先级:13 wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站 wrkMast.setStaNo(staDesc.getStnNo()); // 目标站 @@ -1316,6 +1317,7 @@ wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setPdcType("N"); wrkMast.setAppeUser(userId); // 操作人员数据 wrkMast.setAppeTime(now); wrkMast.setModiUser(userId); src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -374,56 +374,38 @@ @Override @Transactional public R pakoutOrderPause(OpenOrderPakoutPauseParam param) { if (param == null || Cools.isEmpty(param.getOrderNo())) { if (param == null || Cools.isEmpty(param.getOrderId())) { throw new CoolException("orderNo is empty"); } Order order = orderService.selectByNo(param.getOrderNo()); if (order == null) { order = OrderInAndOutUtil.selectByNo(Boolean.FALSE, param.getOrderNo()); } if (order == null) { throw new CoolException("order not found: " + param.getOrderNo()); } List<WrkMast> activeTasks = findActiveOutboundTasks(param.getOrderNo()); List<WrkMast> activeTasks = findActiveOutboundTasks(param.getOrderId()); Map<String, Object> result = new HashMap<>(); result.put("orderNo", param.getOrderId()); result.put("taskCount", activeTasks.size()); if (activeTasks.isEmpty()) { return R.ok("no active out tasks"); result.put("confirmedCount", 0); return R.ok("no active out tasks").add(result); } Date now = new Date(); int pausedCount = 0; List<WrkMast> issuedTasks = new ArrayList<>(); int confirmedCount = 0; for (WrkMast wrkMast : activeTasks) { if (wrkMast == null || "Y".equalsIgnoreCase(wrkMast.getPauseMk())) { if (wrkMast == null || "Y".equalsIgnoreCase(wrkMast.getPdcType())) { continue; } wrkMast.setPauseMk("Y"); wrkMast.setUpdMk(needNotifyWcsStop(wrkMast) ? "WCS_STOP_REQUESTED" : "WMS_PAUSED"); wrkMast.setManuType("ERP_PAUSE"); wrkMast.setPdcType("Y"); // wrkMast.setUpdMk("ERP_CONFIRMED"); // wrkMast.setManuType("ERP_CONFIRM_OUT"); wrkMast.setModiTime(now); wrkMast.setModiUser(9527L); if (!wrkMastService.updateById(wrkMast)) { throw new CoolException("pause out task failed: " + wrkMast.getWrkNo()); throw new CoolException("confirm out task failed: " + wrkMast.getWrkNo()); } pausedCount++; if (needNotifyWcsStop(wrkMast)) { issuedTasks.add(wrkMast); } confirmedCount++; } if (pausedCount == 0) { return R.ok("tasks already paused"); } if (!issuedTasks.isEmpty()) { wcsApiService.pauseOutTasks(buildStopOutTaskParams(param, issuedTasks)); } Map<String, Object> result = new HashMap<>(); result.put("orderNo", param.getOrderNo()); result.put("pausedCount", pausedCount); result.put("wcsStopCount", issuedTasks.size()); return R.ok("pause out success").add(result); result.put("confirmedCount", confirmedCount); return R.ok(confirmedCount == 0 ? "tasks already confirmed" : "erp confirm out success").add(result); } @Override @@ -440,8 +422,8 @@ } if (Objects.equals(param.getExecute(), 2)) { OpenOrderPakoutPauseParam pauseParam = new OpenOrderPakoutPauseParam(); pauseParam.setOrderNo(param.getOrderId()); pauseParam.setReason("OPEN_API_PAUSE"); pauseParam.setOrderId(param.getOrderId()); // pauseParam.setReason("OPEN_API_CONFIRM_OUT"); return pakoutOrderPause(pauseParam); } throw new CoolException("execute only supports 1 or 2"); @@ -461,8 +443,8 @@ } List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() .in("wrk_no", wrkNos) .in("io_type", Arrays.asList(101, 103, 107, 108, 110)) .lt("wrk_sts", 14L)); .in("io_type", Arrays.asList(101, 103, 104, 107, 108, 110)) .eq("wrk_sts", 11L)); if (wrkMasts == null || wrkMasts.isEmpty()) { return Collections.emptyList(); } @@ -582,7 +564,7 @@ private StopOutTaskParams buildStopOutTaskParams(OpenOrderPakoutPauseParam param, List<WrkMast> wrkMasts) { StopOutTaskParams stopParams = new StopOutTaskParams(); stopParams.setOrderNo(param.getOrderNo()); stopParams.setOrderNo(param.getOrderId()); stopParams.setReason(param.getReason()); for (WrkMast wrkMast : wrkMasts) { StopOutTaskParams.TaskItem item = new StopOutTaskParams.TaskItem(); @@ -1276,7 +1258,7 @@ if (param.getFull() == 1) { //满托盘 mat = matService.selectByMatnr(param.getMatnr()); mat = matService.selectByMatnr("emptyPallet"); } else if (param.getFull() == 0) { //空托盘 mat = matService.selectByMatnr("emptyPallet"); @@ -1285,6 +1267,7 @@ WaitPakin waitPakin = new WaitPakin(); waitPakin.sync(mat); // waitPakin.setMatnr(param.getMatnr()); waitPakin.setBatch(String.valueOf(param.getBatchId())); waitPakin.setZpallet(param.getPalletId()); // 托盘码 @@ -1335,6 +1318,7 @@ wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setPdcType("N"); wrkMast.setUserNo(param.getOrderId());//订单号 wrkMast.setPltType(param.getSeq());//出库顺序,从1开始 wrkMast.setTakeNone("0"); //0非自动 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -367,6 +367,7 @@ wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setPdcType("N"); wrkMast.setBarcode(locMast.getBarcode()); wrkMast.setTakeNone("0"); //0非自动 @@ -749,6 +750,7 @@ wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setPdcType("N"); wrkMast.setBarcode(locMast.getBarcode()); wrkMast.setAppeUser(userId); // 操作人员数据 wrkMast.setAppeTime(now); @@ -984,6 +986,7 @@ wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("Y"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setPdcType("N"); wrkMast.setAppeUser(userId); wrkMast.setAppeTime(now); wrkMast.setModiUser(userId); @@ -1046,6 +1049,7 @@ wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("Y"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setPdcType("N"); wrkMast.setAppeUser(1L); wrkMast.setAppeTime(now); wrkMast.setModiUser(1L); src/main/java/com/zy/asrs/task/AutomaticallyIssueWCSTasksScheduler.java
@@ -22,12 +22,12 @@ @Autowired private AutomaticallyIssueWCSTasksHandler automaticallyIssueWCSTasksHandler; @Scheduled(cron = "0/3 * * * * ? ") // @Scheduled(cron = "0/3 * * * * ? ") private void execute(){ List<WrkMast> wrkMasts = wrkMastService.selectList( new com.baomidou.mybatisplus.mapper.EntityWrapper<WrkMast>() .eq("wrk_sts", 11) .last(" and (pause_mk is null or pause_mk <> 'Y')") .last(" and (pause_mk is null or pause_mk <> 'Y') and (io_type not in (101,103,104,107,110) or Pdc_type = 'Y')") ); if (wrkMasts.isEmpty()) { return; src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -1,15 +1,24 @@ package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.R; import com.zy.api.controller.params.WorkTaskParams; import com.zy.api.service.WcsApiService; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.task.handler.WorkMastHandler; import com.zy.asrs.utils.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; @@ -21,6 +30,8 @@ private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class); @Autowired private WcsApiService wcsApiService; @Autowired private WrkMastService wrkMastService; @Autowired @@ -45,4 +56,60 @@ } } /** * 任务自动下发 * * @author Ryan * @date 2026/1/10 14:42 */ @Scheduled(cron = "0/3 * * * * ? ") private void autoPubTasks() { List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", Arrays.asList(1L, 11L))); if (wrkMasts.isEmpty()) { return; } Collections.shuffle(wrkMasts); for (WrkMast wrkMast : wrkMasts) { if (wrkMast.getIoType()>100&& !wrkMast.getPdcType().equals("Y")) { continue; } Integer crnNo = wrkMast.getCrnNo(); //该堆垛机已经下发任务给wcs后不再下发新的搬运任务 List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("wrk_sts", Arrays.asList(2L, 12L))); if (!wrkMasts1.isEmpty()) { continue; } String wcsSourceLocNo = Cools.isEmpty(wrkMast.getSourceLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getSourceLocNo()); String wcsLocNo = Cools.isEmpty(wrkMast.getLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getLocNo()); WorkTaskParams params = new WorkTaskParams(); //出库和移库 if(wrkMast.getIoType()==101&&!Cools.isEmpty(wrkMast.getStaNo())&& !wrkMast.getStaNo().equals("0")) { params.setType("out") .setTaskNo(wrkMast.getWrkNo()+"") .setLocNo(wcsSourceLocNo) .setStaNo(String.valueOf(wrkMast.getStaNo())) .setTaskPri(wrkMast.getIoPri().intValue()) .setBarcode(wrkMast.getBarcode()); }else if(wrkMast.getIoType()==2&& !Cools.isEmpty(wrkMast.getSourceStaNo())){ params.setType("in") .setTaskNo(wrkMast.getWrkNo()+"") .setSourceStaNo(String.valueOf(wrkMast.getSourceStaNo())) .setLocNo(wcsLocNo) .setTaskPri(wrkMast.getIoPri().intValue()) .setBarcode(wrkMast.getBarcode()); } else { params.setType("move") .setTaskNo(wrkMast.getWrkNo()+"") .setSourceLocNo(wcsSourceLocNo) .setLocNo(wcsLocNo) .setBarcode(wrkMast.getBarcode()); } R r = wcsApiService.pubWrkToWcs(params); if (r.get("code").equals(200)){ break; } }; } } src/main/java/com/zy/asrs/task/handler/AutomaticallyIssueWCSTasksHandler.java
@@ -51,6 +51,9 @@ if ("Y".equalsIgnoreCase(m.getPauseMk())) { continue; } if (requiresOutboundErpConfirm(m) && !"Y".equalsIgnoreCase(m.getPdcType())) { continue; } if (m.getUpdMk() != null && "WCS_SENT".equalsIgnoreCase(m.getUpdMk())) { continue; } @@ -139,4 +142,9 @@ } return SUCCESS; } private boolean requiresOutboundErpConfirm(WrkMast wrkMast) { Integer ioType = wrkMast == null ? null : wrkMast.getIoType(); return ioType != null && (ioType == 101 || ioType == 103 || ioType == 104 || ioType == 107 || ioType == 110); } } src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -88,11 +88,30 @@ if (!Cools.isEmpty(erpReport) && !"true".equalsIgnoreCase(erpReport)) { return false; } if (wrkMast == null || Cools.isEmpty(wrkMast.getBarcode())) { if (wrkMast == null) { return false; } Integer ioType = wrkMast.getIoType(); return ioType != null && (ioType == 101 || ioType == 108 || ioType == 110); if (ioType == null || (ioType != 101 && ioType != 108 && ioType != 110)) { return false; } return !Cools.isEmpty(resolveOutboundPalletId(wrkMast)); } private String resolveOutboundPalletId(WrkMast wrkMast) { if (!Cools.isEmpty(wrkMast.getBarcode())) { return wrkMast.getBarcode(); } List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); if (Cools.isEmpty(wrkDetls)) { return null; } for (WrkDetl wrkDetl : wrkDetls) { if (!Cools.isEmpty(wrkDetl.getZpallet())) { return wrkDetl.getZpallet(); } } return null; } public ReturnT<String> doIn(WrkMast wrkMast) { @@ -595,3 +614,4 @@ return SUCCESS; } } src/main/java/com/zy/common/web/WcsController.java
@@ -47,7 +47,7 @@ @Autowired private WaitPakinService waitPakinService; @Autowired private LocDetlService locDetlService; private LocDetlService locDetlService; @Autowired private RowLastnoService rowLastnoService; @Autowired @@ -62,59 +62,60 @@ } List<WaitPakin> waitPakins = null; if (Cools.isEmpty(param.getBarcode())) { return R.error("条码不能为空"); } if (Cools.isEmpty(param.getBarcode())) { return R.error("条码不能为空"); } WrkMast wrkMast1 = wrkMastService.selectByBarcode(param.getBarcode()); if (!Cools.isEmpty(wrkMast1)&&wrkMast1.getWrkSts()==2) { StartupDto dto1 =new StartupDto(); if (!Cools.isEmpty(wrkMast1) && wrkMast1.getWrkSts() == 2) { StartupDto dto1 = new StartupDto(); dto1.setBarcode(param.getBarcode()); dto1.setStaNo(Integer.valueOf(wrkMast1.getStaNo())); String wcsLoc = Utils.WMSLocToWCSLoc(wrkMast1.getLocNo()); dto1.setLocNo(wcsLoc); dto1.setCrnNo(wrkMast1.getCrnNo()); dto1.setWorkNo(wrkMast1.getWrkNo()); dto1.setTaskNo(wrkMast1.getWrkNo()+""); dto1.setTaskNo(wrkMast1.getWrkNo() + ""); // dto1.setTaskPri((int) Math.round(wrkMast1.getIoPri())); return R.ok(dto1); } List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type", 1)); if (!Cools.isEmpty(wrkMasts)&&wrkMasts.size()>100) { if (!Cools.isEmpty(wrkMasts) && wrkMasts.size() > 1) { return R.error("限行"); } waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode())); if (Cools.isEmpty(waitPakins)) { WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode()); if (wrkMast != null && wrkMast.getIoType() == 103) { return R.parse(CodeRes.PICK_600); } Date now = new Date(); WaitPakin waitPakin = new WaitPakin(); waitPakin.setMatnr("emptyPallet"); waitPakin.setBatch(""); waitPakin.setAnfme(1D); waitPakin.setZpallet(param.getBarcode()); waitPakin.setIoStatus("N"); waitPakin.setStatus("Y"); waitPakin.setAppeUser(9999L); waitPakin.setAppeTime(now); waitPakin.setModiUser(9999L); waitPakin.setModiTime(now); if (!waitPakinService.insert(waitPakin)) { return R.error("自动生成入库通知档失败"); } waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode())); if (Cools.isEmpty(waitPakins)) { return R.error("自动生成入库通知档后未查询到数据"); } log.info("WCS入库接口自动生成入库通知档, zpallet:{}, matnr:{}, anfme:{}", param.getBarcode(), "32149", 1D); } int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())); if (countLoc > 0 || countWrk > 0) { return R.error(CodeRes.EXIST_500); } if (Cools.isEmpty(param.getLocType1())){ waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode())); if (Cools.isEmpty(waitPakins)) { return R.error("请先添加入库通知档"); // WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode()); // if (wrkMast != null && wrkMast.getIoType() == 103) { // return R.parse(CodeRes.PICK_600); // } // Date now = new Date(); // WaitPakin waitPakin = new WaitPakin(); // waitPakin.setMatnr("emptyPallet"); // waitPakin.setBatch(""); // waitPakin.setAnfme(1D); // waitPakin.setZpallet(param.getBarcode()); // waitPakin.setIoStatus("N"); // waitPakin.setStatus("Y"); // waitPakin.setAppeUser(9999L); // waitPakin.setAppeTime(now); // waitPakin.setModiUser(9999L); // waitPakin.setModiTime(now); // if (!waitPakinService.insert(waitPakin)) { // return R.error("自动生成入库通知档失败"); // } // waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode())); // if (Cools.isEmpty(waitPakins)) { // return R.error("自动生成入库通知档后未查询到数据"); // } // log.info("WCS入库接口自动生成入库通知档, zpallet:{}, matnr:{}, anfme:{}", param.getBarcode(), "32149", 1D); } int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode())); int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode())); if (countLoc > 0 || countWrk > 0) { return R.error(CodeRes.EXIST_500); } if (Cools.isEmpty(param.getLocType1())) { return R.error("高低检测信号不能为空"); } @@ -143,12 +144,12 @@ return R.error("条码不能为空"); } } if (Cools.isEmpty(param.getLocType1())){ if (Cools.isEmpty(param.getLocType1())) { return R.error("高低检测信号不能为空"); } // 源站点状态检测 BasDevp sourceStaNo = basDevpService.selectById(param.getSourceStaNo()); if(sourceStaNo.getWrkNo() == 0 && sourceStaNo.getDevNo() != 2033){ if (sourceStaNo.getWrkNo() == 0 && sourceStaNo.getDevNo() != 2033) { return R.error("站点工作号不存在"); } sourceStaNo.setLocType1(param.getLocType1()); @@ -158,7 +159,7 @@ switch (param.getIoType()) { case 1://满托盘入库 case 10://空托盘入库 dto = startupFullPutStoreAgv(param.getSourceStaNo(), param.getBarcode(), locTypeDto,param.getOutArea()); dto = startupFullPutStoreAgv(param.getSourceStaNo(), param.getBarcode(), locTypeDto, param.getOutArea()); break; // dto = emptyPlateIn(param.getSourceStaNo(), locTypeDto, param.getBarcode()); // break; @@ -171,15 +172,15 @@ @PostMapping("/auto/emptyIn/v1") @ResponseBody public R autoEmptyIn(@RequestBody LocTypeDto locTypeDto){ public R autoEmptyIn(@RequestBody LocTypeDto locTypeDto) { // 源站点状态检测 BasDevp sourceStaNo = basDevpService.checkSiteStatus(1038, true); // 检索库位 FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(); StartupDto dto = commonService.getLocNo( 10, 1038, findLocNoAttributeVo, locTypeDto); if (dto == null){ StartupDto dto = commonService.getLocNo(10, 1038, findLocNoAttributeVo, locTypeDto); if (dto == null) { throw new CoolException("查询库位失败"); } Date now = new Date(); @@ -208,27 +209,27 @@ sourceStaNo.setWrkNo(dto.getWorkNo()); sourceStaNo.setModiUser(9999L); sourceStaNo.setModiTime(now); if (!basDevpService.updateById(sourceStaNo)){ if (!basDevpService.updateById(sourceStaNo)) { throw new CoolException("更新源站失败"); } // 更新目标库位状态 LocMast locMast = locMastService.selectById(dto.getLocNo()); if (locMast.getLocSts().equals("O")){ if (locMast.getLocSts().equals("O")) { locMast.setLocSts("S"); // S.入库预约 locMast.setModiUser(9999L); locMast.setModiTime(now); if (!locMastService.updateById(locMast)){ if (!locMastService.updateById(locMast)) { throw new CoolException("改变库位状态失败"); } } else { throw new CoolException(dto.getLocNo()+"目标库位已被占用"); throw new CoolException(dto.getLocNo() + "目标库位已被占用"); } return wrkMastService.insert(wrkMast) ? R.ok("自动空托入库成功,工作号:"+wrkMast.getWrkNo()).add(wrkMast.getWrkNo()) : R.error("生成自动空托入库失败"); return wrkMastService.insert(wrkMast) ? R.ok("自动空托入库成功,工作号:" + wrkMast.getWrkNo()).add(wrkMast.getWrkNo()) : R.error("生成自动空托入库失败"); } @PostMapping("auto/emptyOut/v1") @ResponseBody public R autoEmptyOut(@RequestBody LocTypeDto locTypeDto){ public R autoEmptyOut(@RequestBody LocTypeDto locTypeDto) { LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts", "D")); if (Cools.isEmpty(locMast)) { @@ -236,9 +237,11 @@ } EmptyPlateOutParam emptyPlateOutParam = new EmptyPlateOutParam(); emptyPlateOutParam.setOutSite(locTypeDto.getSiteId()); emptyPlateOutParam.setLocNos(new ArrayList<String>(){{add(locMast.getLocNo()+"");}}); emptyPlateOutParam.setLocNos(new ArrayList<String>() {{ add(locMast.getLocNo() + ""); }}); WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam); return R.ok(!Cools.isEmpty(wrkMast)? R.ok("自动空托出库成功,工作号:" + wrkMast.getWrkNo()) : R.error("生成自动空托出库失败")); return R.ok(!Cools.isEmpty(wrkMast) ? R.ok("自动空托出库成功,工作号:" + wrkMast.getWrkNo()) : R.error("生成自动空托出库失败")); } @@ -281,20 +284,21 @@ } return workNo; } @PostMapping("/auto/TransplantingOut/v1") @ResponseBody public R autoTransplantingOut(@RequestBody TransplantWork transplantWork){ public R autoTransplantingOut(@RequestBody TransplantWork transplantWork) { // 源站点状态检测 // BasDevp sourceStaNo = basDevpService.checkSiteStatus(transplantWork.getStaNo(), true); WrkMast wrkMast1 = wrkMastService.selectWrkMast(transplantWork.getWorkNo(),transplantWork.getBarcode()); WrkMast wrkMast1 = wrkMastService.selectWrkMast(transplantWork.getWorkNo(), transplantWork.getBarcode()); // if(sourceStaNo ==null )hnagbao1{ // return R.error("该站点盘点移栽许可,请查看源站点状态检测"); // } if(wrkMast1== null){ return R.error("无该盘点移栽任务"); if (wrkMast1 == null) { return R.error("无该盘点移栽任务"); } WrkMast wrkMast2 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",9997)); if(wrkMast2 != null){ WrkMast wrkMast2 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", 9997)); if (wrkMast2 != null) { throw new CoolException("存在9997盘点移栽任务"); } List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(transplantWork.getWorkNo()); @@ -331,23 +335,23 @@ throw new CoolException("保存工作明细失败"); } } return wrkMastService.insert(wrkMast) ? R.ok("自动3号堆垛机移栽成功,工作号:"+wrkMast.getWrkNo()) : R.error("生成自动3号堆垛机移栽失败"); return wrkMastService.insert(wrkMast) ? R.ok("自动3号堆垛机移栽成功,工作号:" + wrkMast.getWrkNo()) : R.error("生成自动3号堆垛机移栽失败"); } @PostMapping("/auto/TransplantingIn/v1") @ResponseBody public R autoTransplantingIn(@RequestBody TransplantWork transplantWork){ public R autoTransplantingIn(@RequestBody TransplantWork transplantWork) { // 源站点状态检测 // BasDevp sourceStaNo = basDevpService.checkSiteStatus(transplantWork.getStaNo(), true); WrkMast wrkMast1 = wrkMastService.selectWrkMast(transplantWork.getWorkNo(),transplantWork.getBarcode()); WrkMast wrkMast1 = wrkMastService.selectWrkMast(transplantWork.getWorkNo(), transplantWork.getBarcode()); // if(sourceStaNo == null){ // // } if(wrkMast1== null){ return R.error("无该盘点移栽任务"); if (wrkMast1 == null) { return R.error("无该盘点移栽任务"); } WrkMast wrkMast2 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",9996)); if(wrkMast2 != null){ WrkMast wrkMast2 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", 9996)); if (wrkMast2 != null) { throw new CoolException("存在9996盘点移栽任务"); } List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(transplantWork.getWorkNo()); @@ -384,7 +388,7 @@ throw new CoolException("保存工作明细失败"); } } return wrkMastService.insert(wrkMast) ? R.ok("自动3号堆垛机移栽成功,工作号:"+wrkMast.getWrkNo()) : R.error("生成自动3号堆垛机移栽失败"); return wrkMastService.insert(wrkMast) ? R.ok("自动3号堆垛机移栽成功,工作号:" + wrkMast.getWrkNo()) : R.error("生成自动3号堆垛机移栽失败"); } @@ -392,29 +396,29 @@ * 全板入库AGV */ @Transactional public StartupDto startupFullPutStoreAgv(Integer devpNo, String barcode, LocTypeDto locTypeDto,Integer outArea) { public StartupDto startupFullPutStoreAgv(Integer devpNo, String barcode, LocTypeDto locTypeDto, Integer outArea) { // 源站点状态检测 // BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true); // 检索库位 FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(); findLocNoAttributeVo.setOutArea(outArea); // FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(waitPakins.get(0)); StartupDto dto = commonService.getLocNo( 1, devpNo,findLocNoAttributeVo, locTypeDto); StartupDto dto = commonService.getLocNo(1, devpNo, findLocNoAttributeVo, locTypeDto); // 更新目标库位状态 Date now = new Date(); if(dto == null){ if (dto == null) { throw new CoolException("未找到库位"); } LocMast locMast = locMastService.selectById(dto.getLocNo()); if (locMast.getLocSts().equals("O")){ if (locMast.getLocSts().equals("O")) { locMast.setLocSts("S"); // S.入库预约 locMast.setBarcode(barcode); locMast.setModiTime(now); if (!locMastService.updateById(locMast)){ if (!locMastService.updateById(locMast)) { throw new CoolException("改变库位状态失败"); } } else { throw new CoolException(dto.getLocNo()+"目标库位已被占用"); throw new CoolException(dto.getLocNo() + "目标库位已被占用"); } return dto; } @@ -490,18 +494,18 @@ // } // 更新目标库位状态 LocMast locMast = locMastService.selectById(dto.getLocNo()); if (locMast.getLocSts().equals("O")){ if (locMast.getLocSts().equals("O")) { locMast.setLocSts("S"); // S.入库预约 locMast.setModiTime(now); if (!locMastService.updateById(locMast)){ if (!locMastService.updateById(locMast)) { throw new CoolException("改变库位状态失败"); } } else { throw new CoolException(dto.getLocNo()+"目标库位已被占用"); throw new CoolException(dto.getLocNo() + "目标库位已被占用"); } String wcsLoc = Utils.WMSLocToWCSLoc(dto.getLocNo()); dto.setLocNo(wcsLoc); dto.setTaskNo(workNo+""); dto.setTaskNo(workNo + ""); return dto; } @@ -512,7 +516,7 @@ // 检索库位 FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(); StartupDto dto = commonService.getLocNo( 10, devpNo, findLocNoAttributeVo, locTypeDto); StartupDto dto = commonService.getLocNo(10, devpNo, findLocNoAttributeVo, locTypeDto); int workNo = dto.getWorkNo(); // 生成工作档 WrkMast wrkMast = new WrkMast(); @@ -542,19 +546,19 @@ // 更新源站点信息 sourceStaNo.setWrkNo(workNo); sourceStaNo.setModiTime(new Date()); if (!basDevpService.updateById(sourceStaNo)){ if (!basDevpService.updateById(sourceStaNo)) { throw new CoolException("更新源站失败"); } // 更新目标库位状态 LocMast locMast = locMastService.selectById(dto.getLocNo()); if (locMast.getLocSts().equals("O")){ if (locMast.getLocSts().equals("O")) { locMast.setLocSts("S"); // S.入库预约 locMast.setModiTime(new Date()); if (!locMastService.updateById(locMast)){ if (!locMastService.updateById(locMast)) { throw new CoolException("改变库位状态失败"); } } else { throw new CoolException(dto.getLocNo()+"目标库位已被占用"); throw new CoolException(dto.getLocNo() + "目标库位已被占用"); } return dto; } src/main/resources/application.yml
@@ -1,5 +1,5 @@ server: port: 8081 port: 18080 servlet: context-path: /@pom.build.finalName@ @@ -93,10 +93,10 @@ ErpReportOld: true # 地址 address: URL: https://shyucheng.test.kdgalaxy.com URL: http://192.168.160.8:8088 #入库上报 Inaddress: /kapi/oauth2/getToken #商品档案地址 Inaddress: /api/Service/InPalletCompleted #出库上报 Outaddress: /kapi/v2/eap7/basedata/bd_material/batchQuery #wcs任务下发 @@ -105,7 +105,7 @@ switch: true # 地址 address: URL: https://127.0.0.1:9090 URL: https://127.0.0.1:9090/wcs #入库任务下发地址 createInTask : /openapi/createInTask #出库任务下发地址 src/main/resources/mapper/WrkMastLogMapper.xml
@@ -57,6 +57,7 @@ <result column="log_err_time" property="logErrTime" /> <result column="log_err_memo" property="logErrMemo" /> <result column="barcode" property="barcode" /> <result column="Pdc_type" property="PdcType" /> <result column="ctn_no" property="ctnNo" /> <result column="full_plt" property="fullPlt" /> <result column="pre_have" property="preHave" /> src/main/resources/mapper/WrkMastMapper.xml
@@ -56,6 +56,7 @@ <result column="log_err_time" property="logErrTime" /> <result column="log_err_memo" property="logErrMemo" /> <result column="barcode" property="barcode" /> <result column="Pdc_type" property="PdcType" /> <result column="ctn_no" property="ctnNo" /> <result column="full_plt" property="fullPlt" /> <result column="pre_have" property="preHave" /> @@ -70,6 +71,7 @@ select * from asr_wrk_mast where wrk_sts=5 or (wrk_sts=15 and take_none = '1' and ove_mk='Y' and wrk_no not in (select wrk_no from asr_bas_devp) and wrk_no not in (select wrk_no from asr_wrk_mast_sta)) or (wrk_sts=15 and log_mk='F' and exp_time >= 3 and wrk_no not in (select wrk_no from asr_bas_devp)) or (wrk_sts=15 and dateadd(mi,3,crn_end_time) <= getdate() and wrk_no not in (select wrk_no from asr_bas_devp)) or (wrk_sts=15 and crn_end_time is null and wrk_no not in (select wrk_no from asr_bas_devp)) or (wrk_no in (9997,9996) and wrk_sts = 15) @@ -156,3 +158,4 @@ </select> </mapper>