| | |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.utils.HackLoopTableRenderPolicy; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.framework.web.domain.R; |
| | | import com.ruoyi.procurementrecord.service.ProcurementRecordService; |
| | | import com.ruoyi.procurementrecord.utils.StockUtils; |
| | | import com.ruoyi.quality.dto.QualityInspectDto; |
| | |
| | | import java.math.BigDecimal; |
| | | import java.net.URLEncoder; |
| | | import java.util.Arrays; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | |
| | | public int submit(QualityInspect inspect) { |
| | | QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId()); |
| | | |
| | | //提交前必须判断是否合格 |
| | | if (ObjectUtils.isNull(qualityInspect.getCheckResult())) { |
| | | throw new ServiceException("请先判断是否合格"); |
| | | } |
| | | |
| | | //提交前必须判断是否合格(通过合格数量和不合格数量来判断) |
| | | if (ObjectUtils.isNull(qualityInspect.getQualifiedQuantity())) { |
| | | throw new ServiceException("合格数量不能为空"); |
| | | } |
| | |
| | | qualityInspect.setUnqualifiedQuantity(BigDecimal.ZERO); |
| | | } |
| | | |
| | | // 合格直接入库 |
| | | if(qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0){ |
| | | //仅添加入库记录 |
| | | StockInventoryDto stockInventoryDto = new StockInventoryDto(); |
| | | //如果是采购质检合格入库选用CUSTOMIZATION_UNSTOCK_OUT,其余合格入库选用QUALITYINSPECT_STOCK_IN |
| | | stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode())); |
| | | if (ObjectUtils.isNotEmpty(qualityInspect.getPurchaseLedgerId())){ |
| | | stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_OUT.getCode())); |
| | | } |
| | | stockInventoryDto.setRecordId(qualityInspect.getId()); |
| | | stockInventoryDto.setProductModelId(qualityInspect.getProductModelId()); |
| | | stockInventoryDto.setQualitity(qualityInspect.getQualifiedQuantity()); |
| | | stockInventoryDto.setBatchNo(resolveProductionBatchNo( |
| | | qualityInspect.getProductMainId(), |
| | | qualityInspect.getId(), |
| | | qualityInspect.getProductModelId())); |
| | | stockInventoryService.addStockInRecordOnly(stockInventoryDto); |
| | | // 合格直接入库(已生成过入库记录则跳过,避免编辑入库后提交导致重复入库) |
| | | if(qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0 |
| | | && !hasStockInRecord(qualityInspect)){ |
| | | stockInQualified(qualityInspect); |
| | | } |
| | | // 不合格处理 |
| | | if(qualityInspect.getUnqualifiedQuantity().compareTo(BigDecimal.ZERO) > 0){ |
| | |
| | | .last("limit 1"), |
| | | false); |
| | | return inspectRecord == null ? null : inspectRecord.getBatchNo(); |
| | | } |
| | | |
| | | /** |
| | | * 合格数量生成入库记录与库存 |
| | | */ |
| | | private void stockInQualified(QualityInspect qualityInspect) { |
| | | //仅添加入库记录 |
| | | StockInventoryDto stockInventoryDto = new StockInventoryDto(); |
| | | stockInventoryDto.setRecordType(resolveStockInRecordType(qualityInspect)); |
| | | stockInventoryDto.setRecordId(qualityInspect.getId()); |
| | | stockInventoryDto.setProductModelId(qualityInspect.getProductModelId()); |
| | | stockInventoryDto.setQualitity(qualityInspect.getQualifiedQuantity()); |
| | | stockInventoryDto.setBatchNo(resolveProductionBatchNo( |
| | | qualityInspect.getProductMainId(), |
| | | qualityInspect.getId(), |
| | | qualityInspect.getProductModelId())); |
| | | stockInventoryService.addStockInRecordOnly(stockInventoryDto); |
| | | } |
| | | |
| | | private String resolveStockInRecordType(QualityInspect qualityInspect) { |
| | | if (ObjectUtils.isNotEmpty(qualityInspect.getPurchaseLedgerId())) { |
| | | return StockInQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_OUT.getCode(); |
| | | } |
| | | return StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(); |
| | | } |
| | | |
| | | /** |
| | | * 判断该检验单是否已生成过入库记录 |
| | | */ |
| | | private boolean hasStockInRecord(QualityInspect qualityInspect) { |
| | | return stockInRecordService.count(Wrappers.<StockInRecord>lambdaQuery() |
| | | .eq(StockInRecord::getRecordId, qualityInspect.getId()) |
| | | .eq(StockInRecord::getProductModelId, qualityInspect.getProductModelId()) |
| | | .eq(StockInRecord::getRecordType, resolveStockInRecordType(qualityInspect))) > 0; |
| | | } |
| | | |
| | | /*生成检验报告*/ |
| | |
| | | } |
| | | QualityInspect qualityInspect = new QualityInspect(); |
| | | BeanUtils.copyProperties(qualityInspectDto, qualityInspect); |
| | | return qualityInspectMapper.updateById(qualityInspect); |
| | | int result = qualityInspectMapper.updateById(qualityInspect); |
| | | // 编辑时选择"入库"则生成入库记录与库存,选择"不入库"则只保存质检记录 |
| | | if (Integer.valueOf(1).equals(qualityInspectDto.getIsStockIn())) { |
| | | if (hasStockInRecord(qualityInspect)) { |
| | | throw new ServiceException("该检验单已生成过入库记录,请勿重复入库"); |
| | | } |
| | | stockInQualified(qualityInspect); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |