Browse Source

BizDayworkController,list方法中,做了修改,解决邀请报工时出现的异常

zhuangdezheng 1 year ago
parent
commit
b60e9ff6e0

+ 109 - 115
src/main/java/cn/ezhizao/project/business/product/controller/BizDayworkController.java

@@ -6,30 +6,21 @@ import cn.ezhizao.framework.aspectj.lang.annotation.Log;
 import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
 import cn.ezhizao.framework.web.controller.BaseController;
 import cn.ezhizao.framework.web.domain.AjaxResult;
-import cn.ezhizao.framework.web.page.TableDataInfo;
 import cn.ezhizao.project.business.deptProcess.domain.BizDeptProcess;
-import cn.ezhizao.project.business.deptProcess.service.IBizDeptProcessService;
-import cn.ezhizao.project.business.equipment.service.IBizUserEquipmentService;
 import cn.ezhizao.project.business.process.domain.BizProcess;
-import cn.ezhizao.project.business.process.service.IBizProcessService;
 import cn.ezhizao.project.business.product.domain.*;
 import cn.ezhizao.project.business.product.service.*;
 import cn.ezhizao.project.business.technologicalProcessDetail.domain.BizTechnologicalProcessDetail;
 import cn.ezhizao.project.business.technologicalProcessDetail.service.IBizTechnologicalProcessDetailService;
 import cn.ezhizao.project.system.domain.SysUser;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
-import io.swagger.models.auth.In;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
 
 /**
  * 报工Controller
@@ -48,8 +39,6 @@ public class BizDayworkController extends BaseController {
 
     @Resource
     private IBizFurnaceNoInfoService bizFurnaceNoInfoService;
-    @Resource
-    private IBizProcessService bizProcessService;
 
     @Resource
     private IBizDayworkItemService bizDayworkItemService;
@@ -59,77 +48,63 @@ public class BizDayworkController extends BaseController {
 
     @Resource
     private IBizLotService bizLotService;
-    @Resource
-    private IBizDeptProcessService bizDeptProcessService;
-    @Resource
-    HttpServletRequest request;
-
-    @Resource
-    private IBizUserEquipmentService bizUserEquipmentService;
 
     @Resource
     private IBizCarrierService bizCarrierService;
-    @Resource
-    private IBizCarrierCategoryService carrierCategoryService;
 
     @Resource
-    private IBizLotTechnologicalProcessService bizLotTechnologicalProcessService;
+    private IBizCarrierCategoryService carrierCategoryService;
 
     @Resource
     private IBizLotTechnologicalProcessDetailService bizLotTechnologicalProcessDetailService;
 
     @Resource
     private IBizProductionPlanDetailService bizProductionPlanDetailService;
-    /**
-     * 查询报工列表
+
+    /*
+    @Transactional
+    @GetMapping("/list")
+    public AjaxResult list(BizDaywork bizDaywork) {
+        List<BizDaywork>list = new ArrayList<>();
+        List<BizDaywork> dayworkList = bizDayworkService.getList(bizDaywork);
+        //查询当前工段工序
+        BizDeptProcess bizDeptProcess = new BizDeptProcess();
+        bizDeptProcess.setDeptId(bizDaywork.getDeptId());
+        List<BizDeptProcess> processList = bizDeptProcessService.getList(bizDeptProcess);
+        List<Long> ids = new ArrayList<>();
+        for (BizDeptProcess item: processList
+             ) {
+            ids.add(item.getProcessId());
+        }
+        for (BizDaywork daywork:dayworkList
+             ) {
+            //查询工段下工序有没有未周转的批次
+            List<BizDayworkItem> itemList = bizDayworkItemService.query().eq("deleted", 0).eq("daywork_id", daywork.getId()).in("process_id", ids).lt("status", 4).orderByDesc("create_time").list();
+            if (itemList.size()>0){
+                BizProcess processItem = bizProcessService.query().eq("id", itemList.get(itemList.size() - 1).getProcessId()).one();
+                daywork.setCurrentProcess(processItem);
+                //如果最新的item 只有一条 且状态是未开始,那么整个批次报工为未开始状态
+                if (daywork.getDayworkItemList().size() == 1 && daywork.getDayworkItemList().get(0).getStatus().equals("0")) {
+                    daywork.setStatus(0);
+                    //如果item有多条 且最新的一条状态为工序完成那么批次报工状态为待周转
+                } else if (daywork.getDayworkItemList().size() > 0 && daywork.getDayworkItemList().get(0).getStatus().equals("3")) {
+                    daywork.setStatus(2);
+                    //如果item有多条 且最新的一条状态为待周转那么批次报工状态为周转中
+                } else if (daywork.getDayworkItemList().size() > 0 && daywork.getDayworkItemList().get(0).getStatus().equals("4")) {
+                    daywork.setStatus(3);
+                    //判断item最新的一条是否为最后一道工序且工序已完成
+                } else if( daywork.getDayworkItemList().get(0).getStatus().equals("4") && daywork.getDayworkItemList().get(0).getProcessId().equals(daywork.getProcessSequence().get(daywork.getProcessSequence().size() - 1).getId())){
+                    daywork.setStatus(4);
+                }else {
+                    daywork.setStatus(1);
+                }
+            }
+            list.add(daywork);
+        }
+
+        return success(list);
+    }
      */
