feat(outsource): 1.支持外协订单按物料属性分流复用原有业务流程
2.修复工时字段空值判断与赋值逻辑
已添加1个文件
已修改10个文件
212 ■■■■■ 文件已修改
basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/aspect/PushIfsPartPropsRecordAspect.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/RawMaterialOrderController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/OutsourceOrderFlowService.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/RawMaterialOrderService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/IfsOrderVO.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/enums/OrderType.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/dto/IfsInventoryQuantityDto.java
@@ -82,4 +82,8 @@
    @ApiModelProperty("销售订单分类")
    private String orderType;
    /** æŽ¥æ”¶ç‰©æ–™å±žæ€§ç­›é€‰ï¼Œå¹¶è¿”回检验中订单的真实属性。 */
    @ApiModelProperty("物料属性")
    private String materialProp;
}
basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java
@@ -386,7 +386,7 @@
                    if (sp.getPrice() != null && !sp.getPrice().equals("")) {
                        pl.setPrice(sp.getPrice());
                    }
                    if (sp.getManHour() != null && !sp.getManHour().equals("")) {
                    if (StringUtils.isNotBlank(sp.getManHour())) {
                        pl.setManHour(sp.getManHour());
                    }
                    if (sp.getSection() != null && !sp.getSection().equals("")) {
@@ -648,7 +648,9 @@
                    cur.setAsk(old.getAsk());
                    cur.setTell(old.getTell());
                    cur.setPrice(old.getPrice());
                    cur.setManHour(old.getManHour());
                    if (StringUtils.isNotBlank(old.getManHour())) {
                        cur.setManHour(old.getManHour());
                    }
                    cur.setSection(old.getSection());
                    cur.setCores(old.getCores());
                    cur.setConductorMaterial(old.getConductorMaterial());
inspect-server/src/main/java/com/ruoyi/inspect/aspect/PushIfsPartPropsRecordAspect.java
@@ -15,6 +15,7 @@
import com.ruoyi.inspect.dto.IfsPartPropsRecordDTO;
import com.ruoyi.inspect.service.IfsPartPropsRecordService;
import com.ruoyi.inspect.service.IfsSplitOrderRecordService;
import com.ruoyi.inspect.service.OutsourceOrderFlowService;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
@@ -43,6 +44,9 @@
    @Autowired
    private IfsPartPropsRecordService ifsPartPropsRecordService;
    @Autowired
    private OutsourceOrderFlowService outsourceOrderFlowService;
    @Before(value = "execution(* com.ruoyi.inspect.service.impl.RawMaterialOrderServiceImpl.rawOrderRelease(..))")
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    public void doAfterReturning(JoinPoint joinPoint) {
@@ -59,7 +63,8 @@
                JSONObject entries = JSONUtil.parseObj(queryPartLotResult.getData());
                JSONArray listInfo = entries.getJSONArray("LIST_INFO");
                //如果订单是KJNS域的外购订单,免检时同步ZTNS域的IFS批次属性
                if(StringUtils.equals(ContractType.KJNS.getValue(),ifsInventoryQuantity.getContract()) && StringUtils.equals(OrderType.WG.getValue(),ifsInventoryQuantity.getOrderType())){
                if(StringUtils.equals(ContractType.KJNS.getValue(),ifsInventoryQuantity.getContract()) && StringUtils.equals(OrderType.WG.getValue(),
                        outsourceOrderFlowService.resolve(ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp()))){
                    //查询ZTNS域的相同批次订单消息
                    IfsInventoryQuantityDto ifsInventoryQuantityDto = new IfsInventoryQuantityDto();
                    BeanUtil.copyProperties(ifsInventoryQuantity,ifsInventoryQuantityDto);
inspect-server/src/main/java/com/ruoyi/inspect/controller/RawMaterialOrderController.java
@@ -17,6 +17,7 @@
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.RawMaterialOrderService;
import com.ruoyi.inspect.service.RawMaterialOrderTemplateService;
import com.ruoyi.inspect.service.OutsourceOrderFlowService;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.common.utils.WxCpUtils;
@@ -48,6 +49,7 @@
    private InsOrderService insOrderService;
    private RawMaterialOrderService rawMaterialOrderService;
    private RawMaterialOrderTemplateService rawMaterialOrderTemplateService;
    private OutsourceOrderFlowService outsourceOrderFlowService;
    @ApiOperation(value = "更具零件号获取标准树")
    @GetMapping("/selectStandardTreeListByPartNo")
@@ -114,6 +116,7 @@
        if(!OrderType.validateValue(orderType)){
            throw new ErrorException("批量报检失败,非法的销售订单分类枚举");
        }
        outsourceOrderFlowService.resolve(orderType, materialProp);
        return Result.success(rawMaterialOrderService.inspectionReport(ids,orderType,materialProp));
    }
@@ -189,6 +192,36 @@
        return Result.success(rawMaterialOrderService.getWarehouseSubmit(page, ifsInventoryQuantity));
    }
    /** å¤–协订单按真实销售分类查询待下单数据。 */
    @GetMapping("/getOutsourceWarehouseSubmit")
    @PreAuthorize("@ss.hasPermi('business:order')")
    public Result getOutsourceWarehouseSubmit(Page page, IfsInventoryQuantity ifsInventoryQuantity) {
        return Result.success(rawMaterialOrderService.getOutsourceWarehouseSubmit(page, ifsInventoryQuantity));
    }
    /** æŸ¥è¯¢å¤–协订单检验中列表。 */
    @GetMapping("/getOutsourceByStateOne")
    @PreAuthorize("@ss.hasPermi('business:order')")
    @PersonalScope(permsName = "business:order", objectName = IfsInventoryQuantityDto.class, paramName = "createUser")
    public Result getOutsourceByStateOne(Page page, IfsInventoryQuantityDto dto) {
        return Result.success(rawMaterialOrderService.getOutsourceByStateOne(page, dto));
    }
    /** æŸ¥è¯¢å¤–协订单已检验列表。 */
    @GetMapping("/getOutsourceByOver")
    @PreAuthorize("@ss.hasPermi('business:order')")
    @PersonalScope(permsName = "business:order", objectName = IfsInventoryQuantitySupplierDto.class, paramName = "createUser")
    public Result getOutsourceByOver(Page page, IfsInventoryQuantitySupplierDto dto) {
        return Result.success(rawMaterialOrderService.getOutsourceByOver(page, dto));
    }
    /** æŸ¥è¯¢å¤–协订单全部报检数据。 */
    @GetMapping("/getOutsourceByAll")
    @PreAuthorize("@ss.hasPermi('get:Ifs:ByAll')")
    public Result getOutsourceByAll(Page page, IfsInventoryQuantitySupplierDto dto) {
        return Result.success(rawMaterialOrderService.getOutsourceByAll(page, dto));
    }
    /**
     * å–消报检
     * @param id
inspect-server/src/main/java/com/ruoyi/inspect/service/OutsourceOrderFlowService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.ruoyi.inspect.service;
import com.ruoyi.common.enums.OrderType;
import com.ruoyi.framework.exception.ErrorException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
/**
 * å¤–协订单复用的原有业务流程。
 */
@Service
public class OutsourceOrderFlowService {
    /** æŒ‰å·²çº¦å®šçš„物料属性字典键值分流,同时校验委外加工属性。 */
    public String resolve(String orderType, String materialProp) {
        if (StringUtils.equals(orderType, OrderType.OUTSOURCE_INCOMING.getValue())) {
            return OrderType.RAW.getValue();
        }
        if (StringUtils.equals(orderType, OrderType.OUTSOURCE_SUBCONTRACT.getValue())) {
            if (StringUtils.equals(materialProp, "半成品")) {
                return OrderType.RAW.getValue();
            }
            if (StringUtils.equals(materialProp, "成品")) {
                return OrderType.WG.getValue();
            }
            throw new ErrorException("委外加工的物料属性只能为半成品或成品");
        }
        return orderType;
    }
    /** å¤–协订单按实际流程确定下单来源,其他订单保留原来源。 */
    public Integer resolveTypeSource(String orderType, String materialProp, Integer typeSource) {
        if (StringUtils.equals(orderType, OrderType.OUTSOURCE_INCOMING.getValue())
                || StringUtils.equals(orderType, OrderType.OUTSOURCE_SUBCONTRACT.getValue())) {
            return StringUtils.equals(resolve(orderType, materialProp), OrderType.WG.getValue()) ? 0 : 1;
        }
        return typeSource;
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/service/RawMaterialOrderService.java
@@ -34,6 +34,9 @@
     */
    IPage<IfsInventoryQuantity> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity);
    /** æŸ¥è¯¢æŒ‡å®šå¤–协分类的待下单数据。 */
    IPage<IfsInventoryQuantity> getOutsourceWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity);
    /**
     * æŸ¥è¯¢æ£€éªŒå€¼
     * @param page
@@ -42,6 +45,15 @@
     */
    IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto);
    /** æŸ¥è¯¢æŒ‡å®šå¤–协分类的检验中数据。 */
    IPage<IfsInventoryQuantityDto> getOutsourceByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto dto);
    /** æŸ¥è¯¢æŒ‡å®šå¤–协分类的已检验数据。 */
    IPage<IfsInventoryQuantitySupplierDto> getOutsourceByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto dto);
    /** æŸ¥è¯¢æŒ‡å®šå¤–协分类的全部报检数据。 */
    IPage<IfsInventoryQuantitySupplierDto> getOutsourceByAll(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto dto);
    int inspectionReport(List<Long> ids,String orderType,String materialProp);
    int revokeInspectionReport(Long id);
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -156,6 +156,8 @@
    @Resource
    private ISysDictTypeService iSysDictTypeService;
    @Resource
    private OutsourceOrderFlowService outsourceOrderFlowService;
    @Resource
    private InsOrderRatesService insOrderRatesService;
    @Resource
    private InsProductDeviationWarningService insProductDeviationWarningService;
