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