From 71d838e032d13a46a07917f5606862496220ea74 Mon Sep 17 00:00:00 2001 From: zyx <zyx123456> Date: 星期一, 08 一月 2024 08:35:35 +0800 Subject: [PATCH] # 入库拣货功能添加 --- src/main/java/com/zy/asrs/controller/OutController.java | 152 +++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 131 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java index 6d86cff..02b14bc 100644 --- a/src/main/java/com/zy/asrs/controller/OutController.java +++ b/src/main/java/com/zy/asrs/controller/OutController.java @@ -11,12 +11,15 @@ import com.zy.common.model.TaskDto; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; import java.util.stream.Collectors; /** @@ -33,7 +36,7 @@ @Autowired private LocDetlService locDetlService; @Autowired - private LocMastService locMastService; + private PakoutService pakoutService; @Autowired private StaDescService staDescService; @Autowired @@ -44,6 +47,10 @@ private ManPakOutService manPakOutService; @Autowired private ManLocDetlService manLocDetlService; + @Autowired + private PlaService plaService; + @Autowired + private PlaQtyService plaQtyService; @PostMapping("/out/pakout/orderDetlIds/auth") @@ -61,45 +68,68 @@ } List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids); List<LocDto> locDtos = new ArrayList<>(); + for (OrderDetl o: orderDetls) { + if (o.getAnfme().equals(o.getWorkQty())){ + return R.error("鍑哄簱鐨勬槑缁嗕腑鏈夊凡鍑哄簱鐗╂枡"); + } + } + List<PlaQty> plaQties = new ArrayList<>(); + + for (OrderDetl orderDetl : orderDetls) { + plaService.queryStock(orderDetl,plaQties); + } + + return R.ok(plaQties); + +/* Set<String> exist = new HashSet<>(); for (OrderDetl orderDetl : orderDetls) { - double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D); + BigDecimal a1 = new BigDecimal(orderDetl.getAnfme()).setScale(2,BigDecimal.ROUND_HALF_UP); + BigDecimal b1 = new BigDecimal(orderDetl.getQty()).setScale(2,BigDecimal.ROUND_HALF_UP); + + double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D); if (issued <= 0.0D) { continue; } - List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist); - for (LocDetl locDetl : locDetls) { + List<ManLocDetl> manLocDetls = manLocDetlService.queryStock(orderDetl.getMatnr(),orderDetl.getBatch()); + for (ManLocDetl locDetl : manLocDetls) { if (issued > 0) { - LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), - issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued); - List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103); + boolean sign = false; + if (issued > locDetl.getAnfme() || locDetl.getAnfme().equals(issued)){ + sign=true; + } + LocDto locDto = new LocDto(locDetl.getHostId(),locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), + sign ? locDetl.getAnfme() : issued,"骞冲簱"); + List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), sign? 101 : 103); // LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), // locDetl.getAnfme(), issued < locDetl.getAnfme()? issued : locDetl.getAnfme()); // //閫熻吘鍙湁鍏ㄦ澘锛屾墍浠ュ彧鑳�101鍏ㄦ澘鍑哄簱 // List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), 101); locDto.setStaNos(staNos); - locDto.setManu(locDetl.getManu()); locDtos.add(locDto); exist.add(locDetl.getLocNo()); + BigDecimal iss=new BigDecimal(Double.toString(issued)).setScale(2,BigDecimal.ROUND_HALF_UP); + BigDecimal an=new BigDecimal(Double.toString(locDetl.getAnfme())).setScale(2,BigDecimal.ROUND_HALF_UP); // 鍓╀綑寰呭嚭鏁伴噺閫掑噺 - issued = issued - locDetl.getAnfme(); + issued=iss.subtract(an).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); } else { break; } } if (issued > 0) { - LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued); + LocDto locDto = new LocDto(null,null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued,"骞冲簱"); // LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), 0.0,issued); locDto.setLack(Boolean.TRUE); locDtos.add(locDto); } } - return R.ok().add(locDtos); + return R.ok().add(locDtos); */ } @PostMapping("/out/pakout/auth") @ManagerAuth(memo = "璁㈠崟鍑哄簱") public synchronized R pakout(@RequestBody List<LocDto> locDtos) throws InterruptedException { + int[][] is=new int[locDtos.size()][2]; for (int i=0;i<locDtos.size();i++){ LocDto locDto=locDtos.get(locDtos.size()-1-i); @@ -116,7 +146,7 @@ } } if (Cools.isEmpty(locDtos)) { - return R.error("绔嬪簱鍙傛暟涓虹┖锛岃鐢熸垚鎷h揣鍗曪紝骞冲簱鎷h揣鍑哄簱"); + return R.ok("绔嬪簱鍙傛暟涓虹┖锛岃鐢熸垚鎷h揣鍗曪紝骞冲簱鎷h揣鍑哄簱"); } boolean lack = true; for (LocDto locDto : locDtos) { @@ -154,25 +184,76 @@ @PostMapping("/out/pakout2/auth") @ManagerAuth(memo = "鐢熸垚鎷h揣鍗�") - public synchronized R pakout2(@RequestBody List<LocDto> locDtos) throws InterruptedException { - int[][] is = new int[locDtos.size()][2]; + @Transactional + public synchronized R pakout2(@RequestBody List<PlaQty> plaQties) throws InterruptedException { + + for (PlaQty plaQty : plaQties){ + if(Cools.isEmpty(plaQty.getLocNo())){ + continue; + } + //鎻掑叆涓�鏉la鐨勬嫞璐т俊鎭� + plaQtyService.insert(plaQty); + addPakOUT(plaQty); + + Pla pla = plaService.selectByBatchAndPackageNo(plaQty.getBatch(), plaQty.getPackageNo()); + //pla鏄庣粏涓慨鏀归攣瀹氬嚭搴撶殑閲嶉噺 + pla.setQtyAnfme(pla.getQtyAnfme() + plaQty.getQtyAnfme()); + plaService.updateById(pla); + + OrderDetl orderDetl = orderDetlService.selectById(plaQty.getOrderDetlId()); + orderDetl.setWorkQty(orderDetl.getWorkQty() + plaQty.getQtyAnfme()); + orderDetlService.updateById(orderDetl); + orderService.updateSettle(plaQty.getOrderId(),2L,null); + } + + return R.ok(); + + /* int[][] is = new int[locDtos.size()][2]; + List<String> matnrs=new ArrayList<>(); for (int i = 0; i < locDtos.size(); i++) { LocDto locDto = locDtos.get(locDtos.size() - 1 - i); - if (locDto.getLocNo() == null || locDto.getManu().equals("绔嬪簱")) { + if (locDto.getLocNo() == null) { is[i][0] = 1; } else { is[i][0] = 0; } is[i][1] = locDtos.size() - 1 - i; } + List<LocDto> locDtos1=new ArrayList<>(); for (int[] i : is) { - if (i[0] == 1) { + if (i[0] == 2) { + if (!matnrs.contains(locDtos.get(i[1]).getMatnr())){ + matnrs.add(locDtos.get(i[1]).getMatnr()); + } + locDtos1.add(locDtos.get(i[1])); locDtos.remove(i[1]); + }else if (i[0]==1){ + LocDto locDto = locDtos.get(i[1]); + locDto.setLocNo("搴撳瓨涓嶈冻"); + locDtos.remove(i[1]); + locDtos.add(locDto); } + } + for (String matnr:matnrs){ + Double a = 0.0; + int b = 0; + for (int i = 0; i < locDtos1.size(); i++){ + if (locDtos1.get(i).getMatnr().equals(matnr)){ + if (a.equals(0.0)){ + b=i; + } + a=a+locDtos1.get(i).getAnfme(); + } + } + LocDto locDto = locDtos1.get(b); + locDto.setLocNo("绔嬪簱"); + locDto.setAnfme(a); + locDtos.add(locDto); } if (Cools.isEmpty(locDtos)) { return R.error("骞冲簱鍙傛暟涓虹┖锛屾病鏈夌敓鎴愭嫞璐у崟"); } + String uuid = String.valueOf(System.currentTimeMillis()); boolean lack = true; for (LocDto locDto : locDtos) { if (!locDto.isLack()) { @@ -185,10 +266,10 @@ } for (LocDto locDto:locDtos){ ManLocDetl manLocDetl = manLocDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch()); - if (!(locDto.getAnfme()>manLocDetl.getAnfme())) { + if (!Cools.isEmpty(manLocDetl) && !(locDto.getAnfme()>manLocDetl.getAnfme())) { manLocDetl.setStatus(0); - if (manLocDetlService.update(manLocDetl, new EntityWrapper<ManLocDetl>().eq("uuid", manLocDetl.getUuid()))) { - if (addPakOUT(locDto).equals(R.ok())) { + if (manLocDetlService.update(manLocDetl, new EntityWrapper<ManLocDetl>().eq("loc_no", manLocDetl.getLocNo()).eq("matnr",manLocDetl.getMatnr()))) { + if (addPakOUT(locDto,uuid).equals(R.ok())) { Order order = orderService.selectByNo(locDto.getOrderNo()); if (Cools.isEmpty(order)){ return R.error("鏌ヨ璁㈠崟澶辫触锛岃鑱旂郴绠$悊鍛�"+locDto.getOrderNo()); @@ -210,13 +291,40 @@ return R.error("娣诲姞鎷h揣鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�"+locDto.getOrderNo()+locDto.getMatnr()); } } + }else if (locDto.getLocNo().equals("绔嬪簱")){ + addPakOUT(locDto,uuid).equals(R.ok()); } } + for (LocDto locDto:locDtos){ + if (locDto.getLocNo().equals("搴撳瓨涓嶈冻")){ + addPakOUT(locDto,uuid).equals(R.ok()); + } + } + return R.ok(); */ + } + + private R addPakOUT(PlaQty plaQty){ + ManPakOut manPakOut=new ManPakOut(); + manPakOut.setWrkNo(plaQty.getOrderNo()+"-"+System.currentTimeMillis()); + manPakOut.setWrkSts((long)1); + manPakOut.setAnfme(plaQty.getQtyAnfme()); + manPakOut.setLocNo(plaQty.getLocNo()); + manPakOut.setBatch(plaQty.getBatch()); + manPakOut.setBarcode(plaQty.getPackageNo()); + manPakOut.setUuid(String.valueOf(System.currentTimeMillis())); + manPakOut.setCreateTime(new Date()); + manPakOut.setUpdateTime(new Date()); + manPakOut.setCount(0.0); + manPakOut.setDocNum(plaQty.getOrderNo()); + manPakOut.setNodeId(plaQty.getOrderDetlId()); + manPakOut.setStatus(0); + manPakOutService.insert(manPakOut); return R.ok(); } - private R addPakOUT(LocDto locDto){ + private R addPakOUT(LocDto locDto,String uuid){ ManPakOut manPakOut=new ManPakOut(); + manPakOut.setDocId(locDto.getHostId()); manPakOut.setWrkNo(locDto.getOrderNo()+"-"+System.currentTimeMillis()); manPakOut.setWrkSts((long)1); manPakOut.setAnfme(locDto.getAnfme()); @@ -224,10 +332,12 @@ manPakOut.setMatnr(locDto.getMatnr()); manPakOut.setMaktx(locDto.getMaktx()); manPakOut.setDocNum(locDto.getOrderNo()); + manPakOut.setCount(0.0); manPakOut.setStatus(0); manPakOut.setCreateTime(new Date()); manPakOut.setBatch(locDto.getBatch()); manPakOut.setUpdateTime(new Date()); + manPakOut.setUuid(uuid); if (Cools.isEmpty(manPakOutService.selectOne(new EntityWrapper<ManPakOut>().eq("doc_num",locDto.getOrderNo())))){ manPakOut.setName(locDto.getMaktx()); } -- Gitblit v1.9.1