From c0eabff28c4bd9212d2550162f28193daf9976fe Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期一, 23 三月 2026 14:25:40 +0800
Subject: [PATCH] feat: 新增巡检记录通知功能及查询条件优化
---
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java | 2
src/main/java/com/ruoyi/quality/mapper/QualityTestStandardParamMapper.java | 3 +
src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java | 8 ++
src/main/java/com/ruoyi/production/service/ProductInspectionRecordService.java | 7 ++
src/main/java/com/ruoyi/production/pojo/ProductInspectionRecord.java | 8 ++
src/main/resources/mapper/quality/QualityTestStandardParamMapper.xml | 8 ++
src/main/java/com/ruoyi/production/service/impl/ProductInspectionRecordServiceImpl.java | 98 ++++++++++++++++++++++++++++++++
src/main/resources/mapper/system/SysUserMapper.xml | 12 ++++
src/main/java/com/ruoyi/quality/service/impl/QualityTestStandardServiceImpl.java | 6 -
src/main/java/com/ruoyi/production/dto/ProductInspectionRecordDto.java | 7 ++
src/main/java/com/ruoyi/production/controller/ProductInspectionRecordController.java | 15 +++++
src/main/java/com/ruoyi/quality/service/IQualityTestStandardService.java | 2
12 files changed, 169 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
index af8fe1d..8a9f1fe 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -440,6 +440,8 @@
return "鍗遍櫓浣滀笟瀹℃壒";
case 9:
return "鍏ュ簱瀹℃壒";
+ case 10:
+ return "閫氱煡";
}
return null;
}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductInspectionRecordController.java b/src/main/java/com/ruoyi/production/controller/ProductInspectionRecordController.java
index 0ac5c53..4548b54 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductInspectionRecordController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductInspectionRecordController.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
@@ -14,6 +15,7 @@
import org.springframework.web.bind.annotation.*;
import java.util.List;
+import java.util.Objects;
/**
* <p>
@@ -34,6 +36,11 @@
@Log(title = "宸℃璁板綍 鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
public AjaxResult page(ProductInspectionRecordDto productInspectionRecord, Page<ProductInspectionRecord> page) {
LambdaQueryWrapper<ProductInspectionRecord> ew = Wrappers.<ProductInspectionRecord>lambdaQuery();
+ ew.eq(StringUtils.isNotEmpty(productInspectionRecord.getProcess()), ProductInspectionRecord::getProcess, productInspectionRecord.getProcess())
+ .eq(StringUtils.isNotEmpty(productInspectionRecord.getProcessId()), ProductInspectionRecord::getProcessId, productInspectionRecord.getProcessId())
+ .between(Objects.nonNull(productInspectionRecord.getStartTime()) && Objects.nonNull(productInspectionRecord.getEndTime()),
+ ProductInspectionRecord::getInspectionTime, productInspectionRecord.getStartTime(),
+ productInspectionRecord.getEndTime());
return AjaxResult.success(productInspectionRecordService.page(page, ew));
}
@@ -61,4 +68,12 @@
productInspectionRecordService.removeBatchByIds(ids);
return AjaxResult.success();
}
+
+ @ApiOperation("宸℃璁板綍 閫氱煡")
+ @PostMapping("/notify")
+ @Log(title = "宸℃璁板綍 閫氱煡", businessType = BusinessType.OTHER)
+ public AjaxResult notify(@RequestBody List<Long> ids) {
+ productInspectionRecordService.notify(ids);
+ return AjaxResult.success("鍙戦�侀�氱煡鎴愬姛");
+ }
}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductInspectionRecordDto.java b/src/main/java/com/ruoyi/production/dto/ProductInspectionRecordDto.java
index 07fc8ca..d452822 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductInspectionRecordDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductInspectionRecordDto.java
@@ -1,7 +1,10 @@
package com.ruoyi.production.dto;
+import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.production.pojo.ProductInspectionRecord;
import lombok.Data;
+
+import java.time.LocalDateTime;
/**
* @author yuan
@@ -10,4 +13,8 @@
*/
@Data
public class ProductInspectionRecordDto extends ProductInspectionRecord {
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime startTime;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime endTime;
}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductInspectionRecord.java b/src/main/java/com/ruoyi/production/pojo/ProductInspectionRecord.java
index da04ebe..efb5628 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductInspectionRecord.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductInspectionRecord.java
@@ -35,6 +35,9 @@
@TableId(value = "id", type = IdType.AUTO)
private Long id;
+ @ApiModelProperty("宸ュ簭id")
+ private String processId;
+
@ApiModelProperty("宸ュ簭")
private String process;
@@ -50,7 +53,12 @@
@ApiModelProperty("鍒ゅ畾锛坹es鍚堟牸 / no涓嶅悎鏍硷級")
private String judgement;
+ @ApiModelProperty("涓嶅悎鏍艰鍗�")
+ private String unqualifiedOrder;
+
@ApiModelProperty("宸℃鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime inspectionTime;
@ApiModelProperty("宸℃鍛�")
diff --git a/src/main/java/com/ruoyi/production/service/ProductInspectionRecordService.java b/src/main/java/com/ruoyi/production/service/ProductInspectionRecordService.java
index e3a3b62..029e723 100644
--- a/src/main/java/com/ruoyi/production/service/ProductInspectionRecordService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductInspectionRecordService.java
@@ -2,6 +2,7 @@
import com.ruoyi.production.pojo.ProductInspectionRecord;
import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
/**
* <p>
@@ -13,4 +14,10 @@
*/
public interface ProductInspectionRecordService extends IService<ProductInspectionRecord> {
+ /**
+ * 鍙戦�佸贰妫�璁板綍閫氱煡
+ *
+ * @param ids 宸℃璁板綍ID鍒楄〃
+ */
+ void notify(List<Long> ids);
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductInspectionRecordServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductInspectionRecordServiceImpl.java
index 5320a0e..44acb36 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductInspectionRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductInspectionRecordServiceImpl.java
@@ -1,10 +1,21 @@
package com.ruoyi.production.service.impl;
-import com.ruoyi.production.pojo.ProductInspectionRecord;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.production.mapper.ProductInspectionRecordMapper;
+import com.ruoyi.production.pojo.ProductInspectionRecord;
import com.ruoyi.production.service.ProductInspectionRecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.project.system.domain.SysNotice;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.project.system.service.ISysNoticeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
/**
* <p>
@@ -14,7 +25,90 @@
* @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
* @since 2026-03-16 04:16:32
*/
+@Slf4j
@Service
-public class ProductInspectionRecordServiceImpl extends ServiceImpl<ProductInspectionRecordMapper, ProductInspectionRecord> implements ProductInspectionRecordService {
+public class ProductInspectionRecordServiceImpl extends ServiceImpl<ProductInspectionRecordMapper, ProductInspectionRecord>
+ implements ProductInspectionRecordService {
+ private static final String OP_POST_CODE = "op";
+
+ @Autowired
+ private SysUserMapper userMapper;
+
+ @Autowired
+ private ISysNoticeService noticeService;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void notify(List<Long> ids) {
+ if (ids == null || ids.isEmpty()) {
+ return;
+ }
+
+ // 1. 鏌ヨ宸℃璁板綍
+ List<ProductInspectionRecord> records = listByIds(ids);
+ if (records == null || records.isEmpty()) {
+ log.warn("鏈壘鍒板搴旂殑宸℃璁板綍, ids={}", ids);
+ return;
+ }
+
+ // 2. 鏌ヨ宀椾綅涓簅p鐨勭敤鎴�
+ List<SysUser> opUsers = userMapper.selectUserListByPostCode(OP_POST_CODE);
+ if (opUsers == null || opUsers.isEmpty()) {
+ log.warn("鏈壘鍒板矖浣嶇紪鐮佷负[{}]鐨勭敤鎴�", OP_POST_CODE);
+ return;
+ }
+
+ // 3. 鑾峰彇褰撳墠鐢ㄦ埛淇℃伅
+ Long currentUserId = SecurityUtils.getLoginUser().getUserId();
+ Long tenantId = SecurityUtils.getLoginUser().getTenantId();
+
+ // 4. 涓烘瘡鏉″贰妫�璁板綍鍙戦�侀�氱煡
+ List<SysNotice> notices = new ArrayList<>();
+ for (ProductInspectionRecord record : records) {
+ // 杩囨护鍑轰笉鍚堟牸鐨勮褰�
+ if (!"no".equalsIgnoreCase(record.getJudgement())) {
+ continue;
+ }
+
+ // 鏋勫缓娑堟伅鍐呭锛歺xx鐢熶骇璁㈠崟锛寈x宸ュ簭锛寈x妫�楠岄」涓嶅悎鏍硷紝璇峰強鏃跺宸ヨ壓鍙婂弬鏁板仛璋冩暣锛�
+ String productionOrder = record.getUnqualifiedOrder();
+ String process = record.getProcess();
+ String inspectionItem = record.getInspectionItem();
+
+ StringBuilder messageBuilder = new StringBuilder();
+ if (productionOrder != null && !productionOrder.isEmpty()) {
+ messageBuilder.append(productionOrder).append("鐢熶骇璁㈠崟锛�");
+ }
+ if (process != null && !process.isEmpty()) {
+ messageBuilder.append(process).append("宸ュ簭锛�");
+ }
+ if (inspectionItem != null && !inspectionItem.isEmpty()) {
+ messageBuilder.append(inspectionItem).append("妫�楠岄」涓嶅悎鏍硷紝");
+ }
+ messageBuilder.append("璇峰強鏃跺宸ヨ壓鍙婂弬鏁板仛璋冩暣锛�");
+
+ String title = "宸℃涓嶅悎鏍奸�氱煡";
+ String message = messageBuilder.toString();
+
+ // 涓烘瘡涓猳p宀椾綅鐢ㄦ埛鍒涘缓閫氱煡
+ for (SysUser opUser : opUsers) {
+ SysNotice notice = new SysNotice();
+ notice.setNoticeType("1");
+ notice.setNoticeTitle(title);
+ notice.setNoticeContent(message);
+ notice.setStatus("0");
+ notice.setConsigneeId(opUser.getUserId());
+ notice.setSenderId(currentUserId);
+ notice.setTenantId(tenantId);
+ notices.add(notice);
+ }
+ }
+
+ // 5. 鎵归噺淇濆瓨閫氱煡
+ if (!notices.isEmpty()) {
+ noticeService.saveBatch(notices);
+ log.info("宸插彂閫亄}鏉″贰妫�涓嶅悎鏍奸�氱煡缁檣}涓猳p宀椾綅鐢ㄦ埛", notices.size(), opUsers.size());
+ }
+ }
}
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..c6c7bf2 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
@@ -156,4 +156,12 @@
List<Long> getUserByRole(@Param("role") String role);
List<Long> getUserByPerms(@Param("perms") List<String> perms);
+
+ /**
+ * 鏍规嵁宀椾綅缂栫爜鏌ヨ鐢ㄦ埛ID鍒楄〃
+ *
+ * @param postCode 宀椾綅缂栫爜
+ * @return 鐢ㄦ埛ID鍒楄〃
+ */
+ List<SysUser> selectUserListByPostCode(@Param("postCode") String postCode);
}
diff --git a/src/main/java/com/ruoyi/quality/mapper/QualityTestStandardParamMapper.java b/src/main/java/com/ruoyi/quality/mapper/QualityTestStandardParamMapper.java
index 2823c49..95d236c 100644
--- a/src/main/java/com/ruoyi/quality/mapper/QualityTestStandardParamMapper.java
+++ b/src/main/java/com/ruoyi/quality/mapper/QualityTestStandardParamMapper.java
@@ -1,5 +1,6 @@
package com.ruoyi.quality.mapper;
+import com.ruoyi.quality.pojo.QualityTestStandard;
import com.ruoyi.quality.pojo.QualityTestStandardParam;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@@ -20,4 +21,6 @@
public interface QualityTestStandardParamMapper extends BaseMapper<QualityTestStandardParam> {
List<QualityTestStandardParam> selectListByProductId(@Param("productId") Long productId);
+
+ List<QualityTestStandardParam> selectParameterItemByProcessOrCategory(@Param("id") Long id, @Param("inspectType") Integer inspectType);
}
diff --git a/src/main/java/com/ruoyi/quality/service/IQualityTestStandardService.java b/src/main/java/com/ruoyi/quality/service/IQualityTestStandardService.java
index 08e3d82..99ca906 100644
--- a/src/main/java/com/ruoyi/quality/service/IQualityTestStandardService.java
+++ b/src/main/java/com/ruoyi/quality/service/IQualityTestStandardService.java
@@ -26,5 +26,5 @@
int delQualityTestStandard(List<Integer> ids);
- List<QualityTestStandard> getParameterItemByProcessOrCategory(Long id, Integer inspectType);
+ List<QualityTestStandardParam> getParameterItemByProcessOrCategory(Long id, Integer inspectType);
}
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityTestStandardServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityTestStandardServiceImpl.java
index 837d292..bec6aea 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityTestStandardServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityTestStandardServiceImpl.java
@@ -90,10 +90,8 @@
}
@Override
- public List<QualityTestStandard> getParameterItemByProcessOrCategory(Long id, Integer inspectType) {
- return baseMapper.selectList(Wrappers.<QualityTestStandard>lambdaQuery()
- .eq(Objects.nonNull(id),QualityTestStandard::getProcessId, id)
- .eq(QualityTestStandard::getInspectType, inspectType));
+ public List<QualityTestStandardParam> getParameterItemByProcessOrCategory(Long id, Integer inspectType) {
+ return qualityTestStandardParamMapper.selectParameterItemByProcessOrCategory(id, inspectType);
}
diff --git a/src/main/resources/mapper/quality/QualityTestStandardParamMapper.xml b/src/main/resources/mapper/quality/QualityTestStandardParamMapper.xml
index 837bc26..7c52f9d 100644
--- a/src/main/resources/mapper/quality/QualityTestStandardParamMapper.xml
+++ b/src/main/resources/mapper/quality/QualityTestStandardParamMapper.xml
@@ -23,5 +23,13 @@
left join quality_test_standard_binding t3 on t2.id = t3.test_standard_id
where t3.product_id = #{productId}
</select>
+ <select id="selectParameterItemByProcessOrCategory"
+ resultType="com.ruoyi.quality.pojo.QualityTestStandardParam">
+ select *
+ from quality_test_standard qts
+ left join quality_test_standard_param qtsp on qts.id = qtsp.test_standard_id
+ where qts.process_id = #{id}
+ and qts.inspect_type = #{inspectType}
+ </select>
</mapper>
diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml
index d837b7e..6073e01 100644
--- a/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/src/main/resources/mapper/system/SysUserMapper.xml
@@ -298,4 +298,16 @@
</if>
</select>
+ <!-- 鏍规嵁宀椾綅缂栫爜鏌ヨ鐢ㄦ埛鍒楄〃 -->
+ <select id="selectUserListByPostCode" resultType="com.ruoyi.project.system.domain.SysUser">
+ SELECT DISTINCT u.user_id, u.user_name, u.nick_name, u.phonenumber, u.status, u.tenant_id
+ FROM sys_user u
+ LEFT JOIN sys_user_post up ON u.user_id = up.user_id
+ LEFT JOIN sys_post p ON up.post_id = p.post_id
+ WHERE u.del_flag = '0'
+ AND u.status = '0'
+ AND p.post_code = #{postCode}
+ AND p.status = '0'
+ </select>
+
</mapper>
--
Gitblit v1.9.3