| | |
| | | import com.ruoyi.sales.mapper.SalesLedgerMapper; |
| | | import com.ruoyi.sales.pojo.ShippingInfo; |
| | | import com.ruoyi.sales.service.ShippingInfoService; |
| | | import com.ruoyi.stock.enums.StockInventorySourceEnum; |
| | | import com.ruoyi.stock.pojo.StockInRecord; |
| | | import com.ruoyi.stock.service.StockInRecordService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.ObjectUtils; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | |
| | | private final SalesLedgerMapper salesLedgerMapper; |
| | | private final SalesRefundAmountOrderService salesRefundAmountOrderService; |
| | | private final StockUtils stockUtils; |
| | | private final StockInRecordService stockInRecordService; |
| | | |
| | | @Override |
| | | public IPage<ReturnManagementDto> listPage(Page page, ReturnManagementDto returnManagement) { |
| | |
| | | returnSaleProduct.getNum(), |
| | | StockInQualifiedRecordTypeEnum.RETURN_WASTE_IN.getCode(), |
| | | returnSaleProduct.getId(), |
| | | returnSaleProduct.getBatchNo() |
| | | returnSaleProduct.getBatchNo(), |
| | | StockInventorySourceEnum.RETURN_GENERATED.getCode() |
| | | ); |
| | | } else if (hasQualityIssue) { |
| | | // 合格发货且有质量问题,回不合格库。 |
| | |
| | | returnSaleProduct.getNum(), |
| | | StockInQualifiedRecordTypeEnum.RETURN_UNSTOCK_IN.getCode(), |
| | | returnSaleProduct.getId(), |
| | | returnSaleProduct.getBatchNo() |
| | | returnSaleProduct.getBatchNo(), |
| | | StockInventorySourceEnum.RETURN_GENERATED.getCode() |
| | | ); |
| | | } else { |
| | | // 合格发货且无质量问题,回合格库。 |
| | |
| | | returnSaleProduct.getNum(), |
| | | StockInQualifiedRecordTypeEnum.RETURN_HE_IN.getCode(), |
| | | returnSaleProduct.getId(), |
| | | returnSaleProduct.getBatchNo() |
| | | returnSaleProduct.getBatchNo(), |
| | | StockInventorySourceEnum.RETURN_GENERATED.getCode() |
| | | ); |
| | | } |
| | | } |
| | |
| | | * @param quantity |
| | | * @param recordType |
| | | * @param recordId |
| | | * @param batchNo |
| | | * @param source 库存来源 |
| | | */ |
| | | public void addUnStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) { |
| | | public void addUnStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo, String source) { |
| | | StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); |
| | | stockUninventoryDto.setRecordId(recordId); |
| | | stockUninventoryDto.setRecordType(String.valueOf(recordType)); |
| | |
| | | stockUninventoryDto.setProductModelId(productModelId); |
| | | stockUninventoryDto.setBatchNo(batchNo); |
| | | stockUninventoryDto.setType(resolveUninventoryType(recordType)); |
| | | stockUninventoryDto.setSource(source); |
| | | stockUninventoryService.addStockInRecordOnly(stockUninventoryDto); |
| | | } |
| | | |
| | |
| | | * @param recordId 业务ID |
| | | * @param batchNo 批次号 |
| | | */ |
| | | public void addWasteStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) { |
| | | public void addWasteStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo, String source) { |
| | | StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); |
| | | stockUninventoryDto.setRecordId(recordId); |
| | | stockUninventoryDto.setRecordType(String.valueOf(recordType)); |
| | |
| | | stockUninventoryDto.setProductModelId(productModelId); |
| | | stockUninventoryDto.setBatchNo(batchNo); |
| | | stockUninventoryDto.setType("waste"); |
| | | stockUninventoryDto.setSource(source); |
| | | stockUninventoryService.addStockInRecordOnly(stockUninventoryDto); |
| | | } |
| | | |
| | |
| | | * @param recordId |
| | | */ |
| | | public void addStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) { |
| | | addStockWithBatchNo(productModelId, quantity, recordType, recordId, batchNo, null); |
| | | addStockWithBatchNo(productModelId, quantity, recordType, recordId, batchNo, (LocalDateTime) null); |
| | | } |
| | | |
| | | /** |
| | | * 合格入库带批次号和来源 |
| | | * @param productModelId |
| | | * @param quantity |
| | | * @param recordType |
| | | * @param recordId |
| | | * @param batchNo |
| | | * @param source 库存来源 |
| | | */ |
| | | public void addStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo, String source) { |
| | | StockInventoryDto stockInventoryDto = new StockInventoryDto(); |
| | | stockInventoryDto.setRecordId(recordId); |
| | | stockInventoryDto.setRecordType(String.valueOf(recordType)); |
| | | stockInventoryDto.setQualitity(quantity); |
| | | stockInventoryDto.setProductModelId(productModelId); |
| | | stockInventoryDto.setBatchNo(batchNo); |
| | | stockInventoryDto.setSource(source); |
| | | stockInventoryService.addStockInRecordOnly(stockInventoryDto); |
| | | } |
| | | |
| | | /** |
| | |
| | | .selectBatchIds(new ArrayList<>(operationIds)) |
| | | .stream() |
| | | .filter(Objects::nonNull) |
| | | .filter(op -> op.getType() != null) // 过滤 type 为 null 的记录 |
| | | .collect(Collectors.toMap( |
| | | ProductionOrderRoutingOperation::getId, |
| | | ProductionOrderRoutingOperation::getType, |
| | |
| | | import com.ruoyi.project.system.mapper.SysUserMapper; |
| | | import com.ruoyi.quality.mapper.*; |
| | | import com.ruoyi.quality.pojo.*; |
| | | import com.ruoyi.stock.enums.StockInventorySourceEnum; |
| | | import com.ruoyi.stock.pojo.StockInRecord; |
| | | import com.ruoyi.stock.service.StockInRecordService; |
| | | import com.ruoyi.stock.dto.StockInventoryDto; |
| | |
| | | scrapQty, |
| | | StockInQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), |
| | | productionProductMain.getId(), |
| | | qualifiedBatchNo); |
| | | qualifiedBatchNo, |
| | | StockInventorySourceEnum.PROD_GENERATED.getCode()); |
| | | } |
| | | return true; |
| | | } |
| | |
| | | import com.ruoyi.quality.mapper.QualityUnqualifiedMapper; |
| | | import com.ruoyi.quality.pojo.QualityInspect; |
| | | import com.ruoyi.quality.pojo.QualityUnqualified; |
| | | import com.ruoyi.stock.enums.StockInventorySourceEnum; |
| | | import com.ruoyi.stock.pojo.StockInRecord; |
| | | import com.ruoyi.stock.service.StockInRecordService; |
| | | import com.ruoyi.quality.service.IQualityInspectService; |
| | |
| | | break; |
| | | case "报废": |
| | | stockUtils.addUnStockWithBatchNo(qualityInspect.getProductModelId(), unqualified.getQuantity(), |
| | | StockInQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), batchNo); |
| | | StockInQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), batchNo, |
| | | StockInventorySourceEnum.PROD_GENERATED.getCode()); |
| | | break; |
| | | case "让步放行": |
| | | stockUtils.addStockWithBatchNo(qualityInspect.getProductModelId(), unqualified.getQuantity(), |
| | |
| | | PROD_GENERATED("prodGenerated", "生产产生"), |
| | | TRANS_GENERATED("transGenerated", "运输产生"), |
| | | CUTTING_GENERATED("cuttingGenerated", "裁剪产生"), |
| | | RETURN_GENERATED("returnGenerated", "销售退货产生"), |
| | | CUSTOM("custom", "自定义"); |
| | | |
| | | @EnumValue |
| | |
| | | stockUninventoryDto.setManufacturerId(stockInRecord.getManufacturerId()); |
| | | stockUninventoryDto.setSource(stockInRecord.getSource()); |
| | | stockUninventoryDto.setType(uninventoryType); |
| | | stockUninventoryDto.setSource(stockInRecord.getSource()); |
| | | if (stockUninventory == null) { |
| | | stockUninventoryMapper.insert(new StockUninventory() {{ |
| | | setProductModelId(stockInRecord.getProductModelId()); |
| | |
| | | stockInRecordDto.setType("2"); |
| | | } |
| | | stockInRecordDto.setRemark(stockUninventoryDto.getRemark()); |
| | | stockInRecordDto.setSource(stockUninventoryDto.getSource()); |
| | | stockInRecordService.add(stockInRecordDto); |
| | | return 1; |
| | | } |
| | |
| | | <if test="ew.lockedQuantity != null and ew.lockedQuantity !=''"> |
| | | locked_quantity = locked_quantity + #{ew.lockedQuantity}, |
| | | </if> |
| | | <if test="ew.source != null and ew.source != ''"> |
| | | source = #{ew.source}, |
| | | </if> |
| | | update_time = now() |
| | | </set> |
| | | where product_model_id = #{ew.productModelId} |
| | |
| | | <if test="ew.type != null and ew.type != ''"> |
| | | type = #{ew.type}, |
| | | </if> |
| | | <if test="ew.source != null and ew.source != ''"> |
| | | source = #{ew.source}, |
| | | </if> |
| | | update_time = now() |
| | | </set> |
| | | where product_model_id = #{ew.productModelId} |