| | |
| | | import com.ruoyi.quality.pojo.QualityInspect; |
| | | import com.ruoyi.quality.pojo.QualityInspectParam; |
| | | import com.ruoyi.quality.pojo.QualityUnqualified; |
| | | import com.ruoyi.quality.utils.QualityInspectTemplateExportHelper; |
| | | import com.ruoyi.stock.pojo.StockInRecord; |
| | | import com.ruoyi.stock.service.StockInRecordService; |
| | | import com.ruoyi.quality.service.IQualityInspectParamService; |
| | |
| | | private SalesLedgerProductMapper salesLedgerProductMapper; |
| | | |
| | | private ProcurementRecordService procurementRecordService; |
| | | |
| | | private final QualityInspectTemplateExportHelper qualityInspectTemplateExportHelper; |
| | | |
| | | @Override |
| | | public int add(QualityInspectDto qualityInspectDto) { |
| | |
| | | } |
| | | stockInventoryDto.setRecordId(qualityInspect.getId()); |
| | | stockInventoryDto.setProductModelId(qualityInspect.getProductModelId()); |
| | | stockInventoryDto.setQualitity(qualityInspect.getQualifiedQuantity()); |
| | | // 入库数量 = 合格数量 * 入库比例 / 100,入库比例默认100% |
| | | BigDecimal stockInRatio = qualityInspect.getStockInRatio(); |
| | | if (stockInRatio == null || stockInRatio.compareTo(BigDecimal.ZERO) <= 0) { |
| | | stockInRatio = new BigDecimal("100.00"); |
| | | } |
| | | BigDecimal actualStockInQuantity = qualityInspect.getQualifiedQuantity() |
| | | .multiply(stockInRatio) |
| | | .divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP); |
| | | stockInventoryDto.setQualitity(actualStockInQuantity); |
| | | if (qualityInspect.getCheckTime() != null) { |
| | | LocalDate stockCreateDate = DateUtils.toLocalDate(qualityInspect.getCheckTime()).plusDays(1); |
| | | stockInventoryDto.setCreateTime(LocalDateTime.of(stockCreateDate, java.time.LocalTime.MIDNIGHT)); |
| | |
| | | if (!validResults.contains(request.getCheckResult())) { |
| | | return R.fail("检测结果必须为:合格、不合格、部分合格"); |
| | | } |
| | | if (request.getQuantity() == null || request.getQuantity().compareTo(BigDecimal.ZERO) <= 0) { |
| | | return R.fail("总数量必须大于0"); |
| | | } |
| | | if (request.getTestStandardId() == null) { |
| | | return R.fail("指标标准ID不能为空"); |
| | | } |
| | | // quantity = qualifiedQuantity + unqualifiedQuantity |
| | | BigDecimal qty = request.getQuantity(); |
| | | BigDecimal qualified = request.getQualifiedQuantity() != null ? request.getQualifiedQuantity() : BigDecimal.ZERO; |
| | | BigDecimal unqualified = request.getUnqualifiedQuantity() != null ? request.getUnqualifiedQuantity() : BigDecimal.ZERO; |
| | | if (qty.compareTo(qualified.add(unqualified)) != 0) { |
| | | return R.fail("总数量必须等于合格数量加不合格数量"); |
| | | } |
| | | |
| | | String checkResult = request.getCheckResult(); |
| | | if ("合格".equals(checkResult)) { |
| | | if (qualified.compareTo(qty) != 0 || unqualified.compareTo(BigDecimal.ZERO) != 0) { |
| | | return R.fail("检验结果为合格时,合格数量应等于总数量,不合格数量应为0"); |
| | | } |
| | | } else if ("不合格".equals(checkResult)) { |
| | | if (qualified.compareTo(BigDecimal.ZERO) != 0 || unqualified.compareTo(qty) != 0) { |
| | | return R.fail("检验结果为不合格时,合格数量应为0,不合格数量应等于总数量"); |
| | | } |
| | | } else { |
| | | if (qualified.compareTo(BigDecimal.ZERO) <= 0 || unqualified.compareTo(BigDecimal.ZERO) <= 0) { |
| | | return R.fail("检验结果为部分合格时,合格数量和不合格数量都必须大于0"); |
| | | } |
| | | } |
| | | |
| | | // 解析检测日期 |
| | | Date checkTimeDate = null; |
| | |
| | | |
| | | for (Long id : request.getIds()) { |
| | | try { |
| | | // 使用独立事务处理每个检验单,避免单个失败影响整体事务 |
| | | processSingleInspect(id, request, checkResult, qty, qualified, unqualified, checkTimeDate); |
| | | processSingleInspect(id, request, checkResult, checkTimeDate); |
| | | success++; |
| | | } catch (Exception e) { |
| | | errors.add("检验单 " + id + " 处理失败:" + e.getMessage()); |
| | |
| | | |
| | | /** |
| | | * 在独立事务中处理单个检验单 |
| | | * 数量、合格数量默认使用检验单自身的数量,不合格数量为0 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) |
| | | public void processSingleInspect(Long id, BatchQuickInspectRequest request, |
| | | String checkResult, BigDecimal qty, |
| | | BigDecimal qualified, BigDecimal unqualified, |
| | | Date checkTimeDate) { |
| | | String checkResult, Date checkTimeDate) { |
| | | QualityInspect qualityInspect = qualityInspectMapper.selectById(id); |
| | | if (qualityInspect == null) { |
| | | throw new RuntimeException("检验单不存在"); |
| | |
| | | if (Integer.valueOf(1).equals(qualityInspect.getInspectState())) { |
| | | throw new RuntimeException("检验单已提交"); |
| | | } |
| | | |
| | | // 数量默认取检验单自身的数量,不合格数量为0 |
| | | BigDecimal qty = qualityInspect.getQuantity() != null ? qualityInspect.getQuantity() : BigDecimal.ZERO; |
| | | BigDecimal qualified = qty; |
| | | BigDecimal unqualified = BigDecimal.ZERO; |
| | | |
| | | // 2. 更新检验单字段 |
| | | qualityInspect.setCheckResult(checkResult); |
| | |
| | | } |
| | | stockInventoryDto.setRecordId(qualityInspect.getId()); |
| | | stockInventoryDto.setProductModelId(qualityInspect.getProductModelId()); |
| | | stockInventoryDto.setQualitity(qualified); |
| | | // 入库数量 = 合格数量 * 入库比例 / 100,入库比例默认100% |
| | | BigDecimal stockInRatio = qualityInspect.getStockInRatio(); |
| | | if (stockInRatio == null || stockInRatio.compareTo(BigDecimal.ZERO) <= 0) { |
| | | stockInRatio = new BigDecimal("100.00"); |
| | | } |
| | | BigDecimal actualStockInQuantity = qualified |
| | | .multiply(stockInRatio) |
| | | .divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP); |
| | | stockInventoryDto.setQualitity(actualStockInQuantity); |
| | | if (qualityInspect.getCheckTime() != null) { |
| | | LocalDate stockCreateDate = DateUtils.toLocalDate(qualityInspect.getCheckTime()).plusDays(1); |
| | | stockInventoryDto.setCreateTime(LocalDateTime.of(stockCreateDate, java.time.LocalTime.MIDNIGHT)); |
| | |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void exportWeiLong(HttpServletResponse response, Long id) { |
| | | qualityInspectTemplateExportHelper.exportWeiLong(response, id); |
| | | } |
| | | |
| | | @Override |
| | | public void exportBaiShi(HttpServletResponse response, Long id) { |
| | | qualityInspectTemplateExportHelper.exportBaiShi(response, id); |
| | | } |
| | | |
| | | @Override |
| | | public void exportDaLi(HttpServletResponse response, Long id) { |
| | | qualityInspectTemplateExportHelper.exportDaLi(response, id); |
| | | } |
| | | |
| | | @Override |
| | | public String analyzeTemplate(String templatePath) { |
| | | return qualityInspectTemplateExportHelper.analyzeTemplate(templatePath); |
| | | } |
| | | |
| | | } |