diff --git a/admin/src/main/resources/template/consumableDueEmailTemp.ftl b/admin/src/main/resources/template/consumableDueEmailTemp.ftl deleted file mode 100644 index 4891644..0000000 --- a/admin/src/main/resources/template/consumableDueEmailTemp.ftl +++ /dev/null @@ -1,57 +0,0 @@ - - - - - www.lingdaima.com(零代码excel转HTML) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
设备设备序列号所在科室所在位置耗材名称耗材编号开始使用时间到期时间
减压沸腾式清洗机16811000131-2020-11供应室门密封圈(洁区)RN-80CSW L=2360 S=602023/12/162024/6/16
门密封圈(污区)RN-80CSW L=2360 S=602023/7/152024/1/15
- - diff --git a/admin/src/main/resources/templates/consumableDueEmailTemp.ftl b/admin/src/main/resources/templates/consumableDueEmailTemp.ftl new file mode 100644 index 0000000..4387be1 --- /dev/null +++ b/admin/src/main/resources/templates/consumableDueEmailTemp.ftl @@ -0,0 +1,65 @@ + + + + + + + + +Dear ${nickName} : +

以下设备耗材即将到达使用效期,请及时处理!

+ + + + + + + + + + + + + + + <#if dueConsumables ?? && (dueConsumables ?size > 0) > + <#list dueConsumables as consumable > + + + + + + + + + + + + + +
耗材编号耗材名称所属设备所属设备序列号设备所属科室设备所在位置开始使用时间到期时间
${consumable.consumableNo}${consumable.consumableName}${consumable.equipmentName}${consumable.equipmentNo}${consumable.equipmentDept}${consumable.equipmentLocation}${consumable.activationTime?string("yyyy-MM-dd")}${consumable.dueTime?string("yyyy-MM-dd")}
+
+

该邮件为系统自动发送,请勿回复

