From b46815639664c65d31f6f852c4bf403f6ba0c3ea Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期五, 26 一月 2024 10:04:49 +0800 Subject: [PATCH] 加班管理功能调整 --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOvertimeDurationJob.java | 194 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 194 insertions(+), 0 deletions(-) diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOvertimeDurationJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOvertimeDurationJob.java new file mode 100644 index 0000000..3c42552 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOvertimeDurationJob.java @@ -0,0 +1,194 @@ +package org.jeecg.modules.mdc.job; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.modules.mdc.entity.MdcEquipment; +import org.jeecg.modules.mdc.entity.MdcEquipmentOvertime; +import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection; +import org.jeecg.modules.mdc.entity.MdcSystemParameters; +import org.jeecg.modules.mdc.service.*; +import org.jeecg.modules.mdc.util.DateUtils; +import org.jeecg.modules.mdc.util.ThrowableUtil; +import org.jeecg.modules.mdc.vo.MdcDeviceCalendarVo; +import org.jeecg.modules.quartz.entity.QuartzJob; +import org.jeecg.modules.quartz.entity.SysQuartzLog; +import org.jeecg.modules.quartz.service.IQuartzJobService; +import org.jeecg.modules.quartz.service.ISysQuartzLogService; +import org.jeecg.modules.system.service.ISysAnnouncementService; +import org.quartz.*; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author Lius + * @Description: 璁惧鍔犵彮鏃堕暱绠楁硶缁熻 + * @date 2024/1/24 17:12 + */ +@PersistJobDataAfterExecution +@DisallowConcurrentExecution +@Slf4j +public class RunningOvertimeDurationJob implements Job { + + @Resource + private IQuartzJobService quartzJobService; + + @Resource + private ISysQuartzLogService sysQuartzLogService; + + @Resource + private IMdcEquipmentService mdcEquipmentService; + + @Resource + private IMdcEquipmentOvertimeService mdcEquipmentOvertimeService; + + /** + * 鑻ュ弬鏁板彉閲忓悕淇敼 QuartzJobController涓篃闇�瀵瑰簲淇敼 鏃堕棿锛� yyyyMMdd 渚嬶細 20230414 + */ + private String parameter; + + public void setParameter(String parameter) { + this.parameter = parameter; + } + + @Resource + private ISysAnnouncementService sysAnnouncementService; + + @Resource + private IMdcDeviceCalendarService mdcDeviceCalendarService; + + @Resource + private IMdcSystemParametersService mdcSystemParametersService; + + @Resource + private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + SysQuartzLog quartzLog = new SysQuartzLog(); + quartzLog.setCreateTime(new Date()); + List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName()); + if (byJobClassName != null && !byJobClassName.isEmpty()) { + quartzLog.setJobId(byJobClassName.get(0).getId()); + } + quartzLog.setParams(this.parameter); + log.info(String.format("瀹氭椂缁熻璁惧鍔犵彮鏃堕暱浠诲姟 param: %s RunningOvertimeDurationJob start! 鏃堕棿:" + DateUtils.getNow(), this.parameter)); + long startTime = System.currentTimeMillis(); + try { + String date = ""; + if (StringUtils.isNotBlank(this.parameter)) { + date = DateUtils.format(DateUtils.toDate(this.parameter, DateUtils.STRDATE), DateUtils.STR_DATE); + Date initDate = DateUtils.toDate(this.parameter, DateUtils.STRDATE); + if (initDate != null) { + mdcEquipmentOvertimeService.remove(new LambdaQueryWrapper<MdcEquipmentOvertime>().eq(MdcEquipmentOvertime::getTheDate, this.parameter).eq(MdcEquipmentOvertime::getAutoFlag, CommonConstant.AUTO_FLAG_Y)); + } + } else { + date = DateUtils.format(DateUtils.getNow(), DateUtils.STR_DATE); + } + List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<>()); + MdcSystemParameters mdcSystemParameters = mdcSystemParametersService.getOne(new LambdaQueryWrapper<MdcSystemParameters>().eq(MdcSystemParameters::getCode, "equip_log_statis_time")); + if (mdcSystemParameters == null) { + throw new JobExecutionException("mdc_system_parameters 琛ㄤ腑鏁版嵁缂哄け"); + } + String value = mdcSystemParameters.getValue(); + List<MdcEquipmentOvertime> result = new ArrayList<>(); + for (MdcEquipment mdcEquipment : equipmentList) { + // 鑾峰彇璁惧宸ヤ綔鏃ュ巻 + List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = mdcDeviceCalendarService.listByEquipmentIdAndDate(mdcEquipment.getEquipmentId(), this.parameter); + if (mdcDeviceCalendarVos != null && !mdcDeviceCalendarVos.isEmpty()) { + //鑾峰彇鏈�鍚庝竴涓彮娆$粨鏉熸椂闂� + Date startDate = this.getCalendarEndDate(mdcDeviceCalendarVos, date); + Date endDate = DateUtils.plusTime(DateUtils.toDate(date + " " + value, DateUtils.STR_DATE_TIME_SMALL), 1); + List<MdcEquipmentRunningSection> equipmentRunningSectionList = mdcEquipmentRunningSectionService.selectRunningData(mdcEquipment.getEquipmentId(), startDate, endDate); + if (equipmentRunningSectionList != null && !equipmentRunningSectionList.isEmpty()) { + // 鏃堕棿淇 + if (equipmentRunningSectionList.get(0).getStartTime().before(startDate)) { + equipmentRunningSectionList.get(0).setStartTime(startDate); + } + if (equipmentRunningSectionList.get(equipmentRunningSectionList.size() - 1).getEndTime().after(endDate)) { + equipmentRunningSectionList.get(equipmentRunningSectionList.size() - 1).setEndTime(endDate); + } + BigDecimal duration = BigDecimal.ZERO; + for (MdcEquipmentRunningSection mdcEquipmentRunningSection : equipmentRunningSectionList) { + duration = duration.add(new BigDecimal(DateUtils.differentSecond(mdcEquipmentRunningSection.getStartTime(), mdcEquipmentRunningSection.getEndTime()))); + } + MdcEquipmentOvertime mdcEquipmentOvertime = new MdcEquipmentOvertime(); + mdcEquipmentOvertime.setEquipmentId(mdcEquipment.getEquipmentId()); + mdcEquipmentOvertime.setDuration(duration); + mdcEquipmentOvertime.setAutoFlag(CommonConstant.AUTO_FLAG_Y); + mdcEquipmentOvertime.setTheDate(this.parameter); + result.add(mdcEquipmentOvertime); + } + + } else { + // 娌℃湁鐝閰嶇疆锛岃绠楀叏澶╃殑璁惧鍔犲伐鐘舵�� + Date startDate = DateUtils.toDate(date + " " + value, DateUtils.STR_DATE_TIME_SMALL); + Date endDate = DateUtils.plusTime(startDate, 1); + List<MdcEquipmentRunningSection> equipmentRunningSectionList = mdcEquipmentRunningSectionService.selectRunningData(mdcEquipment.getEquipmentId(), startDate, endDate); + if (equipmentRunningSectionList != null && !equipmentRunningSectionList.isEmpty()) { + // 鏃堕棿淇 + if (equipmentRunningSectionList.get(0).getStartTime().before(startDate)) { + equipmentRunningSectionList.get(0).setStartTime(startDate); + } + if (equipmentRunningSectionList.get(equipmentRunningSectionList.size() - 1).getEndTime().after(endDate)) { + equipmentRunningSectionList.get(equipmentRunningSectionList.size() - 1).setEndTime(endDate); + } + BigDecimal duration = BigDecimal.ZERO; + for (MdcEquipmentRunningSection mdcEquipmentRunningSection : equipmentRunningSectionList) { + duration = duration.add(new BigDecimal(DateUtils.differentSecond(mdcEquipmentRunningSection.getStartTime(), mdcEquipmentRunningSection.getEndTime()))); + } + MdcEquipmentOvertime mdcEquipmentOvertime = new MdcEquipmentOvertime(); + mdcEquipmentOvertime.setEquipmentId(mdcEquipment.getEquipmentId()); + mdcEquipmentOvertime.setDuration(duration); + mdcEquipmentOvertime.setAutoFlag(CommonConstant.AUTO_FLAG_Y); + mdcEquipmentOvertime.setTheDate(this.parameter); + result.add(mdcEquipmentOvertime); + } + + } + } + if (!result.isEmpty()) { + mdcEquipmentOvertimeService.saveBatch(result); + } + quartzLog.setIsSuccess(0); + } catch (Exception e) { + quartzLog.setIsSuccess(-1); + quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); + // 鍙戦�佹秷鎭�氱煡 + sysAnnouncementService.jobSendMessage("瀹氭椂缁熻璁惧鍔犵彮鏃堕暱浠诲姟澶辫触", quartzLog.getExceptionDetail()); + } + long endTime = System.currentTimeMillis(); + quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); + sysQuartzLogService.save(quartzLog); + } + + private Date getCalendarEndDate(List<MdcDeviceCalendarVo> mdcDeviceCalendarVos, String date) { + date = DateUtils.format(DateUtils.toDate(date, DateUtils.STRDATE), DateUtils.STR_DATE); + String endDate = ""; + for (MdcDeviceCalendarVo mdcDeviceCalendarVo : mdcDeviceCalendarVos) { + String shiftEndDate = ""; + if ("true".equals(mdcDeviceCalendarVo.getIsDaySpan())) { + shiftEndDate = DateUtils.format(DateUtils.plusTime(DateUtils.toDate(date, DateUtils.STR_DATE), 1), DateUtils.STR_DATE) + " " + mdcDeviceCalendarVo.getEndDate(); + } else { + shiftEndDate = date + " " + mdcDeviceCalendarVo.getEndDate(); + } + if (StringUtils.isBlank(endDate)) { + endDate = shiftEndDate; + } else { + // endDate + Date date1 = DateUtils.toDate(endDate, DateUtils.STR_DATE_TIME_SMALL); + // shiftEndDate + Date date2 = DateUtils.toDate(shiftEndDate, DateUtils.STR_DATE_TIME_SMALL); + if (date2.after(date1)) { + endDate = shiftEndDate; + } + } + } + return DateUtils.toDate(endDate, DateUtils.STR_DATE_TIME_SMALL); + } +} -- Gitblit v1.9.3