From 48278d6051b6e58d648178964585d35ae000ec91 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期五, 30 八月 2024 15:36:56 +0800 Subject: [PATCH] # --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java | 174 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 134 insertions(+), 40 deletions(-) diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java index 1c1748b..141bcf3 100644 --- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java +++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java @@ -4,6 +4,7 @@ import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.asrs.entity.*; import com.zy.asrs.wms.asrs.entity.enums.*; +import com.zy.asrs.wms.asrs.entity.param.FieldParam; import com.zy.asrs.wms.asrs.entity.param.GeneratePakInParam; import com.zy.asrs.wms.asrs.service.*; import com.zy.asrs.wms.utils.LocUtils; @@ -50,6 +51,12 @@ private LanewayRuleService lanewayRuleService; @Autowired private CircleRuleService circleRuleService; + @Autowired + private LocTypeBindService locTypeBindService; + @Autowired + private LocTypeService locTypeService; + @Autowired + private MatService matService; @Override public String generateTaskNo(Long taskType) { @@ -134,7 +141,7 @@ } @Override - public Loc generateLoc(Long taskType, String barcode, Integer locTypeHeight) { + public synchronized Loc generateLoc(Long taskType, String barcode, Integer locTypeHeight) { List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, barcode)); if (taskType != 10 && waitPakins.isEmpty()) { throw new CoolException("鎵樼洏鏈粍鎵�"); @@ -145,14 +152,26 @@ if (detl == null) { throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�"); } + String batch = detl.getBatch(); + List<FieldParam> uniqueFields = detl.getUniqueField(); Mat mat = detl.getMat$(); if (mat == null) { throw new CoolException("鍟嗗搧涓嶅瓨鍦�"); } + return generateLoc(taskType, mat.getId(), batch, uniqueFields, locTypeHeight); + } + + @Override + public synchronized Loc generateLoc(Long taskType, Long matId, String batch, List<FieldParam> uniqueFields, Integer locTypeHeight) { + Mat mat = matService.getById(matId); + if (mat == null) { + throw new CoolException("鍟嗗搧涓嶅瓨鍦�"); + } + List<ShelvesRule> shelvesRules = shelvesRuleService.list(new LambdaQueryWrapper<ShelvesRule>().eq(ShelvesRule::getStatus, 1).orderByDesc(ShelvesRule::getCreateTime)); - if(shelvesRules.isEmpty()) { + if (shelvesRules.isEmpty()) { throw new CoolException("鏈厤缃笂鏋惰鍒�"); } ShelvesRule shelvesRule = shelvesRules.get(0); @@ -176,7 +195,7 @@ } List<ShelvesRuleDetl> ruleDetls = shelvesRule.getRuleDetl$(); - if(ruleDetls.isEmpty()) { + if (ruleDetls.isEmpty()) { throw new CoolException("鏈厤缃笂鏋惰鍒欐槑缁�"); } @@ -185,7 +204,7 @@ for (ShelvesRuleDetl ruleDetl : ruleDetls) { if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.TASK_OR_LOC.id)) { //浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣� - defaultLoc = locUtils.getNeighborLoc(taskType, detl, locTypeHeight); + defaultLoc = locUtils.getNeighborLoc(taskType, mat.getId(), batch, uniqueFields, locTypeHeight); if (defaultLoc != null) { return defaultLoc; } @@ -193,11 +212,11 @@ if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.SUGGEST.id)) { //鑾峰彇鎺ㄨ崘搴撲綅 - List<Loc> suggestLoc = locUtils.getSuggestLoc(taskType, mat.getId(), detl.getBatch(), locTypeHeight, laneRowList, currentLev); + List<Loc> suggestLoc = locUtils.getSuggestLoc(taskType, mat.getId(), batch, locTypeHeight, laneRowList, currentLev); //鑾峰彇搴撲綅 if (!suggestLoc.isEmpty()) { defaultLoc = locUtils.filterLoc(taskType, suggestLoc); - if(defaultLoc != null) { + if (defaultLoc != null) { return defaultLoc; } } @@ -209,7 +228,7 @@ //鑾峰彇搴撲綅 if (!globalLoc.isEmpty()) { defaultLoc = locUtils.filterAllLoc(globalLoc); - if(defaultLoc != null) { + if (defaultLoc != null) { return defaultLoc; } } @@ -454,6 +473,20 @@ break; } + //鏁版嵁淇濆瓨鑷冲巻鍙叉。 + TaskLog taskLog = new TaskLog(); + taskLog.sync(task); + taskLog.setId(null); + if (!taskLogService.save(taskLog)) { + throw new CoolException("浠诲姟妗f杞巻鍙叉。妗堝け璐�"); + } + + //鍒犻櫎浠诲姟 + boolean removeTask = taskService.removeById(taskId); + if(!removeTask){ + throw new CoolException("鍥炴粴浠诲姟澶辫触"); + } + if (task.getTaskType() != 10) { List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(taskId); if (taskDetls.isEmpty()) { @@ -462,17 +495,20 @@ //鍥炴粴璁㈠崟 for (TaskDetl taskDetl : taskDetls) { - OrderDetl orderDetl = orderDetlService.getById(taskDetl.getDetlId()); - if(orderDetl == null){ - throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�"); - } + if (taskDetl.getDetlId() != null) { + OrderDetl orderDetl = orderDetlService.getById(taskDetl.getDetlId()); + if(orderDetl == null){ + throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�"); + } - //鍥炴粴宸ヤ綔鏁伴噺 - orderDetl.setWorkQty(orderDetl.getWorkQty() - taskDetl.getAnfme()); - orderDetl.setUpdateTime(new Date()); - boolean orderDetlUpdate = orderDetlService.updateById(orderDetl); - if(!orderDetlUpdate){ - throw new CoolException("宸ヤ綔鏁伴噺鍥炴粴澶辫触"); + //鍥炴粴宸ヤ綔鏁伴噺 + orderDetl.setWorkQty(orderDetl.getWorkQty() - taskDetl.getAnfme()); + orderDetl.setUpdateTime(new Date()); + boolean orderDetlUpdate = orderDetlService.updateById(orderDetl); + if(!orderDetlUpdate){ + throw new CoolException("宸ヤ綔鏁伴噺鍥炴粴澶辫触"); + } + } //鍏ュ簱鍥炴粴缁勬墭閫氱煡妗� @@ -490,11 +526,28 @@ } } + //鏄庣粏鏁版嵁淇濆瓨鑷冲巻鍙叉。 + TaskDetlLog taskDetlLog = new TaskDetlLog(); + taskDetlLog.sync(taskDetl); + taskDetlLog.setId(null); + taskDetlLog.setTaskId(taskLog.getId()); + if (!taskDetlLogService.save(taskDetlLog)) { + throw new CoolException("鏄庣粏鏁版嵁杞巻鍙叉。妗堝け璐�"); + } + + //鍒犻櫎鏄庣粏 + boolean removeDetl = taskDetlService.removeById(taskDetl.getId()); + if(!removeDetl){ + throw new CoolException("鍥炴粴鏄庣粏澶辫触"); + } + List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId())); for (TaskDetlField detlField : detlFields) { //鏄庣粏鎵╁睍瀛楁鏁版嵁淇濆瓨鑷冲巻鍙叉。 TaskDetlFieldLog taskDetlFieldLog = new TaskDetlFieldLog(); taskDetlFieldLog.sync(detlField); + taskDetlFieldLog.setId(null); + taskDetlFieldLog.setDetlId(taskDetlLog.getId()); if (!taskDetlFieldLogService.save(taskDetlFieldLog)) { throw new CoolException("鏄庣粏鎵╁睍瀛楁杞巻鍙叉。妗堝け璐�"); } @@ -505,34 +558,75 @@ throw new CoolException("鍥炴粴鎵╁睍鏄庣粏澶辫触"); } } - - - //鏄庣粏鏁版嵁淇濆瓨鑷冲巻鍙叉。 - TaskDetlLog taskDetlLog = new TaskDetlLog(); - taskDetlLog.sync(taskDetl); - if (!taskDetlLogService.save(taskDetlLog)) { - throw new CoolException("鏄庣粏鏁版嵁杞巻鍙叉。妗堝け璐�"); - } - - //鍒犻櫎鏄庣粏 - boolean removeDetl = taskDetlService.removeById(taskDetl.getId()); - if(!removeDetl){ - throw new CoolException("鍥炴粴鏄庣粏澶辫触"); - } } } - //鏁版嵁淇濆瓨鑷冲巻鍙叉。 - TaskLog taskLog = new TaskLog(); - taskLog.sync(task); - if (!taskLogService.save(taskLog)) { - throw new CoolException("浠诲姟妗f杞巻鍙叉。妗堝け璐�"); + return true; + } + + @Override + public boolean pickTask(Long taskId) { + Task task = taskService.getById(taskId); + if(task == null){ + throw new CoolException("浠诲姟涓嶅瓨鍦�"); } - //鍒犻櫎浠诲姟 - boolean removeTask = taskService.removeById(taskId); - if(!removeTask){ - throw new CoolException("鍥炴粴浠诲姟澶辫触"); + if (task.getTaskType() != 103) { + throw new CoolException("浠诲姟绫诲瀷涓嶅彲鎷f枡"); + } + + if (task.getTaskSts() != 200) { + throw new CoolException("褰撳墠鐘舵�佷笉鍙嫞鏂�"); + } + + //鑾峰彇婧愬簱浣� + Loc originLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getOriginLoc())); + if(originLoc == null){ + throw new CoolException("婧愬簱浣嶄笉瀛樺湪"); + } + + //鑾峰彇婧愬簱浣嶉珮搴� + LocTypeBind locTypeBind = locTypeBindService.getOne(new LambdaQueryWrapper<LocTypeBind>().eq(LocTypeBind::getLocId, originLoc.getId())); + if(locTypeBind == null){ + throw new CoolException("搴撲綅绫诲瀷涓嶅瓨鍦�"); + } + LocType locType = locTypeService.getById(locTypeBind.getTypeId()); + if(locType == null){ + throw new CoolException("搴撲綅绫诲瀷涓嶅瓨鍦�"); + } + LocTypeHeightType locTypeHeightType = LocTypeHeightType.get(locType.getFlag()); + if(locTypeHeightType == null){ + throw new CoolException("楂樹綆搴撲綅绫诲瀷涓嶅瓨鍦�"); + } + + Long taskType = task.getTaskType() - 50; + + List<TaskDetl> taskDetls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getTaskId, taskId).gt(TaskDetl::getAnfme, 0)); + if (taskDetls.isEmpty()) { + throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�"); + } + TaskDetl taskDetl = taskDetls.get(0); + + //鐢熸垚搴撲綅 + Loc loc = this.generateLoc(taskType, taskDetl.getMatId(), taskDetl.getBatch(), taskDetl.getUniqueField(), locTypeHeightType.id); + if(loc == null) { + throw new CoolException("娌℃湁绌哄簱浣�"); + } + + task.setTaskSts(1L);//1.鐢熸垚鍏ュ簱浠诲姟 + task.setTaskType(taskType); + task.setTargetLoc(loc.getLocNo()); + task.setUpdateTime(new Date()); + if (!taskService.updateById(task)) { + throw new CoolException("鎷f枡澶辫触"); + } + + //搴撲綅O => S + loc.setLocStsId(LocStsType.S.val()); + loc.setUpdateTime(new Date()); + boolean locUpdate = locService.updateById(loc); + if(!locUpdate){ + throw new CoolException("搴撲綅鐘舵�佹洿鏂板け璐�"); } return true; -- Gitblit v1.9.1