资产管理定时通知
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_INTERIM_PERIOD = "quals_interim_period";
|
||||||
/**资质过期通知模板*/
|
/**资质过期通知模板*/
|
||||||
public static final String QUALS_EXPIRED = "quals_expired";
|
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 COMPANY_PROP_STATUS = "company_prop_status";
|
||||||
/** 时间周期字典 */
|
/** 时间周期字典 */
|
||||||
public static final String CYCLE_DICT = "cycle_dict";
|
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
|
@Service
|
||||||
public class CompanyQualsServiceImpl extends ServiceImpl<CompanyQualsMapper, CompanyQuals> implements CompanyQualsService {
|
public class CompanyQualsServiceImpl extends ServiceImpl<CompanyQualsMapper, CompanyQuals> implements CompanyQualsService {
|
||||||
@Resource
|
|
||||||
private CompanyQualsMapper companyQualsMapper;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private DictDataApi dataApi;
|
private DictDataApi dataApi;
|
||||||
@ -84,7 +82,7 @@ public class CompanyQualsServiceImpl extends ServiceImpl<CompanyQualsMapper, Com
|
|||||||
public void noticeCompanyQualsExpired(List<CompanyRespVO> companyRespVOS) {
|
public void noticeCompanyQualsExpired(List<CompanyRespVO> companyRespVOS) {
|
||||||
// 构建分页条件
|
// 构建分页条件
|
||||||
LambdaQueryWrapper<CompanyQuals> queryWrapper = new LambdaQueryWrapper<>();
|
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);
|
List<DictDataRespDTO> dictDataList = dataApi.getDictDataList(DictBaseConstants.COMPANY_QUALS_EXPIRED);
|
||||||
Long ruleDay = null;
|
Long ruleDay = null;
|
||||||
@ -110,6 +108,14 @@ public class CompanyQualsServiceImpl extends ServiceImpl<CompanyQualsMapper, Com
|
|||||||
sendMessage(item, BaseConstants.QUALS_INTERIM_PERIOD, companyRespVOS, day);
|
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;
|
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.entity.Property;
|
||||||
import cn.iocoder.yudao.module.property.vo.PropertyReqVO;
|
import cn.iocoder.yudao.module.property.vo.PropertyReqVO;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 企业管理-资产管理 接口
|
* 企业管理-资产管理 接口
|
||||||
* @author 小李
|
* @author 小李
|
||||||
@ -53,4 +56,11 @@ public interface PropertyService extends IService<Property> {
|
|||||||
**/
|
**/
|
||||||
void deleteProperty(String id);
|
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;
|
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.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.entity.Property;
|
||||||
import cn.iocoder.yudao.module.property.mapper.PropertyMapper;
|
import cn.iocoder.yudao.module.property.mapper.PropertyMapper;
|
||||||
import cn.iocoder.yudao.module.property.service.PropertyService;
|
import cn.iocoder.yudao.module.property.service.PropertyService;
|
||||||
import cn.iocoder.yudao.module.property.vo.PropertyReqVO;
|
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.DeptApi;
|
||||||
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
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.AdminUserApi;
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
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.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
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 小李
|
* @author 小李
|
||||||
* @date 16:41 2024/8/15
|
* @date 16:41 2024/8/15
|
||||||
**/
|
**/
|
||||||
@Service
|
@Service
|
||||||
public class PropertyServiceImpl extends ServiceImpl<PropertyMapper, Property> implements PropertyService {
|
public class PropertyServiceImpl extends ServiceImpl<PropertyMapper, Property> implements PropertyService {
|
||||||
|
|
||||||
@ -33,26 +48,34 @@ public class PropertyServiceImpl extends ServiceImpl<PropertyMapper, Property> i
|
|||||||
@Resource
|
@Resource
|
||||||
private DeptApi deptApi;
|
private DeptApi deptApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private DictDataApi dataApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private NotifyMessageSendApi sendApi;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 企业管理-资产分页
|
* 企业管理-资产分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 查询对象
|
||||||
* @author 小李
|
* @author 小李
|
||||||
* @date 16:15 2024/8/15
|
* @date 16:15 2024/8/15
|
||||||
* @param pageReqVO 查询对象
|
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public IPage<Property> getPropertyPage(PropertyReqVO pageReqVO, Page<Property> page){
|
public IPage<Property> getPropertyPage(PropertyReqVO pageReqVO, Page<Property> page) {
|
||||||
return baseMapper.getPropertyPage(pageReqVO, page);
|
return baseMapper.getPropertyPage(pageReqVO, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建资产
|
* 创建资产
|
||||||
|
*
|
||||||
|
* @param createReqVO
|
||||||
* @author 小李
|
* @author 小李
|
||||||
* @date 18:26 2024/8/15
|
* @date 18:26 2024/8/15
|
||||||
* @param createReqVO
|
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
@DSTransactional
|
@DSTransactional
|
||||||
public void createProperty(PropertyReqVO createReqVO){
|
public void createProperty(PropertyReqVO createReqVO) {
|
||||||
// 获取当前登录用户部门ID和企业ID
|
// 获取当前登录用户部门ID和企业ID
|
||||||
Long userId = SecurityFrameworkUtils.getLoginUserId();
|
Long userId = SecurityFrameworkUtils.getLoginUserId();
|
||||||
AdminUserRespDTO user = userApi.getUser(userId);
|
AdminUserRespDTO user = userApi.getUser(userId);
|
||||||
@ -66,33 +89,119 @@ public class PropertyServiceImpl extends ServiceImpl<PropertyMapper, Property> i
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得资产记录
|
* 获得资产记录
|
||||||
|
*
|
||||||
|
* @param id 资产ID
|
||||||
* @author 小李
|
* @author 小李
|
||||||
* @date 18:45 2024/8/15
|
* @date 18:45 2024/8/15
|
||||||
* @param id 资产ID
|
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public Property getProperty(String id){
|
public Property getProperty(String id) {
|
||||||
return baseMapper.selectById(id);
|
return baseMapper.selectById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新资产
|
* 更新资产
|
||||||
|
*
|
||||||
|
* @param updateReqVO 资产对象
|
||||||
* @author 小李
|
* @author 小李
|
||||||
* @date 18:57 2024/8/15
|
* @date 18:57 2024/8/15
|
||||||
* @param updateReqVO 资产对象
|
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public void updateProperty(PropertyReqVO updateReqVO){
|
public void updateProperty(PropertyReqVO updateReqVO) {
|
||||||
baseMapper.updateById(updateReqVO);
|
baseMapper.updateById(updateReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除资产
|
* 删除资产
|
||||||
|
*
|
||||||
|
* @param id 资产ID
|
||||||
* @author 小李
|
* @author 小李
|
||||||
* @date 19:20 2024/8/15
|
* @date 19:20 2024/8/15
|
||||||
* @param id 资产ID
|
|
||||||
**/
|
**/
|
||||||
public void deleteProperty(String id){
|
public void deleteProperty(String id) {
|
||||||
baseMapper.deleteById(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
|
@DSTransactional
|
||||||
public void updateStaffWorkAndJoinedYears() {
|
public void updateStaffWorkAndJoinedYears() {
|
||||||
LambdaQueryWrapper<CompanyStaff> queryWrapper = new LambdaQueryWrapper<>();
|
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) {
|
while (true) {
|
||||||
// 查询一页的数据
|
// 查询一页的数据
|
||||||
Page<CompanyStaff> companyStaffPage = baseMapper.selectPage(page, queryWrapper);
|
Page<CompanyStaff> companyStaffPage = baseMapper.selectPage(page, queryWrapper);
|
||||||
@ -455,12 +455,12 @@ public class CompanyStaffServiceImpl extends ServiceImpl<CompanyStaffMapper, Com
|
|||||||
updateBatchById(result);
|
updateBatchById(result);
|
||||||
|
|
||||||
// 没有下一页了就退出
|
// 没有下一页了就退出
|
||||||
if (companyStaffPage.getRecords().isEmpty()) {
|
if (!companyStaffPage.hasNext()) {
|
||||||
break;
|
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