-//    @Transactional
-//    @GetMapping("/list")
-//    public AjaxResult list(BizDaywork bizDaywork) {
-//        List<BizDaywork>list = new ArrayList<>();
-//        List<BizDaywork> dayworkList = bizDayworkService.getList(bizDaywork);
-//        //查询当前工段工序
-//        BizDeptProcess bizDeptProcess = new BizDeptProcess();
-//        bizDeptProcess.setDeptId(bizDaywork.getDeptId());
-//        List<BizDeptProcess> processList = bizDeptProcessService.getList(bizDeptProcess);
-//        List<Long> ids = new ArrayList<>();
-//        for (BizDeptProcess item: processList
-//             ) {
-//            ids.add(item.getProcessId());
-//        }
-//        for (BizDaywork daywork:dayworkList
-//             ) {
-//            //查询工段下工序有没有未周转的批次
-//            List<BizDayworkItem> itemList = bizDayworkItemService.query().eq("deleted", 0).eq("daywork_id", daywork.getId()).in("process_id", ids).lt("status", 4).orderByDesc("create_time").list();
-//            if (itemList.size()>0){
-//                BizProcess processItem = bizProcessService.query().eq("id", itemList.get(itemList.size() - 1).getProcessId()).one();
-//                daywork.setCurrentProcess(processItem);
-//                //如果最新的item 只有一条 且状态是未开始,那么整个批次报工为未开始状态
-//                if (daywork.getDayworkItemList().size() == 1 && daywork.getDayworkItemList().get(0).getStatus().equals("0")) {
-//                    daywork.setStatus(0);
-//                    //如果item有多条 且最新的一条状态为工序完成那么批次报工状态为待周转
-//                } else if (daywork.getDayworkItemList().size() > 0 && daywork.getDayworkItemList().get(0).getStatus().equals("3")) {
-//                    daywork.setStatus(2);
-//                    //如果item有多条 且最新的一条状态为待周转那么批次报工状态为周转中
-//                } else if (daywork.getDayworkItemList().size() > 0 && daywork.getDayworkItemList().get(0).getStatus().equals("4")) {
-//                    daywork.setStatus(3);
-//                    //判断item最新的一条是否为最后一道工序且工序已完成
-//                } else if( daywork.getDayworkItemList().get(0).getStatus().equals("4") && daywork.getDayworkItemList().get(0).getProcessId().equals(daywork.getProcessSequence().get(daywork.getProcessSequence().size() - 1).getId())){
-//                    daywork.setStatus(4);
-//                }else {
-//                    daywork.setStatus(1);
-//                }
-//                // 只要是这个资源组都能看到(废弃原因)
-////                list.add(daywork);
-//            }
-//            list.add(daywork);
-//        }
-//
-//
-//        return success(list);
-//
-//
-//    }
 
     /**
      * 查询报工列表
@@ -161,6 +136,7 @@ public class BizDayworkController extends BaseController {
                 .list();
         List<BizProductionPlanDetail> planDetailslanDetails = new ArrayList<>();
         List<BizDaywork> dayworks = new ArrayList<>();
+        // 定义一个所有的报工集合,用于后续接收所有的某个批次的报工记录
         List<BizDayworkItem> allDayworkItems = new ArrayList<>();
         List<BizLot> lotList = new ArrayList<>();
         if (!myDayworkItems.isEmpty()) {
@@ -186,18 +162,15 @@ public class BizDayworkController extends BaseController {
             List<Long> allDayworkIdList = dayworks.stream().map(BizDaywork::getId).collect(Collectors.toList());
             // 再根据得到的daywork_id集合,获取所有的报工明细
             allDayworkItems = bizDayworkItemService.query().in("daywork_id", allDayworkIdList.isEmpty() ? Collections.singletonList(0L) : dayworks.stream().map(BizDaywork::getId).collect(Collectors.toList())).list();
-            //获取所有lotId
+            // 获取所有lotId
             List<Long> allLotsIdList = dayworks.stream().map(BizDaywork::getLotId).collect(Collectors.toList());
             lotList = bizLotService.query().in("id", allLotsIdList.isEmpty() ? Collections.singletonList(0L) : dayworks.stream().map(BizDaywork::getLotId).collect(Collectors.toList())).list();
-//            setAllDayworkItemsAndLots(myDayworkItems, keywords, dayworks, allDayworkItems, lotList, lots);
         }
 
-
         // 定义一个daywork空的list集合,用于存储符合条件(根据daywork的id,获得到对应的最新一条daywork_item,当该条daywork_item的状态值 < 5时,则添加)的daywork
         List<BizDaywork> dayworkList = new ArrayList<>();
         // 对之前获取到的 daywork 集合进行过滤,将符合条件的daywork,添加到dayworkList集合中
         for (BizDaywork item : dayworks) {
-
             if (!planDetailslanDetails.isEmpty()) {
                 //设置尾批量
                 item.setLastLotQuantity(planDetailslanDetails.stream().filter(v -> v.getId().equals(item.getProductionPlanDetailId())).collect(Collectors.toList()).get(0).getLastLotQuantity());
@@ -207,18 +180,31 @@ public class BizDayworkController extends BaseController {
             //拿到批次是否批废信息
             item.setIsWaste(lotList.stream().filter(v -> v.getId().equals(item.getLotId())).collect(Collectors.toList()).get(0).getIsWaste());
             // 根据当前的dayworkId,获取相应的daywork_item集合,并根据创建日期进行倒叙排序
+            // 原代码中对报工进行了按当前登录者user_id的判断,这样,就无法真实获取到当前批次的状态,而是当前登录者的报工状态。
+            // 如果该批次是一个人操作的,则没有问题,如果是多人(邀请报工),通过user_id过滤后,就会出现状态不准的情况。
+            // 所以需要将filter中,user_id过滤去掉
+            /*
             List<BizDayworkItem> currentDayworkItems = allDayworkItems.stream()
                     .filter(di -> di.getDayworkId().equals(item.getId()) && di.getUserId().equals(userId))
                     .sorted(Comparator.comparing(BizDayworkItem::getCreateTime).reversed())
                     .collect(Collectors.toList());
+             */
+            List<BizDayworkItem> currentDayworkItems = allDayworkItems.stream()
+                    .filter(di -> di.getDayworkId().equals(item.getId()))
+                    .sorted(Comparator.comparing(BizDayworkItem::getCreateTime).reversed())
+                    .collect(Collectors.toList());
             // 获取最后一条报工明细
             BizDayworkItem latest = currentDayworkItems.get(0);
             String status = currentDayworkItems.stream().filter(v -> v.getTechnologicalProcessDetailId().equals(latest.getTechnologicalProcessDetailId()))
                     .collect(Collectors.toList())
                     .get(0)
                     .getStatus();
