From 43efe016c156158b9fc3a8b647810f612fb126e6 Mon Sep 17 00:00:00 2001 From: zwl <1051256694@qq.com> Date: 星期二, 02 九月 2025 11:39:52 +0800 Subject: [PATCH] 自动补货单新增 1.订单中只能生成两笔自动补货单 2.CTU库是否有足够的空库位,空库位数需要大于100才会生成自动补货单 3.在补货时加上订单明细的数量进行判断 --- src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java | 100 +++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 86 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java index d0ab451..273d223 100644 --- a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java +++ b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java @@ -2,20 +2,17 @@ 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; +import com.zy.asrs.entity.*; +import com.zy.asrs.service.*; import com.zy.asrs.task.handler.AutoReplenishmentHandler; +import com.zy.common.entity.Parameter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.List; +import java.util.Set; @Slf4j @Component @@ -24,6 +21,8 @@ @Autowired private OrderService orderService; @Autowired + private OrderDetlService orderDetlService; + @Autowired private DocTypeService docTypeService; @Autowired private AutoReplenishmentHandler autoReplenishmentHandler; @@ -31,29 +30,102 @@ private MatService matService; @Autowired private AgvLocDetlService agvLocDetlService; + @Autowired + private AgvLocMastService agvLocMastService; + @Autowired + private LocDetlService locDetlService; /* - 瀹氭椂渚垮埄搴撳瓨锛岀敓鎴愯嚜鍔ㄨˉ璐у崟鎹� + 瀹氭椂閬嶅巻搴撳瓨锛岀敓鎴愯嚜鍔ㄨˉ璐у崟鎹� */ - //@Scheduled(cron = "0/5 * * * * ? ") + @Scheduled(cron = "0 */1 * * * ? ") public void createOrder(){ + + if(!"Y".equals(Parameter.get().getAutoReplenishment())){ + return; + } + //妫�娴嬫槸鍚︽湁鏈畬鎴愮殑琛ヨ揣鍗曟嵁 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){ + .or().eq("settle",1)); + if(count > 2){ + return; + } + + //鍒ゆ柇CTU搴撴槸鍚︽湁瓒冲鐨勭┖搴撲綅锛岀┖搴撲綅鏁伴渶瑕佸ぇ浜�100 + int i = agvLocMastService.selectCount(new EntityWrapper<AgvLocMast>().eq("loc_sts", "O")); + if(i < 100){ return; } //鏌ヨ鎵�鏈夐渶瑕佽ˉ璐х殑鐗╂枡 - List<Mat> matList = matService.selectList(new EntityWrapper<Mat>().eq(false, "store_min", 0)); + List<Mat> matList = matService.selectList(new EntityWrapper<Mat>().gt( "store_min", 0)); if(!Cools.isEmpty(matList)){ for (Mat mat : matList){ + //妫�娴嬫槸鍚︽湁鏈畬鎴愮殑琛ヨ揣鍗曟嵁 + DocType docType1 = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", "鑷姩琛ヨ揣鍗�")); + int count1 = orderService.selectCount(new EntityWrapper<Order>() + .eq("doc_type", docType1.getDocId()) + .andNew().eq("settle",2) + .or().eq("settle",1)); + if(count1 > 2){ + break; + } + + //鍒ゆ柇CTU搴撴槸鍚︽湁瓒冲鐨勭┖搴撲綅锛岀┖搴撲綅鏁伴渶瑕佸ぇ浜�100 + int j = agvLocMastService.selectCount(new EntityWrapper<AgvLocMast>().eq("loc_sts", "O")); + if(j < 100){ + return; + } + + //鏀堕泦褰撳墠鐗╂枡鑷姩琛ヨ揣鍗曟槑缁嗘暟閲� + Double orderDetlCount = 0.0; + List<Order> orders = orderService.selectList(new EntityWrapper<Order>() + .eq("doc_type", docType1.getDocId()) + .andNew().eq("settle", 2) + .or().eq("settle", 1)); + if(!Cools.isEmpty(orders)){ + for (Order order : orders){ + List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>() + .eq("matnr", mat.getMatnr()) + .eq("order_no", order.getOrderNo())); + if(Cools.isEmpty(orderDetls)){ + continue; + } + for (OrderDetl orderDetl : orderDetls){ + orderDetlCount=orderDetlCount+orderDetl.getQty(); + } + } + } //鏌ヨ褰撳墠鐗╂枡鏄惁鍦╝gv搴撳皬浜庡簱瀛樹笂闄� Double anfmeSum = agvLocDetlService.selectSumAnfmeByMatnr(mat.getMatnr()); - if(anfmeSum < mat.getStoreMin()){ + if(Cools.isEmpty(anfmeSum)){ + anfmeSum = 0.0; + } + //褰撳墠鐗╂枡涓嶉渶瑕佽ˉ璐� + if(anfmeSum+orderDetlCount > mat.getStoreMin()){ + continue; + } + //鏌ヨ褰撳墠鐗╂枡鍥涢」搴撴槸鍚﹀瓨鍦�,骞朵笖鎵樼洏涓嶅惈鏈夐潪鏂欑鐗╂枡 + if(Cools.isEmpty(locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("matnr", mat.getMatnr())))){ + continue; + } + + Set<String> locNosSearch = locDetlService.selectLocNos(mat.getMatnr()); + //鏄惁鍚湁鍙ˉ璐у嚭搴撶殑搴撲綅 + boolean flag = false; + for (String locNo : locNosSearch){ + //log.info("闇�瑕佹嫞鏂欑殑璐т綅锛�" + locNo +"锛岄渶瑕佽ˉ璐х殑鐗╂枡锛�" + mat.getMatnr()); + if(Cools.isEmpty(locDetlService.selectByLocWithoutContainer(locNo))){ + flag = true; + continue; + } + } + + if(flag){ autoReplenishmentHandler.create(mat,mat.getStoreMax() - anfmeSum); break; } @@ -64,7 +136,7 @@ /* 瀹氭椂澶勭悊鑷姩琛ヨ揣鍗曟嵁 */ - @Scheduled(cron = "0/5 * * * * ? ") + @Scheduled(cron = "0/10 * * * * ? ") public void excuteOrder(){ DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", "鑷姩琛ヨ揣鍗�")); List<Order> orderList = orderService.selectList(new EntityWrapper<Order>() -- Gitblit v1.9.1