| | |
| | | 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; |
| | |
| | | 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 final NumberGenerator<IfsSplitOrderRecord> splitOrderRecordNumberGenerator; |
| | | private OutsourceOrderFlowService outsourceOrderFlowService; |
| | | |
| | | @Override |
| | | public Result selectStandardTreeListByPartNo(String partNo) { |
| | |
| | | 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("非法的外协订单分类"); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | @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) |
| | |
| | | if(!validateValue){ |
| | | throw new ErrorException("报检失败,非法的销售订单分类枚举"); |
| | | } |
| | | outsourceOrderFlowService.resolve(ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp()); |
| | | validateUpdateBatchNo(ifsInventoryQuantity); |
| | | //批次号字母转大写 |
| | | ifsInventoryQuantity.setUpdateBatchNo(ifsInventoryQuantity.getUpdateBatchNo().toUpperCase(Locale.ROOT)); |
| | |
| | | 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"; |
| | | // 生成编号 |
| | |
| | | }); |
| | | |
| | | // 原材料下单: 委托人就是报检人, 生产单位就是供应商单位 |
| | | IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId()); |
| | | Integer declareUserId = ifsInventoryQuantity.getDeclareUserId(); |
| | | User user = userMapper.selectById(declareUserId); |
| | | // 供应商名称 |
| | |
| | | insOrderMapper.updateById(insOrder); |
| | | |
| | | // 添加工时 |
| | | addAuxiliary(insOrder, ifsInventoryQuantity); |
| | | // addAuxiliary(insOrder, ifsInventoryQuantity); |
| | | |
| | | // todo: ifs直接移库 |
| | | insReportService.isRawMaterial(insOrder,true,true); |
| | |
| | | |
| | | 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, |
| | |
| | | insOrderMapper.insert(insOrder); |
| | | |
| | | // 添加工时 |
| | | addAuxiliary(insOrder, ifsInventoryQuantity); |
| | | // addAuxiliary(insOrder, ifsInventoryQuantity); |
| | | |
| | | // todo: ifs直接移库 |
| | | insReportService.isRawMaterial(insOrder,true,true); |
| | |
| | | if(!OrderType.validateValue(ifsInventoryQuantity.getOrderType())){ |
| | | throw new ErrorException("新增报检信息失败,非法的销售订单分类枚举"); |
| | | } |
| | | outsourceOrderFlowService.resolve(ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp()); |
| | | validateUpdateBatchNo(ifsInventoryQuantity); |
| | | ifsInventoryQuantityMapper.insert(ifsInventoryQuantity); |
| | | } |
| | |
| | | insOrderMapper.updateById(insOrder); |
| | | |
| | | // 添加工时 |
| | | addAuxiliary(insOrder, ifsInventoryQuantity); |
| | | // addAuxiliary(insOrder, ifsInventoryQuantity); |
| | | |
| | | return insOrder.getId(); |
| | | } |
| | |
| | | |
| | | } |
| | | } |
| | | //查询检验项记录 |
| | | List<Long> ifsIds = ifsByOverList.stream().map(IfsInventoryQuantitySupplierDto::getId).collect(Collectors.toList()); |
| | | List<ProductVo> inspectList = insProductMapper.selectInspectListByIfsIfs(ifsIds); |
| | | |
| | | |
| | | response.setContentType("application/vnd.ms-excel"); |
| | |
| | | //新建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) { |