From d87f68eb535935814f287b3740474e7eb24b3643 Mon Sep 17 00:00:00 2001 From: zyx <zyx123456> Date: 星期三, 22 十一月 2023 09:10:23 +0800 Subject: [PATCH] 自动补货流程更新 --- src/main/java/com/zy/asrs/service/AgvLocDetlService.java | 2 src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java | 3 + src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java | 5 + src/main/java/com/zy/asrs/service/LocDetlService.java | 2 src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java | 103 ++++++++++++++++++++++++++++++++-- src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java | 4 src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java | 13 ++++ src/main/webapp/static/js/common.js | 2 src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java | 25 ++++++++ 9 files changed, 149 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java index 7523098..defa219 100644 --- a/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java +++ b/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java @@ -37,6 +37,9 @@ @Select("SELECT SUM(anfme) FROM agv_loc_detl WHERE loc_no = #{locNo}") Double sumByLocNo(@Param("locNo")String locNo); + @Select("SELECT SUM(anfme) FROM agv_loc_detl WHERE matnr = #{matnr}") + Double sumByMatnr(@Param("matnr")String matnr); + int updateAnfme(@Param("locNo")String locNo, @Param("anfme")Double anfme, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode); int deleteLocDetl(@Param("locNo")String locNo, @Param("anfme")Double anfme, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode); diff --git a/src/main/java/com/zy/asrs/service/AgvLocDetlService.java b/src/main/java/com/zy/asrs/service/AgvLocDetlService.java index 3deaf54..76dc097 100644 --- a/src/main/java/com/zy/asrs/service/AgvLocDetlService.java +++ b/src/main/java/com/zy/asrs/service/AgvLocDetlService.java @@ -39,6 +39,8 @@ public Double selectSumAnfmeByLocNo(String locNo); + public Double selectSumAnfmeByMatnr(String matnr); + public AgvLocDetl selectLocdetl(String locNo,String matnr,String batch,String csocode,String isocode); public void compareToEss(MultipartFile file) throws IOException; diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java index 1761c93..89da6e2 100644 --- a/src/main/java/com/zy/asrs/service/LocDetlService.java +++ b/src/main/java/com/zy/asrs/service/LocDetlService.java @@ -71,7 +71,7 @@ List<String> selectLocNo(String matnr); - Set<String> selectLocNo(String matnr, String batch, String csocode, String isocode); + Set<String> selectLocNos(String matnr); LocDetl selectByContainerCode(String containerCode); diff --git a/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java index fae83c0..f6b5c47 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java @@ -198,6 +198,11 @@ } @Override + public Double selectSumAnfmeByMatnr(String matnr) { + return this.baseMapper.sumByMatnr(matnr); + } + + @Override public AgvLocDetl selectLocdetl(String locNo, String matnr, String batch, String csocode, String isocode) { return this.baseMapper.selectLocdetl(locNo,matnr,batch,csocode,isocode); } diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java index ff1c6b5..c98b79c 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java @@ -45,6 +45,9 @@ @Value("${agv.containerArrivedPath}") private String containerArrivedPath; + @Value("${agvBasDev.maxWorkNum}") + private int maxWrokNum; + @Autowired AgvWrkMastMapper agvWrkMastMapper; @Autowired @@ -73,6 +76,9 @@ } public int startWrk(List<AgvWrkMast> agvWrkMastList, String taskType) throws IOException { + + //浠诲姟杩囨护锛岃繃婊ゆ帀宸插瓨鍦ㄧ浉鍚岀洰鏍囧簱浣嶇殑宸ヤ綔妗� + agvWrkMastList = filter(agvWrkMastList); AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam(); agvTaskCreateParam.setTaskType(taskType); @@ -148,6 +154,13 @@ return this.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode",containerCode)); } + private List<AgvWrkMast> filter(List<AgvWrkMast> agvWrkMastList){ + return agvWrkMastList.stream().filter(agvWrkMast -> { + int num = this.selectCount(new EntityWrapper<AgvWrkMast>().eq("loc_no", agvWrkMast.getLocNo())); + return num <= maxWrokNum; + }).collect(Collectors.toList()); + } + private void getContainerMoveParam(List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){ //寰�瀹瑰櫒鍏ュ満鍙傛暟涓斁鍏ユ簮绔欑偣浣嶇疆 for(AgvWrkMast agvWrkMast : agvWrkMastList){ 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 da0d56d..af9589a 100644 --- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java @@ -224,10 +224,10 @@ return this.baseMapper.selectLocNo(matnr); } - public Set<String> selectLocNo(String matnr, String batch, String csocode, String isocode) { + public Set<String> selectLocNos(String matnr) { Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>().eq("matnr", matnr); - Utils.confirmOnlyMat(wrapper,matnr,batch,csocode,isocode); + //Utils.confirmOnlyMat(wrapper,matnr,batch,csocode,isocode); List<LocDetl> locDetls = this.selectList(wrapper); Set<String> locNos = new HashSet<>(); diff --git a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java index de1f0d1..d0ab451 100644 --- a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java +++ b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java @@ -3,7 +3,9 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.DocType; +import com.zy.asrs.entity.Mat; import com.zy.asrs.entity.Order; +import com.zy.asrs.service.AgvLocDetlService; import com.zy.asrs.service.DocTypeService; import com.zy.asrs.service.MatService; import com.zy.asrs.service.OrderService; @@ -27,13 +29,36 @@ private AutoReplenishmentHandler autoReplenishmentHandler; @Autowired private MatService matService; + @Autowired + private AgvLocDetlService agvLocDetlService; /* 瀹氭椂渚垮埄搴撳瓨锛岀敓鎴愯嚜鍔ㄨˉ璐у崟鎹� */ //@Scheduled(cron = "0/5 * * * * ? ") public void createOrder(){ + //妫�娴嬫槸鍚︽湁鏈畬鎴愮殑琛ヨ揣鍗曟嵁 + DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", "鑷姩琛ヨ揣鍗�")); + int count = orderService.selectCount(new EntityWrapper<Order>() + .eq("doc_type", docType.getDocId()) + .andNew().eq("settle",2) + .or("settle",1)); + if(count > 0){ + return; + } + //鏌ヨ鎵�鏈夐渶瑕佽ˉ璐х殑鐗╂枡 + List<Mat> matList = matService.selectList(new EntityWrapper<Mat>().eq(false, "store_min", 0)); + if(!Cools.isEmpty(matList)){ + for (Mat mat : matList){ + //鏌ヨ褰撳墠鐗╂枡鏄惁鍦╝gv搴撳皬浜庡簱瀛樹笂闄� + Double anfmeSum = agvLocDetlService.selectSumAnfmeByMatnr(mat.getMatnr()); + if(anfmeSum < mat.getStoreMin()){ + autoReplenishmentHandler.create(mat,mat.getStoreMax() - anfmeSum); + break; + } + } + } } /* diff --git a/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java b/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java index cd21bd0..044917d 100644 --- a/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java @@ -2,6 +2,8 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; +import com.core.common.DateUtils; +import com.core.common.SnowflakeIdWorker; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; @@ -34,7 +36,26 @@ private WrkDetlService wrkDetlService; @Autowired private OrderService orderService; + @Autowired + private SnowflakeIdWorker snowflakeIdWorker; + + @Transactional + public ReturnT<String> create(Mat mat, double anfme) { + //鍒涘缓涓�涓柊鐨勮嚜鍔ㄨˉ璐у崟鎹� + Order order = createOrder(); + OrderDetl orderDetl = createOrderDetl(order); + orderDetl.setMatnr(mat.getMatnr()); + orderDetl.setMaktx(mat.getMaktx()); + orderDetl.setSpecs(mat.getSpecs()); + orderDetl.setAnfme(anfme); + orderDetl.setQty(0.0); + + orderService.insert(order); + orderDetlService.insert(orderDetl); + + return SUCCESS; + } @Transactional public ReturnT<String> start(Order order) { @@ -58,8 +79,64 @@ order.setSettle(2L); orderService.updateById(order); - return SUCCESS; + } + + private Order createOrder(){ + Date now = new Date(); + return new Order( + String.valueOf(snowflakeIdWorker.nextId()), // 缂栧彿[闈炵┖] + "AUTO" + snowflakeIdWorker.nextId(), // 璁㈠崟缂栧彿 + DateUtils.convert(now), // 鍗曟嵁鏃ユ湡 + 21L, // 鍗曟嵁绫诲瀷 21.鑷姩琛ヨ揣鍗� + null, // 椤圭洰缂栧彿 + null, // + null, // 璋冩嫧椤圭洰缂栧彿 + null, // 鍒濆绁ㄦ嵁鍙� + null, // 绁ㄦ嵁鍙� + null, // 瀹㈡埛缂栧彿 + null, // 瀹㈡埛 + null, // 鑱旂郴鏂瑰紡 + null, // 鎿嶄綔浜哄憳 + null, // 鍚堣閲戦 + null, // 浼樻儬鐜� + null, // 浼樻儬閲戦 + null, // 閿�鍞垨閲囪喘璐圭敤鍚堣 + null, // 瀹炰粯閲戦 + null, // 浠樻绫诲瀷 + null, // 涓氬姟鍛� + null, // 缁撶畻澶╂暟 + null, // 閭垂鏀粯绫诲瀷 + null, // 閭垂 + null, // 浠樻鏃堕棿 + null, // 鍙戣揣鏃堕棿 + null, // 鐗╂祦鍚嶇О + null, // 鐗╂祦鍗曞彿 + 1L, // 璁㈠崟鐘舵�� + 1, // 鐘舵�� + 9999L, // 娣诲姞浜哄憳 + now, // 娣诲姞鏃堕棿 + 9999L, // 淇敼浜哄憳 + now, // 淇敼鏃堕棿 + null // 澶囨敞 + ); + + } + + private OrderDetl createOrderDetl(Order order){ + Date now = new Date(); + OrderDetl orderDetl = new OrderDetl(); + + orderDetl.setOrderId(order.getId()); + orderDetl.setOrderNo(order.getOrderNo()); + orderDetl.setCreateBy(order.getCreateBy()); + orderDetl.setCreateTime(now); + orderDetl.setUpdateBy(order.getCreateBy()); + orderDetl.setUpdateTime(now); + orderDetl.setStatus(1); + orderDetl.setQty(0.0D); + + return orderDetl; } private Set<String> pakoutLoc(Order order){ @@ -74,14 +151,11 @@ } String matnr = orderDetl.getMatnr(); - String batch = orderDetl.getBatch(); - String csocode = orderDetl.getThreeCode(); - String isocode = orderDetl.getDeadTime(); - Double orderAnfme = orderDetl.getAnfme(); + double orderAnfme = orderDetl.getAnfme(); //List<String> locNosSearch = locDetlService.selectLocNo(matnr); - Set<String> locNosSearch = locDetlService.selectLocNo(matnr, batch, csocode, isocode); + Set<String> locNosSearch = locDetlService.selectLocNos(matnr); //閲嶆柊鎺掑簭 骞朵笖妫�娴嬭搴撲綅鏄惁鍚病鏈夋枡绠辩爜鐨勭墿鏂欙紝濡傛湁鏈夊垯涓嶅厑璁稿嚭搴� Set<String> resort = resort(locNosSearch); @@ -92,6 +166,17 @@ for (LocDetl locDetl :locDetls){ if(matnr.equals(locDetl.getMatnr())){ orderAnfme -= locDetl.getAnfme(); + }else { + OrderDetl odNew = createOrderDetl(order); + odNew.setMatnr(locDetl.getMatnr()); + odNew.setMaktx(locDetl.getMaktx()); + odNew.setBatch(locDetl.getBatch()); + odNew.setThreeCode(locDetl.getThreeCode()); + odNew.setDeadTime(locDetl.getDeadTime()); + odNew.setSpecs(locDetl.getSpecs()); + odNew.setAnfme(0.0); + odNew.setQty(locDetl.getAnfme()); + orderDetlService.insert(odNew); } } if(orderAnfme <= 0){ @@ -99,6 +184,11 @@ orderDetlService.updateById(orderDetl); break; } + } + if(orderAnfme > 0){ + orderDetl.setAnfme(orderDetl.getAnfme() - orderAnfme); + orderDetl.setQty(orderDetl.getAnfme()); + orderDetlService.updateById(orderDetl); } } @@ -165,6 +255,7 @@ //wrkMast.setModiUser(userId); wrkMast.setModiTime(now); + //琛ヨ揣鏍囪瘑 wrkMast.setMk("Y"); if (!wrkMastService.insert(wrkMast)) { throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+locNo); diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js index fb4d280..cc817a0 100644 --- a/src/main/webapp/static/js/common.js +++ b/src/main/webapp/static/js/common.js @@ -203,7 +203,7 @@ // ,{field: 'barcode', align: 'center',title: '鏉$爜', hide: true} // ,{field: 'manu', align: 'center',title: '鍘傚', hide: true} // ,{field: 'itemNum', align: 'center',title: '鍝侀」鏁�', hide: true} - // ,{field: 'safeQty', align: 'center',title: '瀹夊叏搴撳瓨閲�', hide: true} + ,{field: 'safeQty', align: 'center',title: '瀹夊叏搴撳瓨閲�', hide: true} // ,{field: 'length', align: 'center',title: '鍗曠姣涢噸', hide: true} // ,{field: 'volume', align: 'center',title: '鍗曠浣撶Н', hide: true} // ,{field: 'threeCode', align: 'center',title: '绠卞瓙灏哄', hide: true} -- Gitblit v1.9.1