需求:
定时任务,按照距离到期日90/60/30天给予通知提醒。
逻辑
- 在含有止期的表中查询距离止期日90/60/30天的条数,根据登录名分组,显示出其登录用户id及姓名,以及其查出期限的种类。通知表中有接收用户,要与登录用户id一致。种类要与字典中表示种类字段一致。
- 将查出来的对象用List封装,根据用户查询的话,就用添加在用户的属性
- 遍历List,在固定句式中插入条数,补全通知中需要的其他字段,set到通知用户中
- sql
<select id="findCountByDeadlineForApplicant" resultType="KInsRequirement">
SELECT
b.create_by AS "createBy.id",
su.name as "createBy.name",
b.Ins_kind as "insKind",
SUM(DATEDIFF(sal_end_date,NOW()) = 90 ) AS 'orderDeadlineNinety',
SUM(DATEDIFF(sal_end_date,NOW()) = 60 ) AS 'orderDeadlineSixty',
SUM(DATEDIFF(sal_end_date,NOW()) = 30 ) AS 'orderDeadlineThirty'
from k_insurance_bill a
left join k_ins_requirement b on a.r_id=b.id
left join sys_user su on b.create_by=su.id
group by b.CREATE_BY,su.name,b.Ins_kind
</select>
<select id="findCountByDeadlineForBroker" resultType="KInsRequirement">
SELECT
su.id AS "createBy.id",
su.name as "createBy.name",
b.Ins_kind as "insKind",
SUM(DATEDIFF(sal_end_date,NOW()) = 90 ) AS 'orderDeadlineNinety',
SUM(DATEDIFF(sal_end_date,NOW()) = 60 ) AS 'orderDeadlineSixty',
SUM(DATEDIFF(sal_end_date,NOW()) = 30 ) AS 'orderDeadlineThirty'
from k_insurance_bill a
left join sys_user su on a.create_by=su.name
left join k_ins_requirement b on a.r_id=b.id
group by su.id,su.name,b.Ins_kind
<select>
2.dao
3.service
List<KInsRequirement> findCountByDeadlineForApplicantList = dao
.findCountByDeadlineForApplicant(new KInsRequirement());
for (KInsRequirement kInsRequirement : findCountByDeadlineForApplicantList) {
//插入通知id
OaNotify oaNotify90 = new OaNotify(UUID.randomUUID().toString());
OaNotify oaNotify60 = new OaNotify(UUID.randomUUID().toString());
OaNotify oaNotify30 = new OaNotify(UUID.randomUUID().toString());
//插入通知类型编号
oaNotify90.setType(oaNotifyType);
oaNotify60.setType(oaNotifyType);
oaNotify30.setType(oaNotifyType);
//获取登录用户
User create_by = kInsRequirement.getCreateBy();
//获取3个期限的条数
String ninety = kInsRequirement.getOrderDeadlineNinety();
String sixty = kInsRequirement.getOrderDeadlineSixty();
String thirty = kInsRequirement.getOrderDeadlineThirty();
//获取保单类型
String insKind = kInsRequirement.getInsKind();
String dictLabel = DictUtils.getDictLabel(insKind, "car_risk_type", "");
if (ninety != null && ninety != "" && !ninety.equals("0")) {
oaNotify90.setContent("您有" + ninety + "张" + dictLabel + "将于90天后到期,请尽快续保");
//将登录用户插入到通知用户
oaNotify90.setReceiverId(create_by.getId());
oaNotify90.setStatus("0");
oaNotifyDao.insert(oaNotify90);
}