资产管理定时通知
This commit is contained in:
parent
061989c1ab
commit
3783f054a2
@ -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";
|
||||
}
|
||||
|
@ -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";
|
||||
}
|
||||
|
@ -29,8 +29,6 @@ import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class CompanyQualsServiceImpl extends ServiceImpl<CompanyQualsMapper, CompanyQuals> implements CompanyQualsService {
|
||||
@Resource
|
||||
private CompanyQualsMapper companyQualsMapper;
|
||||
|
||||
@Resource
|
||||
private DictDataApi dataApi;
|
||||
@ -84,7 +82,7 @@ public class CompanyQualsServiceImpl extends ServiceImpl<CompanyQualsMapper, Com
|
||||
public void noticeCompanyQualsExpired(List<CompanyRespVO> companyRespVOS) {
|
||||
// 构建分页条件
|
||||
LambdaQueryWrapper<CompanyQuals> queryWrapper = new LambdaQueryWrapper<>();
|
||||
Page<CompanyQuals> page = new Page<>(0, BaseConstants.BATCH_SIZE);
|
||||
Page<CompanyQuals> page = new Page<>(1, BaseConstants.BATCH_SIZE);
|
||||
// 获取临期判定时间
|
||||
List<DictDataRespDTO> dictDataList = dataApi.getDictDataList(DictBaseConstants.COMPANY_QUALS_EXPIRED);
|
||||
Long ruleDay = null;
|
||||
@ -110,6 +108,14 @@ public class CompanyQualsServiceImpl extends ServiceImpl<CompanyQualsMapper, Com
|
||||
sendMessage(item, BaseConstants.QUALS_INTERIM_PERIOD, companyRespVOS, day);
|
||||
}
|
||||
});
|
||||
|
||||
// 没有下一页了就退出
|
||||
if (!qualsPage.hasNext()) {
|
||||
break;
|
||||
}
|
||||
|
||||
// 翻页
|
||||
page.setCurrent(page.getCurrent() + 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,14 @@
|
||||
package cn.iocoder.yudao.module.property.service;
|
||||
|
||||
import cn.iocoder.yudao.module.company.vo.CompanyRespVO;
|
||||
import cn.iocoder.yudao.module.property.entity.Property;
|
||||
import cn.iocoder.yudao.module.property.vo.PropertyReqVO;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 企业管理-资产管理 接口
|
||||
* @author 小李
|
||||
@ -53,4 +56,11 @@ public interface PropertyService extends IService<Property> {
|
||||
**/
|
||||
void deleteProperty(String id);
|
||||
|
||||
/**
|
||||
* 检测是否有临期、过期资产,有就通知
|
||||
* @author 小李
|
||||
* @date 8:47 2024/8/16
|
||||
* @param adminUsers
|
||||
**/
|
||||
void noticePropertyExpired(List<CompanyRespVO> adminUsers);
|
||||
}
|
@ -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<PropertyMapper, Property> implements PropertyService {
|
||||
|
||||
@ -33,26 +48,34 @@ public class PropertyServiceImpl extends ServiceImpl<PropertyMapper, Property> 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<Property> getPropertyPage(PropertyReqVO pageReqVO, Page<Property> page){
|
||||
public IPage<Property> getPropertyPage(PropertyReqVO pageReqVO, Page<Property> 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<PropertyMapper, Property> 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<CompanyRespVO> adminUsers) {
|
||||
// 构建分页
|
||||
LambdaQueryWrapper<Property> queryWrapper = new LambdaQueryWrapper<>();
|
||||
Page<Property> page = new Page<>(1, BaseConstants.BATCH_SIZE);
|
||||
// 获取临期判定时间
|
||||
List<DictDataRespDTO> 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<Property> 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<CompanyRespVO> 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<String, Object> templateParams = new HashMap<>();
|
||||
// 什么资产
|
||||
templateParams.put("propertyName", property.getPropName());
|
||||
// 还有多少天过期或已过期多少天,可能是负数,绝对值一下
|
||||
templateParams.put("day", Math.abs(day));
|
||||
|
||||
// 发送
|
||||
sendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
|
||||
.setUserId(noticeId)
|
||||
.setTemplateCode(templateCode).setTemplateParams(templateParams));
|
||||
}
|
||||
}
|
@ -429,7 +429,7 @@ public class CompanyStaffServiceImpl extends ServiceImpl<CompanyStaffMapper, Com
|
||||
@DSTransactional
|
||||
public void updateStaffWorkAndJoinedYears() {
|
||||
LambdaQueryWrapper<CompanyStaff> queryWrapper = new LambdaQueryWrapper<>();
|
||||
Page<CompanyStaff> page = new Page<>(0, BaseConstants.BATCH_SIZE);
|
||||
Page<CompanyStaff> page = new Page<>(1, BaseConstants.BATCH_SIZE);
|
||||
while (true) {
|
||||
// 查询一页的数据
|
||||
Page<CompanyStaff> companyStaffPage = baseMapper.selectPage(page, queryWrapper);
|
||||
@ -455,12 +455,12 @@ public class CompanyStaffServiceImpl extends ServiceImpl<CompanyStaffMapper, Com
|
||||
updateBatchById(result);
|
||||
|
||||
// 没有下一页了就退出
|
||||
if (companyStaffPage.getRecords().isEmpty()) {
|
||||
if (!companyStaffPage.hasNext()) {
|
||||
break;
|
||||
}
|
||||
|
||||
// 取一页
|
||||
queryWrapper.gt(CompanyStaff::getId, page.getRecords().get(page.getRecords().size() - 1).getId());
|
||||
page.setCurrent(page.getCurrent() + 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,39 @@
|
||||
package cn.iocoder.yudao.scheduled;
|
||||
|
||||
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
|
||||
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
|
||||
import cn.iocoder.yudao.module.company.service.CompanyService;
|
||||
import cn.iocoder.yudao.module.company.vo.CompanyRespVO;
|
||||
import cn.iocoder.yudao.module.property.service.PropertyService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 企业资产临期定时通知
|
||||
* @author 小李
|
||||
* @date 8:42 2024/8/16
|
||||
**/
|
||||
@Component
|
||||
@TenantJob
|
||||
@Slf4j
|
||||
public class NoticeCompanyPropertyExpiredJob implements JobHandler {
|
||||
|
||||
@Resource
|
||||
private PropertyService propertyService;
|
||||
|
||||
@Resource
|
||||
private CompanyService companyService;
|
||||
|
||||
@Override
|
||||
public String execute(String param) throws Exception {
|
||||
// 获得所有企业的企业管理员
|
||||
List<CompanyRespVO> companyAndManager = companyService.getCompanyAndManager();
|
||||
|
||||
// 执行定时任务
|
||||
propertyService.noticePropertyExpired(companyAndManager);
|
||||
return null;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user