diff --git a/nflg-qms-admin/pom.xml b/nflg-qms-admin/pom.xml
index 6553b5ca..f89fa50a 100644
--- a/nflg-qms-admin/pom.xml
+++ b/nflg-qms-admin/pom.xml
@@ -206,6 +206,12 @@
io.minio
minio
8.5.17
+
+
+ bcprov-jdk18on
+ org.bouncycastle
+
+
diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/TestController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/TestController.java
new file mode 100644
index 00000000..0557660b
--- /dev/null
+++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/TestController.java
@@ -0,0 +1,47 @@
+package com.nflg.qms.admin.controller;
+
+import com.nflg.qms.admin.service.BasdeSerialNumberControllerService;
+import com.nflg.qms.admin.service.ISendMessageService;
+import com.nflg.wms.common.pojo.ApiResult;
+import com.nflg.wms.common.util.UserUtil;
+import com.nflg.wms.repository.entity.QmsTodoItem;
+import com.nflg.wms.starter.BaseController;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 测试
+ */
+@Slf4j
+@RestController
+@RequestMapping("/test")
+public class TestController extends BaseController {
+
+ @Resource
+ private List sendMessageServices;
+
+ @Resource
+ private BasdeSerialNumberControllerService basdeSerialNumberControllerService;
+
+ /**
+ * 发送消息
+ */
+ @GetMapping("/sendMessage")
+ public ApiResult sendMessage() {
+ QmsTodoItem qmsTodoItem = new QmsTodoItem()
+ .setCode(basdeSerialNumberControllerService.generateSerialNumber(32))
+ .setIsRead(false)
+ .setSourceTypeId(2046157760401182721L)
+ .setSourceId(0L)
+ .setCreateUserId(UserUtil.getUserId())
+ .setCreateUserName(UserUtil.getUserName())
+ .setCreateTime(java.time.LocalDateTime.now());
+ sendMessageServices.forEach(service -> service.sendSystemMessage(qmsTodoItem));
+ return ApiResult.success();
+ }
+}
diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/ISendMessageService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/ISendMessageService.java
new file mode 100644
index 00000000..09f1a565
--- /dev/null
+++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/ISendMessageService.java
@@ -0,0 +1,12 @@
+package com.nflg.qms.admin.service;
+
+import com.nflg.wms.repository.entity.QmsTodoItem;
+
+public interface ISendMessageService {
+
+ /**
+ * 发送待办消息
+ * @param item 待办事项
+ */
+ void sendSystemMessage(QmsTodoItem item);
+}
diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java
index 8899c0ac..69ff7af6 100644
--- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java
+++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java
@@ -1,7 +1,9 @@
package com.nflg.qms.admin.service;
+import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nflg.wms.common.constant.Constant;
import com.nflg.wms.common.exception.NflgException;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.qo.QmsInspectionStandardAddQO;
@@ -13,15 +15,10 @@ import com.nflg.wms.common.pojo.vo.QmsInspectionStandardItemContentVO;
import com.nflg.wms.common.pojo.vo.QmsInspectionStandardItemVO;
import com.nflg.wms.common.pojo.vo.QmsInspectionStandardVO;
import com.nflg.wms.common.util.UserUtil;
-import com.nflg.wms.repository.entity.QmsInspectionStandard;
-import com.nflg.wms.repository.entity.QmsInspectionStandardItem;
-import com.nflg.wms.repository.entity.QmsInspectionStandardItemContent;
-import com.nflg.wms.repository.entity.QmsQcMaterial;
+import com.nflg.wms.common.util.VUtil;
+import com.nflg.wms.repository.entity.*;
import com.nflg.wms.repository.mapper.QmsInspectionStandardMapper;
-import com.nflg.wms.repository.service.IQmsInspectionStandardItemContentService;
-import com.nflg.wms.repository.service.IQmsInspectionStandardItemService;
-import com.nflg.wms.repository.service.IQmsInspectionStandardService;
-import com.nflg.wms.repository.service.IQmsQcMaterialService;
+import com.nflg.wms.repository.service.*;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -30,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -54,6 +52,9 @@ public class QmsInspectionStandardControllerService {
@Resource
private IQmsQcMaterialService qmsQcMaterialService;
+ @Resource
+ private IDictionaryItemService dictionaryItemService;
+
/**
* 分页查询检验标准
*/
@@ -79,7 +80,7 @@ public class QmsInspectionStandardControllerService {
/**
* 启用/禁用检验标准(单条)
- * @param id 检验标准ID
+ * @param id 检验标准ID
* @param enable 是否启用
*/
public void enable(Long id, Boolean enable) {
@@ -105,8 +106,8 @@ public class QmsInspectionStandardControllerService {
// 2. 已发布的标准不允许删除
if (standard.getPublishStatus() != null && standard.getPublishStatus() == 1) {
- throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError,
- "已发布的检验标准不允许删除,ID: " + id);
+ throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError,
+ "已发布的检验标准不允许删除,ID: " + id);
}
// 3. 查询该检验标准下所有检测项
@@ -152,7 +153,7 @@ public class QmsInspectionStandardControllerService {
if (detail == null) {
detail = new QmsInspectionStandardDetailVO();
}
-
+
// 填充基础字段
detail.setId(standard.getId());
detail.setMaterialId(standard.getMaterialId());
@@ -182,21 +183,21 @@ public class QmsInspectionStandardControllerService {
List itemVOs = new ArrayList<>();
for (QmsInspectionStandardItem item : items) {
QmsInspectionStandardItemVO itemVO = convertToItemVO(item);
-
+
// 查询检测项内容列表
List contents = inspectionStandardItemContentService.lambdaQuery()
.eq(QmsInspectionStandardItemContent::getInspectionStandardItemId, item.getId())
.orderByAsc(QmsInspectionStandardItemContent::getSortNo)
.list();
-
+
List contentVOs = contents.stream()
.map(this::convertToContentVO)
.collect(Collectors.toList());
-
+
itemVO.setContents(contentVOs);
itemVOs.add(itemVO);
}
-
+
detail.setItems(itemVOs);
return detail;
}
@@ -330,6 +331,13 @@ public class QmsInspectionStandardControllerService {
if (standard.getPublishStatus() != null && standard.getPublishStatus() == 1) {
throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "已发布的检验标准不允许修改");
}
+ VUtil.trueThrowBusinessError(
+ inspectionStandardService.lambdaQuery()
+ .ne(QmsInspectionStandard::getId, qo.getId())
+ .eq(QmsInspectionStandard::getMaterialId, qo.getMaterialId())
+ .eq(QmsInspectionStandard::getVersion, qo.getVersion())
+ .exists()
+ ).throwMessage("存在相同版本的检验标准");
Long userId = UserUtil.getUserId();
String userName = UserUtil.getUserName();
@@ -353,18 +361,19 @@ public class QmsInspectionStandardControllerService {
/**
* 处理检测项列表(新增、更新、删除)
* @param inspectionStandardId 检验标准ID
- * @param items 检测项列表
- * @param userId 用户ID
- * @param userName 用户名
- * @param now 当前时间
+ * @param items 检测项列表
+ * @param userId 用户ID
+ * @param userName 用户名
+ * @param now 当前时间
*/
- private void processItems(Long inspectionStandardId,
+ private void processItems(List dictionaryItems,
+ Long inspectionStandardId,
List items,
Long userId, String userName, LocalDateTime now) {
if (items == null) {
return;
}
-
+
// 获取该检验标准下所有现有的检测项ID
List existingItemIds = inspectionStandardItemService.lambdaQuery()
.eq(QmsInspectionStandardItem::getInspectionStandardId, inspectionStandardId)
@@ -376,15 +385,30 @@ public class QmsInspectionStandardControllerService {
// 处理传入的检测项
List newItemIds = new ArrayList<>();
for (QmsInspectionStandardSaveQO.InspectionStandardItemQO itemQO : items) {
+ DictionaryItem dictionaryItem = dictionaryItems.stream()
+ .filter(item -> item.getId().equals(itemQO.getSamplingMethodDictItemId()))
+ .findFirst()
+ .orElse(null);
+ VUtil.trueThrowBusinessError(Objects.isNull(dictionaryItem)).throwMessage("检测项【" + itemQO.getName() + "】设置的抽样方式不存在");
+ if (StrUtil.equals(dictionaryItem.getCode(), "抽样")) {
+ VUtil.trueThrowBusinessError(Objects.isNull(itemQO.getSamplingPlanId()))
+ .throwMessage("检测项【" + itemQO.getName() + "】设置的抽样方式为【抽样】时,抽样方案不能为空");
+ VUtil.trueThrowBusinessError(Objects.isNull(itemQO.getInspectionLevelDictItemId()))
+ .throwMessage("检测项【" + itemQO.getName() + "】设置的抽样方式为【抽样】时,检验水平不能为空");
+ VUtil.trueThrowBusinessError(Objects.isNull(itemQO.getAqlPriorityValueId()))
+ .throwMessage("检测项【" + itemQO.getName() + "】设置的抽样方式为【抽样】时,AQL值不能为空");
+ VUtil.trueThrowBusinessError(Objects.isNull(itemQO.getAqlTypeDictItemId()))
+ .throwMessage("检测项【" + itemQO.getName() + "】设置的抽样方式为【抽样】时,AQL类型不能为空");
+ }
QmsInspectionStandardItem item;
-
+
if (itemQO.getId() != null) {
// 更新现有检测项
item = inspectionStandardItemService.getById(itemQO.getId());
if (item == null) {
throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "检测项不存在:" + itemQO.getId());
}
-
+
// 更新字段
updateItemFields(item, itemQO, userId, userName, now);
inspectionStandardItemService.updateById(item);
@@ -395,7 +419,7 @@ public class QmsInspectionStandardControllerService {
updateItemFields(item, itemQO, userId, userName, now);
inspectionStandardItemService.save(item);
}
-
+
newItemIds.add(item.getId());
// 处理检测项内容
@@ -406,13 +430,13 @@ public class QmsInspectionStandardControllerService {
List itemsToDelete = existingItemIds.stream()
.filter(id -> !newItemIds.contains(id))
.collect(Collectors.toList());
-
+
if (!itemsToDelete.isEmpty()) {
// 先删除检测项内容
inspectionStandardItemContentService.lambdaUpdate()
.in(QmsInspectionStandardItemContent::getInspectionStandardItemId, itemsToDelete)
.remove();
-
+
// 再删除检测项
inspectionStandardItemService.removeByIds(itemsToDelete);
}
@@ -439,13 +463,14 @@ public class QmsInspectionStandardControllerService {
String userName = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now();
// 2. 处理检测项列表
- processItems(qo.getInspectionStandardId(), qo.getItems(), userId, userName, now);
+ processItems(dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_INSPECTION_STANDARD_SAMPLING_METHOD),
+ qo.getInspectionStandardId(), qo.getItems(), userId, userName, now);
}
/**
* 更新检测项字段
*/
- private void updateItemFields(QmsInspectionStandardItem item,
+ private void updateItemFields(QmsInspectionStandardItem item,
QmsInspectionStandardSaveQO.InspectionStandardItemQO qo,
Long userId, String userName, LocalDateTime now) {
if (qo.getName() != null) {
@@ -478,11 +503,11 @@ public class QmsInspectionStandardControllerService {
if (qo.getPdfDrawing() != null) {
item.setPdfDrawing(qo.getPdfDrawing());
}
-
+
item.setUpdateUserId(userId);
item.setUpdateUserName(userName);
item.setUpdateTime(now);
-
+
// 新增时设置创建信息
if (item.getCreateUserId() == null) {
item.setCreateUserId(userId);
@@ -494,7 +519,7 @@ public class QmsInspectionStandardControllerService {
/**
* 处理检测项内容(新增、更新、删除)
*/
- private void processItemContents(Long itemId,
+ private void processItemContents(Long itemId,
List contents,
Long userId, String userName, LocalDateTime now) {
// 获取现有的内容ID列表
@@ -506,18 +531,18 @@ public class QmsInspectionStandardControllerService {
.collect(Collectors.toList());
List newContentIds = new ArrayList<>();
-
+
if (contents != null && !contents.isEmpty()) {
for (QmsInspectionStandardSaveQO.InspectionStandardItemContentQO contentQO : contents) {
QmsInspectionStandardItemContent content;
-
+
if (contentQO.getId() != null) {
// 更新现有内容
content = inspectionStandardItemContentService.getById(contentQO.getId());
if (content == null) {
throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "检测项内容不存在:" + contentQO.getId());
}
-
+
updateContentFields(content, contentQO, userId, userName, now);
inspectionStandardItemContentService.updateById(content);
} else {
@@ -527,7 +552,7 @@ public class QmsInspectionStandardControllerService {
updateContentFields(content, contentQO, userId, userName, now);
inspectionStandardItemContentService.save(content);
}
-
+
newContentIds.add(content.getId());
}
}
@@ -536,7 +561,7 @@ public class QmsInspectionStandardControllerService {
List contentsToDelete = existingContentIds.stream()
.filter(id -> !newContentIds.contains(id))
.collect(Collectors.toList());
-
+
if (!contentsToDelete.isEmpty()) {
inspectionStandardItemContentService.removeByIds(contentsToDelete);
}
@@ -566,11 +591,11 @@ public class QmsInspectionStandardControllerService {
if (qo.getJudgmentTypeDictItemId() != null) {
content.setJudgmentTypeDictItemId(qo.getJudgmentTypeDictItemId());
}
-
+
content.setUpdateUserId(userId);
content.setUpdateUserName(userName);
content.setUpdateTime(now);
-
+
// 新增时设置创建信息
if (content.getCreateUserId() == null) {
content.setCreateUserId(userId);
diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/EmailMessageImpl.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/EmailMessageImpl.java
new file mode 100644
index 00000000..03970c11
--- /dev/null
+++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/EmailMessageImpl.java
@@ -0,0 +1,22 @@
+package com.nflg.qms.admin.service.impl;
+
+import com.nflg.qms.admin.service.ISendMessageService;
+import com.nflg.wms.repository.entity.QmsTodoItem;
+import com.nflg.wms.starter.service.EmailService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+/**
+ * 邮件消息实现类
+ */
+@Service
+public class EmailMessageImpl implements ISendMessageService {
+
+ @Resource
+ private EmailService emailService;
+
+ @Override
+ public void sendSystemMessage(QmsTodoItem item) {
+
+ }
+}
\ No newline at end of file
diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/RtxMessageImpl.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/RtxMessageImpl.java
new file mode 100644
index 00000000..1e4c6db2
--- /dev/null
+++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/RtxMessageImpl.java
@@ -0,0 +1,50 @@
+package com.nflg.qms.admin.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.nflg.qms.admin.service.ISendMessageService;
+import com.nflg.qms.admin.service.RtxSendService;
+import com.nflg.wms.common.pojo.vo.DictionaryItemTranslateVO;
+import com.nflg.wms.common.util.MultilingualUtil;
+import com.nflg.wms.repository.entity.QmsTodoItem;
+import com.nflg.wms.repository.entity.UserInterior;
+import com.nflg.wms.repository.service.IDictionaryItemTranslateService;
+import com.nflg.wms.repository.service.IUserInteriorService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 腾讯RTX消息实现类
+ */
+@Service
+public class RtxMessageImpl implements ISendMessageService {
+
+ @Resource
+ private RtxSendService rtxSendService;
+
+ @Resource
+ private IUserInteriorService userInteriorService;
+
+ @Resource
+ private IDictionaryItemTranslateService dictionaryItemTranslateService;
+
+ @Override
+ public void sendSystemMessage(QmsTodoItem item) {
+ UserInterior userInterior = userInteriorService.lambdaQuery()
+ .eq(UserInterior::getUserId, item.getCreateUserId())
+ .one();
+ if (Objects.nonNull(userInterior) && StrUtil.isNotBlank(userInterior.getRtxCode())) {
+ DictionaryItemTranslateVO dictionaryItemTranslateVO = dictionaryItemTranslateService.getByDictionaryItemId(item.getSourceTypeId(), MultilingualUtil.getLanguage());
+ if (Objects.nonNull(dictionaryItemTranslateVO)) {
+ rtxSendService.sendNotify(List.of(userInterior.getRtxCode()),
+ dictionaryItemTranslateVO.getValue(),
+ switch (dictionaryItemTranslateVO.getDictionaryItemCode()) {
+ default -> "未定义的待办事项:" + dictionaryItemTranslateVO.getDictionaryItemCode();
+ }
+ );
+ }
+ }
+ }
+}
diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/TodoItemMessageImpl.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/TodoItemMessageImpl.java
new file mode 100644
index 00000000..7877ae9f
--- /dev/null
+++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/TodoItemMessageImpl.java
@@ -0,0 +1,22 @@
+package com.nflg.qms.admin.service.impl;
+
+import com.nflg.qms.admin.service.ISendMessageService;
+import com.nflg.wms.repository.entity.QmsTodoItem;
+import com.nflg.wms.repository.service.IQmsTodoItemService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+/**
+ * 待办事项消息实现类
+ */
+@Service
+public class TodoItemMessageImpl implements ISendMessageService {
+
+ @Resource
+ private IQmsTodoItemService todoItemService;
+
+ @Override
+ public void sendSystemMessage(QmsTodoItem item) {
+ todoItemService.save(item);
+ }
+}
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java
index eda0b1be..534e930f 100644
--- a/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java
@@ -39,4 +39,6 @@ public class Constant {
public static final String DICTIONARY_AD_TYPE ="AdvertisementType";
public static final String DICTIONARY_AD_POSITION ="AdvertisementPosition";
+
+ public static final String DICTIONARY_INSPECTION_STANDARD_SAMPLING_METHOD ="InspectionStandardSamplingMethod";
}
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/EmailConfig.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/EmailConfig.java
new file mode 100644
index 00000000..76d0f940
--- /dev/null
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/EmailConfig.java
@@ -0,0 +1,21 @@
+package com.nflg.wms.common.pojo.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+public class EmailConfig {
+
+ //SMTP 服务器地址
+ private String host;
+
+ //SMTP 服务器端口
+ private Integer port;
+
+ //发件人用户名
+ private String username;
+
+ //发件人密码
+ private String password;
+}
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardSaveQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardSaveQO.java
index fec42ff2..9927dbcd 100644
--- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardSaveQO.java
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardSaveQO.java
@@ -1,6 +1,7 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -38,21 +39,24 @@ public class QmsInspectionStandardSaveQO {
/**
* 检测项名称
*/
+ @NotBlank(message = "检测项名称不能为空")
private String name;
/**
* 排序号
*/
- private Integer sortNo;
+ private Integer sortNo = 0;
/**
* 检测方式,关联字典项id
*/
+ @NotNull(message = "检测方式不能为空")
private Long testingMethodDictItemId;
/**
* 抽样方式,关联字典项id
*/
+ @NotNull(message = "抽样方式不能为空")
private Long samplingMethodDictItemId;
/**
@@ -78,6 +82,7 @@ public class QmsInspectionStandardSaveQO {
/**
* 检验标准项类型:0-标准检测项,1-尺寸检测项
*/
+ @NotNull(message = "检验标准项类型不能为空")
private Short itemType;
/**
@@ -106,16 +111,18 @@ public class QmsInspectionStandardSaveQO {
/**
* 排序号
*/
- private Integer sortNo;
+ private Integer sortNo=0;
/**
* 检测项名称
*/
+ @NotBlank(message = "检测项内容不能为空")
private String name;
/**
* 检测标准
*/
+ @NotBlank(message = "检测标准不能为空")
private String testStandard;
/**
@@ -131,6 +138,7 @@ public class QmsInspectionStandardSaveQO {
/**
* 判定类型,关联字典项id
*/
+ @NotNull(message = "判定类型不能为空")
private Long judgmentTypeDictItemId;
}
}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsTodoItem.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsTodoItem.java
index 642d877b..ab37a6cc 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsTodoItem.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsTodoItem.java
@@ -31,11 +31,6 @@ public class QmsTodoItem implements Serializable {
*/
private String code;
- /**
- * 标题
- */
- private String title;
-
/**
* 来源类型ID,关联dictionary_item表(字典编码MessageType)
*/
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/UserInterior.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/UserInterior.java
index c959a2c5..f91ca94d 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/UserInterior.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/UserInterior.java
@@ -44,4 +44,9 @@ public class UserInterior implements Serializable {
* 职位id
*/
private Long positionId;
+
+ /**
+ * rtx账号
+ */
+ private String rtxCode;
}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/DictionaryItemTranslateMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/DictionaryItemTranslateMapper.java
index 08b68c2d..e264a90c 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/DictionaryItemTranslateMapper.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/DictionaryItemTranslateMapper.java
@@ -23,4 +23,6 @@ public interface DictionaryItemTranslateMapper extends BaseMapper getByDictionaryCode(String dictionaryCode);
+
+ DictionaryItemTranslateVO getByDictionaryItemId(Long id, String language);
}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IDictionaryItemTranslateService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IDictionaryItemTranslateService.java
index f63024e2..a6cba9a0 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IDictionaryItemTranslateService.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IDictionaryItemTranslateService.java
@@ -18,6 +18,8 @@ public interface IDictionaryItemTranslateService extends IService getListByDictionaryItemId(Long id);
+ DictionaryItemTranslateVO getByDictionaryItemId(Long id, String language);
+
Long getId(Long dictionaryItemId, String code);
List getAllByDictionaryCode(String code, String language);
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/DictionaryItemTranslateServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/DictionaryItemTranslateServiceImpl.java
index 4cc26ff1..27780ddc 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/DictionaryItemTranslateServiceImpl.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/DictionaryItemTranslateServiceImpl.java
@@ -45,6 +45,11 @@ public class DictionaryItemTranslateServiceImpl extends ServiceImpl
+
+
diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsInspectionStandardMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsInspectionStandardMapper.xml
index 51ede951..9a3f597c 100644
--- a/nflg-wms-repository/src/main/resources/mapper/QmsInspectionStandardMapper.xml
+++ b/nflg-wms-repository/src/main/resources/mapper/QmsInspectionStandardMapper.xml
@@ -28,7 +28,8 @@
s.update_time AS updateTime
FROM qms_inspection_standard s
LEFT JOIN qms_qc_material m ON s.material_id = m.id
- LEFT JOIN qms_quality_inspector iqe ON m.id = iqe.material_id AND iqe.inspection_type = 1 AND iqe.enable = true
+ LEFT JOIN qms_inspector_material_item imi ON imi.material_id = m.id
+ LEFT JOIN qms_quality_inspector iqe ON imi.inspector_id = iqe.id AND iqe.inspection_type = 1 AND iqe.enable = true
LEFT JOIN "user" iqe_user ON iqe.user_id = iqe_user.id
@@ -58,9 +59,8 @@
m.material_category_code_path_name AS materialCategoryCodePathName,
m.material_desc AS materialDesc,
m.drawing_no_ver AS drawingNoVer,
- s.inspection_task_item_id AS inspectionTaskItemId,
s.drawing_url AS drawingUrl,
- s.version_no AS versionNo,
+ s.version AS versionNo,
s.is_enabled AS isEnabled,
s.packaging_method_id AS packagingMethodId,
s.inspection_cycle AS inspectionCycle,
@@ -77,11 +77,12 @@
s.update_time AS updateTime
FROM qms_inspection_standard s
LEFT JOIN qms_qc_material m ON s.material_id = m.id
- LEFT JOIN qms_quality_inspector iqe ON m.id = iqe.material_id AND iqe.inspection_type = 1 AND iqe.enable = true
+ LEFT JOIN qms_inspector_material_item imi ON imi.material_id = m.id
+ LEFT JOIN qms_quality_inspector iqe ON m.id = imi.inspector_id AND iqe.inspection_type = 1 AND iqe.enable = true
LEFT JOIN "user" iqe_user ON iqe.user_id = iqe_user.id
WHERE s.id = #{id}
GROUP BY s.id, s.material_id, m.material_no, m.material_category_code_path_name, m.material_desc, m.drawing_no_ver,
- s.inspection_task_item_id, s.drawing_url, s.version_no, s.is_enabled, s.packaging_method_id,
+ s.drawing_url, s.version, s.is_enabled, s.packaging_method_id,
s.inspection_cycle, s.publish_status, s.publish_user_id, s.publish_user_name, s.publish_time,
s.create_user_id, s.create_user_name, s.create_time, s.update_user_id, s.update_user_name, s.update_time
diff --git a/nflg-wms-starter/pom.xml b/nflg-wms-starter/pom.xml
index 675ea26a..4bcfab54 100644
--- a/nflg-wms-starter/pom.xml
+++ b/nflg-wms-starter/pom.xml
@@ -117,6 +117,15 @@
s3
2.39.5
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+ com.sun.mail
+ javax.mail
+ 1.6.2
+
diff --git a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/service/EmailService.java b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/service/EmailService.java
new file mode 100644
index 00000000..0d689897
--- /dev/null
+++ b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/service/EmailService.java
@@ -0,0 +1,54 @@
+package com.nflg.wms.starter.service;
+
+import cn.hutool.json.JSONUtil;
+import com.nflg.wms.common.pojo.dto.EmailConfig;
+import com.nflg.wms.common.util.VUtil;
+import com.nflg.wms.repository.entity.ParamConfig;
+import com.nflg.wms.repository.service.IParamConfigService;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.mail.*;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import java.util.Objects;
+import java.util.Properties;
+
+@Component
+@Slf4j
+public class EmailService {
+
+ @Resource
+ private IParamConfigService paramConfigService;
+
+ public void sendEmail(String to,String subject, String content) throws MessagingException {
+ log.info("准备发送邮件,to:{},subject:{},content:{}",to,subject,content);
+ ParamConfig config = paramConfigService.lambdaQuery().eq(ParamConfig::getCode, "EmailSet").one();
+ VUtil.trueThrowBusinessError(Objects.isNull(config)).throwMessage("未配置邮件参数");
+ EmailConfig emailConfig= JSONUtil.toBean(config.getValue(), EmailConfig.class);
+ VUtil.trueThrowBusinessError(Objects.isNull(emailConfig)).throwMessage("邮件参数解析失败");
+ Properties properties = new Properties();
+ properties.put("mail.smtp.host", emailConfig.getHost());
+ properties.put("mail.smtp.port", emailConfig.getPort().toString());
+ properties.put("mail.smtp.auth", "true");
+ properties.put("mail.smtp.ssl.enable", "true");
+ // 设置超时时间(单位:毫秒)
+ properties.put("mail.smtp.connectiontimeout", "5000"); // 连接超时
+ properties.put("mail.smtp.timeout", "5000"); // 读取超时
+ properties.put("mail.smtp.writetimeout", "5000"); // 写入超时
+ Session session = Session.getInstance(properties, new Authenticator() {
+ @Override
+ protected PasswordAuthentication getPasswordAuthentication() {
+ return new PasswordAuthentication(emailConfig.getUsername(), emailConfig.getPassword());
+ }
+ });
+ MimeMessage message = new MimeMessage(session);
+ message.setFrom(new InternetAddress(emailConfig.getUsername()));
+ message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
+ message.setSubject(subject);
+ message.setContent(content, "text/html; charset=UTF-8");
+ Transport.send(message);
+ log.info("发送邮件完成,to:{},subject:{},content:{}",to,subject,content);
+ }
+}