From 3783f054a24eaddb278ea5e9fef0c03c58293dc8 Mon Sep 17 00:00:00 2001 From: xiao-fajia <1665375861@qq.com> Date: Fri, 16 Aug 2024 09:43:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E4=BA=A7=E7=AE=A1=E7=90=86=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iocoder/yudao/common/BaseConstants.java | 4 + .../yudao/common/DictBaseConstants.java | 3 +- .../service/impl/CompanyQualsServiceImpl.java | 12 +- .../property/service/PropertyService.java | 10 ++ .../service/impl/PropertyServiceImpl.java | 135 ++++++++++++++++-- .../service/impl/CompanyStaffServiceImpl.java | 6 +- .../NoticeCompanyPropertyExpiredJob.java | 39 +++++ 7 files changed, 189 insertions(+), 20 deletions(-) create mode 100644 dl-module-company/src/main/java/cn/iocoder/yudao/scheduled/NoticeCompanyPropertyExpiredJob.java diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/common/BaseConstants.java b/dl-module-base/src/main/java/cn/iocoder/yudao/common/BaseConstants.java index 0a2dace0..72a801a3 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/common/BaseConstants.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/common/BaseConstants.java @@ -47,4 +47,8 @@ public class BaseConstants { public static final String QUALS_INTERIM_PERIOD = "quals_interim_period"; /**资质过期通知模板*/ public static final String QUALS_EXPIRED = "quals_expired"; + /** 资产临期通知模板 */ + public static final String PROPERTY_INTERIM_PERIOD = "property_interim_period"; + /** 资产过期通知模板 */ + public static final String PROPERTY_EXPIRED = "property_expired"; } diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/common/DictBaseConstants.java b/dl-module-base/src/main/java/cn/iocoder/yudao/common/DictBaseConstants.java index 10a20281..7716c472 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/common/DictBaseConstants.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/common/DictBaseConstants.java @@ -27,5 +27,6 @@ public class DictBaseConstants { public static final String COMPANY_PROP_STATUS = "company_prop_status"; /** 时间周期字典 */ public static final String CYCLE_DICT = "cycle_dict"; - + /** 企业资产临期判定时间 */ + public static final String COMPANY_PROPERTY_EXPIRED = "company_property_expired"; } diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/service/impl/CompanyQualsServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/service/impl/CompanyQualsServiceImpl.java index 7b6ac397..ac633fcf 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/service/impl/CompanyQualsServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/service/impl/CompanyQualsServiceImpl.java @@ -29,8 +29,6 @@ import java.util.stream.Collectors; @Service public class CompanyQualsServiceImpl extends ServiceImpl implements CompanyQualsService { - @Resource - private CompanyQualsMapper companyQualsMapper; @Resource private DictDataApi dataApi; @@ -84,7 +82,7 @@ public class CompanyQualsServiceImpl extends ServiceImpl companyRespVOS) { // 构建分页条件 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - Page page = new Page<>(0, BaseConstants.BATCH_SIZE); + Page page = new Page<>(1, BaseConstants.BATCH_SIZE); // 获取临期判定时间 List dictDataList = dataApi.getDictDataList(DictBaseConstants.COMPANY_QUALS_EXPIRED); Long ruleDay = null; @@ -110,6 +108,14 @@ public class CompanyQualsServiceImpl extends ServiceImpl { **/ void deleteProperty(String id); + /** + * 检测是否有临期、过期资产,有就通知 + * @author 小李 + * @date 8:47 2024/8/16 + * @param adminUsers + **/ + void noticePropertyExpired(List adminUsers); } \ No newline at end of file diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/property/service/impl/PropertyServiceImpl.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/property/service/impl/PropertyServiceImpl.java index 79a7d407..b7099fc9 100644 --- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/property/service/impl/PropertyServiceImpl.java +++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/property/service/impl/PropertyServiceImpl.java @@ -1,29 +1,44 @@ package cn.iocoder.yudao.module.property.service.impl; -import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.common.BaseConstants; +import cn.iocoder.yudao.common.DictBaseConstants; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.company.vo.CompanyRespVO; import cn.iocoder.yudao.module.property.entity.Property; import cn.iocoder.yudao.module.property.mapper.PropertyMapper; import cn.iocoder.yudao.module.property.service.PropertyService; import cn.iocoder.yudao.module.property.vo.PropertyReqVO; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.module.system.api.dict.DictDataApi; +import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO; +import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi; +import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 企业管理-资产管理 接口实现类 + * * @author 小李 * @date 16:41 2024/8/15 -**/ + **/ @Service public class PropertyServiceImpl extends ServiceImpl implements PropertyService { @@ -33,26 +48,34 @@ public class PropertyServiceImpl extends ServiceImpl i @Resource private DeptApi deptApi; + @Resource + private DictDataApi dataApi; + + @Resource + private NotifyMessageSendApi sendApi; + /** * 企业管理-资产分页 + * + * @param pageReqVO 查询对象 * @author 小李 * @date 16:15 2024/8/15 - * @param pageReqVO 查询对象 **/ @Override - public IPage getPropertyPage(PropertyReqVO pageReqVO, Page page){ + public IPage getPropertyPage(PropertyReqVO pageReqVO, Page page) { return baseMapper.getPropertyPage(pageReqVO, page); } /** * 创建资产 + * + * @param createReqVO * @author 小李 * @date 18:26 2024/8/15 - * @param createReqVO **/ @Override @DSTransactional - public void createProperty(PropertyReqVO createReqVO){ + public void createProperty(PropertyReqVO createReqVO) { // 获取当前登录用户部门ID和企业ID Long userId = SecurityFrameworkUtils.getLoginUserId(); AdminUserRespDTO user = userApi.getUser(userId); @@ -66,33 +89,119 @@ public class PropertyServiceImpl extends ServiceImpl i /** * 获得资产记录 + * + * @param id 资产ID * @author 小李 * @date 18:45 2024/8/15 - * @param id 资产ID **/ @Override - public Property getProperty(String id){ + public Property getProperty(String id) { return baseMapper.selectById(id); } /** * 更新资产 + * + * @param updateReqVO 资产对象 * @author 小李 * @date 18:57 2024/8/15 - * @param updateReqVO 资产对象 **/ @Override - public void updateProperty(PropertyReqVO updateReqVO){ + public void updateProperty(PropertyReqVO updateReqVO) { baseMapper.updateById(updateReqVO); } /** * 删除资产 + * + * @param id 资产ID * @author 小李 * @date 19:20 2024/8/15 - * @param id 资产ID **/ - public void deleteProperty(String id){ + public void deleteProperty(String id) { baseMapper.deleteById(id); } + + /** + * 检测是否有临期、过期资产,有就通知 + * + * @param adminUsers + * @author 小李 + * @date 8:47 2024/8/16 + **/ + @Override + public void noticePropertyExpired(List adminUsers) { + // 构建分页 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Page page = new Page<>(1, BaseConstants.BATCH_SIZE); + // 获取临期判定时间 + List dictDataList = dataApi.getDictDataList(DictBaseConstants.COMPANY_PROPERTY_EXPIRED); + Long ruleDay = null; + if (ObjectUtil.isNotEmpty(dictDataList)) { + ruleDay = Long.valueOf(dictDataList.get(0).getValue()); + } + while (ObjectUtil.isNotEmpty(ruleDay)) { + // 查询一页数据 + Page propertyPage = baseMapper.selectPage(page, queryWrapper); + // 分类临期和过期 + // 这里重新赋值是因为不重新赋值用不了,我也不知道为什么,看到这里的人知道的话可以给我讲讲 + Long finalRuleDay = ruleDay; + propertyPage.getRecords().forEach(item -> { + LocalDate currentDate = LocalDate.now(); + LocalDate nextKeepDate = item.getNextKeepDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + // 计算离当前时间还有多少天 + Long day = ChronoUnit.DAYS.between(currentDate, nextKeepDate); + // 拿到当前记录的管理员ID + List collect = adminUsers.stream().filter(company -> company.getId() == item.getCorpId()).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(collect)) { + Long userId = collect.get(0).getUserDTO().getId(); + // day 小于0是过期了 小于等于finalRuleDay是临期了 其他就正常的 + if (day < 0) { + // 通知管理员 + sendMessage(item, BaseConstants.PROPERTY_EXPIRED, userId, day); + // 通知使用人 + sendMessage(item, BaseConstants.PROPERTY_EXPIRED, Long.valueOf(item.getUserId()), day); + } else if (day <= finalRuleDay) { + // 通知管理员 + sendMessage(item, BaseConstants.PROPERTY_INTERIM_PERIOD, userId, day); + // 通知使用人 + sendMessage(item, BaseConstants.PROPERTY_INTERIM_PERIOD, Long.valueOf(item.getUserId()), day); + } + } + + }); + + // 没有下一页了就退出 + if (!propertyPage.hasNext()) { + break; + } + + // 翻页 + page.setCurrent(page.getCurrent() + 1); + } + } + + /** + * 发送通知 + * + * @param property 发送的资产信息 + * @param templateCode 使用的模板 + * @param noticeId 通知到的人 + * @param day 天数 + * @author 小李 + * @date 9:29 2024/8/16 + **/ + private void sendMessage(Property property, String templateCode, Long noticeId, Long day) { + // 准备发送参数 + Map templateParams = new HashMap<>(); + // 什么资产 + templateParams.put("propertyName", property.getPropName()); + // 还有多少天过期或已过期多少天,可能是负数,绝对值一下 + templateParams.put("day", Math.abs(day)); + + // 发送 + sendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO() + .setUserId(noticeId) + .setTemplateCode(templateCode).setTemplateParams(templateParams)); + } } \ No newline at end of file diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/staff/service/impl/CompanyStaffServiceImpl.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/staff/service/impl/CompanyStaffServiceImpl.java index a7cabf39..8557ae13 100644 --- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/staff/service/impl/CompanyStaffServiceImpl.java +++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/staff/service/impl/CompanyStaffServiceImpl.java @@ -429,7 +429,7 @@ public class CompanyStaffServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - Page page = new Page<>(0, BaseConstants.BATCH_SIZE); + Page page = new Page<>(1, BaseConstants.BATCH_SIZE); while (true) { // 查询一页的数据 Page companyStaffPage = baseMapper.selectPage(page, queryWrapper); @@ -455,12 +455,12 @@ public class CompanyStaffServiceImpl extends ServiceImpl companyAndManager = companyService.getCompanyAndManager(); + + // 执行定时任务 + propertyService.noticePropertyExpired(companyAndManager); + return null; + } +}