src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -3,11 +3,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.ruoyi.common.enums.ReviewStatusEnum; import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.dto.StockUninventoryDto; import com.ruoyi.stock.mapper.StockInventoryMapper; import com.ruoyi.stock.pojo.StockInRecord; import com.ruoyi.stock.pojo.StockOutRecord; import com.ruoyi.stock.service.StockInRecordService; @@ -29,7 +29,6 @@ private final StockInventoryService stockInventoryService; private final StockInRecordService stockInRecordService; private final StockOutRecordService stockOutRecordService; private final StockInventoryMapper stockInventoryMapper; /** * 不合格入库 @@ -150,15 +149,13 @@ public void deleteStockInRecord(Long recordId, String recordType) { StockInRecord one = stockInRecordService.getOne(new QueryWrapper<StockInRecord>() .lambda().eq(StockInRecord::getRecordId, recordId) .eq(StockInRecord::getRecordType, recordType)); .eq(StockInRecord::getRecordType, recordType), false); if (ObjectUtils.isNotEmpty(one)) { stockInRecordService.batchDelete(Collections.singletonList(one.getId())); //将库存减回来 StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(recordType); stockInventoryDto.setQualitity(one.getStockInNum()); stockInventoryMapper.updateSubtractStockInventory((stockInventoryDto)); if (ReviewStatusEnum.APPROVED.getCode().equals(one.getApprovalStatus())) { stockInRecordService.batchDelete(Collections.singletonList(one.getId())); } else { stockInRecordService.removeById(one.getId()); } } } @@ -166,15 +163,13 @@ public void deleteStockOutRecord(Long recordId, String recordType) { StockOutRecord one = stockOutRecordService.getOne(new QueryWrapper<StockOutRecord>() .lambda().eq(StockOutRecord::getRecordId, recordId) .eq(StockOutRecord::getRecordType, recordType)); .eq(StockOutRecord::getRecordType, recordType), false); if (ObjectUtils.isNotEmpty(one)) { stockOutRecordService.batchDelete(Collections.singletonList(one.getId())); //将库存加回来 StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(recordType); stockInventoryDto.setQualitity(one.getStockOutNum()); stockInventoryMapper.updateAddStockInventory((stockInventoryDto)); if (ReviewStatusEnum.APPROVED.getCode().equals(one.getApprovalStatus())) { stockOutRecordService.batchDelete(Collections.singletonList(one.getId())); } else { stockOutRecordService.removeById(one.getId()); } } } src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -26,6 +26,8 @@ import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.quality.mapper.*; import com.ruoyi.quality.pojo.*; import com.ruoyi.stock.pojo.StockInRecord; import com.ruoyi.stock.service.StockInRecordService; import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.service.StockInventoryService; import com.ruoyi.technology.mapper.TechnologyOperationMapper; @@ -77,6 +79,7 @@ private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper; private final TechnologyOperationMapper technologyOperationMapper; private final StockUtils stockUtils; private final StockInRecordService stockInRecordService; private final StockInventoryService stockInventoryService; @Override @@ -304,7 +307,9 @@ productionProductOutput.setScrapQty(defaultDecimal(dto.getScrapQty())); productionProductOutputMapper.insert(productionProductOutput); BigDecimal reportQty = defaultDecimal(productionProductOutput.getQuantity()); BigDecimal scrapQty = defaultDecimal(productionProductOutput.getScrapQty()); BigDecimal productQty = reportQty; String qualifiedBatchNo = null; List<ProductionOrderRoutingOperation> routingOperationList = productionOrderRoutingOperationMapper.selectList( Wrappers.<ProductionOrderRoutingOperation>lambdaQuery() @@ -350,6 +355,11 @@ stockInventoryDto.setQualitity(productQty); stockInventoryDto.setProductModelId(productModel.getId()); stockInventoryService.addStockInRecordOnly(stockInventoryDto); qualifiedBatchNo = resolveLatestStockInBatchNo( productionProductMain.getId(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productModel.getId(), "0"); } productionOperationTask.setCompleteQuantity(defaultDecimal(productionOperationTask.getCompleteQuantity()).add(productQty)); @@ -396,9 +406,39 @@ productionAccount.setSchedulingDate(LocalDateTime.now()); productionAccountMapper.insert(productionAccount); } if (scrapQty.compareTo(BigDecimal.ZERO) > 0) { stockUtils.addUnStockWithBatchNo( productModel.getId(), scrapQty, StockInQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId(), qualifiedBatchNo); } return true; } private String resolveLatestStockInBatchNo(Long recordId, String recordType, Long productModelId, String stockType) { if (recordId == null || productModelId == null) { return null; } StockInRecord stockInRecord = stockInRecordService.getOne( Wrappers.<StockInRecord>lambdaQuery() .eq(StockInRecord::getRecordId, recordId) .eq(StockInRecord::getRecordType, recordType) .eq(StockInRecord::getProductModelId, productModelId) .eq(StockInRecord::getType, stockType) .orderByDesc(StockInRecord::getId) .last("limit 1"), false); if (stockInRecord == null) { throw new ServiceException("未找到对应的入库申请记录"); } return stockInRecord.getBatchNo(); } private void syncOperationParamInputValue(ProductionProductMainDto dto, Long productionOrderRoutingOperationId, Long productionProductMainId) { src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -20,6 +20,8 @@ import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectParam; import com.ruoyi.quality.pojo.QualityUnqualified; import com.ruoyi.stock.pojo.StockInRecord; import com.ruoyi.stock.service.StockInRecordService; import com.ruoyi.quality.service.IQualityInspectParamService; import com.ruoyi.quality.service.IQualityInspectService; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; @@ -34,6 +36,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; @@ -45,6 +48,7 @@ private final StockUtils stockUtils; private final StockInventoryService stockInventoryService; private final StockInRecordService stockInRecordService; private QualityInspectMapper qualityInspectMapper; private IQualityInspectParamService qualityInspectParamService; @@ -111,12 +115,53 @@ stockInventoryDto.setRecordId(qualityInspect.getId()); stockInventoryDto.setProductModelId(qualityInspect.getProductModelId()); stockInventoryDto.setQualitity(qualityInspect.getQuantity()); stockInventoryDto.setBatchNo(resolveProductionBatchNo( qualityInspect.getProductMainId(), qualityInspect.getId(), qualityInspect.getProductModelId())); stockInventoryService.addStockInRecordOnly(stockInventoryDto); } qualityInspect.setInspectState(1);//已提交 return qualityInspectMapper.updateById(qualityInspect); } private String resolveProductionBatchNo(Long productionProductMainId, Long qualityInspectId, Long productModelId) { if (productModelId == null) { return null; } if (productionProductMainId != null) { StockInRecord productionRecord = stockInRecordService.getOne( Wrappers.<StockInRecord>lambdaQuery() .eq(StockInRecord::getRecordId, productionProductMainId) .eq(StockInRecord::getProductModelId, productModelId) .in(StockInRecord::getRecordType, Arrays.asList( StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), StockInQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode())) .isNotNull(StockInRecord::getBatchNo) .orderByDesc(StockInRecord::getId) .last("limit 1"), false); if (productionRecord != null) { return productionRecord.getBatchNo(); } } if (qualityInspectId == null) { return null; } StockInRecord inspectRecord = stockInRecordService.getOne( Wrappers.<StockInRecord>lambdaQuery() .eq(StockInRecord::getRecordId, qualityInspectId) .eq(StockInRecord::getProductModelId, productModelId) .eq(StockInRecord::getRecordType, StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode()) .isNotNull(StockInRecord::getBatchNo) .orderByDesc(StockInRecord::getId) .last("limit 1"), false); return inspectRecord == null ? null : inspectRecord.getBatchNo(); } /*生成检验报告*/ @Override public void down(HttpServletResponse response, QualityInspect qualityInspect) { src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -23,6 +23,8 @@ import com.ruoyi.quality.mapper.QualityUnqualifiedMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityUnqualified; import com.ruoyi.stock.pojo.StockInRecord; import com.ruoyi.stock.service.StockInRecordService; import com.ruoyi.quality.service.IQualityInspectService; import com.ruoyi.quality.service.IQualityUnqualifiedService; import com.ruoyi.stock.service.StockUninventoryService; @@ -33,6 +35,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -50,6 +53,7 @@ private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper; private final ProductionOperationTaskMapper productionOperationTaskMapper; private final StockUninventoryService stockUninventoryService; private final StockInRecordService stockInRecordService; @Override public IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) { @@ -67,6 +71,8 @@ public int deal(QualityUnqualified qualityUnqualified) { QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId()); QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId()); String batchNo = qualityInspect == null ? null : resolveProductionBatchNo(qualityInspect.getProductMainId(), qualityInspect.getId(), qualityInspect.getProductModelId()); if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType() != 0) { switch (qualityUnqualified.getDealResult()) { case "返修": @@ -80,12 +86,12 @@ } break; case "报废": stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId()); stockUtils.addUnStockWithBatchNo(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), batchNo); break; case "让步放行": stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId()); stockUtils.addStockWithBatchNo(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId(), batchNo); break; default: break; @@ -219,4 +225,41 @@ private BigDecimal defaultDecimal(BigDecimal value) { return value == null ? BigDecimal.ZERO : value; } private String resolveProductionBatchNo(Long productionProductMainId, Long qualityInspectId, Long productModelId) { if (productModelId == null) { return null; } if (productionProductMainId != null) { StockInRecord productionRecord = stockInRecordService.getOne( Wrappers.<StockInRecord>lambdaQuery() .eq(StockInRecord::getRecordId, productionProductMainId) .eq(StockInRecord::getProductModelId, productModelId) .in(StockInRecord::getRecordType, Arrays.asList( StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), StockInQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode())) .isNotNull(StockInRecord::getBatchNo) .orderByDesc(StockInRecord::getId) .last("limit 1"), false); if (productionRecord != null) { return productionRecord.getBatchNo(); } } if (qualityInspectId == null) { return null; } StockInRecord inspectRecord = stockInRecordService.getOne( Wrappers.<StockInRecord>lambdaQuery() .eq(StockInRecord::getRecordId, qualityInspectId) .eq(StockInRecord::getProductModelId, productModelId) .eq(StockInRecord::getRecordType, StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode()) .isNotNull(StockInRecord::getBatchNo) .orderByDesc(StockInRecord::getId) .last("limit 1"), false); return inspectRecord == null ? null : inspectRecord.getBatchNo(); } }