From 8359572be2164aec32219fafd5e72f4035067dff Mon Sep 17 00:00:00 2001 From: zyx <zyx123456> Date: 星期二, 01 八月 2023 08:52:26 +0800 Subject: [PATCH] agv 订单出库功能 --- src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java | 216 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 187 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java index 9079d7c..8560782 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java @@ -1,12 +1,18 @@ package com.zy.asrs.service.impl; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; +import com.zy.common.model.LocDto; +import com.zy.common.model.OrderDto; import com.zy.common.model.StartupDto; +import com.zy.common.model.TaskDto; +import com.zy.common.model.enums.WorkNoType; import com.zy.common.service.AgvCommonService; +import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -34,6 +40,8 @@ @Autowired private AgvLocMastService agvLockMastService; @Autowired + private AgvLocDetlService agvLocDetlService; + @Autowired private AgvCommonService agvCommonService; @Autowired private AgvWrkMastService agvWrkMastService; @@ -41,8 +49,16 @@ private AgvWrkDetlService agvWrkDetlService; @Autowired private MatService matService; + @Autowired + private OrderService orderService; + @Autowired + private OrderDetlService orderDetlService; - @Override + + /* + 鍏ュ簱 + */ + @Transactional public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId) { Date now = new Date(); @@ -61,55 +77,107 @@ //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅 AgvLocMast agvLocMast = agvCommonService.getLocNo(agvWaitPakinList, agvBasDevp.getFloor()); //鐢熸垚宸ヤ綔妗� - AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId); + //AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId); + AgvWrkMast wrkMast = createWrkMast(1,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),agvBasDevp.getBarcode(),now,userId); //鐢熸垚宸ヤ綔妗f槑缁� - createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId); + //createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId); + agvWaitPakinList.forEach(wp -> { + createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getZpallet(),now,userId); + }); //鏇存柊婧愮珯鐐逛俊鎭� - updateAgvBasDevp(agvBasDevp); + updateAgvBasDevp(agvBasDevp,"R"); //鏇存柊鐩爣搴撲綅鐘舵�� - updateAgvLocMast(agvLocMast); + updateAgvLocMast(agvLocMast,"S"); }); + //TODO return null; + } + + /* + 璁㈠崟鍑哄簱 + */ + @Transactional + public void stockOutWrkMast(List<TaskDto> agvTaskDtos, Long userId) { + Date now = new Date(); + + agvTaskDtos.forEach(taskDto -> { + + AgvLocMast agvLocMast = agvLockMastService.selectById(taskDto.getLocNo()); + + //宸ヤ綔妗f墍闇�鍙傛暟 + double anfme = taskDto.getLocDtos().get(0).getAnfme(); + long wrkSts = 21L; + String sourceLocNo = taskDto.getLocNo(); + String targetLocNo = taskDto.getAgvStaNo(); + String barcode = agvLocMast.getBarcode(); + //鏄庣粏妗f墍闇�鍙傛暟 + String mantr = taskDto.getLocDtos().get(0).getMatnr(); + String orderNo = taskDto.getLocDtos().get(0).getOrderNo(); + String batch = taskDto.getLocDtos().get(0).getBatch(); + + //鍒ゆ柇鏄惁鍏ㄦ澘鍑哄簱 + int ioType = isPakOut(sourceLocNo,anfme) ? 101 : 103; + //鐢熸垚宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,barcode,now,userId); + //鐢熸垚宸ヤ綔妗f槑缁� + createWrkDetlReWrite(mantr,wrkMast.getWrkNo(),orderNo,batch,anfme,barcode,now,userId); + //淇敼璁㈠崟淇℃伅 + modifyOrderDetl(taskDto.getLocDtos().get(0), userId); + //鏇存柊婧愮珯鐐逛俊鎭� + updateAgvLocMast(agvLockMastService.selectById(sourceLocNo),"R"); + //鏇存柊鐩爣绔欑偣鐘舵�� + updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo),"S"); + + }); } /* 鏇存柊鐩爣搴撲綅淇℃伅 */ - private void updateAgvLocMast(AgvLocMast locMast){ - locMast.setLocSts("S"); + private void updateAgvLocMast(AgvLocMast locMast, String locSts){ + locMast.setLocSts(locSts); agvLockMastService.updateById(locMast); } /* 鏇存柊婧愮珯鐐逛俊鎭� */ - private void updateAgvBasDevp(AgvBasDevp agvBasDevp){ - agvBasDevp.setLocSts("R"); + private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts){ + agvBasDevp.setLocSts(locSts); agvBasDevpService.updateById(agvBasDevp); } /* 鐢熸垚宸ヤ綔妗f槑缁� */ - /* private void createWrkDetl(List<AgvWaitPakin> agvWaitPakinList, AgvWrkMast wrkMast, Long userId){ - List<DetlDto> detlDtos = new ArrayList<>(); - agvWaitPakinList.forEach(agvWaitPakin -> { - DetlDto detlDto = new DetlDto(agvWaitPakin.getMatnr(), agvWaitPakin.getBatch(), agvWaitPakin.getAnfme()); - if (DetlDto.has(detlDtos, detlDto)) { - DetlDto detlDto1 = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); - assert detlDto1 != null; - detlDto1.setAnfme(detlDto1.getAnfme() + detlDto.getAnfme()); - } else { - detlDtos.add(detlDto); - } - }); - agvWrkDetlService.createWorkDetail(wrkMast.getWrkNo(), detlDtos, wrkMast.getBarcode(), userId); - }*/ + private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo,String batch, double anfme, String zpallet, Date now, Long userId){ + Mat mat = matService.selectByMatnr(matnr); + if (Cools.isEmpty(mat)) { + throw new CoolException(matnr + "鍟嗗搧缁存姢澶辫触"); + } + AgvWrkDetl wrkDetl = new AgvWrkDetl(); + wrkDetl.sync(mat); + wrkDetl.setWrkNo(wrkNo); + wrkDetl.setOrderNo(orderNo); + wrkDetl.setIoTime(now); + wrkDetl.setBatch(batch); + wrkDetl.setAnfme(anfme); // 鏁伴噺 + wrkDetl.setZpallet(zpallet); // 鎵樼洏鏉$爜 + wrkDetl.setAppeUser(userId); + wrkDetl.setAppeTime(now); + wrkDetl.setModiUser(userId); + wrkDetl.setModiTime(now); + if (!agvWrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触"); + } + } + /* 鐢熸垚宸ヤ綔妗f槑缁� */ + @Deprecated private void createWrkDetlReWrite(List<AgvWaitPakin> agvWaitPakinList, AgvWrkMast wrkMast, Long userId){ Date now = new Date(); agvWaitPakinList.stream().forEach(agvWaitPakin -> { @@ -138,23 +206,71 @@ /* 鐢熸垚宸ヤ綔妗� */ + private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId){ + AgvWrkMast wrkMast = new AgvWrkMast(); + //鐢熸垚宸ヤ綔鍙� + int workNo = agvCommonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); + wrkMast.setWrkNo(workNo); + //宸ヤ綔鐘舵�� + wrkMast.setWrkSts(wrkSts); + //鍏ュ嚭搴撶被鍨� + wrkMast.setIoType(ioType); + wrkMast.setIoTime(now); + //浼樺厛绾� + wrkMast.setIoPri(300.0); + //婧愮珯鐐� + wrkMast.setSourceLocNo(sourceLocNo); + //鐩爣绔欑偣 + wrkMast.setLocNo(locNo); + //瀹瑰櫒缂栫爜 + wrkMast.setBarcode(barcode); + // 婊℃澘锛歒 + //wrkMast.setFullPlt("Y"); + // 鎷f枡 + //wrkMast.setPicking("N"); + // 閫�鍑� + //wrkMast.setExitMk("N"); + // 绌烘澘 + //wrkMast.setEmptyMk("N"); + //wrkMast.setLinkMis("N"); + wrkMast.setAppeUser(userId); + wrkMast.setAppeTime(now); + wrkMast.setModiUser(userId); + wrkMast.setModiTime(now); + if (!agvWrkMastService.insert(wrkMast)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + } + + return wrkMast; + } + + /* + 鐢熸垚宸ヤ綔妗� + */ + @Deprecated private AgvWrkMast createWrkMast(AgvBasDevp agvBasDevp,AgvLocMast agvLocMast, Date now, Long userId){ AgvWrkMast wrkMast = new AgvWrkMast(); //鐢熸垚宸ヤ綔鍙� int workNo = agvCommonService.getWorkNo(0); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(new Date()); - wrkMast.setWrkSts(201L); // 宸ヤ綔鐘舵�侊細201.鐢熸垚鍏ュ簱浠诲姟ID - wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 + // 宸ヤ綔鐘舵�侊細201.鐢熸垚鍏ュ簱浠诲姟ID + wrkMast.setWrkSts(201L); + // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 + wrkMast.setIoType(1); //鐢熸垚浼樺厛绾� wrkMast.setIoPri(300.0); wrkMast.setSourceLocNo(agvBasDevp.getDevNo()); wrkMast.setLocNo(agvLocMast.getLocNo()); wrkMast.setBarcode(agvBasDevp.getBarcode()); - wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 - wrkMast.setPicking("N"); // 鎷f枡 - wrkMast.setExitMk("N"); // 閫�鍑� - wrkMast.setEmptyMk("N"); // 绌烘澘 + // 婊℃澘锛歒 + wrkMast.setFullPlt("Y"); + // 鎷f枡 + wrkMast.setPicking("N"); + // 閫�鍑� + wrkMast.setExitMk("N"); + // 绌烘澘 + wrkMast.setEmptyMk("N"); wrkMast.setLinkMis("N"); wrkMast.setAppeUser(userId); wrkMast.setAppeTime(now); @@ -164,6 +280,48 @@ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); } return wrkMast; + } + + private boolean isPakOut(String locNo, double anfme){ + AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo)); + if(agvLocDetl.getAnfme() > anfme){ + return false; + } + return true; + } + + /* + AGV鐢熸垚鍑哄簱宸ヤ綔妗e悗淇敼璁㈠崟淇℃伅 + TODO 涓庡洓椤瑰簱鐢熸垚鍑哄簱宸ヤ綔妗e悗淇敼璁㈠崟淇℃伅鏁村悎鍒颁竴璧� + */ + private void modifyOrderDetl(LocDto locDto, Long userId){ + + if (!BaseController.isJSON(locDto.getOrderNo())) { + //闈炲悎骞跺嚭搴� + OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch()); + if (orderDetl == null) { + orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null); + } + if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) { + throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触"); + } + orderService.updateSettle(orderDetl.getOrderId(), 2L, userId); + }else { + //鍚堝苟鍑哄簱 + List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class); + for (OrderDto orderDto : orderDtoList) { + OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch()); + if (orderDetl == null) { + orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null); + } + if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDto.getAnfme())) { + throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触"); + } + orderService.updateSettle(orderDetl.getOrderId(), 2L, userId); + } + } + } + } -- Gitblit v1.9.1