zouyu
2026-05-07 2eaeb19b16af087d17c186c6220bf64f2fc07f4f
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
@@ -7,6 +7,7 @@
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
@@ -27,6 +28,7 @@
import com.ruoyi.common.constant.InsOrderTypeConstants;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.enums.ContractType;
import com.ruoyi.common.enums.OrderType;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.common.utils.LimsDateUtil;
@@ -35,10 +37,7 @@
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.common.utils.api.IfsApiUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.CopperInsOrderDto;
import com.ruoyi.inspect.dto.OrderSplitDTO;
import com.ruoyi.inspect.dto.RawMaterialStandardTreeDto;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.dto.*;
import com.ruoyi.inspect.excel.OrderSplitExcelData;
import com.ruoyi.inspect.excel.OrderSplitExcelListener;
import com.ruoyi.inspect.mapper.InsOrderMapper;
@@ -52,6 +51,7 @@
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsReportService;
import com.ruoyi.inspect.service.RawMaterialOrderService;
import com.ruoyi.inspect.vo.ProductVo;
import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
import com.ruoyi.system.mapper.UserMapper;
@@ -86,23 +86,32 @@
public class RawMaterialOrderServiceImpl implements RawMaterialOrderService {
    private StandardTreeMapper standardTreeMapper;
    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
    private UserMapper userMapper;
    private InsOrderService insOrderService;
    private InsOrderMapper insOrderMapper;
    private InsSampleMapper insSampleMapper;
    private final NumberGenerator<InsOrder> numberGenerator;
    private InsReportService insReportService;
    private WechatProperty wechatProperty;
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    private InsProductMapper insProductMapper;
    private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
    private IfsApiUtils ifsApiUtils;
    private IfsSplitOrderRecordService ifsSplitOrderRecordService;
    private InsUnqualifiedHandlerMapper insUnqualifiedHandlerMapper;
    private final NumberGenerator<IfsSplitOrderRecord> splitOrderRecordNumberGenerator;
@@ -245,6 +254,7 @@
        if(!validateValue){
            throw new ErrorException("报检失败,非法的销售订单分类枚举");
        }
        validateUpdateBatchNo(ifsInventoryQuantity);
        //批次号字母转大写
        ifsInventoryQuantity.setUpdateBatchNo(ifsInventoryQuantity.getUpdateBatchNo().toUpperCase(Locale.ROOT));
        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
@@ -269,6 +279,26 @@
            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
        });
        return 1;
    }
    /**
     * 校验外购订单报检的批次号是否重复
     * @param ifsInventoryQuantity
     */
    public void validateUpdateBatchNo(IfsInventoryQuantity ifsInventoryQuantity){
        if(StringUtils.equals(ifsInventoryQuantity.getOrderType(),OrderType.WG.getValue())){
            //查询历史记录
            Long count = ifsInventoryQuantityMapper.selectCount(Wrappers.<IfsInventoryQuantity>lambdaQuery()
                    .eq(IfsInventoryQuantity::getContract,ifsInventoryQuantity.getContract())
                    .eq(IfsInventoryQuantity::getPartNo,ifsInventoryQuantity.getPartNo())
                    .eq(IfsInventoryQuantity::getUpdateBatchNo,ifsInventoryQuantity.getUpdateBatchNo())
                    .eq(IfsInventoryQuantity::getOrderType,OrderType.WG.getValue())
                    .ne(IfsInventoryQuantity::getState,0)
            );
            if(count>0){
                throw new RuntimeException("报检失败,零件"+ifsInventoryQuantity.getPartNo()+"所报检的批次号【"+ifsInventoryQuantity.getUpdateBatchNo()+"】已存在!");
            }
        }
    }
    /**
@@ -374,7 +404,7 @@
        insOrderMapper.updateById(insOrder);
        // 添加工时
        addAuxiliary(insOrder, ifsInventoryQuantity);
//        addAuxiliary(insOrder, ifsInventoryQuantity);
        // todo: ifs直接移库
        insReportService.isRawMaterial(insOrder,true,true);
@@ -469,7 +499,7 @@
        insOrderMapper.insert(insOrder);
        // 添加工时
        addAuxiliary(insOrder, ifsInventoryQuantity);
//        addAuxiliary(insOrder, ifsInventoryQuantity);
        // todo: ifs直接移库
        insReportService.isRawMaterial(insOrder,true,true);
@@ -529,6 +559,7 @@
        if(!OrderType.validateValue(ifsInventoryQuantity.getOrderType())){
            throw new ErrorException("新增报检信息失败,非法的销售订单分类枚举");
        }
        validateUpdateBatchNo(ifsInventoryQuantity);
        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
    }
@@ -606,7 +637,7 @@
        insOrderMapper.updateById(insOrder);
        // 添加工时
        addAuxiliary(insOrder, ifsInventoryQuantity);
//        addAuxiliary(insOrder, ifsInventoryQuantity);
        return insOrder.getId();
    }
@@ -753,6 +784,9 @@
            }
        }
        //查询检验项记录
        List<Long> ifsIds = ifsByOverList.stream().map(IfsInventoryQuantitySupplierDto::getId).collect(Collectors.toList());
        List<ProductVo> inspectList = insProductMapper.selectInspectListByIfsIfs(ifsIds);
        response.setContentType("application/vnd.ms-excel");
@@ -764,10 +798,12 @@
            //新建ExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
            //获取sheet0对象
            WriteSheet mainSheet = EasyExcel.writerSheet(0, "原材料检测信息导出").head(IfsInventoryQuantitySupplierDto.class).build();
            WriteSheet mainSheet = EasyExcel.writerSheet(0, "原材料检测信息总览").head(IfsInventoryQuantitySupplierDto.class).build();
            WriteSheet inspectSheet = EasyExcel.writerSheet(1, "原材料检测数据详情").head(ProductVo.class).build();
            //向sheet0写入数据 传入空list这样只导出表头
            excelWriter.write(ifsByOverList, mainSheet);
            excelWriter.write(inspectList, inspectSheet);
            //关闭流
            excelWriter.finish();
        } catch (IOException e) {