From 17080b28dc3fb0df12a5a4da76e10dd9203e5725 Mon Sep 17 00:00:00 2001 From: pang.jiabao <pang_jiabao@163.com> Date: 星期三, 08 十月 2025 11:07:48 +0800 Subject: [PATCH] 订单功能完善 --- src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java | 285 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 258 insertions(+), 27 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 2e8c7f3..71e8bfb 100644 --- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java @@ -12,9 +12,10 @@ import com.zy.asrs.entity.param.OffSaleParam; import com.zy.asrs.entity.param.OpenOrderPakinParam; import com.zy.asrs.mapper.ManLocDetlMapper; +import com.zy.asrs.mapper.OrderDetlMapper; import com.zy.asrs.service.*; import com.zy.asrs.utils.MatUtils; -import com.zy.common.CodeRes; +import com.zy.asrs.utils.SaasUtils; import com.zy.common.constant.MesConstant; import com.zy.common.entity.Parameter; import com.zy.common.model.DetlDto; @@ -26,10 +27,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; -import java.util.List; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.*; /** * 绉诲姩绔湇鍔℃牳蹇冪被 @@ -43,6 +43,10 @@ private MatService matService; @Autowired private WaitPakinService waitPakinService; + + @Resource + private WaitPakinLogService waitPakinLogService; + @Autowired private OrderService orderService; @Autowired @@ -78,6 +82,183 @@ @Autowired private ManLocDetlMapper manLocDetlMapper; + @Resource + private OrderDetlMapper orderDetlMapper; + + @Override + @Transactional + public R WarehouseOut(CombParam combParam, Long userId) { + + //鏌ヨ搴撳瓨鏁版嵁 + for (CombParam.CombMat combMat : combParam.getCombMats()) { + ManLocDetl locDetl = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>() + .eq("loc_no", combParam.getLocno()) + .eq("zpallet", combMat.getZpallet()) + .eq("matnr", combMat.getMatnr()) +// .eq(LocDetl::getBatch, combMat.getBatch()) + ); + if (Cools.isEmpty(locDetl)) { + return R.error("鏈煡璇㈠埌搴撳瓨鏁版嵁"); + } + if (combMat.getAnfme() > locDetl.getAnfme()) { + return R.error("涓嬫灦鏁伴噺閿欒锛岃秴鍑哄簱瀛樻暟閲�"); + } + if (!Cools.isEmpty(combParam.getOrderNo())) { + Order order = orderService.selectByNo(combParam.getOrderNo()); + if (Cools.isEmpty(order)) { + continue; + } + if (order.getSettle() == 1) { + orderService.updateSettle(order.getId(), 2L, userId); + } + OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), combMat.getMatnr(), combMat.getBatch()); + if (Cools.isEmpty(orderDetl)) { + continue; + } + if (orderDetl.getAnfme() < orderDetl.getWorkQty() + combMat.getAnfme()) { + combMat.setAnfme(orderDetl.getAnfme() - orderDetl.getWorkQty()); + } + // 淇敼璁㈠崟鏄庣粏浣滀笟鏁伴噺 + if (orderDetlMapper.increaseWorkQtyByOrderNo(combParam.getOrderNo(), combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme()) <= 0) { + throw new CoolException("淇敼鍗曟嵁鏄庣粏宸ヤ綔鏁伴噺澶辫触"); + } + // 淇敼璁㈠崟鏄庣粏瀹屾垚鏁伴噺 + if (!orderDetlService.increase(order.getId(), combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme())) { + throw new CoolException("淇敼鍗曟嵁鏄庣粏瀹屾垚鏁伴噺澶辫触"); + } + // 淇敼璁㈠崟鐘舵�� 浣滀笟涓� ===>> 宸插畬鎴� + orderService.checkComplete(combParam.getOrderNo()); + } + try { + double i = 0.0; + double j = locDetl.getAnfme(); + //澶勭悊搴撳瓨淇℃伅 + if (combMat.getAnfme().equals(locDetl.getAnfme())) { + //搴撳瓨鐩哥瓑鍒犻櫎鏁版嵁 + manLocDetlMapper.deleteLocNo0(combParam.getLocno(), combMat.getMatnr()); + int count = manLocDetlMapper.selectCount(new EntityWrapper<ManLocDetl>().eq("loc_no", combParam.getLocno())); + if (count == 0) { + Node node = nodeService.selectByUuid(combParam.getLocno()); + node.setUpdateTime(new Date()); + node.setUpdateBy(userId); + node.setBarcode(""); + nodeService.updateById(node); + } + } else { + BigDecimal subtract = BigDecimal.valueOf(locDetl.getAnfme()).subtract(BigDecimal.valueOf(combMat.getAnfme())); + i = subtract.byteValue(); + locDetl.setAnfme(subtract.doubleValue()); + // 鏇存柊搴撳瓨 + manLocDetlMapper.updateAnfme(subtract.doubleValue(), combParam.getLocno(), combMat.getMatnr(), combMat.getBatch()); + } + // 璁板綍鏃ュ織 + SaasUtils.insertLog(1, combParam.getLocno(), combMat.getMatnr(), combMat.getAnfme(), userId,combMat.getBatch()); + } catch (Exception e) { + throw new CoolException("鏇存柊搴撳瓨鏁版嵁鍑洪敊" + e.getMessage()); + } + } + return R.ok(); + } + + @Override + @Transactional + public R WarehouseIn(String locNo, String barcode, Long userId) { + + //鏌ヨ缁勬墭鏁版嵁 + List<WaitPakin> list = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode)); + if (Cools.isEmpty(list)) { + return R.error("鏈壘鍒扮粍鎵樹俊鎭�"); + } + Date now = new Date(); + + //鎻掑叆搴撳瓨鏁版嵁 + for (WaitPakin waitPakin : list) { + + Mat mat = matService.selectOne(new EntityWrapper<Mat>() + .eq("matnr", waitPakin.getMatnr())); + + ManLocDetl locDetl1 = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", waitPakin.getMatnr()). + eq("batch", waitPakin.getBatch())); + + Node node = nodeService.selectByUuid(locNo); + if (Cools.isEmpty(node)) { + throw new CoolException(locNo + ":搴撲綅涓嶅瓨鍦�"); + } + if (!Cools.isEmpty(locDetl1)) { + locDetl1.setAnfme(waitPakin.getAnfme() + waitPakin.getAnfme()); + locDetl1.setUpdateBy(userId); + locDetl1.setModiTime(now); + manLocDetlService.update(locDetl1, new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", waitPakin.getMatnr()). + eq("batch", waitPakin.getBatch())); + } else { + ManLocDetl manLocDetl = new ManLocDetl(); + manLocDetl.setLocNo(locNo); +// manLocDetl.setBarcode(barcode); + manLocDetl.setZpallet(barcode); + manLocDetl.setNodeId(node.getId()); + manLocDetl.setMaktx(mat.getMaktx()); + manLocDetl.setMatnr(mat.getMatnr()); + manLocDetl.setSpecs(mat.getSpecs()); + manLocDetl.setBatch(Cools.isEmpty(waitPakin.getBatch()) ? "" : waitPakin.getBatch()); + manLocDetl.setAnfme(waitPakin.getAnfme()); + manLocDetl.setCreateBy(userId); + manLocDetl.setCreateTime(now); + manLocDetl.setUpdateBy(userId); + manLocDetl.setModiTime(now); + if (!manLocDetlService.insert(manLocDetl)) { + throw new CoolException("鍟嗗搧涓婃灦澶辫触锛�"); + } + + // 鏇存柊搴撲綅鏉$爜 + node.setBarcode(barcode); + node.setUpdateBy(userId); + node.setUpdateTime(now); + nodeService.updateById(node); + } + + // 璁板綍鏃ュ織 + SaasUtils.insertLog(0, locNo, waitPakin.getMatnr(), waitPakin.getAnfme(), userId,waitPakin.getBatch()); + + //鏄惁灞炰簬璁㈠崟鏁版嵁 + //鏄惁灞炰簬璁㈠崟鏁版嵁 + if (!Cools.isEmpty(waitPakin.getOrderNo())){ + Order order = orderService.selectByNo(waitPakin.getOrderNo()); + if (Cools.isEmpty(order)){ + throw new CoolException("骞冲簱涓婃灦鏌ヨ璁㈠崟澶辫触"); + } + OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), waitPakin.getMatnr(), waitPakin.getBatch()); + if (Cools.isEmpty(orderDetl)){ + throw new CoolException("骞冲簱涓婃灦鏌ヨ璁㈠崟鏄庣粏澶辫触"); + } + // 淇敼璁㈠崟鏄庣粏瀹屾垚鏁伴噺 + if (!orderDetlService.increase(order.getId(),waitPakin.getMatnr(), waitPakin.getBatch(), waitPakin.getAnfme())) { + throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触"); + } + // 淇敼璁㈠崟鐘舵�� 浣滀笟涓� ===>> 宸插畬鎴� + orderService.checkComplete(waitPakin.getOrderNo()); + + } + + // 鏇存柊鍏ュ簱宸ヤ綔妗� + waitPakin.setLocNo(locNo); + waitPakin.setIoStatus("Y"); + waitPakin.setModiUser(userId); + waitPakin.setModiTime(now); + waitPakinService.update(waitPakin,new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("matnr",waitPakin.getMatnr()) + .eq("batch",waitPakin.getBatch())); + + // 淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。 + if (!waitPakinLogService.save(barcode)) { + throw new CoolException("淇濆瓨缁勬墭鏁版嵁澶辫触"); + } + // 鍒犻櫎鍏ュ簱閫氱煡妗� + if (!waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", barcode))) { + throw new CoolException("鍒犻櫎缁勬墭鏁版嵁澶辫触"); + } + } + + return R.ok("涓婃灦鎴愬姛"); + } @Override @Transactional @@ -85,22 +266,33 @@ if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { throw new CoolException(BaseRes.PARAM); } + if(param.getCombMats().size()>1){ + throw new CoolException("璇锋彁鍙栦竴涓晢鍝侊紝鎴栬�呭埛鏂伴噸鏂扮粍鎵橈紒"); + } // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁 if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) { throw new CoolException(param.getBarcode() + "鏁版嵁姝e湪杩涜鍏ュ簱"); } + if(param.getBarcode().length()!=8){ + throw new CoolException("鏉$爜闀垮害涓嶆槸8浣�===>>" + param.getBarcode()); + } + if (param.getCombMats().size()>1){ + throw new CoolException("涓嶅厑璁告贩鏂�===>>" + param.getBarcode()); + } + 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) { - throw new CoolException("宸ヤ綔妗�/搴撳瓨鏉$爜鏁版嵁宸插瓨鍦�===>>" + param.getBarcode()); + int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getBarcode())); + if (countLoc > 0 || countWrk > 0 || countwait > 0) { + throw new CoolException("缁勬墭妗�/宸ヤ綔妗�/搴撳瓨鏉$爜鏁版嵁宸插瓨鍦�===>>" + param.getBarcode()); } Date now = new Date(); // 鏃犲崟缁勬墭 - if (Cools.isEmpty(param.getOrderNo())) { + if (Cools.isEmpty(param.getCombMats().get(0).getOrderNo())) { // 鐢熸垚鍏ュ簱閫氱煡妗� List<DetlDto> detlDtos = new ArrayList<>(); @@ -138,22 +330,22 @@ } // 鍏宠仈缁勬墭 } else { - Order order = orderService.selectByNo(param.getOrderNo()); - if (order.getSettle() > 2) { - throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�"); - } + // 鐢熸垚鍏ュ簱閫氱煡妗� List<DetlDto> detlDtos = new ArrayList<>(); param.getCombMats().forEach(elem -> { - + Order order = orderService.selectByNo(elem.getOrderNo()); + if (order.getSettle() > 2) { + throw new CoolException("鍗曟嵁缂栧彿宸插畬鎴愶細" + elem.getOrderNo()); + } // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙 OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch()); if (elem.getAnfme() > orderDetl.getEnableQty()) { throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�"); } - // 淇敼璁㈠崟浣滀笟鏁伴噺 + // 淇敼璁㈠崟鏄庣粏鏁伴噺 if (!orderDetlService.increaseWorkQty(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) { - throw new CoolException("淇敼鍗曟嵁浣滀笟鏁伴噺澶辫触"); + throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触"); } DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme()); @@ -162,6 +354,7 @@ assert one != null; one.setAnfme(one.getAnfme() + detlDto.getAnfme()); } else { + detlDto.setOrderNo(order.getOrderNo()); detlDtos.add(detlDto); } }); @@ -170,6 +363,9 @@ if (Cools.isEmpty(mat)) { throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�"); } + + Order order = orderService.selectByNo(detlDto.getOrderNo()); + WaitPakin waitPakin = new WaitPakin(); waitPakin.sync(mat); waitPakin.setOrderNo(order.getOrderNo()); // 鍗曟嵁缂栧彿 @@ -185,20 +381,27 @@ if (!waitPakinService.insert(waitPakin)) { throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�"); } + orderService.updateSettle(order.getId(), 2L, userId); } - orderService.updateSettle(order.getId(), 2L, userId); } } + // 鍟嗗搧涓婃灦 @Override - public void onSale(CombParam param) { + public void onSale(CombParam param, Long userId) { + Date now = new Date(); // 鑾峰彇搴撲綅鍙� String locno = param.getLocno(); Node node = nodeService.selectByUuid(locno); if (Cools.isEmpty(node)) { throw new CoolException(param.getLocno() + ":搴撲綅涓嶅瓨鍦�"); + } + + String barcode = param.getBarcode(); + if (Cools.isEmpty(barcode)) { + throw new CoolException("鏉$爜涓嶈兘涓虹┖锛�"); } // 鑾峰彇鍟嗗搧鍒楄〃 @@ -210,32 +413,60 @@ if (Cools.isEmpty(combMat.getAnfme()) || combMat.getAnfme()==0){ throw new CoolException(combMat.getMatnr() + ":鍟嗗搧鏁伴噺鏈夎锛�"); } - if (Cools.isEmpty(combMat.getBatch())){ - throw new CoolException(combMat.getMatnr() + ":鍟嗗搧鎵瑰彿鏈夎锛�"); - } + ManLocDetl manLocDetl = new ManLocDetl(); manLocDetl.setLocNo(locno); +// manLocDetl.setBarcode(barcode); + manLocDetl.setZpallet(barcode); manLocDetl.setNodeId(node.getId()); manLocDetl.setMaktx(mat.getMaktx()); manLocDetl.setMatnr(mat.getMatnr()); - manLocDetl.setBatch(combMat.getBatch()); + manLocDetl.setSpecs(mat.getSpecs()); + manLocDetl.setBatch(Cools.isEmpty(combMat.getBatch()) ? "" : combMat.getBatch()); manLocDetl.setAnfme(combMat.getAnfme()); + manLocDetl.setCreateBy(userId); + manLocDetl.setCreateTime(now); + manLocDetl.setUpdateBy(userId); manLocDetl.setModiTime(now); if (!manLocDetlService.insert(manLocDetl)) { throw new CoolException("鍟嗗搧涓婃灦澶辫触锛�"); } + + // 鏇存柊搴撲綅鏉$爜 + node.setBarcode(barcode); + node.setUpdateBy(userId); + node.setUpdateTime(now); + nodeService.updateById(node); + SaasUtils.insertLog(0,manLocDetl.getLocNo(), manLocDetl.getMatnr(),combMat.getAnfme(),userId,manLocDetl.getBatch()); + } } + // 鍟嗗搧涓嬫灦 @Override - public void offSale(OffSaleParam offSaleParam) { - List<ManLocDetl> manLocDetls = manLocDetlMapper.selectLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr()); - if (Cools.isEmpty(manLocDetls)){ - throw new CoolException("鍟嗗搧涓嬫灦澶辫触锛�"); + public void offSale(OffSaleParam offSaleParam, Long userId) { + ManLocDetl manLocDetl = manLocDetlMapper.selectLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr()); + if (Cools.isEmpty(manLocDetl)){ + throw new CoolException("鏃犳鍟嗗搧锛�"); } - int i = manLocDetlMapper.deleteLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr()); - System.out.println(i); + double anfme = manLocDetl.getAnfme() - offSaleParam.getAnfme(); + if (anfme < 0) { + throw new CoolException("鍟嗗搧搴撳瓨涓嶈冻锛�"); + } else if (anfme == 0){ + SaasUtils.insertLog(1,manLocDetl.getLocNo(), manLocDetl.getMatnr(),offSaleParam.getAnfme(),userId,manLocDetl.getBatch()); + manLocDetlMapper.deleteLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr()); + // 娓呯┖搴撲綅鏉$爜 + Node node = nodeService.selectByUuid(offSaleParam.getLocNo()); + node.setUpdateTime(new Date()); + node.setUpdateBy(userId); + node.setBarcode(""); + } + manLocDetlMapper.updateAnfme0(anfme,manLocDetl.getNodeId()); } + + // 鏌ユ壘鍟嗗搧 + + @Override @Transactional public void adjust(MobileAdjustParam param, Long userId) { -- Gitblit v1.9.1