+            // 原程序中这里的判断条件是:user_id == 当前登录者user_id && status < 5,但这里不应该判断登录者user_id,而是直接判断状态值,
+            // 因为,如果该批次是多人操作的,那么,该批次的报工状态,应该是所有人的,所以,这里不应该判断user_id
+            // if (latest.getUserId().equals(userId) && Integer.parseInt(status) < 5) {
+
             // 状态 == 5 时,说明已经进入周转中,那么该条daywork,将不再页面中显示,所以,通过对status的值的判断,添加到daywork集合中
-            if (latest.getUserId().equals(userId) && Integer.parseInt(status) < 5) {
+            if (Integer.parseInt(status) < 5) {
                 // 获取当前操作者自己的报工记录
                 List<BizDayworkItem> currentMyDayworkItems = myDayworkItems.stream()
                         .filter(di -> di.getDayworkId().equals(item.getId()))
@@ -228,7 +214,6 @@ public class BizDayworkController extends BaseController {
                 item.setDayworkItemList(currentMyDayworkItems);
                 dayworkList.add(item);
             }
-            //dayworkListAddItem(dayworkList, item, lotList, allDayworkItems, myDayworkItems);
         }
 
         // 如果有报工数据
@@ -276,10 +261,10 @@ public class BizDayworkController extends BaseController {
             // 直接通过daywork中的 technological_process_id 组成的集合,获取到对应的批次工艺工序清单,解决【正常】与【异常】冲突的问题
             List<Long> allTechnologicalProcessIds = dayworkList.stream().map(BizDaywork::getTechnologicalProcessId).collect(Collectors.toList());
 
-            List<BizLotTechnologicalProcessDetail> allLotTechnologicalDetails = new ArrayList<>();
-            allLotTechnologicalDetails = bizLotTechnologicalProcessDetailService.query()
+            List<BizLotTechnologicalProcessDetail> allLotTechnologicalDetails = bizLotTechnologicalProcessDetailService.query()
                     .in("lot_technological_process_id", allTechnologicalProcessIds)
                     .list();
+
             List<BizLotTechnologicalProcessDetail> technologicalDetailList = new ArrayList<>();
 
             /* ****************************** 获取 daywork 与 【材质】相关 ****************************** */
@@ -296,7 +281,7 @@ public class BizDayworkController extends BaseController {
                 //把批次的lot投产数量加到daywork里
                 allLots.stream().filter(l -> l.getId().equals(daywork.getLotId()))
                         .findFirst()
-                        .ifPresent(lot -> daywork.setProductionQuantity(lot.getProductionQuantity().intValue()));
+                        .ifPresent(lot -> daywork.setProductionQuantity(lot.getProductionQuantity()));
 
                 // 根据当前的 daywork 的 id,获取到 daywork_item 的集合,并根据 daywork_item 的 create_time 进行倒叙
                 // 之所以通过时间倒叙,目的是在后续过程中,通过get(0)的方式,获得最新的一条报工记录
@@ -369,19 +354,23 @@ public class BizDayworkController extends BaseController {
                                 // 通过get(0)的方式,获得最新的一条报工记录
                                 .filter(tp -> tp.getProcessStepNumber().equals(finishedTempDayworkItems.get(0).getProcessStepNumber()))
                                 .findFirst().orElse(null);
-                        prevProcess.setId(technologicalDetail.getProcessId());
-                        prevProcess.setProcessAlias(technologicalDetail.getProcessAlias());
-                        prevProcess.setProcessCode(technologicalDetail.getProcessCode());
-                        prevProcess.setProcessStepNumber(technologicalDetail.getProcessStepNumber());
+                        if (technologicalDetail != null) {
+                            prevProcess.setId(technologicalDetail.getProcessId());
+                            prevProcess.setProcessAlias(technologicalDetail.getProcessAlias());
+                            prevProcess.setProcessCode(technologicalDetail.getProcessCode());
+                            prevProcess.setProcessStepNumber(technologicalDetail.getProcessStepNumber());
+                        }
                     } else {
                         BizTechnologicalProcessDetail technologicalProcessDetail = processList.stream()
                                 // 通过get(0)的方式,获得最新的一条报工记录
                                 .filter(tp -> tp.getProcessStepNumber().equals(finishedTempDayworkItems.get(0).getProcessStepNumber()))
                                 .findFirst().orElse(null);
-                        prevProcess.setId(technologicalProcessDetail.getProcessId());
-                        prevProcess.setProcessAlias(technologicalProcessDetail.getProcessAlias());
-                        prevProcess.setProcessCode(technologicalProcessDetail.getProcessCode());
-                        prevProcess.setProcessStepNumber(technologicalProcessDetail.getProcessStepNumber());
+                        if (technologicalProcessDetail != null) {
+                            prevProcess.setId(technologicalProcessDetail.getProcessId());
+                            prevProcess.setProcessAlias(technologicalProcessDetail.getProcessAlias());
+                            prevProcess.setProcessCode(technologicalProcessDetail.getProcessCode());
+                            prevProcess.setProcessStepNumber(technologicalProcessDetail.getProcessStepNumber());
+                        }
                     }
                     daywork.setPrevProcess(prevProcess);
                 }
@@ -395,19 +384,23 @@ public class BizDayworkController extends BaseController {
                                 // 通过get(0)的方式,获得最新的一条报工记录
                                 .filter(tp -> tp.getProcessStepNumber().equals(tempDayworkItems.get(0).getProcessStepNumber()))
                                 .findFirst().orElse(null);
-                        tempProcess.setId(technologicalDetail.getProcessId());
-                        tempProcess.setProcessAlias(technologicalDetail.getProcessAlias());
-                        tempProcess.setProcessCode(technologicalDetail.getProcessCode());
-                        tempProcess.setProcessStepNumber(technologicalDetail.getProcessStepNumber());
+                        if (technologicalDetail != null) {
+                            tempProcess.setId(technologicalDetail.getProcessId());
+                            tempProcess.setProcessAlias(technologicalDetail.getProcessAlias());
+                            tempProcess.setProcessCode(technologicalDetail.getProcessCode());
+                            tempProcess.setProcessStepNumber(technologicalDetail.getProcessStepNumber());
+                        }
                     } else {
                         BizTechnologicalProcessDetail technologicalProcessDetail = processList.stream()
                                 // 通过get(0)的方式,获得最新的一条报工记录
                                 .filter(tp -> tp.getProcessStepNumber().equals(tempDayworkItems.get(0).getProcessStepNumber()))
                                 .findFirst().orElse(null);
-                        tempProcess.setId(technologicalProcessDetail.getProcessId());
-                        tempProcess.setProcessAlias(technologicalProcessDetail.getProcessAlias());
-                        tempProcess.setProcessCode(technologicalProcessDetail.getProcessCode());
-                        tempProcess.setProcessStepNumber(technologicalProcessDetail.getProcessStepNumber());
+                        if (technologicalProcessDetail != null) {
+                            tempProcess.setId(technologicalProcessDetail.getProcessId());
+                            tempProcess.setProcessAlias(technologicalProcessDetail.getProcessAlias());
+                            tempProcess.setProcessCode(technologicalProcessDetail.getProcessCode());
+                            tempProcess.setProcessStepNumber(technologicalProcessDetail.getProcessStepNumber());
+                        }
                     }
                     // 最新的一条报工记录对应的工序,就是当前批次的当前工序
                     daywork.setCurrentProcess(tempProcess);
@@ -753,7 +746,7 @@ public class BizDayworkController extends BaseController {
     /**
      * 导出报工列表
      */
-//    @PreAuthorize("@ss.hasPermi('business:daywork:export')")
+    //    @PreAuthorize("@ss.hasPermi('business:daywork:export')")
     @Log(title = "报工", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, BizDaywork bizDaywork) throws NoSuchFieldException, IllegalAccessException {
@@ -765,7 +758,7 @@ public class BizDayworkController extends BaseController {
     /**
      * 获取报工详细信息
      */
-//    @PreAuthorize("@ss.hasPermi('business:daywork:query')")
+    //    @PreAuthorize("@ss.hasPermi('business:daywork:query')")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") Long id) {
         return success(bizDayworkService.getById(id));
@@ -774,7 +767,7 @@ public class BizDayworkController extends BaseController {
     /**
      * 新增报工
      */
-//    @PreAuthorize("@ss.hasPermi('business:daywork:add')")
+    //    @PreAuthorize("@ss.hasPermi('business:daywork:add')")
     @Log(title = "报工", businessType = BusinessType.INSERT)
     @Transactional
     @PostMapping
@@ -905,10 +898,10 @@ public class BizDayworkController extends BaseController {
      * 非手续扫码获取批次报工详细信息
      * 扫码开始新批次时,调用
      */
-//    @PreAuthorize("@ss.hasPermi('business:daywork:query')")
+    //    @PreAuthorize("@ss.hasPermi('business:daywork:query')")
     @Transactional
     @Log(title = "报工", businessType = BusinessType.SELECT)
-//    @GetMapping(value = "/showDaywork")
+    // @GetMapping(value = "/showDaywork")
     public AjaxResult getDayworkByCarrier(BizDayworkItem bizDayworkItem) {
         // 判断是否被领取
         List<BizCarrier> availableCarrierList = bizDayworkService.getAvailableCarrierList(new BizCarrier());
@@ -938,10 +931,12 @@ public class BizDayworkController extends BaseController {
                 lastItem = item;
             }
         }
-//        dayworkItemByCarrier.get(0).setDaywork(daywork.get(0));
+        // dayworkItemByCarrier.get(0).setDaywork(daywork.get(0));
 
-// 将最后一个对象添加到新数组中
-        newItemList.add(lastItem);
+        // 将最后一个对象添加到新数组中
+        if (lastItem != null) {
+            newItemList.add(lastItem);
+        }
         if (!newItemList.isEmpty()) {
             newItemList.remove(0);
         }
@@ -1034,20 +1029,19 @@ public class BizDayworkController extends BaseController {
     /**
      * 非首序扫码添加批次
      */
-//    @PreAuthorize("@ss.hasPermi('business:daywork:add')")
+    // @PreAuthorize("@ss.hasPermi('business:daywork:add')")
     @Log(title = "报工", businessType = BusinessType.INSERT)
     @Transactional
-//    @PostMapping("/showDayworkSave")
+    // @PostMapping("/showDayworkSave")
     public AjaxResult showDaywork(@RequestBody List<BizDaywork> bizDaywork) {
 
         List<BizDayworkItem> list = new ArrayList<>();
-        for (BizDaywork item : bizDaywork
-        ) {
+        for (BizDaywork item : bizDaywork) {
             BizDaywork newDaywork = new BizDaywork();
             newDaywork.setId(item.getId());
             BizDaywork daywork = bizDayworkService.getList(newDaywork).get(0);
 
-            /** 添加一条报工批次时生成一条未开始的Item */
+            /* 添加一条报工批次时生成一条未开始的Item */
             BizDayworkItem bizDayworkItem = new BizDayworkItem();
             bizDayworkItem.setDayworkId(daywork.getId());
             bizDayworkItem.setProductionPlanDetailId(daywork.getProductionPlanDetailId());
@@ -1058,7 +1052,7 @@ public class BizDayworkController extends BaseController {
             bizDayworkItem.setNickName(user.getNickName());
             bizDayworkItem.setQualifiedNum(item.getProcessQualifiedNum());
             bizDayworkItem.setProdNum(item.getProcessQualifiedNum());
-            //0114 这里要把前段显示的item的processId传进来
+            // 0114 这里要把前段显示的item的processId传进来
             bizDayworkItem.setProcessId(item.getProcessId());
             bizDayworkItem.setTechnologicalProcessDetailId(item.getTechnologicalProcessDetailId());
             bizDayworkItem.setDeptId(item.getDeptId());
@@ -1106,7 +1100,7 @@ public class BizDayworkController extends BaseController {
             bizDayworkItem.setUserName(user.getUserName());
             bizDayworkItem.setProdNum(l.getQualifiedNum());
             bizDayworkItem.setNickName(user.getNickName());
-            //0114 这里要把前段显示的item的processId传进来
+            // 0114 这里要把前段显示的item的processId传进来
             bizDayworkItem.setProcessId(l.getDaywork().getProcessId());
             bizDayworkItem.setTechnologicalProcessDetailId(l.getDaywork().getTechnologicalProcessDetailId());
             bizDayworkItem.setDeptId(l.getDeptId());
@@ -1122,7 +1116,7 @@ public class BizDayworkController extends BaseController {
     /**
      * 修改报工
      */
-//    @PreAuthorize("@ss.hasPermi('business:daywork:edit')")
+    // @PreAuthorize("@ss.hasPermi('business:daywork:edit')")
     @Log(title = "报工", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody BizDaywork bizDaywork) throws NoSuchFieldException, IllegalAccessException {
@@ -1133,7 +1127,7 @@ public class BizDayworkController extends BaseController {
     /**
      * 删除报工
      */
-//    @PreAuthorize("@ss.hasPermi('business:daywork:remove')")
+    // @PreAuthorize("@ss.hasPermi('business:daywork:remove')")
     @Log(title = "报工", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable List<Long> ids) {
@@ -1144,7 +1138,7 @@ public class BizDayworkController extends BaseController {
     /**
      * 取消周转
      */
-//    @PreAuthorize("@ss.hasPermi('business:daywork:remove')")
+    // @PreAuthorize("@ss.hasPermi('business:daywork:remove')")
     @Log(title = "报工", businessType = BusinessType.DELETE)
     @DeleteMapping("/turnoverDelete")
     @Transactional
@@ -1171,11 +1165,11 @@ public class BizDayworkController extends BaseController {
                 .eq("dept_id", carrier.getDeptId())
                 .list();
 
-// 按daywork_id分组
+        // 按daywork_id分组
         Map<Long, List<BizDayworkItem>> groupedByDayworkId = bizDayworkItemList.stream()
                 .collect(Collectors.groupingBy(BizDayworkItem::getDayworkId));
 
-// 根据biz_daywork_item里的start_time字段倒序排序,取第一个,仅当状态为7时才保留
+        // 根据biz_daywork_item里的start_time字段倒序排序,取第一个,仅当状态为7时才保留
         List<BizDayworkItem> dayworkItemList = groupedByDayworkId.values().stream()
                 .map(items -> {
                     items.sort(Comparator.comparing(BizDayworkItem::getCreateTime).reversed()); // 在每个分组内按时间倒序排序

+ 28 - 10
src/main/java/cn/ezhizao/project/business/product/controller/BizDayworkItemController.java

@@ -513,7 +513,7 @@ public class BizDayworkItemController extends BaseController {
         if (bizDayworkItem.getStatus().equals("3")) {
             //校验当前序是否还有未完成的报工
             List<BizDayworkItem> items = bizDayworkItemService.query().eq("daywork_id", bizDayworkItem.getDayworkId()).eq("process_id", bizDayworkItem.getProcessId()).lt("status", 2).ne("id", bizDayworkItem.getId()).list();
-            if (items.size() > 0) {
+            if (!items.isEmpty()) {
                 return error("当前工序还有其他未完成的报工,不允许工序完成");
             }
             //工序结束时将合格数保存
@@ -650,7 +650,6 @@ public class BizDayworkItemController extends BaseController {
         return toAjax(saveOrUpdateBatch(bizDayworkItemService, bizDayworkItem, oldList));
     }
 
-
     @PutMapping("/updateBatchBack")
     public AjaxResult updateBatchBack(@RequestBody List<BizDayworkItem> bizDayworkItem) throws NoSuchFieldException, IllegalAccessException {
         List list = new ArrayList<>();
@@ -681,7 +680,7 @@ public class BizDayworkItemController extends BaseController {
         bizDayworkItem.setNickName(user.getNickName());
 //          bizDayworkItem.setTenantId(Long.valueOf(tenantId));
         boolean b = bizDayworkItemService.saveOrUpdate(bizDayworkItem);
-        if (bizDayworkItem.getCollaborationList().size() > 0) {
+        if (!bizDayworkItem.getCollaborationList().isEmpty()) {
             for (BizDayworkItemCollaboration collaboration : bizDayworkItem.getCollaborationList()) {
                 collaboration.setDayworkId(bizDayworkItem.getDayworkId());
                 collaboration.setDayworkItemId(bizDayworkItem.getId());
@@ -804,7 +803,7 @@ public class BizDayworkItemController extends BaseController {
                 }
             }
             //把被邀请人加进每个资源组
-            if (filterGroupIds.size() > 0) {
+            if (!filterGroupIds.isEmpty()) {
                 flag = true;
                 for (Long id : filterGroupIds) {
                     BizProductionResourceGroupDetail newDetail = new BizProductionResourceGroupDetail();
@@ -853,7 +852,7 @@ public class BizDayworkItemController extends BaseController {
         }
     }
 
-    //    @PreAuthorize("@ss.hasPermi('business:dayworkItem:add')")
+    // @PreAuthorize("@ss.hasPermi('business:dayworkItem:add')")
     @Log(title = "报工记录", businessType = BusinessType.INSERT)
     @PostMapping("/replacing")
     public AjaxResult replacing(@RequestBody BizDayworkItem bizDayworkItem) throws NoSuchFieldException, IllegalAccessException {
@@ -863,7 +862,7 @@ public class BizDayworkItemController extends BaseController {
     /**
      * 修改报工记录
      */
-//    @PreAuthorize("@ss.hasPermi('business:dayworkItem:edit')")
+    // @PreAuthorize("@ss.hasPermi('business:dayworkItem:edit')")
     @Log(title = "报工记录", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody BizDayworkItem bizDayworkItem) throws NoSuchFieldException, IllegalAccessException {
@@ -1008,23 +1007,42 @@ public class BizDayworkItemController extends BaseController {
         // 获取箱子关联的所有批次
         boolean batch = true;
 //        bizDayworkItem.getCarrierId();
+        // 根据 daywork_item 中的 daywork_id,获取到所有未解绑的【daywork 与 箱子】的集合,通过这个集合,可以知道该批次下绑定了多少个箱子
         List<BizDayworkCarrier> dayworkCarriers = bizDayworkCarrierService.query().eq("is_changed", 0).eq("daywork_id", bizDayworkItem.getDayworkId()).list();
+        // 再根据上面获得到的数据,通过箱子的id(carrier_id),再进行查找,有多少个批次与该箱子绑定,这是因为存在一箱多批的情况。这样就获得到了所有的批次
         List<BizDayworkCarrier> allCarries = bizDayworkCarrierService.query().eq("is_changed", 0).in("carrier_id", dayworkCarriers.isEmpty() ? Collections.singletonList(0L) : dayworkCarriers.stream().map(BizDayworkCarrier::getCarrierId).collect(Collectors.toList())).list();
-        // 关联批次的所有最后一条报工
+
+        // 根据获取到的所有批次的id,查询出所有批次的报工信息,并且状态是【"0", "1", "2", "3"】,按状态值倒序、创建日期的倒序,对数据进行排序,得到的数据是还未周转的数据。
+        // 后续会通过该集合,获取某批次的最后一条报工信息
         List<BizDayworkItem> bizDayworkItems = bizDayworkItemService.query().in("daywork_id", allCarries.isEmpty() ? Collections.singletonList(0L) : allCarries.stream().map(BizDayworkCarrier::getDayworkId).collect(Collectors.toList())).in("status", Arrays.asList("0", "1", "2", "3")).orderByDesc("status").orderByDesc("create_time").list();
+
+        // 根据获取到的所有批次的id,查询出所有批次的报工信息,不需要判断状态
         List<BizDayworkItem> bizDayworkItemList = bizDayworkItemService.query().in("daywork_id", allCarries.isEmpty() ? Collections.singletonList(0L) : allCarries.stream().map(BizDayworkCarrier::getDayworkId).collect(Collectors.toList())).list();
+
+        // 获取所有的 daywork 数据集合
         List<BizDaywork> bizDayworks = bizDayworkService.query().in("id", allCarries.isEmpty() ? Collections.singletonList(0L) : allCarries.stream().map(BizDayworkCarrier::getDayworkId).collect(Collectors.toList())).list();
+        // 遍历 daywork 数据集合
         for (BizDaywork v : bizDayworks) {
+            // 获取该批次的最后一条报工
             BizDayworkItem lastItem = bizDayworkItems.stream().filter(l -> l.getDayworkId().equals(v.getId())).findFirst().orElse(null);
+            // 如果最后一条报工信息存在,并且报工状态为:3,则说明该报工已经工序完成
             if (lastItem != null && lastItem.getStatus().equals("3")) {
+                // 根据当前批次的id,获取该批次下的工序id与最后一条报工的工序id相同的所有报工信息
+                // 因为同一工序可能存在多次报工,所以需要获取该批次下,该工序的所有报工信息,后续会进行合格数的统计
                 List<BizDayworkItem> allItem = bizDayworkItemList.stream().filter(l -> l.getDayworkId().equals(v.getId()) && l.getTechnologicalProcessDetailId().equals(lastItem.getTechnologicalProcessDetailId())).collect(Collectors.toList());
+                // 根据获得到的某工序的报工信息,进行合格数统计
                 Integer lot = allItem.stream().mapToInt(BizDayworkItem::getQualifiedNum).sum();
+
+                // 实例化一个报工信息对象,用于保存【周转】的报工记录
                 BizDayworkItem bizItem = new BizDayworkItem();
                 bizItem.setDayworkId(lastItem.getDayworkId());
                 bizItem.setProcessId(lastItem.getProcessId());
                 bizItem.setTechnologicalProcessDetailId(lastItem.getTechnologicalProcessDetailId());
                 bizItem.setStatus(bizDayworkItem.getStatus());
-                if (bizDayworkItem.getStatus().equals("7")||bizDayworkItem.getStatus().equals("4")) {
+
+                // 如果报工状态为:7(已送达)或者4(待周转),则需要设置对应的daywork的当前部门id,以及合格数
+                // 这里的状态值4/7,是由前端传递过来的。
+                if (bizDayworkItem.getStatus().equals("7") || bizDayworkItem.getStatus().equals("4")) {
                     v.setDeptId(bizDayworkItem.getDeptId());
                     int sum = bizDayworkItems.stream()
                             .filter(l -> l.getProcessStepNumber().equals(bizDayworkItem.getProcessStepNumber()))
@@ -1033,6 +1051,7 @@ public class BizDayworkItemController extends BaseController {
                     v.setTemporaryProcessQualifiedNum(sum);
                     bizDayworkService.updateById(v);
                 }
+                // 如果是单批单改换,则设置form_daywork_item_id为1,表示没有原来的报工
                 if(v.getIsAmend()==1){
                     bizItem.setFormDayworkItemId(1L);
                 }
@@ -1076,7 +1095,7 @@ public class BizDayworkItemController extends BaseController {
 
                     List<BizProductionResourceGroupSubPlan> groupSubPlanList = bizProductionResourceGroupSubPlanService.getAotList(groupSubPlan);
                     //如果没分配
-                    if(groupSubPlanList.size()==0){
+                    if(groupSubPlanList.isEmpty()){
                         //查产品id
                         BizProductionPlanDetail productionPlanDetail = bizProductionPlanDetailService.getOne(new QueryWrapper<BizProductionPlanDetail>().eq("id", bizDayworkItem.getProductionPlanDetailId()));
                         //存放保存的subPlanList
@@ -1093,7 +1112,6 @@ public class BizDayworkItemController extends BaseController {
                         }
                         bizProductionResourceGroupSubPlanService.saveBatch(subPlanList);
                     }
-
                 }
             }
         }