src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
@@ -14,7 +14,6 @@ import com.ruoyi.quality.service.IQualityInspectService; import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; @@ -139,7 +138,7 @@ @PostMapping("/submit") @Operation(summary = "提交检验") @Log(title = "提交检验", businessType = BusinessType.OTHER) public R<?> submit(@Valid @RequestBody QualityInspect qualityInspect) { public R<?> submit(@RequestBody QualityInspect qualityInspect) { return R.ok(qualityInspectService.submit(qualityInspect)); } src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -5,7 +5,6 @@ import com.ruoyi.dto.DateQueryDto; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; import java.io.Serial; @@ -34,7 +33,6 @@ * 类别(0:原材料检验;1:过程检验;2:出厂检验) */ @Excel(name = "类别",readConverterExp = "0=原材料检验,1=过程检验,2=出厂检验") @NotNull(message = "类别不能为空") private Integer inspectType; /** @@ -74,7 +72,6 @@ /** * 关联产品id */ @NotNull(message = "产品id不能为空") private Long productId; /** @@ -103,12 +100,10 @@ @Excel(name = "合格数量") @TableField("qualified_quantity") @NotNull(message = "合格数量不能为空") private BigDecimal qualifiedQuantity; @Excel(name = "不合格数量") @TableField("unqualified_quantity") @NotNull(message = "不合格数量不能为空") private BigDecimal unqualifiedQuantity; /** src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -10,6 +10,7 @@ import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.HackLoopTableRenderPolicy; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.procurementrecord.service.ProcurementRecordService; @@ -90,24 +91,32 @@ @Override public int submit(QualityInspect inspect) { QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId()); //提交前必须判断是否合格 if (ObjectUtils.isNull(qualityInspect.getCheckResult())) { throw new RuntimeException("请先判断是否合格"); throw new ServiceException("请先判断是否合格"); } if (ObjectUtils.isNull(qualityInspect.getQualifiedQuantity())) { throw new RuntimeException("合格数量不能为空"); throw new ServiceException("合格数量不能为空"); } if (ObjectUtils.isNull(qualityInspect.getUnqualifiedQuantity())) { throw new RuntimeException("不合格数量不能为空"); throw new ServiceException("不合格数量不能为空"); } // 区分合格数量以及不合格处理进行对应的处理 Assert.isTrue(qualityInspect.getQuantity().compareTo(qualityInspect.getQualifiedQuantity().add(qualityInspect.getUnqualifiedQuantity())) == 0,"请检查合格数量和不合格数量,需要合格数量+不合格数量与总数保持一致"); // 如果合格数量为空,设为0 if (qualityInspect.getQualifiedQuantity() == null) { qualityInspect.setQualifiedQuantity(BigDecimal.ZERO); } // 如果不合格数量为空,设为0 if (qualityInspect.getUnqualifiedQuantity() == null) { qualityInspect.setUnqualifiedQuantity(BigDecimal.ZERO); } // 合格直接入库 if(qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0){ //合格直接入库 // stockUtils.addStock(qualityInspect.getProductModelId(), qualityInspect.getQuantity(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(), qualityInspect.getId()); //仅添加入库记录 StockInventoryDto stockInventoryDto = new StockInventoryDto(); //如果是采购质检合格入库选用CUSTOMIZATION_UNSTOCK_OUT,其余合格入库选用QUALITYINSPECT_STOCK_IN @@ -124,6 +133,7 @@ qualityInspect.getProductModelId())); stockInventoryService.addStockInRecordOnly(stockInventoryDto); } // 不合格处理 if(qualityInspect.getUnqualifiedQuantity().compareTo(BigDecimal.ZERO) > 0){ QualityUnqualified qualityUnqualified = new QualityUnqualified(); BeanUtils.copyProperties(qualityInspect, qualityUnqualified); src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -17,6 +17,8 @@ import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.dto.StockUninventoryDto; import com.ruoyi.stock.execl.StockInRecordExportData; import com.ruoyi.production.mapper.ProductionOrderPickMapper; import com.ruoyi.production.pojo.ProductionOrderPick; import com.ruoyi.stock.mapper.StockInRecordMapper; import com.ruoyi.stock.mapper.StockInventoryMapper; import com.ruoyi.stock.mapper.StockUninventoryMapper; @@ -30,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.List; @Service @@ -39,6 +42,7 @@ private StockInRecordMapper stockInRecordMapper; private StockInventoryMapper stockInventoryMapper; private StockUninventoryMapper stockUninventoryMapper; private ProductionOrderPickMapper productionOrderPickMapper; @Override public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) { @@ -186,6 +190,33 @@ } stockInRecord.setApprovalStatus(approvalStatus); stockInRecordMapper.updateById(stockInRecord); // 审批驳回时,如果是生产退料入库,需要回滚领料记录的退料数量 if (ReviewStatusEnum.REJECTED.getCode().equals(approvalStatus) && StockInQualifiedRecordTypeEnum.FEED_RETURN_IN.getCode().equals(stockInRecord.getRecordType())) { // 找到对应的领料记录 ProductionOrderPick productionOrderPick = productionOrderPickMapper.selectById(stockInRecord.getRecordId()); if (productionOrderPick != null) { // 回滚退料数量 BigDecimal returnQty = productionOrderPick.getReturnQty(); if (returnQty == null) { returnQty = BigDecimal.ZERO; } BigDecimal newReturnQty = returnQty.subtract(stockInRecord.getStockInNum()); if (newReturnQty.compareTo(BigDecimal.ZERO) < 0) { newReturnQty = BigDecimal.ZERO; } productionOrderPick.setReturnQty(newReturnQty); // 重新计算实际用量 BigDecimal actualQty = productionOrderPick.getQuantity().add( productionOrderPick.getFeedingQty() != null ? productionOrderPick.getFeedingQty() : BigDecimal.ZERO) .subtract(newReturnQty); productionOrderPick.setActualQty(actualQty); productionOrderPick.setReturned(newReturnQty.compareTo(BigDecimal.ZERO) > 0); productionOrderPickMapper.updateById(productionOrderPick); } } // 审批通过时,库存增加 if (ReviewStatusEnum.APPROVED.getCode().equals(approvalStatus)) { if ("0".equals(stockInRecord.getType())) {