From ffb7c59cadfb8a043a41849fd6d093f7967ea4cb Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 06 八月 2026 10:24:59 +0800
Subject: [PATCH] feat(quality): 增加不合格品拒收处理功能
---
src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java | 8 ++
src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java | 44 ++++++++++++++
src/main/java/com/ruoyi/project/system/service/ISysUserService.java | 8 ++
docs/quality_unqualified_reject.md | 63 +++++++++++++++++++++
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 1
src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java | 6 ++
src/main/java/com/ruoyi/project/system/controller/SysUserController.java | 17 +++++
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 1
src/main/java/com/ruoyi/quality/utils/QualityInspectHelper.java | 1
src/main/resources/mapper/system/SysUserMapper.xml | 19 +++--
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 1
11 files changed, 161 insertions(+), 8 deletions(-)
diff --git a/docs/quality_unqualified_reject.md b/docs/quality_unqualified_reject.md
new file mode 100644
index 0000000..8706199
--- /dev/null
+++ b/docs/quality_unqualified_reject.md
@@ -0,0 +1,63 @@
+# 鍘熸枡妫�楠屼笉鍚堟牸澶勭悊-鎷掓敹
+
+## 娑夊強椤甸潰
+
+- 涓嶅悎鏍肩鐞嗗鐞嗗脊绐楋紙鍘熸枡妫�楠岋級
+
+## API
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| POST | /quality/qualityUnqualified/deal | 涓嶅悎鏍肩鐞嗗鐞嗭紙鏂板"鎷掓敹"閫夐」锛� |
+
+**璇锋眰鍙傛暟锛�**
+
+| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|------|------|------|------|
+| id | Long | 鏄� | 涓嶅悎鏍艰褰旾D |
+| dealResult | String | 鏄� | 澶勭悊缁撴灉锛屾柊澧�"鎷掓敹"閫夐」 |
+| dealName | String | 鍚� | 澶勭悊浜� |
+| dealTime | Date | 鍚� | 澶勭悊鏃ユ湡 |
+
+**鍝嶅簲锛�** `{ "code": 200, "msg": "鎿嶄綔鎴愬姛" }`
+
+## 鍓嶇淇敼鐐�
+
+### 1. 涓嶅悎鏍煎鐞嗗脊绐� - 澶勭悊缁撴灉涓嬫媺妗�
+
+鍦ㄥ師鏂欐楠岋紙inspectType=0锛夌殑涓嶅悎鏍煎鐞嗗脊绐椾腑锛屽鐞嗙粨鏋滀笅鎷夋鏂板"鎷掓敹"閫夐」锛�
+
+```html
+<el-select v-model="form.dealResult" placeholder="璇烽�夋嫨澶勭悊缁撴灉">
+ <el-option label="鎶ュ簾" value="鎶ュ簾" />
+ <el-option label="璁╂鏀捐" value="璁╂鏀捐" />
+ <el-option label="鎷掓敹" value="鎷掓敹" /> <!-- 鏂板 -->
+</el-select>
+```
+
+### 2. 鍒楄〃/璇︽儏 - 澶勭悊缁撴灉灞曠ず
+
+鍒楄〃椤靛拰璇︽儏椤电殑 `dealResult` 瀛楁闇�鏀寔鏄剧ず"鎷掓敹"鐘舵�侊細
+
+```html
+<el-table-column prop="dealResult" label="澶勭悊缁撴灉">
+ <template slot-scope="scope">
+ <el-tag v-if="scope.row.dealResult === '鎷掓敹'" type="danger">鎷掓敹</el-tag>
+ <span v-else>{{ scope.row.dealResult }}</span>
+ </template>
+</el-table-column>
+```
+
+### 3. 澶勭悊閫昏緫
+
+鍓嶇璋冪敤 `/quality/qualityUnqualified/deal` 鎺ュ彛鏃讹紝`dealResult` 浼犲�� `"鎷掓敹"` 鍗冲彲锛屽悗绔細鑷姩锛�
+- 鍒涘缓閲囪喘閫�璐у崟锛坄purchase_return_orders`锛夛紝閫�璐ф柟寮�=鎷掓敹锛坮eturnType=1锛�
+- 鍒涘缓閲囪喘閫�璐т骇鍝佹槑缁嗭紙`purchase_return_order_products`锛�
+- 涓嶅叆搴擄紙涓嶄骇鐢熷叆搴�/鍑哄簱璁板綍锛�
+- 鏇存柊涓嶅悎鏍艰褰曠姸鎬佷负"宸插鐞�"
+
+## 娉ㄦ剰浜嬮」
+
+- "鎷掓敹"閫夐」浠呭鍘熸枡妫�楠岋紙inspectType=0锛夌殑涓嶅悎鏍艰褰曟湁鏁�
+- 鎷掓敹鍚庝細鑷姩鐢熸垚閲囪喘閫�璐у崟鍙凤紙CGTL鍓嶇紑锛夛紝鍙湪閲囪喘閫�璐ч〉闈㈡煡鐪�
+- 鎷掓敹涓嶄細浜х敓浠讳綍搴撳瓨鍙樺姩锛岀墿鍝佺洿鎺ラ��鍥炰緵搴斿晢
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 00a340e..3887ec7 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -332,6 +332,7 @@
qualityInspect.setInspectState(0);
qualityInspect.setInspectType(inspectType);
qualityInspect.setProductMainId(productionProductMain.getId());
+ qualityInspect.setCheckCompany("鏂扮枂澶х綏绱犻┈閾冭柉鍒跺搧鏈夐檺鍏徃");
qualityInspect.setProductModelId(productModel.getId());
qualityInspectMapper.insert(qualityInspect);
List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
diff --git a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
index 9e15e50..a2184de 100644
--- a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
+++ b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
@@ -210,6 +210,23 @@
}
/**
+ * 涓�閿噸缃墍鏈夌敤鎴峰瘑鐮侊紙浠呰秴绾х鐞嗗憳锛�
+ */
+ @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE)
+ @PostMapping("/resetAllPwd")
+ public AjaxResult resetAllPwd()
+ {
+ if (!SysUser.isAdmin(getUserId()))
+ {
+ return error("浠呰秴绾х鐞嗗憳鍙墽琛屾鎿嶄綔");
+ }
+ String defaultPassword = "12345";
+ String encryptedPwd = SecurityUtils.encryptPassword(defaultPassword);
+ int rows = userService.resetAllUserPwd(encryptedPwd);
+ return success("宸查噸缃� " + rows + " 涓敤鎴风殑瀵嗙爜涓� " + defaultPassword);
+ }
+
+ /**
* 鐘舵�佷慨鏀�
*/
@PreAuthorize("@ss.hasPermi('system:user:edit')")
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
index 5507b3f..cac0004 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
@@ -110,6 +110,14 @@
public int resetUserPwd(@Param("userName") String userName, @Param("password") String password);
/**
+ * 閲嶇疆鎵�鏈夋湭鍒犻櫎鐢ㄦ埛鐨勫瘑鐮�
+ *
+ * @param password 瀵嗙爜
+ * @return 缁撴灉
+ */
+ public int resetAllUserPwd(@Param("password") String password);
+
+ /**
* 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛
*
* @param userId 鐢ㄦ埛ID
diff --git a/src/main/java/com/ruoyi/project/system/service/ISysUserService.java b/src/main/java/com/ruoyi/project/system/service/ISysUserService.java
index e3be5f4..08b7bef 100644
--- a/src/main/java/com/ruoyi/project/system/service/ISysUserService.java
+++ b/src/main/java/com/ruoyi/project/system/service/ISysUserService.java
@@ -179,6 +179,14 @@
public int resetUserPwd(String userName, String password);
/**
+ * 閲嶇疆鎵�鏈夌敤鎴峰瘑鐮佷负榛樿鍊�
+ *
+ * @param password 榛樿瀵嗙爜锛堟槑鏂囷級
+ * @return 缁撴灉
+ */
+ public int resetAllUserPwd(String password);
+
+ /**
* 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛
*
* @param userId 鐢ㄦ埛ID
diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
index 01addd4..1e4c486 100644
--- a/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
@@ -360,6 +360,12 @@
return userMapper.resetUserPwd(userName, password);
}
+ @Override
+ public int resetAllUserPwd(String password)
+ {
+ return userMapper.resetAllUserPwd(password);
+ }
+
/**
* 鏂板鐢ㄦ埛瑙掕壊淇℃伅
*
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index 49bd0a5..2fc86ec 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -425,6 +425,7 @@
qualityInspect.setUnit(saleProduct.getUnit());
qualityInspect.setQuantity(saleProduct.getQuantity());
qualityInspect.setWarehouse(saleProduct.getStorageLocation());
+ qualityInspect.setCheckCompany("鏂扮枂澶х綏绱犻┈閾冭柉鍒跺搧鏈夐檺鍏徃");
qualityInspectMapper.insert(qualityInspect);
List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null);
if (qualityTestStandard.size()>0){
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
index b3d93b8..d696912 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -7,9 +7,16 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper;
+import com.ruoyi.purchase.mapper.PurchaseReturnOrdersMapper;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.purchase.pojo.PurchaseReturnOrderProducts;
+import com.ruoyi.purchase.pojo.PurchaseReturnOrders;
import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
import com.ruoyi.production.mapper.ProductionOrderMapper;
import com.ruoyi.production.mapper.ProductionOrderRoutingMapper;
@@ -30,10 +37,12 @@
import com.ruoyi.stock.service.StockUninventoryService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import jakarta.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
@@ -54,6 +63,9 @@
private final ProductionOperationTaskMapper productionOperationTaskMapper;
private final StockUninventoryService stockUninventoryService;
private final StockInRecordService stockInRecordService;
+ private final PurchaseReturnOrdersMapper purchaseReturnOrdersMapper;
+ private final PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper;
+ private final PurchaseLedgerMapper purchaseLedgerMapper;
@Override
public IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) {
@@ -68,6 +80,7 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public int deal(QualityUnqualified qualityUnqualified) {
QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId());
QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId());
@@ -106,6 +119,9 @@
case "璁╂鏀捐":
stockUtils.addStock(modelId, unqualified.getQuantity(),
StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
+ break;
+ case "鎷掓敹":
+ createRejectPurchaseReturn(qualityInspect, qualityUnqualified);
break;
default:
break;
@@ -226,6 +242,34 @@
return value == null ? BigDecimal.ZERO : value;
}
+ private void createRejectPurchaseReturn(QualityInspect qualityInspect, QualityUnqualified qualityUnqualified) {
+ if (qualityInspect == null) {
+ throw new ServiceException("鎵嬪姩鏂板鐨勪笉鍚堟牸璁板綍涓嶆敮鎸佹嫆鏀跺鐞嗭紝璇烽�夋嫨鎶ュ簾鎴栬姝ユ斁琛�");
+ }
+ Long supplierId = null;
+ Long purchaseLedgerId = qualityInspect.getPurchaseLedgerId();
+ if (purchaseLedgerId != null) {
+ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(purchaseLedgerId);
+ if (purchaseLedger != null) {
+ supplierId = purchaseLedger.getSupplierId();
+ }
+ }
+ PurchaseReturnOrders returnOrder = new PurchaseReturnOrders();
+ returnOrder.setReturnType(1);
+ returnOrder.setSupplierId(supplierId);
+ returnOrder.setPurchaseLedgerId(purchaseLedgerId);
+ returnOrder.setPreparedAt(LocalDate.now());
+ returnOrder.setReturnUserName(qualityUnqualified.getDealName());
+ returnOrder.setRemark("鍘熸枡妫�楠屼笉鍚堟牸-鎷掓敹");
+ returnOrder.setNo(OrderUtils.countTodayByCreateTime(purchaseReturnOrdersMapper, "CGTL", "no", LocalDateTime.now()));
+ purchaseReturnOrdersMapper.insert(returnOrder);
+ PurchaseReturnOrderProducts product = new PurchaseReturnOrderProducts();
+ product.setPurchaseReturnOrderId(returnOrder.getId());
+ product.setReturnQuantity(qualityUnqualified.getQuantity());
+ product.setStockInRecordId(0L);
+ purchaseReturnOrderProductsMapper.insert(product);
+ }
+
private String resolveProductionBatchNo(Long productionProductMainId,
Long qualityInspectId,
Long productModelId) {
diff --git a/src/main/java/com/ruoyi/quality/utils/QualityInspectHelper.java b/src/main/java/com/ruoyi/quality/utils/QualityInspectHelper.java
index bc19a02..d8d87d2 100644
--- a/src/main/java/com/ruoyi/quality/utils/QualityInspectHelper.java
+++ b/src/main/java/com/ruoyi/quality/utils/QualityInspectHelper.java
@@ -48,6 +48,7 @@
qualityInspect.setProductModelId(saleProduct.getProductModelId());
qualityInspect.setUnit(saleProduct.getUnit());
qualityInspect.setQuantity(saleProduct.getQuantity());
+ qualityInspect.setCheckCompany("鏂扮枂澶х綏绱犻┈閾冭柉鍒跺搧鏈夐檺鍏徃");
qualityInspectMapper.insert(qualityInspect);
List<QualityTestStandard> qualityTestStandardList = qualityTestStandardMapper
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index afa8098..f158675 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -181,6 +181,7 @@
}
qualityInspectDto.setModel(productModel.getModel());
qualityInspectDto.setUnit(productModel.getUnit());
+ qualityInspectDto.setCheckCompany("鏂扮枂澶х綏绱犻┈閾冭柉鍒跺搧鏈夐檺鍏徃");
// 鍒濆鍖栫┖鐨勬楠屽弬鏁板垪琛�
qualityInspectDto.setQualityInspectParams(new ArrayList<>());
diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml
index ea68745..cb3681e 100644
--- a/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/src/main/resources/mapper/system/SysUserMapper.xml
@@ -97,7 +97,7 @@
</if>
<!-- 鏁版嵁鑼冨洿杩囨护 -->
${params.dataScope}
- ORDER BY u.create_time DESC
+ ORDER BY u.create_time DESC, u.user_id DESC
</select>
<select id="selectAllocatedList" parameterType="com.ruoyi.project.system.domain.SysUser" resultMap="SysUserResult">
@@ -131,20 +131,20 @@
</if>
<!-- 鏁版嵁鑼冨洿杩囨护 -->
${params.dataScope}
- ORDER BY u.create_time DESC
+ ORDER BY u.create_time DESC, u.user_id DESC
</select>
<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.user_name = #{userName} and u.del_flag = '0'
- ORDER BY u.create_time DESC
+ ORDER BY u.create_time DESC, u.user_id DESC
</select>
<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.user_id = #{userId}
and u.del_flag = '0'
- ORDER BY u.create_time DESC
+ ORDER BY u.create_time DESC, u.user_id DESC
</select>
<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
@@ -169,7 +169,7 @@
</if>
and u.del_flag = '0'
</where>
- ORDER BY u.create_time DESC
+ ORDER BY u.create_time DESC, u.user_id DESC
</select>
<select id="selectRegistrantIds" resultType="com.ruoyi.project.system.domain.SysUser">
SELECT user_id, nick_name FROM sys_user
@@ -184,7 +184,7 @@
1=0 <!-- 绌哄垪琛ㄦ椂杩斿洖绌虹粨鏋� -->
</if>
</where>
- ORDER BY sys_user.create_time DESC
+ ORDER BY sys_user.create_time DESC, sys_user.user_id DESC
</select>
<select id="selectUsersByIds" resultType="com.ruoyi.project.system.domain.SysUser">
SELECT user_id, nick_name
@@ -194,7 +194,7 @@
#{id}
</foreach>
and del_flag = '0'
- ORDER BY sys_user.create_time DESC
+ ORDER BY sys_user.create_time DESC, sys_user.user_id DESC
</select>
<select id="selectUserByNickName" resultType="com.ruoyi.project.system.domain.SysUser"
parameterType="java.lang.String">
@@ -266,6 +266,9 @@
<update id="resetUserPwd" parameterType="com.ruoyi.project.system.domain.SysUser">
update sys_user set password = #{password} where user_name = #{userName}
</update>
+ <update id="resetAllUserPwd">
+ update sys_user set password = #{password} where del_flag = '0'
+ </update>
<delete id="deleteUserById" parameterType="Long">
update sys_user set del_flag = '2' where user_id = #{userId}
@@ -288,7 +291,7 @@
and sr.status = '0'
and su.status = '0'
and su.del_flag = '0'
- ORDER BY su.create_time DESC
+ ORDER BY su.create_time DESC, su.user_id DESC
</select>
<select id="getUserByPerms" resultType="java.lang.Long">
select distinct t5.user_id
--
Gitblit v1.9.3