From 7896e6e42007b3d23f97b0d260dd68a18f49ba3b Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期五, 18 七月 2025 15:25:18 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java | 197 +++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 172 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java index 2238830..5a20afd 100644 --- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java @@ -1,5 +1,6 @@ package com.zy.asrs.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; @@ -13,11 +14,12 @@ import com.zy.asrs.mapper.LocMastMapper; import com.zy.asrs.mapper.ManLocDetlMapper; import com.zy.asrs.service.*; +import com.zy.asrs.utils.MathUtils; import com.zy.asrs.utils.OrderInAndOutUtil; import com.zy.common.model.DetlDto; import com.zy.common.model.enums.WorkNoType; import com.zy.common.service.CommonService; -import com.zy.nc.entity.NccJcQilibcBarcodeflowWms; +import com.zy.common.utils.Synchro; import com.zy.nc.service.NccJcQilibcBarcodeflowWmsService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -25,7 +27,9 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; /** * 绉诲姩绔湇鍔℃牳蹇冪被 @@ -47,6 +51,8 @@ private BasDevpService basDevpService; @Autowired private WrkMastService wrkMastService; + @Autowired + private WorkService workService; @Autowired private WrkDetlService wrkDetlService; @Autowired @@ -73,6 +79,14 @@ private ManLocDetlService manLocDetlService; @Autowired private ManLocDetlMapper manLocDetlMapper; + @Autowired + private ReportToThirdService reportToThirdService; + + @Autowired + private InventoryCheckOrderService inventoryCheckOrderService; + + @Autowired + private InventoryCheckOrderDetlService inventoryCheckOrderDetlService; @Autowired private AdjDetlService adjDetlService; @@ -523,7 +537,7 @@ ArrayList<PickMatParam> maps = new ArrayList<>(); for (OrderDetl orderDetl : list) { //鍓╀綑鍙敤鏁伴噺 - double count = orderDetl.getAnfme() - orderDetl.getWorkQty(); + double count = MathUtils.subtract(orderDetl.getAnfme(), orderDetl.getWorkQty()); if (count <= 0) { continue; } @@ -546,9 +560,15 @@ if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { throw new CoolException(BaseRes.PARAM); } -// if (param.getCombMats().size() > 1) { + List<String> codes = param.getCombMats().stream().map(CombParam.CombMat::getTiaoma).collect(Collectors.toList()); + Set<String> sets = new HashSet<>(); + if (codes.stream().anyMatch(item -> !sets.add(item))) { + throw new CoolException("鏉$爜閲嶅鎵爜浜�"); + } + // if (param.getCombMats().size() > 1) { // throw new CoolException("璇锋彁鍙栦竴涓晢鍝侊紝鎴栬�呭埛鏂伴噸鏂扮粍鎵橈紒"); // } + // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁 if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) { @@ -572,17 +592,19 @@ Date now = new Date(); // 鏃犲崟缁勬墭 - if (Cools.isEmpty(param.getOrderNo())) { + if (Cools.isEmpty(param.getCombMats().get(0).getOrderNo())) { // 鐢熸垚鍏ュ簱閫氱煡妗� List<DetlDto> detlDtos = new ArrayList<>(); param.getCombMats().forEach(elem -> { DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(), elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme()); + detlDto.setWeight(elem.getWeight()); if (DetlDto.has(detlDtos, detlDto)) { DetlDto one = DetlDto.findDto(detlDtos, detlDto); assert one != null; one.setAnfme(one.getAnfme() + detlDto.getAnfme()); + one.setWeight(one.getWeight() + detlDto.getWeight()); } else { detlDtos.add(detlDto); } @@ -596,6 +618,7 @@ } WaitPakin waitPakin = new WaitPakin(); waitPakin.sync(mat); + waitPakin.setWeight(detlDto.getWeight()); waitPakin.setBatch(detlDto.getBatch()); waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮� waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵�� @@ -605,6 +628,13 @@ waitPakin.setAppeTime(now); waitPakin.setModiUser(userId); waitPakin.setModiTime(now); + waitPakin.setBoxType1(detlDto.getBoxType1()); + waitPakin.setBoxType2(detlDto.getBoxType2()); + waitPakin.setBoxType3(detlDto.getBoxType3()); + waitPakin.setStandby1(detlDto.getStandby1()); + waitPakin.setStandby2(detlDto.getStandby2()); + waitPakin.setStandby3(detlDto.getStandby3()); + waitPakin.setTkFlag(param.getTkFlag()); if (!waitPakinService.insert(waitPakin)) { throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�"); } @@ -612,18 +642,20 @@ // 鍏宠仈缁勬墭 } else { // Order order = orderService.selectByNo(param.getOrderNo()); - Order order = OrderInAndOutUtil.selectByNo(Boolean.TRUE, param.getOrderNo()); - if (Cools.isEmpty(order) || order.getSettle() > 2) { - throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�"); - } + // 鐢熸垚鍏ュ簱閫氱煡妗� List<DetlDto> detlDtos = new ArrayList<>(); param.getCombMats().forEach(elem -> { - + Order order = OrderInAndOutUtil.selectByNo(Boolean.TRUE, elem.getOrderNo()); + if (Cools.isEmpty(order)) { + throw new CoolException("鍗曟嵁缂栧彿涓嶅瓨鍦�"); + } + if (order.getSettle() > 2) { + throw new CoolException("鍗曟嵁缂栧彿宸蹭綔涓氬畬鎴�"); + } // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙 -// OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch()); OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.TRUE, order.getId(), elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(), elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3()); if (elem.getAnfme() > orderDetl.getEnableQty()) { @@ -637,13 +669,18 @@ elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme()); DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(), elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme()); + detlDto.setOrderNo(elem.getOrderNo()); + detlDto.setWeight(elem.getWeight()); if (DetlDto.has(detlDtos, detlDto)) { DetlDto one = DetlDto.findDto(detlDtos, detlDto); assert one != null; one.setAnfme(one.getAnfme() + detlDto.getAnfme()); + one.setWeight(one.getWeight() + detlDto.getWeight()); } else { detlDtos.add(detlDto); } + + OrderInAndOutUtil.updateOrder(Boolean.TRUE, order.getId(), 2L, userId); }); for (DetlDto detlDto : detlDtos) { Mat mat = matService.selectByMatnr(detlDto.getMatnr()); @@ -652,7 +689,7 @@ } WaitPakin waitPakin = new WaitPakin(); waitPakin.sync(mat); - waitPakin.setOrderNo(order.getOrderNo()); // 鍗曟嵁缂栧彿 + waitPakin.setOrderNo(detlDto.getOrderNo()); // 鍗曟嵁缂栧彿 waitPakin.setBatch(detlDto.getBatch()); // 搴忓垪鐮� waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮� waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵�� @@ -662,14 +699,68 @@ waitPakin.setAppeTime(now); waitPakin.setModiUser(userId); waitPakin.setModiTime(now); + waitPakin.setBoxType1(detlDto.getBoxType1()); + waitPakin.setBoxType2(detlDto.getBoxType2()); + waitPakin.setBoxType3(detlDto.getBoxType3()); + waitPakin.setStandby1(detlDto.getStandby1()); + waitPakin.setStandby2(detlDto.getStandby2()); + waitPakin.setStandby3(detlDto.getStandby3()); + waitPakin.setWeight(detlDto.getWeight()); if (!waitPakinService.insert(waitPakin)) { throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�"); } } // orderService.updateSettle(order.getId(), 2L, userId); - OrderInAndOutUtil.updateOrder(Boolean.TRUE, order.getId(), 2L, userId); + } + } + + @Override + public void combCancel(CombCancelParam param, Long userId) { + if (Cools.isEmpty(param.getBarcode())) { + throw new CoolException(BaseRes.PARAM); + } + + List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>(). + eq("zpallet", param.getBarcode())); + if (waitPakins.isEmpty()) { + throw new CoolException("鎵樼洏鏈粍鎵�"); + } + + for (WaitPakin waitPakin : waitPakins) { + if (!Cools.isEmpty(waitPakin.getOrderNo())) { + Order order = OrderInAndOutUtil.selectByNo(Boolean.TRUE, waitPakin.getOrderNo()); + if (Cools.isEmpty(order)) { + throw new CoolException("鍗曟嵁缂栧彿涓嶅瓨鍦�"); + } + + if (order.getSettle() > 2) { + throw new CoolException("鍗曟嵁缂栧彿宸蹭綔涓氬畬鎴�"); + } + + // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙 + OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(order.getId(), waitPakin.getMatnr(), waitPakin.getBatch(), waitPakin.getBrand(), waitPakin.getStandby1(), waitPakin.getStandby2(), waitPakin.getStandby3(), + waitPakin.getBoxType1(), waitPakin.getBoxType2(), waitPakin.getBoxType3()); + if (orderDetlPakout == null) { + continue; + } + + Double workQty = orderDetlPakout.getWorkQty(); + BigDecimal workQtyDecimal = new BigDecimal(workQty); + workQtyDecimal = workQtyDecimal.subtract(BigDecimal.valueOf(waitPakin.getAnfme())); + + double newWorkQty = workQtyDecimal.doubleValue(); + if (newWorkQty <= 0) { + newWorkQty = 0D; + } + orderDetlPakout.setWorkQty(newWorkQty); + orderDetlPakoutService.updateById(orderDetlPakout); + } + } + + waitPakinService.delete(new EntityWrapper<WaitPakin>() + .eq("zpallet", param.getBarcode())); } // 鍟嗗搧涓婃灦 @@ -731,22 +822,21 @@ @Override @Transactional public void adjust(MobileAdjustParam param, Long userId) { - BasDevp basDevp = basDevpService.selectById(param.getStaNo()); - if (null == basDevp || basDevp.getWrkNo() == null) { - throw new CoolException(param.getStaNo() + "鐩樼偣绔欐棤鏁�"); - } - if (!param.getWrkNo().equals(basDevp.getWrkNo())) { - throw new CoolException(param.getStaNo() + "鐩樼偣绔欐洿鏂帮紝璇烽噸鏂版绱�"); - } - WrkMast wrkMast = wrkMastService.selectById(param.getWrkNo()); +// BasDevp basDevp = basDevpService.selectById(param.getStaNo()); +// if (null == basDevp || basDevp.getWrkNo() == null) { +// throw new CoolException(param.getStaNo() + "鐩樼偣绔欐棤鏁�"); +// } +// if (!param.getWrkNo().equals(basDevp.getWrkNo())) { +// throw new CoolException(param.getStaNo() + "鐩樼偣绔欐洿鏂帮紝璇烽噸鏂版绱�"); +// } + WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode()); if (wrkMast.getWrkSts() < 10) { throw new CoolException("鐩樼偣鏃犳晥锛屼换鍔″凡鐩樼偣鍐嶅叆搴�"); } Date now = new Date(); List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); - List<WrkDetl> list = param.getWrkDetls(); - + List<WrkDetl> list = JSON.parseArray(JSON.toJSONString(param.getWrkDetls()), WrkDetl.class); // 淇敼鏁伴噺 Iterator<WrkDetl> iterator = wrkDetls.iterator(); while (iterator.hasNext()) { @@ -765,6 +855,7 @@ throw new CoolException(wrkMast.getWrkNo() + "鐩樼偣浠诲姟锛�" + wrkDetl.getMatnr() + "鍟嗗搧锛�" + wrkDetl.getBatch() + "鎵瑰彿淇敼鏁伴噺澶辫触"); } } + //濡傛灉宸茬粡鎷f枡鍥炲簱锛屽氨闇�瑕佸彇locNo瀛楁 iterator.remove(); iterator1.remove(); } @@ -798,14 +889,29 @@ } } + List<WrkDetl> paramWrkDetls = JSON.parseArray(JSON.toJSONString(param.getWrkDetls()), WrkDetl.class); + for (WrkDetl wrkDetl : paramWrkDetls) { + String locNo = Cools.isEmpty(wrkMast.getLocNo()) ? wrkMast.getSourceLocNo() : wrkMast.getLocNo(); + List<InventoryCheckOrderDetl> checkOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>() + .eq("loc_no", locNo) + .eq("area", wrkDetl.getWrkNo()) + ); + for (InventoryCheckOrderDetl checkOrderDetl : checkOrderDetls) { + if (wrkDetl.getMatnr().equals(checkOrderDetl.getMatnr()) && Cools.eq(wrkDetl.getBatch(), checkOrderDetl.getBatch())) { + checkOrderDetl.setCheckAnfme(wrkDetl.getAnfme()); + checkOrderDetl.setStatus("2"); + inventoryCheckOrderDetlService.updateById(checkOrderDetl); + } + } + } + // 淇敼鐩樼偣浠诲姟涓绘。鐘舵�� - wrkMast.setFullPlt(wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()).size() != 0 ? "Y" : "N"); + wrkMast.setFullPlt("Y"); wrkMast.setModiTime(now); wrkMast.setModiUser(userId); if (!wrkMastService.updateById(wrkMast)) { throw new CoolException("淇敼鐩樼偣浠诲姟涓绘。澶辫触"); } - } @Override @@ -1012,7 +1118,7 @@ } //鍙嚭搴撴暟閲� = 璁㈠崟鏁伴噺 - 浣滀笟涓暟閲� - Double outQty = orderDetl.getAnfme() - orderDetl.getWorkQty(); + Double outQty = MathUtils.subtract(orderDetl.getAnfme(), orderDetl.getWorkQty()); if (outQty <= 0) { break; } @@ -1117,4 +1223,45 @@ throw new CoolException(locDetl.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��"); } } + + @Override + public void checkOutSubmit(Integer orderId, Long userId) { + InventoryCheckOrder inventoryCheckOrder = inventoryCheckOrderService.selectOne(new EntityWrapper<InventoryCheckOrder>() + .eq("id", orderId)); + if (inventoryCheckOrder == null) { + throw new CoolException("鐩樼偣鍗曚笉瀛樺湪"); + } + + if (!inventoryCheckOrder.getStatus().equals("1")) { + throw new CoolException("鐩樼偣鍗曠姸鎬佸凡涓婃姤"); + } + + List<InventoryCheckOrderDetl> checkOrderDetlList = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>() + .eq("order_no", inventoryCheckOrder.getOrderNo()) + ); + if (checkOrderDetlList.isEmpty()) { + throw new CoolException("鐩樼偣鍗曟棤鐗╂枡鏄庣粏"); + } + InventoryCheckOrderDetl orderDetl = checkOrderDetlList.get(0); + + List<InventoryCheckOrderDetl> checkOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>() + .eq("matnr", orderDetl.getMatnr()) + .eq("batch", orderDetl.getBatch()) + ); + + boolean complete = true; + for (InventoryCheckOrderDetl checkOrderDetl : checkOrderDetls) { + if (!checkOrderDetl.getStatus().equals("2")) { + complete = false; + } + } + if (complete) { + boolean result = reportToThirdService.reportCheckOrder(orderDetl.getMatnr(), orderDetl.getBatch()); + if (!result) { + throw new CoolException("鐩樼偣鍗曚笂鎶ュけ璐�"); + } + }else { + throw new CoolException("鐩樼偣鏈畬鎴愭棤娉曚笂鎶�"); + } + } } -- Gitblit v1.9.1