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; @Scheduled(cron = "0 0 0 1 * ?")//每月第一天 @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("保单失效定时器异常"); } } }