liding
4 天以前 d28a5401ac1e2995ec6de12a81395aa5d05b040a
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
@@ -51,6 +51,8 @@
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsReportService;
import com.ruoyi.inspect.service.RawMaterialOrderService;
import com.ruoyi.inspect.service.OutsourceOrderFlowService;
import com.ruoyi.inspect.vo.ProductVo;
import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
import com.ruoyi.system.mapper.UserMapper;
@@ -113,6 +115,7 @@
    private IfsSplitOrderRecordService ifsSplitOrderRecordService;
    private final NumberGenerator<IfsSplitOrderRecord> splitOrderRecordNumberGenerator;
    private OutsourceOrderFlowService outsourceOrderFlowService;
    @Override
    public Result selectStandardTreeListByPartNo(String partNo) {
@@ -166,10 +169,61 @@
        return standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
    }
    /** 保留外协分类查询条件,避免原材料列表覆盖分类。 */
    @Override
    public IPage<IfsInventoryQuantity> getOutsourceWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
        validateOutsourceType(ifsInventoryQuantity.getOrderType());
        ifsInventoryQuantity.setIsInspect(1);
        ifsInventoryQuantity.setState(0);
        return standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)
                .eq(StringUtils.isNotBlank(ifsInventoryQuantity.getMaterialProp()), "material_prop", ifsInventoryQuantity.getMaterialProp()));
    }
    @Override
    public IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
        ifsInventoryQuantityDto.setOrderType(OrderType.RAW.getValue());
        return standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto));
    }
    /** 检验中列表按真实外协分类过滤。 */
    @Override
    public IPage<IfsInventoryQuantityDto> getOutsourceByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto dto) {
        validateOutsourceType(dto.getOrderType());
        dto.setOrderState(1);
        dto.setState(1);
        // 按键值精确筛选,避免“成品”模糊匹配到“半成品”。
        return standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(dto)
                .eq(StringUtils.isNotBlank(dto.getMaterialProp()), "material_prop", dto.getMaterialProp()));
    }
    /** 已检验列表按真实外协分类过滤。 */
    @Override
    public IPage<IfsInventoryQuantitySupplierDto> getOutsourceByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto dto) {
        dto.setOrderState(4);
        dto.setState(2);
        return getOutsourceByAll(page, dto);
    }
    /** 全部列表保留真实分类和检索条件,不强制限制检验状态。 */
    @Override
    public IPage<IfsInventoryQuantitySupplierDto> getOutsourceByAll(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto dto) {
        validateOutsourceType(dto.getOrderType());
        String begin = dto.getBeginDeclareDate();
        String end = dto.getEndDeclareDate();
        dto.setBeginDeclareDate(null);
        dto.setEndDeclareDate(null);
        dto.setIsInspect(1);
        IPage<IfsInventoryQuantitySupplierDto> result = standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(dto)
                .eq(StringUtils.isNotBlank(dto.getMaterialProp()), "material_prop", dto.getMaterialProp()), begin, end);
        result.getRecords().forEach(r -> r.setOrderTypeName(OrderType.getLabelByValue(r.getOrderType())));
        return result;
    }
    /** 限制外协列表接口只能查询两个外协分类。 */
    private void validateOutsourceType(String orderType) {
        if (!outsourceOrderFlowService.isOutsource(orderType)) {
            throw new ErrorException("非法的外协订单分类");
        }
    }
@@ -180,6 +234,7 @@
     */
    @Override
    public int inspectionReport(List<Long> ids,String orderType,String materialProp) {
        outsourceOrderFlowService.resolve(orderType, materialProp);
        Integer userId = SecurityUtils.getUserId().intValue();
        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
                .in(IfsInventoryQuantity::getId, ids)
@@ -253,6 +308,7 @@
        if(!validateValue){
            throw new ErrorException("报检失败,非法的销售订单分类枚举");
        }
        outsourceOrderFlowService.resolve(ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp());
        validateUpdateBatchNo(ifsInventoryQuantity);
        //批次号字母转大写
        ifsInventoryQuantity.setUpdateBatchNo(ifsInventoryQuantity.getUpdateBatchNo().toUpperCase(Locale.ROOT));
@@ -348,10 +404,16 @@
        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
            throw new ErrorException("只有进厂检验才能免检");
        }
        // 免检与正常下单使用相同的外协来源规则。
        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
        if (ifsInventoryQuantity == null) {
            throw new ErrorException("找不到销售订单信息");
        }
        insOrder.setSendTime(LocalDateTime.now());
        // 修改订单表直接为已检验
        insOrder.setState(4);
        insOrder.setTypeSource(1);
        insOrder.setTypeSource(outsourceOrderFlowService.resolveTypeSource(
                ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp(), 1));
        String code = "Y";
        // 生成编号
@@ -382,7 +444,6 @@
        });
        // 原材料下单: 委托人就是报检人, 生产单位就是供应商单位
        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
        User user = userMapper.selectById(declareUserId);
        // 供应商名称
@@ -403,7 +464,7 @@
        insOrderMapper.updateById(insOrder);
        // 添加工时
        addAuxiliary(insOrder, ifsInventoryQuantity);
//        addAuxiliary(insOrder, ifsInventoryQuantity);
        // todo: ifs直接移库
        insReportService.isRawMaterial(insOrder,true,true);
@@ -474,7 +535,9 @@
        InsOrder insOrder = new InsOrder();
        insOrder.setState(4);
        insOrder.setTypeSource(1);
        // 列表直接免检也按真实外协分类及物料属性确定来源。
        insOrder.setTypeSource(outsourceOrderFlowService.resolveTypeSource(
                ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp(), 1));
        String code = "Y";
        // 生成编号
        String no = numberGenerator.generateNumberWithPrefix(3,
@@ -498,7 +561,7 @@
        insOrderMapper.insert(insOrder);
        // 添加工时
        addAuxiliary(insOrder, ifsInventoryQuantity);
//        addAuxiliary(insOrder, ifsInventoryQuantity);
        // todo: ifs直接移库
        insReportService.isRawMaterial(insOrder,true,true);
@@ -558,6 +621,7 @@
        if(!OrderType.validateValue(ifsInventoryQuantity.getOrderType())){
            throw new ErrorException("新增报检信息失败,非法的销售订单分类枚举");
        }
        outsourceOrderFlowService.resolve(ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp());
        validateUpdateBatchNo(ifsInventoryQuantity);
        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
    }
@@ -636,7 +700,7 @@
        insOrderMapper.updateById(insOrder);
        // 添加工时
        addAuxiliary(insOrder, ifsInventoryQuantity);
//        addAuxiliary(insOrder, ifsInventoryQuantity);
        return insOrder.getId();
    }
@@ -783,6 +847,9 @@
            }
        }
        //查询检验项记录
        List<Long> ifsIds = ifsByOverList.stream().map(IfsInventoryQuantitySupplierDto::getId).collect(Collectors.toList());
        List<ProductVo> inspectList = insProductMapper.selectInspectListByIfsIfs(ifsIds);
        response.setContentType("application/vnd.ms-excel");
@@ -794,10 +861,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) {