From 3440ecd09d9dfc884fe111a2cdd4daff7aae50ef Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期五, 18 九月 2026 15:21:09 +0800
Subject: [PATCH] feat: 检验模块新增纸质单据导出模板(原材料/出厂/过程检验),过程检验新增技术参数等字段并改造判定提交逻辑
---
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 102 insertions(+), 9 deletions(-)
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index 328c358..7aa3355 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -1,7 +1,6 @@
package com.ruoyi.quality.service.impl;
-import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -9,27 +8,38 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
+import com.ruoyi.basic.enums.ApplicationTypeEnum;
+import com.ruoyi.basic.enums.RecordTypeEnum;
+import com.ruoyi.basic.utils.FileUtil;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
+import com.ruoyi.common.utils.OrderUtils;
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 com.ruoyi.quality.utils.FinalInspectExportUtil;
+import com.ruoyi.quality.utils.ProcessInspectExportUtil;
+import com.ruoyi.quality.utils.RawMaterialInspectExportUtil;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
+import com.ruoyi.quality.mapper.QualityUnqualifiedOrderMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectParam;
import com.ruoyi.quality.pojo.QualityUnqualified;
+import com.ruoyi.quality.pojo.QualityUnqualifiedOrder;
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;
import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.pojo.StockInRecord;
+import com.ruoyi.stock.service.StockInRecordService;
import com.ruoyi.stock.service.StockInventoryService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
@@ -56,6 +66,7 @@
private final StockUtils stockUtils;
private final StockInventoryService stockInventoryService;
private final StockInRecordService stockInRecordService;
+ private final FileUtil fileUtil;
private QualityInspectMapper qualityInspectMapper;
private IQualityInspectParamService qualityInspectParamService;
@@ -63,6 +74,8 @@
private QualityTestStandardMapper qualityTestStandardMapper;
private QualityUnqualifiedMapper qualityUnqualifiedMapper;
+
+ private QualityUnqualifiedOrderMapper qualityUnqualifiedOrderMapper;
private SalesLedgerProductMapper salesLedgerProductMapper;
@@ -72,12 +85,17 @@
public int add(QualityInspectDto qualityInspectDto) {
QualityInspect qualityInspect = new QualityInspect();
BeanUtils.copyProperties(qualityInspectDto, qualityInspect);
+ qualityInspect.setId(null);//寮哄埗璧版暟鎹簱鑷锛岄伩鍏嶅墠绔浼爄d瀵艰嚧涓婚敭鍐茬獊
qualityInspect.setInspectState(0);//榛樿鏈彁浜�
qualityInspectMapper.insert(qualityInspect);
- for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) {
- qualityInspectParam.setInspectId(qualityInspect.getId());
+ if (ObjectUtils.isNotEmpty(qualityInspectDto.getQualityInspectParams())) {
+ for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) {
+ qualityInspectParam.setInspectId(qualityInspect.getId());
+ }
+ qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams());
}
- qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams());
+ // 淇濆瓨闄勪欢
+ fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.QUALITY_INSPECT, qualityInspect.getId(), qualityInspectDto.getStorageBlobDTOs());
return 0;
}
@@ -88,6 +106,8 @@
QualityInspectDto qualityInspectDto = new QualityInspectDto();
BeanUtils.copyProperties(qualityInspect, qualityInspectDto);
qualityInspectDto.setQualityInspectParams(qualityInspectParams);
+ // 鏌ヨ闄勪欢
+ qualityInspectDto.setStorageBlobVOs(fileUtil.getStorageBlobVOsByRecordTypeAndRecordId(RecordTypeEnum.QUALITY_INSPECT, qualityInspect.getId()));
return qualityInspectDto;
}
@@ -96,9 +116,36 @@
public int submit(QualityInspect inspect) {
QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId());
+ if (Integer.valueOf(1).equals(qualityInspect.getInspectState())) {
+ throw new ServiceException("璇ヨ褰曞凡鎻愪氦锛屼笉鑳介噸澶嶆彁浜�");
+ }
+
+ // 鍘熸潗鏂欐楠�/杩囩▼妫�楠�/鍑哄巶妫�楠岋細琛ㄥ崟涓嶅啀濉啓鍚堟牸/涓嶅悎鏍兼暟閲忥紝鏀圭敤銆屽垽瀹氥�嶅瓧娈�
+ boolean isVerdictInspect = qualityInspect.getInspectType() != null
+ && (qualityInspect.getInspectType() == 0 || qualityInspect.getInspectType() == 1 || qualityInspect.getInspectType() == 2);
+
//鎻愪氦鍓嶅繀椤诲垽鏂槸鍚﹀悎鏍�
if (ObjectUtils.isNull(qualityInspect.getCheckResult())) {
- throw new ServiceException("璇峰厛鍒ゆ柇鏄惁鍚堟牸");
+ if (isVerdictInspect) {
+ // 鏀圭敤銆屽垽瀹氥�嶅瓧娈�
+ if (ObjectUtils.isNull(qualityInspect.getVerdict())) {
+ throw new ServiceException("璇峰厛鍒ゅ畾鏄惁鍚堟牸");
+ }
+ } else {
+ throw new ServiceException("璇峰厛鍒ゆ柇鏄惁鍚堟牸");
+ }
+ }
+
+ // 鐢便�屽垽瀹氥�嶆帹瀵煎悎鏍�/涓嶅悎鏍兼暟閲�
+ if (isVerdictInspect) {
+ BigDecimal total = qualityInspect.getQuantity() == null ? BigDecimal.ZERO : qualityInspect.getQuantity();
+ if ("鍚堟牸".equals(qualityInspect.getVerdict())) {
+ qualityInspect.setQualifiedQuantity(total);
+ qualityInspect.setUnqualifiedQuantity(BigDecimal.ZERO);
+ } else if ("涓嶅悎鏍�".equals(qualityInspect.getVerdict())) {
+ qualityInspect.setQualifiedQuantity(BigDecimal.ZERO);
+ qualityInspect.setUnqualifiedQuantity(total);
+ }
}
if (ObjectUtils.isNull(qualityInspect.getQualifiedQuantity())) {
@@ -119,8 +166,10 @@
qualityInspect.setUnqualifiedQuantity(BigDecimal.ZERO);
}
- // 鍚堟牸鐩存帴鍏ュ簱
- if(qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0){
+ // 鍚堟牸鐩存帴鍏ュ簱(杩囩▼妫�涓嶅叆搴�)
+ if (qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0 &&
+ qualityInspect.getInspectType() != 1 &&
+ qualityInspect.getInspectType() != 0) {
//浠呮坊鍔犲叆搴撹褰�
StockInventoryDto stockInventoryDto = new StockInventoryDto();
//濡傛灉鏄噰璐川妫�鍚堟牸鍏ュ簱閫夌敤CUSTOMIZATION_UNSTOCK_OUT,鍏朵綑鍚堟牸鍏ュ簱閫夌敤QUALITYINSPECT_STOCK_IN
@@ -150,9 +199,32 @@
qualityUnqualified.setProductModelId(qualityInspect.getProductModelId());
List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId()));
String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(","));
- qualityUnqualified.setDefectivePhenomena(text + "杩欎簺鎸囨爣涓瓨鍦ㄤ笉鍚堟牸");//涓嶅悎鏍肩幇璞�
+ if (text == null || text.isEmpty()) {
+ text = qualityInspect.getAbnormalRemark();
+ }
+ qualityUnqualified.setDefectivePhenomena((text == null || text.isEmpty()) ? "妫�楠屼笉鍚堟牸" : text + "杩欎簺鎸囨爣涓瓨鍦ㄤ笉鍚堟牸");//涓嶅悎鏍肩幇璞�
qualityUnqualified.setInspectId(qualityInspect.getId());
qualityUnqualifiedMapper.insert(qualityUnqualified);
+
+ // 鑷姩鍒涘缓涓嶅悎鏍煎搧澶勭悊鍗曪紝娴佸叆鏂版ā鍧�
+ QualityUnqualifiedOrder order = new QualityUnqualifiedOrder();
+ order.setUnqualifiedId(qualityUnqualified.getId());
+ order.setUnqualifiedProcess(qualityInspect.getInspectType() + 1);
+ order.setUnqualifiedQuantity(qualityInspect.getUnqualifiedQuantity());
+ order.setQuantity(qualityInspect.getQuantity());
+ order.setProductModelId(qualityInspect.getProductModelId());
+ order.setInspectorName(qualityInspect.getCheckName());
+ if (qualityInspect.getCheckTime() != null) {
+ order.setInspectDate(new java.util.Date(qualityInspect.getCheckTime().getTime()));
+ }
+ order.setSupplierName(qualityInspect.getSupplier());
+ order.setSpecificationModel(qualityInspect.getModel());
+ order.setProblemDescription(qualityInspect.getDefectivePhenomena());
+ order.setStatus(0);
+ String orderNo = OrderUtils.countTodayByCreateTime(
+ qualityUnqualifiedOrderMapper, "BHG", "order_no", LocalDateTime.now());
+ order.setOrderNo(orderNo);
+ qualityUnqualifiedOrderMapper.insert(order);
}
qualityInspect.setInspectState(1);//宸叉彁浜�
@@ -172,6 +244,9 @@
return R.ok("妫�楠屽崟宸叉彁浜�");
}
+ if (ObjectUtils.isNull(qualityInspect.getVerdict())) {
+ qualityInspect.setVerdict("鍚堟牸");
+ }
if (ObjectUtils.isNull(qualityInspect.getCheckResult())) {
qualityInspect.setCheckResult("鍚堟牸");
}
@@ -286,7 +361,10 @@
}
QualityInspect qualityInspect = new QualityInspect();
BeanUtils.copyProperties(qualityInspectDto, qualityInspect);
- return qualityInspectMapper.updateById(qualityInspect);
+ int result = qualityInspectMapper.updateById(qualityInspect);
+ // 淇濆瓨闄勪欢
+ fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.QUALITY_INSPECT, qualityInspectDto.getId(), qualityInspectDto.getStorageBlobDTOs());
+ return result;
}
@Override
@@ -297,6 +375,21 @@
@Override
public void qualityInspectExport(HttpServletResponse response, QualityInspect qualityInspect) {
List<QualityInspect> qualityInspects = qualityInspectMapper.qualityInspectExport(qualityInspect);
+ // 鍘熸潗鏂欐楠岋細鎸夌焊璐ㄥ崟鎹牱寮忓鍑�
+ if (qualityInspect.getInspectType() != null && qualityInspect.getInspectType() == 0) {
+ RawMaterialInspectExportUtil.export(response, qualityInspects);
+ return;
+ }
+ // 杩囩▼妫�楠岋細鎸夌焊璐ㄥ崟鎹牱寮忓鍑�
+ if (qualityInspect.getInspectType() != null && qualityInspect.getInspectType() == 1) {
+ ProcessInspectExportUtil.export(response, qualityInspects);
+ return;
+ }
+ // 鍑哄巶妫�楠岋細鎸夌焊璐ㄥ崟鎹牱寮忓鍑�
+ if (qualityInspect.getInspectType() != null && qualityInspect.getInspectType() == 2) {
+ FinalInspectExportUtil.export(response, qualityInspects);
+ return;
+ }
ExcelUtil<QualityInspect> util = new ExcelUtil<QualityInspect>(QualityInspect.class);
switch (qualityInspect.getInspectType()) {
case 0:
--
Gitblit v1.9.3