From f97251d71f83423d561c582ec5576a7451895af6 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 23 九月 2025 17:16:19 +0800
Subject: [PATCH] 任务档定时任务修改

---
 src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java |  279 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 277 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
index 68b9ca5..a983123 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
@@ -1,12 +1,287 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.TaskMapper;
-import com.zy.asrs.entity.Task;
-import com.zy.asrs.service.TaskService;
+import com.zy.asrs.service.*;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.utils.OrderInAndOutUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 @Service("taskService")
 public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements TaskService {
 
+    @Autowired
+    private TaskLogService taskLogService;
+    @Autowired
+    private LocCacheService locCacheService;
+    @Autowired
+    private WaitPakinService waitPakinService;
+    @Autowired
+    private TaskDetlService taskDetlService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private TaskDetlLogService taskDetlLogService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void completeWrkMast(String workNo, Long userId) {
+        Task wrkMast = this.selectOne(new EntityWrapper<Task>().eq("wrk_no", workNo));
+        if (Cools.isEmpty(wrkMast)) {
+            throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
+        }
+        if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) {
+            throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
+        }
+        // 鍏ュ簱 + 搴撲綅杞Щ
+        if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType() == 11)) {
+            wrkMast.setWrkSts(4L);
+            // 鍑哄簱
+        } else if (wrkMast.getWrkSts() > 10) {
+            wrkMast.setWrkSts(14L);
+        }
+        Date now = new Date();
+        wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
+        wrkMast.setCrnEndTime(now);
+        wrkMast.setModiTime(now);
+        wrkMast.setModiUser(userId);
+        // 瀹屾垚鎿嶄綔浜哄憳璁板綍
+        wrkMast.setManuType("鎵嬪姩瀹屾垚");
+        if (!this.updateById(wrkMast)) {
+            throw new CoolException("淇敼宸ヤ綔妗eけ璐�");
+        }
+    }
+
+    @Override
+    @Transactional
+    public void pickWrkMast(String workNo, Long userId) {
+        Task wrkMast = this.selectById(workNo);
+        if (Cools.isEmpty(wrkMast)) {
+            throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
+        }
+        // 鍏ュ嚭搴撶被鍨嬪垽鏂�
+        if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
+            throw new CoolException("褰撳墠鍏ュ嚭搴撶被鍨嬫棤娉曡繘琛屾搷浣�");
+        }
+        // 宸ヤ綔鐘舵�佸垽鏂�
+        if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) {
+            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曡繘琛屾搷浣�");
+        }
+        // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+//        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
+//            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
+//        }
+        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+        if (!taskLogService.save(wrkMast.getWrkNo())) {
+            throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+        }
+        // 鑾峰彇鐩爣绔�
+//        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+//                .eq("type_no", wrkMast.getIoType() - 50)
+//                .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
+//                .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
+//        StaDesc staDesc = staDescService.selectOne(wrapper);
+//        if (Cools.isEmpty(staDesc)) {
+//            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+//        }
+        Date now = new Date();
+        // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
+//        Integer staNo = staDesc.getCrnStn();
+        // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
+        wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
+        wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+//        wrkMast.setStaNo(staNo + ""); // 鐩爣绔�
+        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+        wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+        wrkMast.setModiTime(now);
+        wrkMast.setModiUser(userId);
+        if (!this.updateById(wrkMast)) {
+            throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+        }
+        // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+        LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
+        locMast.setLocSts("Q");
+        locMast.setModiTime(now);
+        locMast.setModiUser(userId);
+        if (!locCacheService.updateById(locMast)) {
+            throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+        }
+    }
+
+    @Override
+    public List<Task> selectToBeCompleteData() {
+        return this.baseMapper.selectToBeCompleteData();
+    }
+
+
+    @Override
+    @Transactional
+    public void cancelWrkMast(String workNo, Long userId) {
+        Date now = new Date();
+        Task wrkMast = this.selectOne(new EntityWrapper<Task>().eq("wrk_no", workNo));
+        if (Cools.isEmpty(wrkMast)) {
+            throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
+        }
+        String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
+        String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
+        // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
+        if (wrkMast.getWrkSts() < 4) {
+            locNo = wrkMast.getLocNo();
+            locSts = "O";
+
+            // 搴撲綅杞Щ
+            if (wrkMast.getIoType() == 11) {
+                // 搴撲綅杞Щ锛氭簮搴撲綅
+                LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getSourceLocNo()));
+                if (Cools.isEmpty(locMast)) {
+                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛屾簮搴撲綅涓嶅瓨鍦�:" + wrkMast.getSourceLocNo());
+                }
+                locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F");
+                locMast.setModiTime(now);
+                locMast.setModiUser(userId);
+                locCacheService.updateById(locMast);
+            }
+            // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
+        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
+            locNo = wrkMast.getSourceLocNo();
+            // 鍑哄簱 ===>> F.鍦ㄥ簱
+            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
+                locSts = "F";
+                // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
+            } else if (wrkMast.getIoType() == 110) {
+                locSts = "D";
+                // 搴撲綅杞Щ ===>> D.绌烘《/绌烘爤鏉�
+            } else if (wrkMast.getIoType() == 11) {
+                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F";
+                // 搴撲綅杞Щ锛氱洰鏍囧簱浣�
+                LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
+                if (Cools.isEmpty(locMast)) {
+                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛岀洰鏍囧簱浣嶄笉瀛樺湪:" + wrkMast.getSourceLocNo());
+                }
+                locMast.setLocSts("O");
+                locMast.setModiTime(now);
+                locMast.setModiUser(userId);
+                locCacheService.updateById(locMast);
+            }
+        } else {
+            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
+        }
+
+        //鍙栨秷鍏ュ簱宸ヤ綔妗f椂锛屾煡璇㈢粍鎵樿〃锛屽鏋滄湁灏嗙姸鎬佹敼涓哄緟澶勭悊
+        if (wrkMast.getIoType() == 1) {
+            List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
+            for (WaitPakin waitPakin : waitPakins) {
+                if (!Cools.isEmpty(waitPakin)) {
+                    waitPakin.setIoStatus("N");
+                    waitPakin.setLocNo("");
+                    waitPakinService.update(waitPakin, new EntityWrapper<WaitPakin>()
+//                            .eq("order_no", waitPakin.getOrderNo())
+                            .eq("zpallet", waitPakin.getZpallet())
+                            .eq("matnr", waitPakin.getMatnr())
+                            .eq("batch", waitPakin.getBatch()));
+                }
+            }
+        }
+
+        //鍙栨秷鍑哄簱宸ヤ綔妗f椂锛屾煡璇㈠崟鎹鐞嗚〃锛屽洖婊氫綔涓氫腑鏁伴噺
+        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103) {
+            List<TaskDetl> wrkDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+            for (TaskDetl wrkDetl : wrkDetls) {
+                if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
+//                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
+//                        throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
+//                    }
+                    OrderInAndOutUtil.decrease(Boolean.FALSE, wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),
+                            wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme());
+
+                    //淇敼璁㈠崟涓昏〃鐘舵��,娌℃湁浣滀笟鏁伴噺鏃舵墠鍙互淇敼
+                    boolean flag = true;
+//                    List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no",wrkDetl.getOrderNo()));
+                    Order order = OrderInAndOutUtil.selectByNo(Boolean.FALSE, wrkDetl.getOrderNo());
+                    List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(Boolean.FALSE, order.getId());
+                    for (OrderDetl orderDetl : orderDetls) {
+                        if (orderDetl.getWorkQty() > 0) {
+                            flag = false;
+                        }
+                    }
+                    if (flag) {
+//                        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo()));
+                        if (!Cools.isEmpty(order) && order.getSettle() == 2) {
+                            order.setSettle(1L);
+                            order.setUpdateBy(userId);
+                            order.setUpdateTime(now);
+                        }
+//                        if(!orderService.update(order,new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo()))){
+//                            throw new CoolException("淇敼璁㈠崟鐘舵�佸け璐�");
+//                        }
+                        OrderInAndOutUtil.updateOrder(Boolean.FALSE, order.getId(), order.getSettle(), userId);
+                    }
+                }
+            }
+
+        }
+
+//        // 璁㈠崟鍏宠仈
+//        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+//        for (WrkDetl wrkDetl : wrkDetls) {
+//            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
+//                if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
+//                    throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
+//                }
+//                // 鐢熸垚鏂扮殑鍑哄簱浣滀笟
+////                        stockOutRe(wrkMast, wrkDetls);
+//            }
+//        }
+
+        // 鍙栨秷鎿嶄綔浜哄憳璁板綍
+        wrkMast.setManuType("鎵嬪姩鍙栨秷");
+        wrkMast.setModiUser(userId);
+        wrkMast.setModiTime(now);
+        if (!taskService.updateById(wrkMast)) {
+            throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐�");
+        }
+        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+        if (!taskLogService.save(wrkMast.getWrkNo())) {
+            throw new CoolException("淇濆瓨宸ヤ綔鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
+        }
+        // 鍒犻櫎宸ヤ綔涓绘。
+        boolean wrkMastRes = taskService.deleteById(wrkMast);
+
+        if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
+            // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+            if (!taskDetlLogService.save(wrkMast.getWrkNo())) {
+//                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
+            }
+            // 鍒犻櫎宸ヤ綔妗f槑缁�
+            boolean wrkDetlRes = taskDetlService.delete(new EntityWrapper<TaskDetl>().eq("wrk_no", workNo));
+        }
+
+        // 淇敼搴撲綅鐘舵��
+        LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", locNo));
+        if (Cools.isEmpty(locMast)) {
+            throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐ワ紝搴撲綅涓嶅瓨鍦�:" + locNo);
+        }
+        locMast.setLocSts(locSts);
+        locMast.setModiTime(now);
+        locMast.setModiUser(userId);
+        boolean locMastRes = locCacheService.updateById(locMast);
+        if (!wrkMastRes || !locMastRes) {
+            throw new CoolException("淇濆瓨鏁版嵁澶辫触");
+        }
+    }
+
 }

--
Gitblit v1.9.1