ソースを参照

Merge remote-tracking branch 'origin/master'

ezhizao\ezhizao_zx 1 年間 前
コミット
18d96ea44d

+ 3 - 0
src/main/java/cn/ezhizao/project/business/outsource/domain/BizOutsourcedOrderDetail.java

@@ -109,4 +109,7 @@ public class BizOutsourcedOrderDetail extends BaseEntity
     @ApiModelProperty("箱子")
     @TableField(exist = false)
     private List<BizCarrier> carriers;
+
+    @ApiModelProperty("工序名")
+    private String processNames;
 }

+ 27 - 0
src/main/java/cn/ezhizao/project/business/product/controller/BizCarrierController.java

@@ -306,6 +306,33 @@ public class BizCarrierController extends BaseController {
         return success(curCarrier);
     }
 
+    // 检测检查箱号
+    @Log(title = "检测检查箱号", businessType = BusinessType.SELECT)
+    @PostMapping("/checkCarrierForInspection")
+    public AjaxResult checkCarrierForInspection (@RequestBody BizDaywork bizDaywork) {
+        BizCarrier curCarrier = bizCarrierService.getOne(new QueryWrapper<BizCarrier>().eq("code", bizDaywork.getNewCarrierCode()));
+        if (curCarrier == null) {
+            return error("该箱码不存在,请扫载具码");
+        }
+        curCarrier.setCarrierId(curCarrier.getId());
+        curCarrier.setCarrierCode(curCarrier.getCode());
+        List<BizCarrierReject> carrierRejects = bizCarrierRejectService.query().eq("carrier_id",curCarrier.getId()).orderByDesc("create_time").list();
+        if (!carrierRejects.isEmpty() && carrierRejects.get(0).getIsAbandoned() == 1) {
+            return error("该载具已被废弃");
+        }
+        // 假设不是检查箱则返回错误
+        if(!curCarrier.getIsInspection().equals(1)) {
+            return error("该载具不是检查载具");
+        }
+        // 假设已绑定其他批次则返回错误
+        List<BizDayworkCarrier> bizDayworkCarriers = bizDayworkCarrierService.query().eq("carrier_id", curCarrier.getId()).eq("is_changed", 0).list();
+        if (bizDayworkCarriers.stream().anyMatch(v -> !v.getDayworkId().equals(bizDaywork.getId()))) {
+            return error("该载具已绑定其他批次");
+        }
+        // 都没有把箱信息返回到前台
+        return success(curCarrier);
+    }
+
     // 【checkCarrier 原有代码 备份】
     /*
     public AjaxResult checkCarrier(@RequestBody BizDaywork bizDaywork) {

+ 255 - 28
src/main/java/cn/ezhizao/project/business/product/controller/BizProcessInspecionController.java

@@ -1,7 +1,6 @@
 package cn.ezhizao.project.business.product.controller;
 
 import java.text.SimpleDateFormat;
-import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 import javax.annotation.Resource;
@@ -15,15 +14,15 @@ import cn.ezhizao.framework.web.domain.AjaxResult;
 import cn.ezhizao.framework.web.page.TableDataInfo;
 import cn.ezhizao.project.business.carrierReject.domain.BizCarrierReject;
 import cn.ezhizao.project.business.carrierReject.service.IBizCarrierRejectService;
+import cn.ezhizao.project.business.outsource.domain.BizOutsourcedOrderDetail;
+import cn.ezhizao.project.business.outsource.domain.BizOutsourcedOrderDetailProcess;
+import cn.ezhizao.project.business.outsource.service.IBizOutsourcedOrderDetailService;
 import cn.ezhizao.project.business.product.domain.*;
-import cn.ezhizao.project.business.product.mapper.BizDayworkCarrierMapper;
 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 cn.ezhizao.project.system.service.ISysUserService;
-import com.baomidou.mybatisplus.annotation.TableField;
-import org.apache.xmlbeans.impl.soap.Detail;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
@@ -75,6 +74,8 @@ public class BizProcessInspecionController extends BaseController {
 
     @Resource
     private IBizCarrierService bizCarrierService;
+    @Resource
+    private IBizCarrierCategoryService bizCarrierCategoryService;
 
     @Resource
     private IBizProductService productService;
@@ -82,6 +83,10 @@ public class BizProcessInspecionController extends BaseController {
     private IBizReturnReceiptDetailService bizReturnReceiptDetailService;
     @Resource
     private IBizProductionPlanDetailService productionPlanDetailService;
+    @Resource
+    private IBizProcessInspectionDetailService processInspectionDetailService;
+    @Resource
+    private IBizOutsourcedOrderDetailService bizOutsourcedOrderDetailService;
 
     /**
      * 查询序检主列表
@@ -90,14 +95,14 @@ public class BizProcessInspecionController extends BaseController {
     @PostMapping("/list")
     public TableDataInfo list(@RequestBody BizProcessInspecion bizProcessInspecion) throws NoSuchFieldException, IllegalAccessException {
 
-        if(bizProcessInspecion.getStartTime()!=null) {
+        if (bizProcessInspecion.getStartTime() != null) {
             Date startTimeDate = bizProcessInspecion.getStartTime();
             // 使用 SimpleDateFormat 格式化 Date 对象为特定格式的字符串
             SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
-            String time= dateFormat.format(startTimeDate);
+            String time = dateFormat.format(startTimeDate);
 
-            bizProcessInspecion.setStartTimeString(time+ " 00:00:00");
-            bizProcessInspecion.setEndTimeString(time+ " 23:59:59");
+            bizProcessInspecion.setStartTimeString(time + " 00:00:00");
+            bizProcessInspecion.setEndTimeString(time + " 23:59:59");
         }
 
 
@@ -111,14 +116,14 @@ public class BizProcessInspecionController extends BaseController {
 //    @PreAuthorize("@ss.hasPermi('business:inspecion:list')")
     @PostMapping("/outsourcedlist")
     public TableDataInfo outsourcedlist(@RequestBody BizProcessInspecion bizProcessInspecion) throws NoSuchFieldException, IllegalAccessException {
-        if(bizProcessInspecion.getStartTime()!=null) {
+        if (bizProcessInspecion.getStartTime() != null) {
             Date startTimeDate = bizProcessInspecion.getStartTime();
             // 使用 SimpleDateFormat 格式化 Date 对象为特定格式的字符串
             SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
-            String time= dateFormat.format(startTimeDate);
+            String time = dateFormat.format(startTimeDate);
 
-            bizProcessInspecion.setStartTimeString(time+ " 00:00:00");
-            bizProcessInspecion.setEndTimeString(time+ " 23:59:59");
+            bizProcessInspecion.setStartTimeString(time + " 00:00:00");
+            bizProcessInspecion.setEndTimeString(time + " 23:59:59");
         }
         List<BizProcessInspecion> list = bizProcessInspecionService.getOutsourcedlist(bizProcessInspecion);
         return getDataTable(list);
@@ -183,8 +188,10 @@ public class BizProcessInspecionController extends BaseController {
     public AjaxResult selectOutsourcedInspecion(@RequestBody BizProcessInspecion processInspecion) throws NoSuchFieldException, IllegalAccessException {
         List<BizDayworkItemConsult> itemConsults = bizDayworkItemConsultService.query().eq("process_inspection_id", processInspecion.getId()).eq("is_outsourced_inspection", 1).list();
         List<BizDayworkItemReject> itemRejects = bizDayworkItemRejectService.query().eq("process_inspection_id", processInspecion.getId()).list();
+        List<BizProcessInspectionDetail> reject = processInspectionDetailService.query().eq("process_inspection_id", processInspecion.getId()).list();
         processInspecion.setDayworkItemConsults(itemConsults);
         processInspecion.setDayworkItemRejects(itemRejects);
+        processInspecion.setRejects(reject);
 
         BizDayworkItem dayworkItem = bizDayworkItemService.selById(processInspecion.getDayworkItemId());
 
@@ -212,7 +219,7 @@ public class BizProcessInspecionController extends BaseController {
     /**
      * 新增外协序检信息
      */