@@ -1804,7 +1806,8 @@
        Integer max = insSamples.stream().mapToInt(InsSample::getQuantity).sum();
        TableRenderData tableRenderData = new TableRenderData();
        String templateName;
        if (StringUtils.equals(OrderType.WG.getValue(), ifsInventoryQuantity.getOrderType())) {
        if (StringUtils.equals(OrderType.WG.getValue(),
                outsourceOrderFlowService.resolve(ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp()))) {
            //过滤不判定的检测项
            List<SampleProductExportDto> filterItems = sampleProductDto2s.stream().filter(f -> f.getInsResult() != 3).collect(Collectors.toList());
            int maxCableTag = 5;//单个表格,电缆颜色标识最大个数
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -42,6 +42,7 @@
import com.ruoyi.inspect.service.InsOrderStateService;
import com.ruoyi.inspect.service.InsProductService;
import com.ruoyi.inspect.service.InsSampleService;
import com.ruoyi.inspect.service.OutsourceOrderFlowService;
import com.ruoyi.inspect.vo.IfsOrderVO;
import com.ruoyi.inspect.vo.InsOrderPrintingVo;
import com.ruoyi.system.mapper.UserMapper;
@@ -93,6 +94,7 @@
    private ApplicationEventPublisher applicationEventPublisher;
    private StandardProductListMapper standardProductListMapper;
    private StructureItemParameterMapper structureItemParameterMapper;
    private OutsourceOrderFlowService outsourceOrderFlowService;
    //获取检验下单数据
@@ -219,6 +221,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addInsOrder(List<SampleProductDto> list, InsOrder insOrder) {
        initOutsourceOrderSource(insOrder);
        // todo: ä¸‹å•判断抽样计划的唯一性
        if (insOrder.getQuarterItemId() != null) {
            Long quarterItemCount = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
@@ -545,6 +548,16 @@
        Map<String, Object> map = new HashMap<>();
//        InsOrder insOrder = insOrderMapper.selectById(id);
        IfsOrderVO ifsOrderVO = insOrderMapper.selectOrderInfoById(id);
        // è¯¦æƒ…同时返回有效处理流程,供检测页面统一选择布局及校验规则。
        if (ifsOrderVO != null) {
            ifsOrderVO.setFlowOrderType(ifsOrderVO.getIfsOrderType());
            if (ifsOrderVO.getIfsInventoryId() != null) {
                IfsInventoryQuantity quantity = ifsInventoryQuantityMapper.selectById(ifsOrderVO.getIfsInventoryId());
                if (quantity != null) {
                    ifsOrderVO.setFlowOrderType(outsourceOrderFlowService.resolve(quantity.getOrderType(), quantity.getMaterialProp()));
                }
            }
        }
        List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
        map.put("insOrder", ifsOrderVO);
        map.put("sampleProduct", list);
@@ -552,6 +565,19 @@
        List<Map<Integer, Object>> list2 = insOrderMapper.selectReportModelByOrderId(id, laboratory);
        map.put("reportModel", list2);
        return map;
    }
    /** ä¿å­˜å‰è¯»å–真实销售订单,纠正外协下单来源,避免前端缓存影响实验室分配。 */
    private void initOutsourceOrderSource(InsOrder insOrder) {
        if (insOrder.getIfsInventoryId() == null) {
            return;
        }
        IfsInventoryQuantity quantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
        if (quantity == null) {
            throw new ErrorException("找不到销售订单信息");
        }
        insOrder.setTypeSource(outsourceOrderFlowService.resolveTypeSource(
                quantity.getOrderType(), quantity.getMaterialProp(), insOrder.getTypeSource()));
    }
    @Override
@@ -1259,7 +1285,7 @@
        //1.根据ifs域获取对应库位配置
        IfsProperties properties = ifsApiUtils.getPropByContract(one.getContract());
        //2.判断订单类型是否为原材料
        if(StringUtils.equals(inventoryQuantity.getOrderType(), OrderType.RAW.getValue())){
        if(StringUtils.equals(outsourceOrderFlowService.resolve(one.getOrderType(), one.getMaterialProp()), OrderType.RAW.getValue())){
            toLocation = properties.getRawQualifiedLocation();
        }else{
            toLocation = properties.getProductQualifiedLocation();
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
@@ -51,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.service.OutsourceOrderFlowService;
import com.ruoyi.inspect.vo.ProductVo;
import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
@@ -114,6 +115,7 @@
    private IfsSplitOrderRecordService ifsSplitOrderRecordService;
    private final NumberGenerator<IfsSplitOrderRecord> splitOrderRecordNumberGenerator;
    private OutsourceOrderFlowService outsourceOrderFlowService;
    @Override
    public Result selectStandardTreeListByPartNo(String partNo) {
@@ -167,10 +169,62 @@
        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 (!OrderType.OUTSOURCE_INCOMING.getValue().equals(orderType)
                && !OrderType.OUTSOURCE_SUBCONTRACT.getValue().equals(orderType)) {
            throw new ErrorException("非法的外协订单分类");
        }
    }
@@ -181,6 +235,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)
@@ -254,6 +309,7 @@
        if(!validateValue){
            throw new ErrorException("报检失败,非法的销售订单分类枚举");
        }
        outsourceOrderFlowService.resolve(ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp());
        validateUpdateBatchNo(ifsInventoryQuantity);
        //批次号字母转大写
        ifsInventoryQuantity.setUpdateBatchNo(ifsInventoryQuantity.getUpdateBatchNo().toUpperCase(Locale.ROOT));
@@ -349,10 +405,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";
        // ç”Ÿæˆç¼–号
@@ -383,7 +445,6 @@
        });
        // åŽŸææ–™ä¸‹å•: å§”托人就是报检人, ç”Ÿäº§å•位就是供应商单位
        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
        User user = userMapper.selectById(declareUserId);
        // ä¾›åº”商名称
@@ -475,7 +536,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,
@@ -559,6 +622,7 @@
        if(!OrderType.validateValue(ifsInventoryQuantity.getOrderType())){
            throw new ErrorException("新增报检信息失败,非法的销售订单分类枚举");
        }
        outsourceOrderFlowService.resolve(ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp());
        validateUpdateBatchNo(ifsInventoryQuantity);
        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
    }
inspect-server/src/main/java/com/ruoyi/inspect/vo/IfsOrderVO.java
@@ -69,6 +69,10 @@
    @ApiModelProperty("ifs订单分类(01raw:原材料 02wg:外购成品)")
    private String ifsOrderType;
    /** æ ¹æ®é”€å”®åˆ†ç±»å’Œç‰©æ–™å±žæ€§ç¡®å®šçš„处理流程,不改变真实分类。 */
    @ApiModelProperty("有效处理流程(01raw:原材料 02wg:外购成品)")
    private String flowOrderType;
    private String partNo;
    private String lotBatchNo;
ruoyi-common/src/main/java/com/ruoyi/common/enums/OrderType.java
@@ -5,7 +5,9 @@
public enum OrderType {
    RAW("原材料","01raw"),
    WG("外购成品","02wg");
    WG("外购成品","02wg"),
    OUTSOURCE_INCOMING("外协订单-来料加工","03incoming"),
    OUTSOURCE_SUBCONTRACT("外协订单-委外加工","04subcontract");
    private String label,value;