+ + diff --git a/admin/src/test/java/com/ruoyi/test/AssertUnitTest.java b/admin/src/test/java/com/eqc/test/AssertUnitTest.java similarity index 72% rename from admin/src/test/java/com/ruoyi/test/AssertUnitTest.java rename to admin/src/test/java/com/eqc/test/AssertUnitTest.java index e70a336..332d2e6 100644 --- a/admin/src/test/java/com/ruoyi/test/AssertUnitTest.java +++ b/admin/src/test/java/com/eqc/test/AssertUnitTest.java @@ -1,8 +1,13 @@ package com.eqc.test; +import com.eqc.system.service.IEquipmentConsumablesService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.annotation.Resource; /** * 断言单元测试案例 @@ -10,6 +15,7 @@ import org.junit.jupiter.api.Test; * @author Lion Li */ @DisplayName("断言单元测试案例") +@SpringBootTest public class AssertUnitTest { @DisplayName("测试 assertEquals 方法") @@ -42,4 +48,12 @@ public class AssertUnitTest { Assertions.assertNotNull(null); } + @Autowired + private IEquipmentConsumablesService consumablesService; + + @Test + public void testDueConsumables() { + consumablesService.dueNotice(); + } + } diff --git a/admin/src/test/java/com/ruoyi/test/DemoUnitTest.java b/admin/src/test/java/com/eqc/test/DemoUnitTest.java similarity index 100% rename from admin/src/test/java/com/ruoyi/test/DemoUnitTest.java rename to admin/src/test/java/com/eqc/test/DemoUnitTest.java diff --git a/admin/src/test/java/com/ruoyi/test/ParamUnitTest.java b/admin/src/test/java/com/eqc/test/ParamUnitTest.java similarity index 100% rename from admin/src/test/java/com/ruoyi/test/ParamUnitTest.java rename to admin/src/test/java/com/eqc/test/ParamUnitTest.java diff --git a/admin/src/test/java/com/ruoyi/test/TagUnitTest.java b/admin/src/test/java/com/eqc/test/TagUnitTest.java similarity index 100% rename from admin/src/test/java/com/ruoyi/test/TagUnitTest.java rename to admin/src/test/java/com/eqc/test/TagUnitTest.java diff --git a/system/src/main/java/com/eqc/system/service/impl/EquipmentConsumablesServiceImpl.java b/system/src/main/java/com/eqc/system/service/impl/EquipmentConsumablesServiceImpl.java index 8882015..59703d5 100644 --- a/system/src/main/java/com/eqc/system/service/impl/EquipmentConsumablesServiceImpl.java +++ b/system/src/main/java/com/eqc/system/service/impl/EquipmentConsumablesServiceImpl.java @@ -13,7 +13,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.eqc.common.utils.email.MailUtils; import com.eqc.system.domain.dto.ConsumableNoticeDto; import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.eqc.system.domain.bo.EquipmentConsumablesBo; @@ -21,7 +24,9 @@ import com.eqc.system.domain.vo.EquipmentConsumablesVo; import com.eqc.system.domain.EquipmentConsumables; import com.eqc.system.mapper.EquipmentConsumablesMapper; import com.eqc.system.service.IEquipmentConsumablesService; +import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; +import java.io.IOException; import java.time.LocalDate; import java.util.*; @@ -31,13 +36,16 @@ import java.util.*; * @author yunpeng.zhang * @date 2023-12-29 */ +@Slf4j @RequiredArgsConstructor @Service public class EquipmentConsumablesServiceImpl implements IEquipmentConsumablesService { private final EquipmentConsumablesMapper baseMapper; - // 自动注入FreeMarker配置类,用户获取模板 + /** + * 自动注入FreeMarker配置类,用户获取模板 + */ private final Configuration configuration; /** @@ -163,14 +171,37 @@ public class EquipmentConsumablesServiceImpl implements IEquipmentConsumablesSer String subject = "设备耗材即将到期提醒"; Date date = DateUtils.addDays(DateUtils.beginOfDay(DateUtils.getNowDate()), 7); List consumableNotices = baseMapper.selectNoticeList(date); + if (consumableNotices.isEmpty()){ + log.warn("当前没有即将到期的耗材"); + return; + } Map> userNoticeMap = StreamUtils.groupByKey(consumableNotices, ConsumableNoticeDto::getChargeUser); userNoticeMap.forEach((userId, notices) -> { ConsumableNoticeDto notice = notices.get(0); String email = notice.getChargeUserEmail(); String chargeNickName = notice.getChargeNickName(); - //TODO 构建html + //构建html + Map root = new HashMap<>(); + root.put("nickName", chargeNickName); + root.put("dueConsumables", notices); + String content = buildMailContent(root, "consumableDueEmailTemp.ftl"); + if (StringUtils.isEmpty(content)){ + log.error("邮件内容构建失败,邮件未发送"); + return; + } // 自动注入FreeMarker配置类,用户获取模板 - MailUtils.sendHtml(email, subject, ""); + MailUtils.sendHtml(email, subject, content); }); } + + private String buildMailContent(Map root, String temp){ + String content = null; + try { + Template template = configuration.getTemplate(temp); + content = FreeMarkerTemplateUtils.processTemplateIntoString(template, root); + } catch (IOException | TemplateException e) { + log.error("构建邮件内容报错",e); + } + return content; + } } diff --git a/system/src/main/resources/mapper/system/EquipmentConsumablesMapper.xml b/system/src/main/resources/mapper/system/EquipmentConsumablesMapper.xml index dcc9766..21173f1 100644 --- a/system/src/main/resources/mapper/system/EquipmentConsumablesMapper.xml +++ b/system/src/main/resources/mapper/system/EquipmentConsumablesMapper.xml @@ -45,7 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join sys_user u on u.user_id = c.charge_user left join sys_dept dept on e.department = dept.dept_id where u.del_flag = '0' and dept.del_flag = '0' - and c.status = '0' and c.due_time >= #{date} + and c.status = '0' and c.due_time <= #{date}