-    @PostMapping("/saveOutsourcedInspecion")
+//    @PostMapping("/saveOutsourcedInspecion")
     @Transactional
     public AjaxResult saveOutsourcedInspecion(@RequestBody BizProcessInspecion processInspecion) throws NoSuchFieldException, IllegalAccessException {
         //根据lot信息保存序检表
@@ -242,13 +249,15 @@ public class BizProcessInspecionController extends BaseController {
         processInspecion.setDeptId(daywork.getDeptId());
         processInspecion.setProductId(processInspecion.getLot().getProductId());
         processInspecion.setTechnologicalProcessId(processInspecion.getLot().getTechnologicalProcessId());
+        processInspecion.setInspectionCarrierCode(processInspecion.getInspectionCarrierCode());
+        processInspecion.setInspectionCarrierId(processInspecion.getInspectionCarrierId());
         if (processInspecion.getStartTime() == null) {
             processInspecion.setStartTime(new Date());
         }
 
         if (processInspecion.getStatus() != 0) {
             processInspecion.setEndTime(new Date());
-
+            processInspecion.setFirstUpdaterId(processInspecion.getFirstUpdaterId() == null || processInspecion.getFirstUpdaterId().equals(0L) ? user != null ? user.getUserId() : 0L : processInspecion.getFirstUpdaterId());
         }
 
         //保存
@@ -341,7 +350,6 @@ public class BizProcessInspecionController extends BaseController {
             processInspecion.setEndTime(new Date());
 
         }
-
         //保存
         bizProcessInspecionService.saveOrUpdate(processInspecion);
 
@@ -397,11 +405,153 @@ public class BizProcessInspecionController extends BaseController {
         return success(bizDayworkItemService.saveOrUpdate(dayworkItem) && bizDayworkItemConsultService.saveOrUpdateBatch(consults));
     }
 
+    private boolean checkOutsourceDayworkItem(Long outsourceOrderDetailId) {
+        // 检测外协序检后是否已经周转到下一工序。
+        BizDayworkItem bizDayworkItem = bizDayworkItemService.query().eq("outsource_detail_id", outsourceOrderDetailId).orderByDesc("process_step_number").one();
+        BizDaywork bizDaywork = bizDayworkService.getById(bizDayworkItem.getDayworkId());
+        List<BizDayworkItem> items = bizDayworkItemService.query().eq("daywork_id", bizDayworkItem.getDayworkId()).list();
+        // 下序已经报工
+        // 下序未报工
+        return items.stream().noneMatch(v -> v.getCreateTime().compareTo(bizDayworkItem.getCreateTime()) > 0 && v.getStatus().compareTo("0") >= 0 && v.getStatus().compareTo("3") <= 0);
+    }
+
+    @Transactional
+    @PostMapping("/saveOutsourcedInspecion")
+    public AjaxResult saveOutsourcedInspectionV2(@RequestBody BizProcessInspecion processInspecion) throws NoSuchFieldException, IllegalAccessException {
+        //根据lot信息保存序检表
+        BizDaywork daywork = bizDayworkService.query().eq("lot_code", processInspecion.getLot().getLotCode()).one();
+        BizProduct product = bizProductService.getById(processInspecion.getLot().getProductId());
+        SysUser technicianUser = sysUserService.selectUserById(product.getTechnicianId());
+        BizDayworkItem dayworkItem = bizDayworkItemService.getById(processInspecion.getLot().getDayworkItemId());
+        BizReturnReceiptDetail bizReturnReceiptDetail = bizReturnReceiptDetailService.query().eq("daywork_id", dayworkItem.getDayworkId()).eq("technological_process_detail_id", dayworkItem.getTechnologicalProcessDetailId()).eq("deleted", 0).one();
+
+        SysUser user = sysUserService.selectUserById(processInspecion.getUser().getUserId());
+        processInspecion.setReturnReceiptDetailId(bizReturnReceiptDetail.getId());
+        processInspecion.setUserId(user == null ? 0L : user.getUserId());
+        processInspecion.setNickName(user == null ? "" : user.getNickName());
+        processInspecion.setCarrierId(processInspecion.getLot().getCarrierId());
+        processInspecion.setCarrierCode(processInspecion.getLot().getCarrierCode());
+        processInspecion.setDayworkId(daywork.getId());
+        processInspecion.setProductionPlanId(daywork.getProductionPlanId());
+        processInspecion.setDayworkItemId(dayworkItem.getId());
+        processInspecion.setProductionPlanDetailId(daywork.getProductionPlanDetailId());
+        processInspecion.setProductionPlanDetailSubDetailId(daywork.getProductionPlanDetailSubDetailId());
+        processInspecion.setLotId(processInspecion.getLot().getId());
+        processInspecion.setLotCode(processInspecion.getLot().getLotCode());
+        processInspecion.setDeptId(daywork.getDeptId());
+        processInspecion.setProductId(processInspecion.getLot().getProductId());
+        processInspecion.setTechnologicalProcessId(processInspecion.getLot().getTechnologicalProcessId());
+        processInspecion.setInspectionCarrierCode(processInspecion.getInspectionCarrierCode());
+        processInspecion.setInspectionCarrierId(processInspecion.getInspectionCarrierId());
+        if (processInspecion.getStartTime() == null) {
+            processInspecion.setStartTime(new Date());
+        }
+        if (processInspecion.getStatus() != 0) {
+            processInspecion.setEndTime(new Date());
+            processInspecion.setFirstUpdaterId(processInspecion.getFirstUpdaterId() == null || processInspecion.getFirstUpdaterId().equals(0L) ? user != null ? user.getUserId() : 0L : processInspecion.getFirstUpdaterId());
+
+        }
+        if (!checkOutsourceDayworkItem(processInspecion.getOutsourceOrderDetailId())) {
+            return error("编辑失败,下序已经生产加工");
+        }
+
+        BizCarrier carrier = bizCarrierService.query().eq("id", processInspecion.getInspectionCarrierId()).one();
+        List<BizDayworkCarrier> dayworkCarriers = bizDayworkCarrierService.query().eq("carrier_id", carrier.getId()).eq("is_changed", 0).list();
+        if (dayworkCarriers.stream().anyMatch(v -> !v.getDayworkId().equals(processInspecion.getDayworkId()))) {
+            return error("检测载具已绑定其他批次");
+        }
+
+        //保存
+        bizProcessInspecionService.saveOrUpdate(processInspecion);
+
+        if (dayworkCarriers.stream().noneMatch(v -> v.getDayworkId().equals(processInspecion.getDayworkId())) && (processInspecion.getIsInspectionCarrierChanged() == null || processInspecion.getIsInspectionCarrierChanged().equals(0))) {
+            // 该检测载具需要绑定到当前批次
+            BizDayworkCarrier newDayworkCarrier = new BizDayworkCarrier();
+            newDayworkCarrier.setDayworkId(processInspecion.getDayworkId());
+            newDayworkCarrier.setCarrierCode(carrier.getCode());
+            newDayworkCarrier.setCarrierId(carrier.getId());
+            newDayworkCarrier.setLotCode(processInspecion.getLotCode());
+            newDayworkCarrier.setLotId(processInspecion.getLotId());
+            newDayworkCarrier.setProductionPlanDetailId(processInspecion.getProductionPlanDetailId());
+            newDayworkCarrier.setProcessInspectionId(processInspecion.getId());
+            bizDayworkCarrierService.save(newDayworkCarrier);
+        }
+
+        //保存废品信息
+        List<BizProcessInspectionDetail> rejects = processInspecion.getRejects();
+        //保存前先删除原先废品信息
+        BizDayworkItemReject rej = new BizDayworkItemReject();
+        rej.setProcessInspectionId(processInspecion.getId());
+        bizDayworkItemRejectService.removeReject(rej);
+        BizProcessInspectionDetail inspectionDetail = new BizProcessInspectionDetail();
+        inspectionDetail.setProcessInspectionId(processInspecion.getId());
+        processInspectionDetailService.physicalDelete(inspectionDetail);
+        BizDayworkItemReject newRej = new BizDayworkItemReject();
+        newRej.setRejectNum(0L);
+
+        if (rejects != null && rejects.size() > 0) {
+            for (BizProcessInspectionDetail reject : rejects) {
+                reject.setId(null);
+                reject.setUserId(user == null ? 0L : user.getUserId());
+                reject.setProcessInspectionId(processInspecion.getId());
+                reject.setDayworkId(0L);
+                reject.setProductionPlanId(daywork.getProductionPlanId());
+                reject.setProductionPlanDetailId(daywork.getProductionPlanDetailId());
+                reject.setProductionPlanDetailSubDetailId(daywork.getProductionPlanDetailSubDetailId());
+                reject.setLotId(processInspecion.getLot().getId());
+                reject.setDayworkItemId(dayworkItem.getId());
+                newRej.setRejectNum(newRej.getRejectNum() + reject.getRejectNum());
+                newRej.setUserId(user == null ? 0L : user.getUserId());
+                newRej.setProcessInspectionId(processInspecion.getId());
+                newRej.setDayworkId(0L);
+                newRej.setProductionPlanId(daywork.getProductionPlanId());
+                newRej.setProductionPlanDetailId(daywork.getProductionPlanDetailId());
+                newRej.setProductionPlanDetailSubDetailId(daywork.getProductionPlanDetailSubDetailId());
+                newRej.setLotId(processInspecion.getLot().getId());
+                newRej.setDayworkItemId(dayworkItem.getId());
+                newRej.setReason("外协检查废品");
+                newRej.setDeptId(processInspecion.getDeptId());
+            }
+        }
+        processInspectionDetailService.saveBatch(rejects);
+        bizDayworkItemRejectService.save(newRej);
+        //保存咨询信息
+
+        List<BizDayworkItemConsult> consults = processInspecion.getDayworkItemConsults();
+        if (consults != null && consults.size() > 0) {
+            for (BizDayworkItemConsult consult : consults) {
+                consult.setUserId(user == null ? 0L : user.getUserId());
+                consult.setNickName(user == null ? "" : user.getNickName());
+                consult.setDayworkId(daywork.getId());
+                consult.setProcessInspectionId(processInspecion.getId());
+                consult.setProductionPlanId(daywork.getProductionPlanId());
+                consult.setProductionPlanDetailId(daywork.getProductionPlanDetailId());
+                consult.setProductionPlanDetailSubDetailId(daywork.getProductionPlanDetailSubDetailId());
+                consult.setLotId(processInspecion.getLot().getId());
+                consult.setLotCode(processInspecion.getLot().getLotCode());
+                consult.setDayworkId(daywork.getId());
+                consult.setDayworkItemId(dayworkItem.getId());
+                consult.setProductId(processInspecion.getLot().getProductId());
+                consult.setProductDescription(processInspecion.getLot().getProductDescription());
+                consult.setTechnologicalProcessId(processInspecion.getLot().getTechnologicalProcessId());
+                consult.setTechnologicalProcessDetailId(dayworkItem.getTechnologicalProcessDetailId());
+                consult.setProcessId(dayworkItem.getProcessId());
+                consult.setProcessAlias(processInspecion.getLot().getProcessAlias());
+                consult.setIsOutsourcedInspection(1);
+                consult.setTechnicianId(technicianUser == null ? 0L : technicianUser.getUserId());
+            }
+        }
+
+        //修改daywaork信息
+        dayworkItem.setIsProcessInspection(1);
+        return success(bizDayworkItemService.saveOrUpdate(dayworkItem) && bizDayworkItemConsultService.saveOrUpdateBatch(consults));
+    }
+
 
 //    /**
 //     * 根据箱号查询是否为一箱多批
 //     */
-      //原代码备份
+    //原代码备份
 //    @PostMapping("/getCarrierInfo")
 //    public AjaxResult getCarrierInfo(@RequestBody BizDayworkCarrier dayworkCarrier) throws NoSuchFieldException, IllegalAccessException {
 //        List<BizDayworkCarrier> list = bizDayworkCarrierService.getList(dayworkCarrier);
@@ -415,27 +565,27 @@ public class BizProcessInspecionController extends BaseController {
     /**
      * 根据箱号查询是否为检查载具,或一箱多批
      */
-    @PostMapping("/getCarrierInfo")
+//    @PostMapping("/getCarrierInfo")
     public AjaxResult getCarrierInfo(@RequestBody BizDayworkCarrier dayworkCarrier) throws NoSuchFieldException, IllegalAccessException {
 //        List<BizDayworkCarrier> list = bizDayworkCarrierService.query().eq("carrier_code",dayworkCarrier.getCarrierCode()).eq("deleted",0).eq("is_changed",0).list();
         dayworkCarrier.setIsChanged(0);
         //先查询到箱号信息
-        BizCarrier carrier=bizCarrierService.query().eq("code",dayworkCarrier.getCarrierCode()).eq("deleted",0).one();
-        if(carrier==null){
+        BizCarrier carrier = bizCarrierService.query().eq("code", dayworkCarrier.getCarrierCode()).eq("deleted", 0).one();
+        if (carrier == null) {
             return error("未找到该箱号");
         }
         //查询箱号是否废弃
-        BizCarrierReject carrierReject=bizCarrierRejectService.query().eq("carrier_id",carrier.getId()).eq("deleted",0).one();
-        if(carrierReject!=null){
+        BizCarrierReject carrierReject = bizCarrierRejectService.query().eq("carrier_id", carrier.getId()).eq("deleted", 0).one();
+        if (carrierReject != null) {
             return error("该载具已废弃");
         }
 
         //根据箱号查询绑定信息,如果是检查载具并且没有绑定信息返回载具信息,如果是检查载具且有绑定信息,返回警告
         List<BizDayworkCarrier> list = bizDayworkCarrierService.getList(dayworkCarrier);
-        if(carrier.getIsInspection().equals(1)&&list.size()==0){
+        if (carrier.getIsInspection().equals(1) && list.size() == 0) {
             return success(carrier);
-        }else if(carrier.getIsInspection().equals(1)&&list.size()>0){
-            return error("检查载具:"+carrier.getCode()+"已经绑定其他批次");
+        } else if (carrier.getIsInspection().equals(1) && list.size() > 0) {
+            return error("检查载具:" + carrier.getCode() + "已经绑定其他批次");
         }
         if (list.size() == 0) {
             throw new RuntimeException("该箱号未绑定任何批次");
@@ -443,16 +593,52 @@ public class BizProcessInspecionController extends BaseController {
         return success(list);
     }
 
+    @PostMapping("/getCarrierInfo")
+    public AjaxResult getCarrierInfoByType(@RequestBody BizDayworkCarrier dayworkCarrier) throws NoSuchFieldException, IllegalAccessException {
+        // 判断是哪种箱
+        String carrierCode = dayworkCarrier.getCarrierCode();
+        BizCarrier carrier = bizCarrierService.query().eq("code", carrierCode).one();
+        if (carrier == null) {
+            return error("未找到该箱号");
+        }
+        //查询箱号是否废弃
+        BizCarrierReject carrierReject = bizCarrierRejectService.query().eq("carrier_id", carrier.getId()).eq("deleted", 0).one();
+        if (carrierReject != null) {
+            return error("该载具已废弃");
+        }
+
+        Map<String, Object> map = new HashMap<>();
+        List<BizDayworkCarrier> list = bizDayworkCarrierService.getList(dayworkCarrier);
+        List<BizDaywork> dayworks = bizDayworkService.query().in("id", list.isEmpty() ? Collections.singletonList(0L) : list.stream().map(BizDayworkCarrier::getDayworkId).collect(Collectors.toList())).list();
+        if (carrier.getIsInspection().equals(1)) {
+            // 为检查载具返回检查载具信息
+            if (carrier.getIsInspection().equals(1) && list.size() == 0) {
+                map.put("inspectionCarrier", carrier);
+                return success(map);
+            } else if (carrier.getIsInspection().equals(1) && list.size() > 0) {
+                // 需要显示已经绑定的批次。
+                return error("检查载具:" + carrier.getCode() + "已经绑定其他批次" + dayworks.stream().map(BizDaywork::getLotCode).collect(Collectors.joining()));
+            }
+        } else {
+            if (list.size() == 0) {
+                throw new RuntimeException("该箱号未绑定任何批次。");
+            }
+            map.put("dayworkCarriers", list);
+            return success(map);
+        }
+        return success();
+    }
+
     /**
      * 根据箱号查询批次信息
      */
     @PostMapping("/getLotOutsourcedInfo")
     public AjaxResult getLotOutsourcedInfo(@RequestBody BizDayworkCarrier dayworkCarrier) throws NoSuchFieldException, IllegalAccessException {
-        List<String> codes=new ArrayList<>();
+        List<String> codes = new ArrayList<>();
         codes.add("27110");
         codes.add("28030");
         codes.add("28080");
-        List<String> processCodes = dayworkCarrier.getProcessCode()==null?codes:dayworkCarrier.getProcessCode();
+        List<String> processCodes = dayworkCarrier.getProcessCode() == null ? codes : dayworkCarrier.getProcessCode();
         System.out.println("查询工序编码:processCodes" + processCodes);
         //根据箱号查询当前绑定信息
         dayworkCarrier = bizDayworkCarrierService.getByCarrierCode(dayworkCarrier);
@@ -521,13 +707,17 @@ public class BizProcessInspecionController extends BaseController {
         lot.setCarrierCode(dayworkCarrier.getCarrierCode());
         lot.setCarrierId(dayworkCarrier.getCarrierId());
         lot.setPudName(item.getProdNum() == 0 ? lot.getProductionQuantity() : item.getProdNum());
+        // 获取外协工序列表
+        BizOutsourcedOrderDetail detail = bizOutsourcedOrderDetailService.getById(detailList.get(0).getOutsourceDetailId());
+        lot.setOutsourceOrderDetailId(detail != null ? detail.getId() : null);
+        lot.setProcessList(detail != null ? detail.getProcessNames() : "");
         return success(lot);
     }
 
     /**
      * 根据箱号查询批次信息
      */
-    @PreAuthorize("@ss.hasPermi('business:inspecion:list')")
+//    @PreAuthorize("@ss.hasPermi('business:inspection:list')")
     @PostMapping("/getLotInfo")
     public AjaxResult getLotInfo(@RequestBody BizDayworkCarrier dayworkCarrier) throws NoSuchFieldException, IllegalAccessException {
         //根据箱号查询当前绑定信息
@@ -683,10 +873,47 @@ public class BizProcessInspecionController extends BaseController {
     /**
      * 删除序检主
      */
-    @PreAuthorize("@ss.hasPermi('business:inspecion:remove')")
     @Log(title = "序检主", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable List<Long> ids) {
         return toAjax(bizProcessInspecionService.removeBatchByIds(ids));
     }
+
+    /**
+     * 保存序检箱
+     */
+    @Log(title = "序检换箱", businessType = BusinessType.INSERT)
+    @PostMapping("/saveInspectionCarrier")
+    public AjaxResult saveInspectionCarrier(@RequestBody BizProcessInspecion bizProcessInspecion) {
+        List<BizDayworkCarrier> bizDayworkCarriers = bizDayworkCarrierService.query().eq("process_inspection_id", bizProcessInspecion.getId()).eq("is_changed", 0).list();
+        BizProcessInspecion current = bizProcessInspecionService.getById(bizProcessInspecion.getId());
+        List<BizDayworkCarrier> newCarriers = bizProcessInspecion.getDayworkCarriers();
+        if (bizProcessInspecion.getStatus().equals(0) && newCarriers.isEmpty()) {
+            return error("该序检未完成,不能解绑载具");
+        }
+        bizDayworkCarriers.forEach(l -> l.setIsChanged(1));
+        bizDayworkCarrierService.updateBatchById(bizDayworkCarriers);
+        if (newCarriers.isEmpty()) {
+            current.setIsInspectionCarrierChanged(1);
+            current.setInspectionCarrierChangedTime(new Date());
+            bizProcessInspecionService.updateById(current);
+        } else {
+            current.setIsInspectionCarrierChanged(0);
+            current.setInspectionCarrierChangedTime(null);
+            current.setInspectionCarrierId(newCarriers.get(0).getCarrierId());
+            current.setInspectionCarrierCode(newCarriers.get(0).getCarrierCode());
+            bizProcessInspecionService.updateById(current);
+        }
+        newCarriers.forEach(l -> {
+            l.setId(null);
+            l.setIsChanged(0);
+            l.setProcessInspectionId(bizProcessInspecion.getId());
+            l.setDayworkId(bizProcessInspecion.getDayworkId());
+            l.setProductionPlanId(bizProcessInspecion.getProductionPlanId());
+            l.setLotId(bizProcessInspecion.getLotId());
+        });
+        bizDayworkCarrierService.saveOrUpdateBatch(newCarriers);
+        return success();
+    }
+
 }

+ 3 - 0
src/main/java/cn/ezhizao/project/business/product/domain/BizDayworkCarrier.java

@@ -80,6 +80,9 @@ public class BizDayworkCarrier extends BaseEntity
     @ApiModelProperty(value = "是否被更换")
     private Integer isChanged;
 
+    @ApiModelProperty("序检外键")
+    private Long processInspectionId;
+
     //工序编码
     @TableField(exist = false)
     private List<String> processCode;

+ 3 - 0
src/main/java/cn/ezhizao/project/business/product/domain/BizDayworkItemReject.java

@@ -82,4 +82,7 @@ public class BizDayworkItemReject extends BaseEntity
     @ApiModelProperty("类型")
     private Integer type;
 
+    @ApiModelProperty("部门id")
+    private Long deptId;
+
 }

+ 6 - 0
src/main/java/cn/ezhizao/project/business/product/domain/BizLot.java

@@ -124,6 +124,12 @@ public class BizLot extends BaseEntity
     private String flag;
     private Long fromId;
 
+    @TableField(exist = false)
+    private String processList;
+
+    @ApiModelProperty("外协单id")
+    @TableField(exist = false)
+    private Long outsourceOrderDetailId;
 
 
 }

+ 25 - 1
src/main/java/cn/ezhizao/project/business/product/domain/BizProcessInspecion.java

@@ -96,7 +96,7 @@ public class BizProcessInspecion extends BaseEntity
     private String inspectionCarrierCode;
 
     /** 检查箱号id */
-    private Integer inspectionCarrierId;
+    private Long inspectionCarrierId;
 
     /** 工艺id(通过工艺id,获取版本号) */
     @ApiModelProperty(value = "批次号")
@@ -143,6 +143,9 @@ public class BizProcessInspecion extends BaseEntity
     @TableField(exist = false)
     private List<BizDayworkItemReject> dayworkItemRejects;
 
+    @TableField(exist = false)
+    private List<BizProcessInspectionDetail> rejects;
+
     /** 产品描述 */
     private String productDescription;
 
@@ -155,4 +158,25 @@ public class BizProcessInspecion extends BaseEntity
     @TableField(exist = false)
     private String keyword;
 
+    @ApiModelProperty("第一修改人")
+    private Long firstUpdaterId;
+
+    @ApiModelProperty("不合格数量")
+    private Integer disqualificationNum;
+
+    @ApiModelProperty("质检箱解绑")
+    private Integer isInspectionCarrierChanged;
+
+    @ApiModelProperty("质检箱解绑时间")
+    private Date inspectionCarrierChangedTime;
+
+    @TableField(exist = false)
+    private List<BizDayworkCarrier> dayworkCarriers;
+
+    @ApiModelProperty("外协序检工序")
+    private String processNames;
+
+    @ApiModelProperty("外协单id")
+    private Long outsourceOrderDetailId;
+
 }

+ 119 - 0
src/main/java/cn/ezhizao/project/business/product/domain/BizProcessInspectionDetail.java

@@ -0,0 +1,119 @@
+package cn.ezhizao.project.business.product.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 序检明细对象 biz_process_inspection_detail
+ *
+ * @author ezhizao
+ * @date 2024-06-20
+ */
+@Data
+@TableName(value = "biz_process_inspection_detail")
+public class BizProcessInspectionDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 租户(厂别)id */
+    @ApiModelProperty(value = "${comment}")
+    private Long tenantId;
+
+    /** 序检主表的id */
+    @ApiModelProperty(value = "${comment}")
+    private Long processInspectionId;
+
+    /** 用户id */
+    @ApiModelProperty(value = "${comment}")
+    private Long userId;
+
+    /** 员工昵称
+ */
+    @Excel(name = "员工昵称")
+    @ApiModelProperty(value = "员工昵称")
+    private String nickName;
+
+    /** daywork的id */
+    @ApiModelProperty(value = "员工昵称")
+    private Long dayworkId;
+
+    /** daywork_item的id */
+    @ApiModelProperty(value = "员工昵称")
+    private Long dayworkItemId;
+
+    /** 计划单id */
+    @ApiModelProperty(value = "员工昵称")
+    private Long productionPlanId;
+
+    /** 计划单明细 */
+    @ApiModelProperty(value = "员工昵称")
+    private Long productionPlanDetailId;
+
+    /** 子计划id */
+    @ApiModelProperty(value = "员工昵称")
+    private Long productionPlanDetailSubDetailId;
+
+    /** 批次id */
+    @ApiModelProperty(value = "批次id")
+    private Long lotId;
+
+    /** 批次号 */
+    @Excel(name = "批次号")
+    @ApiModelProperty(value = "批次号")
+    private String lotCode;
+
+    /** 产品描述 */
+    @Excel(name = "产品描述")
+    @ApiModelProperty(value = "产品描述")
+    private String productDescription;
+
+    /** 检查标准外键id */
+    @ApiModelProperty(value = "产品描述")
+    private Long inspectionInstructionId;
+
+    /** 检查指导书2,分选标准1 */
+    @Excel(name = "检查指导书2,分选标准1")
+    @ApiModelProperty(value = "检查指导书2,分选标准1")
+    private Integer type;
+
+    /** 检查指导书内容/分选标准内容 */
+    @Excel(name = "检查指导书内容/分选标准内容")
+    @ApiModelProperty(value = "检查指导书内容/分选标准内容")
+    private String checkStandard;
+
+    @ApiModelProperty("检查结果")
+    @Excel(name = "检查结果")
+    private String checkResult;
+
+    /** 超差范围 */
+    @Excel(name = "超差范围")
+    @ApiModelProperty(value = "超差范围")
+    private String exceedLimits;
+
+    /** 工段id(当前工段的id) */
+    @ApiModelProperty(value = "超差范围")
+    private Long deptId;
+
+    /** 产品id */
+    @ApiModelProperty(value = "超差范围")
+    private Long productId;
+
+    /** 废品量 */
+    @Excel(name = "废品量")
+    @ApiModelProperty(value = "废品量")
+    private Long rejectNum;
+
+    /** 不合格量 */
+    @Excel(name = "不合格量")
+    @ApiModelProperty(value = "不合格量")
+    private Long disqualificationNum;
+
+    /** 检测量 */
+    @Excel(name = "检测量")
+    @ApiModelProperty(value = "检测量")
+    private Long examiningNum;
+
+}

+ 29 - 0
src/main/java/cn/ezhizao/project/business/product/mapper/BizProcessInspectionDetailMapper.java

@@ -0,0 +1,29 @@
+package cn.ezhizao.project.business.product.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.ezhizao.project.business.product.domain.BizProcessInspectionDetail;
+
+/**
+ * 序检明细Mapper接口
+ *
+ * @author ezhizao
+ * @date 2024-06-20
+ */
+public interface BizProcessInspectionDetailMapper extends BaseMapper<BizProcessInspectionDetail>
+{
+    /**
+     * 查询序检明细列表
+     *
+     * @param bizProcessInspectionDetail 序检明细
+     * @return 序检明细集合
+     */
+    public List<BizProcessInspectionDetail> getList(BizProcessInspectionDetail bizProcessInspectionDetail);
+
+    /**
+     * 物理删除
+     * @param bizProcessInspectionDetail
+     * @return 删除结果
+    */
+    public int physicalDelete(BizProcessInspectionDetail bizProcessInspectionDetail);
+}

+ 30 - 0
src/main/java/cn/ezhizao/project/business/product/service/IBizProcessInspectionDetailService.java

@@ -0,0 +1,30 @@
+package cn.ezhizao.project.business.product.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.ezhizao.project.business.product.domain.BizProcessInspectionDetail;
+
+/**
+ * 序检明细Service接口
+ *
+ * @author ezhizao
+ * @date 2024-06-20
+ */
+public interface IBizProcessInspectionDetailService extends IService<BizProcessInspectionDetail>
+{
+    /**
+     * 查询序检明细列表
+     *
+     * @param bizProcessInspectionDetail 序检明细
+     * @return 序检明细集合
+     */
+    public List<BizProcessInspectionDetail> getList(BizProcessInspectionDetail bizProcessInspectionDetail);
+
+    /**
+     * 物理删除
+     * @param bizProcessInspectionDetail
+     * @return 删除结果
+     */
+    public int physicalDelete(BizProcessInspectionDetail bizProcessInspectionDetail);
+
+}

+ 43 - 0
src/main/java/cn/ezhizao/project/business/product/service/impl/BizProcessInspectionDetailServiceImpl.java

@@ -0,0 +1,43 @@
+package cn.ezhizao.project.business.product.service.impl;
+
+import java.util.List;
+import javax.annotation.Resource;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import cn.ezhizao.project.business.product.mapper.BizProcessInspectionDetailMapper;
+import cn.ezhizao.project.business.product.domain.BizProcessInspectionDetail;
+import cn.ezhizao.project.business.product.service.IBizProcessInspectionDetailService;
+
+/**
+ * 序检明细Service业务层处理
+ *
+ * @author ezhizao
+ * @date 2024-06-20
+ */
+@Service
+public class BizProcessInspectionDetailServiceImpl  extends ServiceImpl<BizProcessInspectionDetailMapper, BizProcessInspectionDetail> implements IBizProcessInspectionDetailService
+{
+    @Resource
+    private BizProcessInspectionDetailMapper bizProcessInspectionDetailMapper;
+
+    /**
+     * 查询序检明细列表
+     *
+     * @param bizProcessInspectionDetail 序检明细
+     * @return 序检明细
+     */
+    @Override
+    public List<BizProcessInspectionDetail> getList(BizProcessInspectionDetail bizProcessInspectionDetail)
+    {
+        return bizProcessInspectionDetailMapper.getList(bizProcessInspectionDetail);
+    }
+
+    /**
+     * 物理删除
+     * @param bizProcessInspectionDetail
+     * @return 删除结果
+     */
+    @Override
+    public int physicalDelete(BizProcessInspectionDetail bizProcessInspectionDetail){ return bizProcessInspectionDetailMapper.physicalDelete(bizProcessInspectionDetail); };
+
+}

+ 2 - 1
src/main/resources/mybatis/business/product/BizDayworkCarrierMapper.xml

@@ -18,6 +18,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="carrierCode != null  and carrierCode != ''"> AND carrier_code = #{carrierCode}</if>
             <if test="isChanged != null "> AND is_changed = #{isChanged}</if>
             <if test="dayworkId!= null "> AND daywork_id = #{dayworkId}</if>
+            <if test="processInspectionId != null "> AND process_inspection_id = #{processInspectionId}</if>
 
         </trim>
     </select>
@@ -33,7 +34,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
             deleted = 0 AND is_changed=0
             <if test="carrierCode != null  and carrierCode != ''"> AND carrier_code = #{carrierCode}</if>
-            <if test="lotCode != null  and lotCode !='' "> AND  daywork_id =(SELECT id FROM biz_daywork WHERE lot_code = #{lotCode})</if>
+            <if test="lotCode != null  and lotCode !='' "> AND  daywork_id = (SELECT id FROM biz_daywork WHERE lot_code = #{lotCode} and deleted = 0)</if>
             <if test="dayworkId!= null "> AND daywork_id = #{dayworkId}</if>
 
         </trim>

+ 40 - 0
src/main/resources/mybatis/business/product/BizProcessInspectionDetailMapper.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.ezhizao.project.business.product.mapper.BizProcessInspectionDetailMapper">
+
+    <resultMap type="cn.ezhizao.project.business.product.domain.BizProcessInspectionDetail" id="BizProcessInspectionDetailResult">
+        <id column="id" property="id"/>
+    </resultMap>
+
+
+    <select id="getList" parameterType="BizProcessInspectionDetail" resultMap="BizProcessInspectionDetailResult">
+        SELECT * FROM biz_process_inspection_detail
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            deleted = 0
+            <if test="nickName != null  and nickName != ''"> AND nick_name like concat('%', #{nickName}, '%')</if>
+            <if test="lotCode != null  and lotCode != ''"> AND lot_code = #{lotCode}</if>
+            <if test="productDescription != null  and productDescription != ''"> AND product_description = #{productDescription}</if>
+            <if test="type != null "> AND type = #{type}</if>
+            <if test="checkStandard != null  and checkStandard != ''"> AND check_standard = #{checkStandard}</if>
+            <if test="exceedLimits != null  and exceedLimits != ''"> AND exceed_limits = #{exceedLimits}</if>
+            <if test="rejectNum != null "> AND reject_num = #{rejectNum}</if>
+            <if test="disqualificationNum != null "> AND disqualification_num = #{disqualificationNum}</if>
+            <if test="examiningNum != null "> AND examining_num = #{examiningNum}</if>
+        </trim>
+    </select>
+
+    <delete id="physicalDelete">
+        DELETE FROM biz_process_inspection_detail
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            <if test="id != null">
+                id = #{id} AND
+            </if>
+            <if test="processInspectionId != null">
+                process_inspection_id = #{processInspectionId} AND
+            </if>
+       <!-- 删除条件为其他外键可以在这里加 -->
+        </trim>
+    </delete>
+</mapper>