package com.qs.serve.task; import java.time.LocalDate; import java.util.List; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.AuthContextUtils; import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.modules.tbs.common.TbsActivityState; import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.entity.TbsActivity; import com.qs.serve.modules.tbs.entity.TbsActivityTemplate; import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.service.TbsActivityService; import com.qs.serve.modules.tbs.service.TbsActivityTemplateService; import com.qs.serve.modules.tbs.service.TbsCostApplyService; import com.qs.serve.modules.vtb.service.VtbVerificationService; import lombok.AllArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.stream.Collectors; /** * @author YenHex * @since 2022/12/9 */ @Component @AllArgsConstructor @ConditionalOnProperty(value = "project.task", havingValue = "true") public class TbsTask { private final TbsActivityService activityService; private final TbsCostApplyService tbsCostApplyService; private final TbsActivityTemplateService activityTemplateService; private final VtbVerificationService vtbVerificationService; //每日更新过期的活动,过期则进行冻结 @Scheduled(cron="0 0 1 * * ?") public void task1(){ AuthContextUtils.setTenant("001"); LocalDate now = LocalDate.now(); //拓展已解冻的费用限制在三天内可核销,逾期自动冻结 LocalDate closeDay = now.plusDays(-3); LambdaQueryWrapper updReopen = new LambdaQueryWrapper<>(); updReopen.eq(TbsActivity::getReopenFlag,1) .lt(TbsActivity::getReopenTime, closeDay) .eq(TbsActivity::getActivityState,0) .eq(TbsActivity::getCostPassFlag,1); TbsActivity updReopenParam = new TbsActivity(); updReopenParam.setReopenFlag(0); activityService.update(updReopenParam,updReopen); LambdaQueryWrapper lqwApply = new LambdaQueryWrapper<>(); lqwApply.select(TbsCostApply::getId); lqwApply.eq(TbsCostApply::getChargeState, TbsCostApplyState.State_2_actioning.getCode()); List costApplyList = tbsCostApplyService.list(lqwApply); List costApplyIds = costApplyList.stream().map(a->a.getId()).collect(Collectors.toList()); //只更新审批完成的申请活动状态 LocalDate lastDay = now.plusDays(-1); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.in(TbsActivity::getCostApplyId,costApplyIds); lqw.and(qw->{ qw.and( qw1->qw1.le(TbsActivity::getPreCheckDate, lastDay) .isNull(TbsActivity::getPreEndDateBack) ).or() .le(TbsActivity::getPreEndDateBack, lastDay); }); lqw.eq(TbsActivity::getReopenFlag,0); // 2-完成;4-已释放;5-已关闭 表流程已完结,冻结无意义 lqw.eq(TbsActivity::getActivityState,TbsActivityState.STATE_0_Todo); //通过审批的 lqw.eq(TbsActivity::getCostPassFlag,1); TbsActivity param = new TbsActivity(); param.setActivityState(TbsActivityState.STATE_1_Baning); activityService.update(param,lqw); } //启用和停用模板规则 @Scheduled(cron="0 0 1 * * ?") public void task2(){ AuthContextUtils.setTenant("001"); LocalDateTime nowTime = LocalDateTime.now(); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.select(TbsActivityTemplate::getId); lqw.ge(TbsActivityTemplate::getStartTime,nowTime.with(LocalDateTime.MIN)); lqw.le(TbsActivityTemplate::getStartTime,nowTime.with(LocalDateTime.MAX)); lqw.eq(TbsActivityTemplate::getTemplateState,0); List preStartList = activityTemplateService.list(lqw); if(CollectionUtil.isNotEmpty(preStartList)){ preStartList.forEach(a->a.setTemplateState(1)); activityTemplateService.updateBatchById(preStartList); } LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); lqw2.select(TbsActivityTemplate::getId); lqw2.ge(TbsActivityTemplate::getEndTime,nowTime.with(LocalDateTime.MIN)); lqw2.le(TbsActivityTemplate::getEndTime,nowTime.with(LocalDateTime.MAX)); lqw2.eq(TbsActivityTemplate::getTemplateState,1); List preCloseList = activityTemplateService.list(lqw2); if(CollectionUtil.isNotEmpty(preCloseList)){ preCloseList.forEach(a->a.setTemplateState(0)); activityTemplateService.updateBatchById(preCloseList); } } /** * 每半小时执行一次 */ @Scheduled(cron="0 0/30 * * * ?") public void updateCheckState(){ tbsCostApplyService.updateCheckState(); } /** * 每半小时执行一次 */ @Scheduled(cron="0 0/30 * * * ?") public void syncPayToErp(){ vtbVerificationService.toPayRequest(); } }