From 7bd6e380475d1f4ec7a030dffcf0c217b879b0a5 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期五, 13 十月 2023 09:39:14 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/tzskasrs' into tzskasrs --- src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java | 8 + src/main/java/com/zy/asrs/mapper/LocDetlMapper.java | 3 src/main/java/com/zy/asrs/service/LocDetlService.java | 2 src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java | 5 src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java | 4 src/main/java/com/zy/common/web/WcsController.java | 40 ++++++ src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java | 42 +++++++ src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java | 2 src/main/java/com/zy/common/web/param/ReplenishmentParam.java | 2 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 3 src/main/webapp/views/agvBasDevpVisualized/basDevp.html | 4 src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java | 182 ++++++++++++++++++++++++++++++ src/main/java/com/zy/asrs/service/LocMastService.java | 2 src/main/java/com/zy/asrs/service/AgvBasDevpService.java | 2 src/main/resources/application.yml | 4 15 files changed, 294 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java index 9e097b6..1e1303a 100644 --- a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java +++ b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java @@ -71,4 +71,7 @@ int updateStockFreeze(String matnr, String locNo, Integer stockFreeze); + @Select("SELECT loc_no FROM asr_loc_detl WHERE matnr = #{matnr} GROUP BY loc_no") + List<String> selectLocNo(@Param("matnr") String matnr); + } diff --git a/src/main/java/com/zy/asrs/service/AgvBasDevpService.java b/src/main/java/com/zy/asrs/service/AgvBasDevpService.java index 3bdd91a..e3798be 100644 --- a/src/main/java/com/zy/asrs/service/AgvBasDevpService.java +++ b/src/main/java/com/zy/asrs/service/AgvBasDevpService.java @@ -17,4 +17,6 @@ public Map<String, Object> getAgvBasDevpDtoByStationCode(String stationCode); public List<String> getAvailableEmptyInSite(); + + public AgvBasDevp getByDevNo(String devNo); } diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java index 41f917f..3ac2cb5 100644 --- a/src/main/java/com/zy/asrs/service/LocDetlService.java +++ b/src/main/java/com/zy/asrs/service/LocDetlService.java @@ -67,4 +67,6 @@ List<LocDetl> selectByLocNo(String locNo); + List<String> selectLocNo(String matnr); + } diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java index 01e3905..9dbfeae 100644 --- a/src/main/java/com/zy/asrs/service/LocMastService.java +++ b/src/main/java/com/zy/asrs/service/LocMastService.java @@ -1,7 +1,6 @@ package com.zy.asrs.service; import com.baomidou.mybatisplus.service.IService; -import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.LocMast; import java.util.List; @@ -60,4 +59,5 @@ Integer updateLocType2ByRBL(Integer locType2, Integer startRow, Integer endRow, Integer startBay, Integer endBay, Integer startLev, Integer endLev); + void updateByLocNo(LocMast locMast); } diff --git a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java index aafa7b2..b8cbc8f 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java @@ -177,4 +177,8 @@ return this.baseMapper.getAvailableEmptyInSite(); } + public AgvBasDevp getByDevNo(String devNo) { + return this.selectOne(new EntityWrapper<AgvBasDevp>().eq("dev_no",devNo)); + } + } diff --git a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java index 94ca11d..46c7a70 100644 --- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java @@ -182,6 +182,11 @@ } @Override + public List<String> selectLocNo(String matnr) { + return this.baseMapper.selectLocNo(matnr); + } + + @Override public int updateStockFreeze(String matnr, String locNo, Integer stockFreeze) { return this.baseMapper.updateStockFreeze(matnr, locNo, stockFreeze); } diff --git a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java index 1c44970..be4b66b 100644 --- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java @@ -1,9 +1,9 @@ package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; -import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.LocMast; import com.zy.asrs.mapper.LocMastMapper; import com.zy.asrs.service.LocMastService; @@ -17,7 +17,6 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.Iterator; import java.util.List; @Slf4j @@ -186,4 +185,9 @@ public Integer updateLocType2ByRBL(Integer locType2, Integer startRow, Integer endRow, Integer startBay, Integer endBay, Integer startLev, Integer endLev) { return this.baseMapper.updateLocType2ByRBL(locType2, startRow, endRow, startBay, endBay, startLev, endLev); } + + public void updateByLocNo(LocMast locMast){ + + this.update(locMast,new EntityWrapper<LocMast>().eq("loc_no",locMast.getLocNo())); + } } diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java index 066d20a..656b917 100644 --- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java @@ -445,6 +445,9 @@ wrkDetl.setAppeUser(userId); wrkDetl.setModiTime(now); wrkDetl.setModiUser(userId); + wrkDetl.setSuppCode(locDto.getContainerCode()); + wrkDetl.setThreeCode(locDto.getCsocode()); + wrkDetl.setDeadTime(locDto.getIsoseq()); if (!wrkDetlService.insert(wrkDetl)) { throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); } diff --git a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java index cc08129..4063c5e 100644 --- a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java +++ b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java @@ -47,7 +47,7 @@ .or().eq("io_type",11)); if(!Cools.isEmpty(agvWrkMastList)){ agvWrkMastList.stream().forEach(agvWrkMast -> { - ReturnT<String> returnT = agvWrkMastHandler.completedPutWayWrk(agvWrkMast); + agvWrkMastHandler.completedPutWayWrk(agvWrkMast); }); } } diff --git a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java new file mode 100644 index 0000000..55df580 --- /dev/null +++ b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java @@ -0,0 +1,42 @@ +package com.zy.asrs.task; + +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.core.common.Cools; +import com.zy.asrs.entity.DocType; +import com.zy.asrs.entity.Order; +import com.zy.asrs.service.DocTypeService; +import com.zy.asrs.service.OrderService; +import com.zy.asrs.task.handler.AutoReplenishmentHandler; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Slf4j +@Component +public class AutoReplenishmentScheduler { + + @Autowired + private OrderService orderService; + @Autowired + private DocTypeService docTypeService; + @Autowired + private AutoReplenishmentHandler autoReplenishmentHandler; + + /* + 瀹氭椂澶勭悊鑷姩琛ヨ揣鍗曟嵁 + */ + //@Scheduled(cron = "0/5 * * * * ? ") + public void excute(){ + DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", "鑷姩琛ヨ揣鍗�")); + List<Order> orderList = orderService.selectList(new EntityWrapper<Order>() + .eq("doc_type", docType.getDocId()) + .eq("settle",1)); + if(!Cools.isEmpty(orderList)){ + orderList.forEach(order -> { + autoReplenishmentHandler.start(order); + }); + } + } +} diff --git a/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java b/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java new file mode 100644 index 0000000..3b95b94 --- /dev/null +++ b/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java @@ -0,0 +1,182 @@ +package com.zy.asrs.task.handler; + +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.core.exception.CoolException; +import com.zy.asrs.entity.*; +import com.zy.asrs.service.*; +import com.zy.asrs.task.AbstractHandler; +import com.zy.asrs.task.core.ReturnT; +import com.zy.common.model.enums.WorkNoType; +import com.zy.common.service.CommonService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@Service +public class AutoReplenishmentHandler extends AbstractHandler<String> { + + @Autowired + private OrderDetlService orderDetlService; + @Autowired + private LocDetlService locDetlService; + @Autowired + private LocMastService locMastService; + @Autowired + private CommonService commonService; + @Autowired + private WrkMastService wrkMastService; + @Autowired + private WrkDetlService wrkDetlService; + @Autowired + private OrderService orderService; + + + @Transactional + public ReturnT<String> start(Order order) { + Date now = new Date(); + + Set<String> locNos = pakoutLoc(order); + for (String locNo : locNos){ + LocMast locMast = locMastService.selectByLoc(locNo); + if(!"F".equals(locMast.getLocSts())){ + throw new CoolException("搴撲綅鐘舵�佸凡鍙樻洿"); + } + //鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = createWrkMast(locNo,locMast.getBarcode(),now); + //鐢熸垚宸ヤ綔妗f槑缁� + List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo); + createWrkDetl(locDetls, wrkMast,order.getOrderNo(),now); + //淇敼搴撲綅鐘舵�� + locMast.setLocSts("R"); + locMastService.updateByLocNo(locMast); + } + order.setSettle(2L); + orderService.updateById(order); + + + return SUCCESS; + } + + private Set<String> pakoutLoc(Order order){ + //闇�瑕佸嚭搴撶殑搴撲綅 + Set<String> locNos = new HashSet<>(); + //鏍规嵁璁㈠崟鐢熸垚鍥涢」搴撳嚭搴撳伐浣滄。 + List<OrderDetl> orderDetlList = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo())); + + for(OrderDetl orderDetl : orderDetlList){ + if(orderDetl.getAnfme() - orderDetl.getQty() <= 0){ + continue; + } + + String matnr = orderDetl.getMatnr(); + Double orderAnfme = orderDetl.getAnfme(); + + List<String> locNosSearch = locDetlService.selectLocNo(matnr); + + for(String locNo : locNosSearch){ + List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo); + locNos.add(locNo); + for (LocDetl locDetl :locDetls){ + if(matnr.equals(locDetl.getMatnr())){ + orderAnfme -= locDetl.getAnfme(); + } + } + if(orderAnfme <= 0){ + orderDetl.setQty(orderDetl.getAnfme() - orderAnfme); + orderDetlService.updateById(orderDetl); + break; + } + } + } + +// orderDetlList.forEach(orderDetl -> { +// +// if(orderDetl.getAnfme() - orderDetl.getQty() <= 0){ +// cont +// } +// +// String matnr = orderDetl.getMatnr(); +// Double orderAnfme = orderDetl.getAnfme(); +// +// List<String> locNosSearch = locDetlService.selectLocNo(matnr); +// +// for(String locNo : locNosSearch){ +// List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo); +// locNos.add(locNo); +// for (LocDetl locDetl :locDetls){ +// if(matnr.equals(locDetl.getMatnr())){ +// orderAnfme -= locDetl.getAnfme(); +// } +// } +// if(orderAnfme <= 0){ +// orderDetl.setQty(orderDetl.getAnfme() - orderAnfme); +// orderDetlService.updateById(orderDetl); +// break; +// } +// } +// +// }); + + return locNos; + } + + private WrkMast createWrkMast(String locNo,String barCode,Date now){ + int ioType = 101; + int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(now); + wrkMast.setWrkSts(21L); // 宸ヤ綔鐘舵�侊細21.鐢熸垚鍑哄簱浠诲姟 + wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬� + wrkMast.setIoPri(300D); // 浼樺厛绾э細13 + //wrkMast.setOutMost(outMost?1:0);; + //wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo()); + //wrkMast.setSourceStaNo(loc); // 婧愮珯 + wrkMast.setStaNo(300); // 鐩爣绔� + wrkMast.setSourceLocNo(locNo); // 婧愬簱浣� + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setLinkMis("N"); + wrkMast.setBarcode(barCode); + //wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁 + wrkMast.setAppeTime(now); + //wrkMast.setModiUser(userId); + wrkMast.setModiTime(now); + + wrkMast.setMk("Y"); + if (!wrkMastService.insert(wrkMast)) { + throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+locNo); + } + return wrkMast; + } + + private void createWrkDetl(List<LocDetl> locDetls, WrkMast wrkMast,String orderNo, Date now){ + locDetls.forEach(locDetl -> { + WrkDetl wrkDetl = new WrkDetl(); + BeanUtils.copyProperties(locDetl,wrkDetl); + wrkDetl.setZpallet(wrkMast.getBarcode()); + wrkDetl.setIoTime(now); + wrkDetl.setWrkNo(wrkMast.getWrkNo()); + //wrkDetl.setBatch(locDetl.getBatch()); + wrkDetl.setOrderNo(orderNo); + //wrkDetl.setAnfme(locDetl.getAnfme()); // 鏁伴噺 + wrkDetl.setAppeTime(now); + //wrkDetl.setAppeUser(userId); + wrkDetl.setModiTime(now); + //wrkDetl.setSuppCode(locDetl.getSuppCode()); + //wrkDetl.setModiUser(userId); + if (!wrkDetlService.insert(wrkDetl)) { + throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�"); + } + }); + } + +} diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java index d2ccfbb..2f40c38 100644 --- a/src/main/java/com/zy/common/web/WcsController.java +++ b/src/main/java/com/zy/common/web/WcsController.java @@ -10,7 +10,6 @@ import com.zy.common.model.LocTypeDto; import com.zy.common.model.StartupDto; import com.zy.common.service.CommonService; -import com.zy.common.service.erp.ErpService; import com.zy.common.web.param.ReplenishmentParam; import com.zy.common.web.param.SearchLocParam; import lombok.extern.slf4j.Slf4j; @@ -49,7 +48,13 @@ @Autowired private MatService matService; @Autowired - private ErpService erpService; + private AgvWaitPakinService agvWaitPakinService; + @Autowired + private AgvWorkService agvWorkService; + @Autowired + private AgvBasDevpService agvBasDevpService; +// @Autowired +// private ErpService erpService; @PostMapping("/pakin/loc/v1") @ResponseBody @@ -299,11 +304,40 @@ } /* - 鍥涢」搴撳線AGV琛ヨ揣锛寃cs璋冪敤姝ゆ帴鍙� + 鍥涢」搴撳線AGV琛ヨ揣锛岀敓鎴怉GV鍏ュ簱閫氱煡妗� */ @PostMapping("/replenishment") @ResponseBody public R replenishment(@RequestBody ReplenishmentParam param){ + Date now = new Date(); + Integer wrkNo = param.getWrkNo(); + List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkNo); + wrkDetls.forEach(wrkDetl -> { + AgvWaitPakin agvWaitPakin = new AgvWaitPakin(); + BeanUtils.copyProperties(wrkDetl,agvWaitPakin); + agvWaitPakin.setIoStatus("Y"); + agvWaitPakin.setModiTime(now); + agvWaitPakin.setAppeTime(now); + agvWaitPakinService.insert(agvWaitPakin); + + }); + + return R.ok(); + } + + /* + 鐢熸垚AGV宸ヤ綔妗� + */ + @PostMapping("/start") + @ResponseBody + public R start(@RequestBody ReplenishmentParam param){ + + //缁戝畾绔欑偣 + agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"F",param.getContainerCode()); + + //鐢熸垚宸ヤ綔妗� + List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().eq("dev_no", param.getDevNo())); + agvWorkService.createWaitPainWrkMastStart(agvBasDevpList, null); return R.ok(); diff --git a/src/main/java/com/zy/common/web/param/ReplenishmentParam.java b/src/main/java/com/zy/common/web/param/ReplenishmentParam.java index ee6c515..d294c3e 100644 --- a/src/main/java/com/zy/common/web/param/ReplenishmentParam.java +++ b/src/main/java/com/zy/common/web/param/ReplenishmentParam.java @@ -8,4 +8,6 @@ private String containerCode; //agv绔欑偣 private String devNo; + //宸ヤ綔鍙� + private Integer wrkNo; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 330352b..7f83267 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -10,9 +10,9 @@ enabled: false datasource: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - url: jdbc:sqlserver://localhost:1433;databasename=tzskasrs + #url: jdbc:sqlserver://localhost:1433;databasename=tzskasrs #url: jdbc:sqlserver://192.168.4.15:1433;databasename=tzskasrs - #url: jdbc:sqlserver://10.10.10.40:1433;databasename=tzskasrs + url: jdbc:sqlserver://10.10.10.40:1433;databasename=tzskasrs username: sa password: sa@123 mvc: diff --git a/src/main/webapp/views/agvBasDevpVisualized/basDevp.html b/src/main/webapp/views/agvBasDevpVisualized/basDevp.html index d39c441..11ab93d 100644 --- a/src/main/webapp/views/agvBasDevpVisualized/basDevp.html +++ b/src/main/webapp/views/agvBasDevpVisualized/basDevp.html @@ -81,7 +81,7 @@ {{#if agvWaitPakin.batch}} 搴忓垪鐮侊細{{agvWaitPakin.batch}} </br> {{/if}} - 鎵樼洏鐮侊細{{agvWaitPakin.zpallet}} </br> + 鏂欑鐮侊細{{agvWaitPakin.suppCode}} </br> 鏁伴噺锛歿{agvWaitPakin.anfme}} </div> {{/if}} @@ -98,7 +98,7 @@ {{#if agvWrkDetl.batch}} 搴忓垪鐮侊細{{agvWrkDetl.batch}} </br> {{/if}} - 鎵樼洏鐮侊細{{agvWrkDetl.zpallet}} </br> + 鏂欑鐮侊細{{agvWaitPakin.suppCode}} </br> 鏁伴噺锛歿{agvWrkDetl.anfme}} </div> {{/if}} -- Gitblit v1.9.1