InsureTaskTiming.java 3.29 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
package cn.timer.api.controller.insure.task;

import cn.hutool.core.date.DateUtil;
import cn.timer.api.bean.insure.InsureLog;
import cn.timer.api.bean.insure.InsurePolicy;
import cn.timer.api.bean.insure.InsureUser;
import cn.timer.api.bean.yggl.YgglMainEmp;
import cn.timer.api.config.exception.CustomException;
import cn.timer.api.dao.insure.InsurePolicyMapper;
import cn.timer.api.dao.insure.InsureUserMapper;
import cn.timer.api.dao.yggl.YgglMainEmpMapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.transaction.annotation.Transactional;

import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Description TODO
 * @Author wgd
 * @Date 2022/5/5 11:20
 */
@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
@Slf4j
public class InsureTaskTiming {
    @Autowired
    private InsureUserMapper insureUserMapper;
    @Autowired
    private YgglMainEmpMapper ygglMainEmpMapper;

翁国栋 committed
40
    @Scheduled(cron = "0/1 0 0 * * ?")//每月第一天
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
    @Transactional(rollbackFor = Exception.class)
    public void updateInsureStatusTask(){
        try {

            Date now = DateUtil.date();
            /*获取正常的保单*/
            List<InsurePolicy> insurePolicyList = InsurePolicy.builder().build().selectList(new QueryWrapper<InsurePolicy>().lambda().eq(InsurePolicy::getStatus, "1").lt(InsurePolicy::getPolicyDateEnd, now));
            if (insurePolicyList.size() > 0) {
                /*获取已经过期保单*/
                for (InsurePolicy insurePolicy : insurePolicyList) {
                    List<InsureUser> insureUsersList = InsureUser.builder().build().selectList(new QueryWrapper<InsureUser>().lambda()
                            .eq(InsureUser::getPolicyId, insurePolicy.getId()).eq(InsureUser::getStatus, 1)
                            .eq(InsureUser::getInsureStatus, 1));
                    if (insureUsersList.size() > 0) {
//                        int count = ygglMainEmpMapper.updateInsure(insureUsersList.stream().map(InsureUser::getUserId).toArray(Integer[]::new));
//                        log.info("总共更新员工投保状态:"+count);
                        int uCount = insureUserMapper.updateInsure(insurePolicyList.stream().map(InsurePolicy::getId).toArray(Integer[]::new));
                        log.info("总共更新投保人投保状态:"+uCount);
                    }
                    insurePolicy.setStatus("3");
                    insurePolicy.updateById();
                    InsureLog.builder().type(7)
                            .createTime(new Date()).requestType(1).returnMsg("保单已到期,自动失效").policyId(insurePolicy.getId()).build().insert();
                }
            }
            log.error("暂无过期保单");
        }catch (Exception e){
            e.printStackTrace();
            throw new CustomException("保单失效定时器异常");
        }
    }
}