package com.zhgd.xmgl.task; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhgd.xmgl.async.AsyncHikvision; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService; import com.zhgd.xmgl.modules.car.entity.CarInfo; import com.zhgd.xmgl.modules.car.service.ICarInfoService; import com.zhgd.xmgl.modules.exam.entity.*; import com.zhgd.xmgl.modules.exam.service.*; import com.zhgd.xmgl.modules.project.entity.Project; import com.zhgd.xmgl.modules.project.service.IProjectService; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; import com.zhgd.xmgl.modules.worker.service.IWorkerInfoService; import com.zhgd.xmgl.modules.xz.entity.XzMaterial; import com.zhgd.xmgl.modules.xz.service.IXzMaterialService; import com.zhgd.xmgl.util.EmailUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Slf4j @Component public class ExamTask { @Autowired private IProjectService projectService; @Autowired private IExamPaperService examPaperService; @Autowired private IExamRecordService examRecordService; @Autowired private IExamCourseTaskService examCourseTaskService; @Autowired private IExamCourseService examCourseService; @Autowired private IExamCourseRecordService examCourseRecordService; @Autowired private IExamNoticeConfigService examConfigService; @Autowired private IExamTrainService examTrainService; @Autowired private IExamTrainRecordService examTrainRecordService; @Autowired private IExamNoticeService examNoticeService; @Autowired private IWorkerInfoService workerInfoService; @Autowired private IXzMaterialService xzMaterialService; @Autowired private ICarInfoService carInfoService; @Autowired private EmailUtils emailUtils; @Autowired private IExamSubjectService examSubjectService; @Autowired private ISystemUserService systemUserService; @Scheduled(cron = "0 0/1 * * * ?") public void xzMaterial() { List list = xzMaterialService.list(Wrappers.lambdaQuery().ne(XzMaterial::getIsDelete, 1)); List carNumber = new ArrayList<>(); List update = new ArrayList<>(); for (XzMaterial xzMaterial : list) { if (xzMaterial.getEntryEndTime() != null && xzMaterial.getEntryEndTime().compareTo(new Date()) < 0) { if (StringUtils.isNotBlank(xzMaterial.getCarNumber())) { carNumber.add(xzMaterial.getCarNumber()); xzMaterial.setIsDelete(1); update.add(xzMaterial); } } } xzMaterialService.updateBatchById(update); List carInfos = carInfoService.list(Wrappers.lambdaQuery().eq(CarInfo::getCarModuleType, 3)); if (carInfos.size() > 0) { carInfos = carInfos.stream().filter(c -> carNumber.contains(c.getCarNumber())).collect(Collectors.toList()); if (carInfos.size() > 0) { carInfoService.removeByIds(carInfos.stream().map(c -> c.getId()).collect(Collectors.toSet())); for (CarInfo carInfo : carInfos) { //同步海康 carInfoService.deleteCarInfoForHikvision(carInfo, false); } } } } @Scheduled(cron = "0 0 8 * * ?") public void examNotice() { List list = projectService.list(); List noticeList = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { ExamNoticeConfig examNoticeConfig = examConfigService.getOne(Wrappers.lambdaQuery() .eq(ExamNoticeConfig::getProjectSn, list.get(i).getProjectSn()) .eq(ExamNoticeConfig::getEnable, 1)); if (examNoticeConfig != null) { if (examNoticeConfig.getExamNum() != null && examNoticeConfig.getExamType() != null) { List examTrainList = examTrainService.list(Wrappers.lambdaQuery().eq(ExamTrain::getProjectSn, list.get(i).getProjectSn())); for (int j = 0; j < examTrainList.size(); j++) { SystemUser systemUser = systemUserService.getById(examTrainList.get(j).getCreateBy()); ExamSubject examSubject = examSubjectService.getById(examTrainList.get(j).getSubjectId()); StringBuilder examTrain = new StringBuilder(); if (DateUtil.compare(examTrainList.get(j).getTrainBeginTime(), getTime(examNoticeConfig.getExamType(), examNoticeConfig.getExamNum())) <= 0) { List examTrainRecordList = examTrainRecordService.list(Wrappers.lambdaQuery().eq(ExamTrainRecord::getTrainId, examTrainList.get(j).getId())); for (int i1 = 0; i1 < examTrainRecordList.size(); i1++) { if (examTrainRecordList.get(i1).getScore() == null) { ExamNotice exist = examNoticeService.getOne(Wrappers.lambdaQuery().eq(ExamNotice::getWorkerId, examTrainRecordList.get(i1).getWorkerId()) .eq(ExamNotice::getRecordId, examTrainRecordList.get(i1).getId()) .eq(ExamNotice::getType, 1)); if (exist == null) { WorkerInfo workerInfo = workerInfoService.getById(examTrainRecordList.get(i1).getWorkerId()); ExamNotice examNotice = new ExamNotice(); examNotice.setWorkerId(examTrainRecordList.get(i1).getWorkerId().toString()); examNotice.setWorkerName(examTrainRecordList.get(i1).getWorkerName()); examNotice.setType(1); examNotice.setContent(StrUtil.format("参加《{}》安全教育培训", examTrainList.get(j).getName())); examNotice.setProjectSn(list.get(i).getProjectSn()); examNotice.setEnterpriseId(workerInfo.getEnterpriseId()); examNotice.setRecordId(examTrainRecordList.get(i1).getId()); noticeList.add(examNotice); if (StringUtils.isNotBlank(workerInfo.getPersonMail()) && DateUtil.formatDate(examTrainList.get(j).getTrainBeginTime()).equals(DateUtil.formatDate(getTime(examNoticeConfig.getExamType(), examNoticeConfig.getExamNum())))) { examTrain.append(workerInfo.getPersonMail() + ","); } } } } List examCourseRecords = examCourseRecordService.list(Wrappers.lambdaQuery() .eq(ExamCourseRecord::getTrainId, examTrainList.get(j).getId())); for (int i2 = 0; i2 < examCourseRecords.size(); i2++) { if (examCourseRecords.get(i2).getNumber() == null || examCourseRecords.get(i2).getNumber() == 0) { ExamNotice exist = examNoticeService.getOne(Wrappers.lambdaQuery().eq(ExamNotice::getWorkerId, examCourseRecords.get(i2).getWorkerId()) .eq(ExamNotice::getRecordId, examCourseRecords.get(i2).getId()) .eq(ExamNotice::getType, 2)); if (exist == null) { WorkerInfo workerInfo = workerInfoService.getById(examCourseRecords.get(i2).getWorkerId()); ExamNotice examNotice = new ExamNotice(); examNotice.setWorkerId(examCourseRecords.get(i2).getWorkerId().toString()); examNotice.setWorkerName(examCourseRecords.get(i2).getWorkerName()); examNotice.setType(2); examNotice.setContent(StrUtil.format("参加《{}》安全教育课程学习", examTrainList.get(j).getName())); examNotice.setProjectSn(list.get(i).getProjectSn()); examNotice.setEnterpriseId(workerInfo.getEnterpriseId()); examNotice.setRecordId(examCourseRecords.get(i2).getId()); noticeList.add(examNotice); // if (StringUtils.isNotBlank(workerInfo.getPersonMail()) && DateUtil.formatDate(examTrainList.get(j).getTrainBeginTime()).equals(DateUtil.formatDate(getTime(examNoticeConfig.getExamType(), examNoticeConfig.getExamNum())))) { // examTrain.append(workerInfo.getPersonMail() + ","); // } } } } } if (StringUtils.isNotBlank(examTrain) || examTrain.length() == 0) { emailUtils.sendHtmlMail(examTrain.toString(), "安全教育培训提醒", StrUtil.format("【尾矿固废资源综合利用项目】智慧工地管理系统提醒:您有一条培训通知请查收!\n" + "【{}】在【{}】下发了一个培训计划名称为【{}】、科目名称为【{}】、教育主题为【{}】的培训计划," + "需要您使用姓名、身份证号登录手机APP端进行课程学习及考试测评,培训有效期限为【{}】,未避免超期未参与培训导致您的安全积分被扣除," + "请在规定有效期限内参加培训!", systemUser.getRealName(), DateUtil.formatDateTime(new Date()), examTrainList.get(j).getName(), examSubject.getName(), examTrainList.get(j).getTitle(), DateUtil.formatDateTime(examTrainList.get(j).getTrainBeginTime()) + " - " + DateUtil.formatDateTime(examTrainList.get(j).getTrainEndTime()))); } } } } } examNoticeService.saveBatch(noticeList); } private DateTime getTime(int type, int num){ DateTime dateTime = null; if (type == 1) { dateTime = DateUtil.offsetHour(new Date(), num); } else if (type == 2) { dateTime = DateUtil.offsetDay(new Date(), num); } return dateTime; } }