From 09e22d89710364548fa896917506a372795a7bd3 Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期五, 26 一月 2024 09:37:36 +0800 Subject: [PATCH] 加班管理功能调整 --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentOvertimeController.java | 20 -- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOvertimeServiceImpl.java | 28 ++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java | 2 lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java | 6 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java | 4 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOvertimeMapper.xml | 48 +++--- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOvertimeDurationJob.java | 194 +++++++++++++++++++++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 7 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentOvertime.java | 43 ++---- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOvertimeService.java | 8 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java | 12 + 12 files changed, 303 insertions(+), 74 deletions(-) diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java b/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java index 402ff1a..5ffcb6c 100644 --- a/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java +++ b/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java @@ -592,4 +592,10 @@ */ String DICT_EQUIPMENT_RATE_NORMAL = "equipment_rate_normal"; + /** + * 鍔犵彮鏁版嵁 鑷姩璁$畻鏍囪瘑 1(鏄�) 2(鍚�) + */ + Integer AUTO_FLAG_Y = 1; + Integer AUTO_FLAG_N = 2; + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentOvertimeController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentOvertimeController.java index c50dffd..b69c725 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentOvertimeController.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentOvertimeController.java @@ -1,7 +1,6 @@ package org.jeecg.modules.mdc.controller; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; @@ -20,9 +19,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; import java.util.Arrays; -import java.util.List; /** * @Description: 璁惧鍔犵彮绠$悊 @@ -72,18 +69,13 @@ @ApiOperation(value = "璁惧鍔犵彮绠$悊-娣诲姞", notes = "璁惧鍔犵彮绠$悊-娣诲姞") @PostMapping(value = "/add") public Result<?> add(@RequestBody MdcEquipmentOvertime mdcEquipmentOvertime) { - String[] calendarIdList = mdcEquipmentOvertime.getCalendarId().split(","); - List<MdcEquipmentOvertime> equipmentOvertimeList = new ArrayList<>(); - mdcEquipmentOvertimeService.remove(new LambdaQueryWrapper<MdcEquipmentOvertime>().in(MdcEquipmentOvertime::getCalendarId, Arrays.asList(calendarIdList))); - for (String calendarId : calendarIdList) { - MdcEquipmentOvertime equipmentOvertime = new MdcEquipmentOvertime(); - equipmentOvertime.setCalendarId(calendarId); - equipmentOvertime.setStartTime(mdcEquipmentOvertime.getStartTime()); - equipmentOvertime.setEndTime(mdcEquipmentOvertime.getEndTime()); - equipmentOvertime.setRemark(mdcEquipmentOvertime.getRemark()); - equipmentOvertimeList.add(equipmentOvertime); + if (org.apache.commons.lang3.StringUtils.isBlank(mdcEquipmentOvertime.getEquipmentId())) { + return Result.error("鏈�夋嫨璁惧锛岃鎺掓煡锛�"); } - mdcEquipmentOvertimeService.saveBatch(equipmentOvertimeList); + boolean result = mdcEquipmentOvertimeService.addOvertime(mdcEquipmentOvertime); + if (!result) { + return Result.error("娣诲姞澶辫触锛�"); + } return Result.OK("娣诲姞鎴愬姛锛�"); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentOvertime.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentOvertime.java index bf2d75d..e4dea3c 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentOvertime.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentOvertime.java @@ -7,10 +7,12 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.base.entity.JeecgEntity; import org.jeecgframework.poi.excel.annotation.Excel; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; /** @@ -28,42 +30,20 @@ private static final long serialVersionUID = -7163039765166584824L; - @TableField(exist = false) @Excel(name = "璁惧缂栧彿", width = 20) + @ApiModelProperty("鏃ユ湡") private String equipmentId; @TableField(exist = false) @Excel(name = "璁惧鍚嶇О", width = 20) private String equipmentName; - /** - * 鐢熸晥鏃ユ湡 - */ - @Excel(name = "鐢熸晥鏃ユ湡", width = 15) - @TableField(exist = false) - private String effectiveDate; + @ApiModelProperty("鏃ユ湡") + private String theDate; - /** - * 鐝寮�濮嬫椂闂� - */ - @Excel(name = "鐝寮�濮嬫椂闂�", width = 20) - @ApiModelProperty("鐝寮�濮嬫椂闂�") - @TableField(exist = false) - private String startDate; - - /** - * 鐝缁撴潫鏃堕棿 - */ - @Excel(name = "鐝缁撴潫鏃堕棿", width = 20) - @ApiModelProperty("鐝缁撴潫鏃堕棿") - @TableField(exist = false) - private String endDate; - - /** - * 宸ヤ綔鏃ュ巻id - */ - @ApiModelProperty(value = "宸ヤ綔鏃ュ巻id") - private String calendarId; + @Excel(name = "鑷姩璁$畻鏍囪瘑", width = 15) + @ApiModelProperty("鑷姩璁$畻鏍囪瘑") + private Integer autoFlag = CommonConstant.AUTO_FLAG_N; /** * 鍔犵彮寮�濮嬫椂闂� @@ -79,6 +59,13 @@ private String endTime; /** + * 鍔犵彮鏃堕暱 + */ + @Excel(name = "鏃堕暱", width = 20) + @ApiModelProperty(value = "鏃堕暱") + private BigDecimal duration; + + /** * 澶囨敞 */ @Excel(name = "澶囨敞") diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java index a46e9de..6c79675 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java @@ -72,8 +72,8 @@ log.info("璁惧鐘舵�侀暱鏈熸棤鍙樺寲鎶ヨ浠诲姟 RunningEquipmentStatusJob start! 鏃堕棿:" + DateUtils.getNow()); long startTime = System.currentTimeMillis(); try { - //List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<>()); - List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2140198")); + List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<>()); + //List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2140198")); // 鑾峰彇鍒╃敤鐜囧垽瀹氬ぉ鏁� List<DictModel> dictModelList1 = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_EQUIPMENT_RATE_JUDGE); Integer equipmentRateJudge = 5; 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); + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOvertimeMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOvertimeMapper.xml index a528b02..b8606e1 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOvertimeMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOvertimeMapper.xml @@ -6,13 +6,12 @@ <select id="pageList" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentOvertime"> SELECT t1.id, - t2.equipment_id equipmentId, - t4.equipment_name equipmentName, - t2.effective_date effectiveDate, - t3.start_date startDate, - t3.end_date endDate, + t1.equipment_id equipmentId, + t2.equipment_name equipmentName, + t1.the_date theDate, t1.start_time startTime, t1.end_time endTime, + t1.duration duration, t1.remark remark, t1.create_by createBy, t1.create_time createTime, @@ -20,37 +19,37 @@ t1.update_time updateTime FROM mdc_equipment_overtime t1 - LEFT JOIN mdc_device_calendar t2 ON t1.calendar_id = t2.id - LEFT JOIN mdc_shift_sub t3 ON t3.id = t2.shift_sub_id - LEFT JOIN mdc_equipment t4 ON t4.equipment_id = t2.equipment_id + LEFT JOIN mdc_equipment t2 ON t2.equipment_id = t1.equipment_id <where> <if test="mdcEquipmentOvertime.equipmentName != null and mdcEquipmentOvertime.equipmentName != '' "> - AND t4.equipment_name LIKE CONCAT(CONCAT('%',#{mdcEquipmentOvertime.equipmentName}),'%') + AND t2.equipment_name LIKE CONCAT(CONCAT('%',#{mdcEquipmentOvertime.equipmentName}),'%') </if> <if test="mdcEquipmentOvertime.equipmentId != null and mdcEquipmentOvertime.equipmentId != '' "> - AND t2.equipment_id LIKE CONCAT(CONCAT('%',#{mdcEquipmentOvertime.equipmentId}),'%') + AND t1.equipment_id LIKE CONCAT(CONCAT('%',#{mdcEquipmentOvertime.equipmentId}),'%') </if> <if test="mdcEquipmentOvertime.mdcSectionIds != null and mdcEquipmentOvertime.mdcSectionIds.size() > 0 "> - AND t2.equipment_id IN + AND t1.equipment_id IN <foreach collection="mdcEquipmentOvertime.mdcSectionIds" item="id" index="index" open="(" close=")" separator=","> #{ id } </foreach> </if> + <if test="mdcEquipmentOvertime.startTime != null and mdcEquipmentOvertime.startTime != '' and mdcEquipmentOvertime.endTime != null and mdcEquipmentOvertime.endTime != ''"> + AND t1.the_date BETWEEN #{ mdcEquipmentOvertime.startTime } AND #{ mdcEquipmentOvertime.endTime } + </if> </where> - order by t2.effective_date asc + order by t1.the_date asc </select> <!--list鍒楄〃--> <select id="list" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentOvertime"> SELECT t1.id, - t2.equipment_id equipmentId, - t4.equipment_name equipmentName, - t2.effective_date effectiveDate, - t3.start_date startDate, - t3.end_date endDate, + t1.equipment_id equipmentId, + t2.equipment_name equipmentName, + t1.the_date theDate, t1.start_time startTime, t1.end_time endTime, + t1.duration duration, t1.remark remark, t1.create_by createBy, t1.create_time createTime, @@ -58,24 +57,25 @@ t1.update_time updateTime FROM mdc_equipment_overtime t1 - LEFT JOIN mdc_device_calendar t2 ON t1.calendar_id = t2.id - LEFT JOIN mdc_shift_sub t3 ON t3.id = t2.shift_sub_id - LEFT JOIN mdc_equipment t4 ON t4.equipment_id = t2.equipment_id + LEFT JOIN mdc_equipment t2 ON t2.equipment_id = t1.equipment_id <where> <if test="mdcEquipmentOvertime.equipmentName != null and mdcEquipmentOvertime.equipmentName != '' "> - AND t4.equipment_name LIKE CONCAT(CONCAT('%',#{mdcEquipmentOvertime.equipmentName}),'%') + AND t2.equipment_name LIKE CONCAT(CONCAT('%',#{mdcEquipmentOvertime.equipmentName}),'%') </if> <if test="mdcEquipmentOvertime.equipmentId != null and mdcEquipmentOvertime.equipmentId != '' "> - AND t2.equipment_id LIKE CONCAT(CONCAT('%',#{mdcEquipmentOvertime.equipmentId}),'%') + AND t1.equipment_id LIKE CONCAT(CONCAT('%',#{mdcEquipmentOvertime.equipmentId}),'%') </if> <if test="mdcEquipmentOvertime.mdcSectionIds != null and mdcEquipmentOvertime.mdcSectionIds.size() > 0 "> - AND t2.equipment_id IN + AND t1.equipment_id IN <foreach collection="mdcEquipmentOvertime.mdcSectionIds" item="id" index="index" open="(" close=")" separator=","> #{ id } </foreach> </if> + <if test="mdcEquipmentOvertime.startTime != null and mdcEquipmentOvertime.startTime != '' and mdcEquipmentOvertime.endTime != null and mdcEquipmentOvertime.endTime != ''"> + AND t1.the_date BETWEEN #{ mdcEquipmentOvertime.startTime } AND #{ mdcEquipmentOvertime.endTime } + </if> </where> - order by t2.effective_date asc + order by t1.the_date asc </select> <!--鏌ヨ鍔犵彮鏃堕暱--> diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java index 588853f..7c055ed 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java @@ -71,4 +71,6 @@ void generateDeviceCalendar(); MdcDeviceCalendar getFirstData(String equipmentId); + + List<MdcDeviceCalendarVo> listByEquipmentIdAndDate(String equipmentId, String date); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOvertimeService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOvertimeService.java index 33f0763..5bf5d49 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOvertimeService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOvertimeService.java @@ -46,4 +46,12 @@ * @return */ BigDecimal computeOvertime(String equipmentId, String validDate); + + /** + * 娣诲姞 + * @param mdcEquipmentOvertime + * @return + */ + boolean addOvertime(MdcEquipmentOvertime mdcEquipmentOvertime); + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java index cdce65c..238de3a 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java @@ -210,4 +210,9 @@ return this.baseMapper.getFirstData(equipmentId); } + @Override + public List<MdcDeviceCalendarVo> listByEquipmentIdAndDate(String equipmentId, String date) { + return this.baseMapper.listByEquipmentAndDate(equipmentId, date); + } + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java index 5ba142f..cd1ce79 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java @@ -1160,8 +1160,11 @@ mdcEfficiencyShiftResultDto.setCloseLong(equipmentStatisticalShiftInfo.getCloseLong()); mdcEfficiencyShiftResultDto.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong()); mdcEfficiencyShiftResultDto.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong()); - - mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, RoundingMode.HALF_UP)); + if (equipmentStatisticalShiftInfo.getTotalLong().compareTo(BigDecimal.ZERO) == 0) { + mdcEfficiencyShiftResultDto.setOpenRate(BigDecimal.ZERO); + } else { + mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, RoundingMode.HALF_UP)); + } long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOvertimeServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOvertimeServiceImpl.java index c83a76a..ec22b51 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOvertimeServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOvertimeServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang.StringUtils; import org.apache.shiro.SecurityUtils; +import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.entity.MdcEquipmentOvertime; import org.jeecg.modules.mdc.mapper.MdcEquipmentOvertimeMapper; @@ -153,4 +154,31 @@ } return result; } + + /** + * 娣诲姞 + * + * @param mdcEquipmentOvertime + * @return + */ + @Override + public boolean addOvertime(MdcEquipmentOvertime mdcEquipmentOvertime) { + String[] equipmentIds = mdcEquipmentOvertime.getEquipmentIds().split(","); + List<MdcEquipmentOvertime> mdcEquipmentOvertimes = new ArrayList<>(); + // 璁$畻鏃堕暱(绉�) + String startTime = mdcEquipmentOvertime.getStartTime(); + String endTime = mdcEquipmentOvertime.getEndTime(); + long duration = DateUtils.differentSecond(DateUtils.setTimeForDay(DateUtils.getNow(), startTime), DateUtils.setTimeForDay(DateUtils.getNow(), endTime)); + for (String equipmentId : equipmentIds) { + MdcEquipmentOvertime equipmentOvertime = new MdcEquipmentOvertime(); + equipmentOvertime.setEquipmentId(equipmentId); + equipmentOvertime.setTheDate(mdcEquipmentOvertime.getTheDate()); + equipmentOvertime.setAutoFlag(CommonConstant.AUTO_FLAG_N); + equipmentOvertime.setStartTime(mdcEquipmentOvertime.getStartTime()); + equipmentOvertime.setEndTime(mdcEquipmentOvertime.getEndTime()); + equipmentOvertime.setDuration(new BigDecimal(duration)); + mdcEquipmentOvertimes.add(equipmentOvertime); + } + return super.saveBatch(mdcEquipmentOvertimes); + } } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java index 20ac661..919e18b 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java @@ -108,9 +108,13 @@ } // BigDecimal shiftTimeCount = mdcDeviceCalendarService.computeShiftTimeCount(equipmentId, validDate); - mdcOverallEquipmentEfficiency.setShiftTimeCount(new BigDecimal("8")); + if (StringUtils.isEmpty(mdcOverallEquipmentEfficiency.getShift())) { + mdcOverallEquipmentEfficiency.setShiftTimeCount(BigDecimal.ZERO); + } else { + mdcOverallEquipmentEfficiency.setShiftTimeCount(new BigDecimal("8")); + } - // 璁$畻鍔犵彮鏃堕棿 + // TODO 璁$畻鍔犵彮鏃堕棿 BigDecimal overtime = mdcEquipmentOvertimeService.computeOvertime(equipmentId, validDate); mdcOverallEquipmentEfficiency.setOvertime(overtime); @@ -119,7 +123,7 @@ mdcOverallEquipmentEfficiency.setActualWorkDayCount(actualWorkDayCount); // 鏈堝害瀹為檯鐝骇鎬绘椂闂�(鍒嗛挓) - mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().add(overtime)); + mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().multiply(actualWorkDayCount).multiply(new BigDecimal("60")).add(overtime)); // 鏁呴殰鍋滄満鏃堕暱缁熻(鍒嗛挓) BigDecimal breakdownDownDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.BREAKDOWN_DOWN); @@ -156,7 +160,7 @@ // mdcOverallEquipmentEfficiency.getShiftTimeCount() - plannedMaintenanceDuration - conferenceTrainingDuration - otherRestDuration // 璐熻嵎鏃堕棿(鍒嗛挓) BigDecimal loadTime = mdcOverallEquipmentEfficiency.getShiftTimeCount().subtract(plannedMaintenanceDuration).subtract(conferenceTrainingDuration).subtract(otherRestDuration); - if (loadTime.compareTo(BigDecimal.ZERO) > -1) { + if (loadTime.compareTo(BigDecimal.ZERO) < 0) { loadTime = BigDecimal.ZERO; } mdcOverallEquipmentEfficiency.setLoadTime(loadTime.divide(new BigDecimal("60"), 1, RoundingMode.HALF_UP)); -- Gitblit v1.9.3