lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,54 @@ package org.jeecg.modules.mdc.constant; /** * @author Lius * @date 2023/11/1 16:05 */ public class MdcConstant { /** * æ éåæº */ public static final String BREAKDOWN_DOWN = "æ éåæº"; /** * æ¢åè°è¯ */ public static final String CONVERSION_DEBUG = "æ¢åè°è¯"; /** * ç©æç缺 */ public static final String MATERIAL_SHORTAGE = "ç©æç缺"; /** * 计åçä»»å¡ */ public static final String PLANNED_TASK = "计åçä»»å¡"; /** * æ£éª */ public static final String INSPECT = "æ£éª"; /** * å ¶å® */ public static final String OTHER = "å ¶å®"; /** * 计åä¿å » */ public static final String PLANNED_MAINTENANCE = "æ¥ä¿,å¨ä¿"; /** * ä¼è®®å¹è® */ public static final String CONFERENCE_TRAINING = "OPLå¹è®,çåä¼"; /** * å ¶ä»ä¼æ¯ */ public static final String OTHER_REST = "伿¯ç¨é¤,é¢é²æ§ç»´ä¿®"; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentOvertimeController.java
@@ -1,7 +1,7 @@ package org.jeecg.modules.mdc.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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; @@ -11,7 +11,6 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.entity.MdcEquipmentOvertime; import org.jeecg.modules.mdc.service.IMdcEquipmentOvertimeService; @@ -21,7 +20,9 @@ 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: 设å¤å ç管ç @@ -71,7 +72,18 @@ @ApiOperation(value = "设å¤å ç管ç-æ·»å ", notes = "设å¤å ç管ç-æ·»å ") @PostMapping(value = "/add") public Result<?> add(@RequestBody MdcEquipmentOvertime mdcEquipmentOvertime) { mdcEquipmentOvertimeService.save(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); } mdcEquipmentOvertimeService.saveBatch(equipmentOvertimeList); return Result.OK("æ·»å æåï¼"); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/EquipmentRunningTrace.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,60 @@ package org.jeecg.modules.mdc.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Date; /** * @author Lius * @date 2023/10/24 10:39 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("EquipmentRunningTrace") public class EquipmentRunningTrace implements Serializable { private static final long serialVersionUID = 2229764130687476736L; private Long sequence; /** * æ¥è¦ */ private String alarm; @TableField(value = "createTime") private Date createTime; private long duration; @TableField(value = "endTime") private Date endTime; @TableField(value = "startTime") private Date startTime; /** * ç¶æ,0:å ³æº,1:弿º,2:å¾ æº,3:å·¥ä½,22:æ¥è¦ */ private int status; /** * è®¾å¤ */ private String equipment; private String beltline; /** * ç¨åºå· */ @TableField(value = "Sequencenumber") private String Sequencenumber; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/EquipmentStatisticalInfo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,62 @@ package org.jeecg.modules.mdc.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("EquipmentStatisticalInfo") public class EquipmentStatisticalInfo implements Serializable { /** * 设å¤ID */ private String equipment; /** * ç产线 */ private String beltline; /** * 弿ºæ¶é¿ */ @TableField(value = "openingLong") private BigDecimal openingLong = new BigDecimal("0"); /** * å¾ æºæ¶é¿ */ @TableField(value = "waitingLong") private BigDecimal waitingLong = new BigDecimal("0"); /** * å å·¥æ¶é¿ */ @TableField(value = "processingLong") private BigDecimal processingLong = new BigDecimal("0"); /** * æ¥è¦ */ @TableField(value = "erroringLong") private BigDecimal erroringLong = new BigDecimal("0"); /** * å ³æºæ¶é¿ */ @TableField(value = "closedLong") private BigDecimal closedLong = new BigDecimal("0"); /** * æ¥æ */ @TableField(value = "theDate") private String theDate; /** * 忥æ¶é´ */ @TableField(value = "createTime") private Date createTime = new Date(System.currentTimeMillis()); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcOverallEquipmentEfficiency.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,184 @@ package org.jeecg.modules.mdc.entity; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.system.base.entity.JeecgEntity; import org.jeecgframework.poi.excel.annotation.Excel; import java.io.Serializable; import java.math.BigDecimal; /** * @author Lius * @date 2023/10/18 16:13 */ @Data @TableName("mdc_overall_equipment_efficiency") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @ApiModel(value = "mdc_overall_equipment_efficiency对象", description = "设å¤ç»¼åæçOEE表") public class MdcOverallEquipmentEfficiency extends JeecgEntity implements Serializable { private static final long serialVersionUID = 9185809666187247226L; /** * 设å¤ç¼å· */ @Excel(name = "设å¤ç¼å·", width = 15) @ApiModelProperty(value = "设å¤ç¼å·") private String equipmentId; /** * 设å¤åç§° */ @Excel(name = "设å¤åç§°", width = 15) @ApiModelProperty(value = "设å¤åç§°") private String equipmentName; /** * 设å¤åå· */ @Excel(name = "设å¤åå·", width = 15) @ApiModelProperty(value = "设å¤åå·") private String equipmentModel; /** * æææ¥æ */ @Excel(name = "æææ¥æ", width = 15) @ApiModelProperty(value = "æææ¥æ") private String validDate; /** * çæ¬¡id */ @ApiModelProperty(value = "çæ¬¡id") private String shiftSubId; /** * æ¯çå°æ¶ */ @Excel(name = "æ¯çå°æ¶", width = 15) @ApiModelProperty(value = "æ¯çå°æ¶") private BigDecimal shiftTimeCount; /** * å çæ¶é´ */ @Excel(name = "å çæ¶é´", width = 15) @ApiModelProperty(value = "å çæ¶é´") private BigDecimal overtime; /** * å®é çäº§å¤©æ° */ @Excel(name = "å®é ç产天æ°", width = 15) @ApiModelProperty(value = "å®é ç产天æ°") private BigDecimal actualWorkDayCount; /** * æåº¦å®é çäº§æ»æ¶é´ */ @Excel(name = "æåº¦å®é çäº§æ»æ¶é´", width = 15) @ApiModelProperty(value = "æåº¦å®é çäº§æ»æ¶é´") private BigDecimal monthActualWorkDayTimeCount; /** * æ éåæºæ¶é¿(åé) */ @Excel(name = "æ éåæºæ¶é¿", width = 15) @ApiModelProperty(value = "æ éåæºæ¶é¿(åé)") private BigDecimal breakdownDownDuration; /** * æ¢åè°è¯æ¶é¿(åé) */ @Excel(name = "æ¢åè°è¯æ¶é¿(åé)", width = 15) @ApiModelProperty(value = "æ¢åè°è¯æ¶é¿(åé)") private BigDecimal conversionDebugDuration; /** * ç©æç缺æ¶é¿(åé) */ @Excel(name = "ç©æç缺æ¶é¿(åé)", width = 15) @ApiModelProperty(value = "ç©æç缺æ¶é¿(åé)") private BigDecimal materialShortageDuration; /** * 计åçä»»å¡(åé) */ @Excel(name = "计åçä»»å¡(åé)", width = 15) @ApiModelProperty(value = "计åçä»»å¡(åé)") private BigDecimal plannedTaskDuration; /** * æ£éª(åé) */ @Excel(name = "æ£éª(åé)", width = 15) @ApiModelProperty(value = "æ£éª(åé)") private BigDecimal inspectDuration; /** * å ¶ä»(åé) */ @Excel(name = "å ¶ä»(åé)", width = 15) @ApiModelProperty(value = "å ¶ä»(åé)") private BigDecimal otherDuration; /** * 计åä¿å » */ @Excel(name = "计åä¿å »", width = 15) @ApiModelProperty(value = "计åä¿å »") private BigDecimal plannedMaintenanceDuration; /** * ä¼è®®å¹è®æ¶é¿ */ @Excel(name = "ä¼è®®å¹è®æ¶é¿", width = 15) @ApiModelProperty(value = "ä¼è®®å¹è®æ¶é¿") private BigDecimal conferenceTrainingDuration; /** * å ¶ä»ä¼æ¯æ¶é¿ */ @Excel(name = "å ¶ä»ä¼æ¯æ¶é¿", width = 15) @ApiModelProperty(value = "å ¶ä»ä¼æ¯æ¶é¿") private BigDecimal otherRestDuration; /** * è´è·æ¶é´ */ @Excel(name = "è´è·æ¶é´", width = 15) @ApiModelProperty(value = "è´è·æ¶é´") private BigDecimal loadTime; /** * æ¶é´å¼å¨ç */ @Excel(name = "æ¶é´å¼å¨ç", width = 15) @ApiModelProperty(value = "æ¶é´å¼å¨ç") private BigDecimal timeActuationRate; /** * å å·¥é¶ä»¶æ° */ @Excel(name = "å å·¥é¶ä»¶æ°", width = 15) @ApiModelProperty(value = "å å·¥é¶ä»¶æ°") private BigDecimal processQuantity; /** * æ åå å·¥æ¶é´(åé) */ @Excel(name = "æ åå å·¥æ¶é´(åé)", width = 15) @ApiModelProperty(value = "æ åå å·¥æ¶é´(åé)") private BigDecimal standardProcessDuration; /** * æ§è½å¼å¨ç */ @Excel(name = "æ§è½å¼å¨ç", width = 15) @ApiModelProperty(value = "æ§è½å¼å¨ç") private BigDecimal performanceRate; /** * åºåæ° */ @Excel(name = "åºåæ°", width = 15) @ApiModelProperty(value = "åºåæ°") private BigDecimal unqualifiedQuantity; /** * åæ ¼ç */ @Excel(name = "åæ ¼ç", width = 15) @ApiModelProperty(value = "åæ ¼ç") private BigDecimal passRate; /** * 设å¤ç»¼åæç */ @Excel(name = "设å¤ç»¼åæç", width = 15) @ApiModelProperty(value = "设å¤ç»¼åæç") private BigDecimal overallEquipmentEfficiency; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcProcessQuantity.java
@@ -1,22 +1,20 @@ package org.jeecg.modules.mdc.entity; import java.io.Serializable; import java.util.Date; import java.util.List; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import com.fasterxml.jackson.annotation.JsonFormat; import org.jeecg.common.system.base.entity.JeecgEntity; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.Date; /** * @Description: å å·¥æ°é表 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOverallEquipmentEfficiencyJob.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,64 @@ package org.jeecg.modules.mdc.job; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.util.DateUtils; import org.jeecg.modules.mdc.service.IMdcOverallEquipmentEfficiencyService; import org.jeecg.modules.mdc.util.ThrowableUtil; 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.util.Date; import java.util.List; /** * @Description: 宿¶è®¡ç®è®¾å¤ç»¼åæçOEEä»»å¡ * @author: LiuS * @create: 2023-07-24 10:26 */ @PersistJobDataAfterExecution @DisallowConcurrentExecution @Slf4j public class RunningOverallEquipmentEfficiencyJob implements Job { @Resource private IQuartzJobService quartzJobService; @Resource private ISysAnnouncementService sysAnnouncementService; @Resource private ISysQuartzLogService sysQuartzLogService; @Resource private IMdcOverallEquipmentEfficiencyService mdcOverallEquipmentEfficiencyService; @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()); } log.info("宿¶è®¡ç®è®¾å¤ç»¼åæçOEEä»»å¡ RunningOverallEquipmentEfficiencyJob start! æ¶é´:" + DateUtils.now()); long startTime = System.currentTimeMillis(); try { mdcOverallEquipmentEfficiencyService.runningOverallEquipmentEfficiency(); 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); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentRunningTraceMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package org.jeecg.modules.mdc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.mdc.entity.EquipmentRunningTrace; /** * @author Lius * @date 2023/10/26 16:46 */ public interface EquipmentRunningTraceMapper extends BaseMapper<EquipmentRunningTrace> { } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentStatisticalInfoMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package org.jeecg.modules.mdc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.mdc.entity.EquipmentStatisticalInfo; /** * @author Lius * @date 2023/10/24 14:05 */ public interface EquipmentStatisticalInfoMapper extends BaseMapper<EquipmentStatisticalInfo> { } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDeviceCalendarMapper.java
@@ -1,13 +1,12 @@ package org.jeecg.modules.mdc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.entity.MdcDeviceCalendar; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.mdc.vo.MdcDeviceCalendarQueryVo; import org.jeecg.modules.mdc.vo.MdcDeviceCalendarVo; import java.util.Date; import java.util.List; /** @@ -24,4 +23,9 @@ List<MdcDeviceCalendarVo> findAcquiesceShift(); List<String> computeActualWorkDayCount(@Param("shiftSubId") String shiftSubId, @Param("equipmentId") String equipmentId, @Param("validDate") String validDate); List<String> findShiftSort(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate); Integer computeShiftTimeCount(@Param("shiftSubId") String shiftSubId, @Param("equipmentId") String equipmentId, @Param("validDate") String validDate); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentOvertimeMapper.java
@@ -28,9 +28,17 @@ /** * listå表 * * @param mdcEquipmentOvertime * @return */ List<MdcEquipmentOvertime> list(@Param("mdcEquipmentOvertime") MdcEquipmentOvertime mdcEquipmentOvertime); /** * æ¥è¯¢å çæ¶é¿ * @param equipmentId * @param validDate * @return */ List<MdcEquipmentOvertime> computeOvertime(@Param("shiftSubId") String shiftSubId, @Param("equipmentId") String equipmentId, @Param("validDate") String validDate); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMapper.java
@@ -4,6 +4,8 @@ import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo; import java.math.BigDecimal; /** * @author: LiuS * @create: 2023-07-24 11:23 @@ -17,4 +19,6 @@ * @return */ MdcEquipmentStatisticalShiftInfo getMaxStaticsData(@Param("equipmentId") String equipmentid); BigDecimal findSpindleRunDuration(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate, @Param("shiftSubId") String shiftSubId); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcNoplanCloseMapper.java
@@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.entity.MdcNoplanClose; import java.util.List; /** * @Description: é计ååæºç»´æ¤è¡¨ * @Author: Lius @@ -24,5 +26,14 @@ */ IPage<MdcNoplanClose> pageList(Page<MdcNoplanClose> page, @Param("mdcNoplanClose") MdcNoplanClose mdcNoplanClose); /** * æ¥è¯¢é计ååæºç®¡çæå¤± * * @param equipmentId * @param noplanType * @param startDate * @param endDate * @return */ List<MdcNoplanClose> findNoplanTimeDuration(@Param("equipmentId") String equipmentId, @Param("noplanType") String noplanType, @Param("startDate") String startDate, @Param("endDate") String endDate); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOverallEquipmentEfficiencyMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package org.jeecg.modules.mdc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.mdc.entity.MdcOverallEquipmentEfficiency; /** * @author Lius * @date 2023/11/3 14:29 */ public interface MdcOverallEquipmentEfficiencyMapper extends BaseMapper<MdcOverallEquipmentEfficiency> { } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcPassRateMapper.java
@@ -23,4 +23,24 @@ * @return */ IPage<MdcPassRate> pageList(Page<MdcPassRate> page, @Param("mdcPassRate") MdcPassRate mdcPassRate); /** * 计ç®å å·¥æ°é * * @param equipmentId * @param startTime * @param endTime * @return */ Integer findProcessQuantity(@Param("equipmentId") String equipmentId, @Param("startTime") String startTime, @Param("endTime") String endTime); /** * 计ç®åºåæ°é * * @param equipmentId * @param startTime * @param endTime * @return */ Integer findUnqualifiedQuantity(@Param("equipmentId") String equipmentId, @Param("startTime") String startTime, @Param("endTime") String endTime); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentRunningTraceMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.mdc.mapper.EquipmentRunningTraceMapper"> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentStatisticalInfoMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.mdc.mapper.EquipmentStatisticalInfoMapper"> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDeviceCalendarMapper.xml
@@ -84,4 +84,39 @@ WHERE t1.default_shift = 'true' </select> <!--计ç®å®é ç产天æ°--> <select id="computeActualWorkDayCount" resultType="java.lang.String"> SELECT DISTINCT effective_date FROM mdc_device_calendar WHERE effective_date LIKE CONCAT(#{ validDate }, '%') AND equipment_id = #{ equipmentId } AND shift_sub_id = #{ shiftSubId } </select> <!--æ¥è¯¢ç次åç±»--> <select id="findShiftSort" resultType="java.lang.String"> SELECT DISTINCT shift_sub_id FROM mdc_device_calendar WHERE effective_date LIKE CONCAT(#{ validDate }, '%') AND equipment_id = #{ equipmentId } </select> <!--æ¥è¯¢ç次æ°é--> <select id="computeShiftTimeCount" resultType="java.lang.Integer"> SELECT COUNT(*) FROM mdc_device_calendar WHERE effective_date LIKE CONCAT(#{ validDate }, '%') AND equipment_id = #{ equipmentId } AND shift_sub_id = #{ shiftSubId } </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOvertimeMapper.xml
@@ -77,4 +77,17 @@ </where> order by t2.effective_date asc </select> <!--æ¥è¯¢å çæ¶é¿--> <select id="computeOvertime" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentOvertime"> SELECT meo.* FROM mdc_equipment_overtime meo LEFT JOIN mdc_device_calendar mdc ON meo.calendar_id = mdc.id WHERE mdc.effective_date LIKE CONCAT(#{ validDate }, '%') AND mdc.equipment_id = #{ equipmentId } AND mdc.shift_sub_id = #{ shiftSubId } </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMapper.xml
@@ -6,4 +6,16 @@ <select id="getMaxStaticsData" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo"> SELECT TOP 1 * FROM mdc_equipment_statistical_shift_info WHERE equipment_id = #{equipmentId} ORDER BY the_date DESC </select> <!--æ¥è¯¢ä¸»è½´è¿è¡æ¶é´--> <select id="findSpindleRunDuration" resultType="java.math.BigDecimal"> SELECT SUM(process_long) FROM mdc_equipment_statistical_shift_info WHERE equipment_id = #{ equipmentId } AND shift_sub_id = #{ shiftSubId } AND the_date LIKE CONCAT(#{ validDate },'%') </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcNoplanCloseMapper.xml
@@ -30,4 +30,18 @@ </where> ORDER BY start_time ASC </select> <select id="findNoplanTimeDuration" resultType="org.jeecg.modules.mdc.entity.MdcNoplanClose"> SELECT * FROM mdc_noplan_close WHERE equipment_id = #{ equipmentId } AND ( ( start_time BETWEEN #{ startDate } AND #{ endDate } ) OR ( end_time BETWEEN #{ startDate } AND #{ endDate } ) ) AND noplan_type = #{ noplanType } ORDER BY start_time ASC </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOverallEquipmentEfficiencyMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.mdc.mapper.MdcOverallEquipmentEfficiencyMapper"> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcPassRateMapper.xml
@@ -24,4 +24,26 @@ </where> ORDER BY equipment_name ASC, efficient_date DESC </select> <!--计ç®å å·¥æ°é--> <select id="findProcessQuantity" resultType="java.lang.Integer"> SELECT SUM( process_quantity ) FROM mdc_pass_rate WHERE equipment_id = #{ equipmentId } AND efficient_date BETWEEN #{ startTime } AND #{endTime} </select> <!--计ç®åºåæ°é--> <select id="findUnqualifiedQuantity" resultType="java.lang.Integer"> SELECT SUM( unqualified_quantity ) FROM mdc_pass_rate WHERE equipment_id = #{ equipmentId } AND efficient_date BETWEEN #{ startTime } AND #{endTime} </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentRunningTraceService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package org.jeecg.modules.mdc.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mdc.entity.EquipmentRunningTrace; /** * @author Lius * @date 2023/10/26 16:45 */ public interface IEquipmentRunningTraceService extends IService<EquipmentRunningTrace> { } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentStatisticalInfoService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package org.jeecg.modules.mdc.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mdc.entity.EquipmentStatisticalInfo; /** * @author Lius * @date 2023/10/24 14:04 */ public interface IEquipmentStatisticalInfoService extends IService<EquipmentStatisticalInfo> { } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java
@@ -1,14 +1,14 @@ package org.jeecg.modules.mdc.service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.jeecg.modules.mdc.entity.MdcDeviceCalendar; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mdc.entity.MdcDeviceCalendar; import org.jeecg.modules.mdc.vo.EquipmentCalendarVo; import org.jeecg.modules.mdc.vo.MdcDeviceCalendarQueryVo; import org.jeecg.modules.mdc.vo.MdcDeviceCalendarVo; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.math.BigDecimal; import java.util.List; /** @@ -37,4 +37,33 @@ * @return */ List<MdcDeviceCalendarVo> listByEquipmentAndDate(String equipmentid, List<String> stringDates); /** * 计ç®å®é çäº§å¤©æ° * * @param shiftSubId * @param equipmentId * @param validDate * @return */ BigDecimal computeActualWorkDayCount(String shiftSubId, String equipmentId, String validDate); /** * æ¥è¯¢ç次åç±» * * @param equipmentId * @param validDate * @return */ List<String> findShiftSort(String equipmentId, String validDate); /** * 计ç®ç次æ¶é´ * * @param shiftSubId * @param equipmentId * @param validDate * @return */ BigDecimal computeShiftTimeCount(String shiftSubId, String equipmentId, String validDate); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOvertimeService.java
@@ -8,6 +8,7 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; /** * @Description: 设å¤å ç管ç @@ -37,4 +38,13 @@ */ ModelAndView exportXls(String userId, MdcEquipmentOvertime mdcEquipmentOvertime); /** * 计ç®å çæ¶é´ * * @param shiftSubId * @param equipmentId * @param validDate * @return */ BigDecimal computeOvertime(String shiftSubId, String equipmentId, String validDate); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoService.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo; import java.math.BigDecimal; /** * @Description: 设å¤åæ¥ç次è¿è¡æ°æ®è¡¨ * @author: LiuS @@ -16,4 +18,15 @@ * @param dateTime */ void runningAllEquipmentShiftStatisticalProcess(String dateTime); /** * æ¥è¯¢ä¸»è½´è¿è¡æ¶é´ * * @param equipmentId * @param validDate * @param shiftSubId * @return */ BigDecimal findSpindleRunDuration(String equipmentId, String validDate, String shiftSubId); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcNoplanCloseService.java
@@ -9,6 +9,7 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; /** * @Description: é计ååæºç»´æ¤è¡¨ @@ -53,4 +54,6 @@ * @return */ ModelAndView exportXls(String userId, MdcNoplanClose mdcNoplanClose); BigDecimal findNoplanTimeDuration(String equipmentId, String validDate, String noplanType); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOverallEquipmentEfficiencyService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package org.jeecg.modules.mdc.service; /** * @author: LiuS * @create: 2023-10-18 09:25 */ public interface IMdcOverallEquipmentEfficiencyService { /** * 计ç®è®¾å¤ç»¼åæçOEE */ void runningOverallEquipmentEfficiency(); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcPassRateService.java
@@ -8,6 +8,7 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; /** * @Description: åæ ¼ç表 @@ -52,4 +53,8 @@ * @return */ ModelAndView exportXls(String userId, MdcPassRate mdcPassRate); BigDecimal findProcessQuantity(String equipmentId, String validDate); BigDecimal findUnqualifiedQuantity(String equipmentId, String validDate); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentRunningTraceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package org.jeecg.modules.mdc.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.mdc.entity.EquipmentRunningTrace; import org.jeecg.modules.mdc.mapper.EquipmentRunningTraceMapper; import org.jeecg.modules.mdc.service.IEquipmentRunningTraceService; import org.springframework.stereotype.Service; /** * @author Lius * @date 2023/10/26 16:45 */ @Service public class EquipmentRunningTraceImpl extends ServiceImpl<EquipmentRunningTraceMapper, EquipmentRunningTrace> implements IEquipmentRunningTraceService { } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentStatisticalInfoServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package org.jeecg.modules.mdc.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.mdc.entity.EquipmentStatisticalInfo; import org.jeecg.modules.mdc.mapper.EquipmentStatisticalInfoMapper; import org.jeecg.modules.mdc.service.IEquipmentStatisticalInfoService; import org.springframework.stereotype.Service; /** * @author Lius * @date 2023/10/24 14:04 */ @Service public class EquipmentStatisticalInfoServiceImpl extends ServiceImpl<EquipmentStatisticalInfoMapper, EquipmentStatisticalInfo> implements IEquipmentStatisticalInfoService { } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java
@@ -19,7 +19,10 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.*; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @Description: 设å¤å·¥ä½æ¥å表 @@ -110,20 +113,21 @@ List<MdcDeviceCalendarVo> result = new ArrayList<>(); try { //æ¥è¯¢é»è®¤çå¶ List<MdcDeviceCalendarVo> acquiesceShift = this.baseMapper.findAcquiesceShift(); // List<MdcDeviceCalendarVo> acquiesceShift = this.baseMapper.findAcquiesceShift(); for (String stringDate : stringDates) { List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = this.baseMapper.listByEquipmentAndDate(equipmentId, stringDate); if (mdcDeviceCalendarVos != null && !mdcDeviceCalendarVos.isEmpty()) { result.addAll(mdcDeviceCalendarVos); } else { acquiesceShift.forEach(mdcDeviceCalendarVo -> { mdcDeviceCalendarVo.setEquipmentId(equipmentId); mdcDeviceCalendarVo.setEffectiveDate(stringDate); }); // 设置é»è®¤çå¶ result.addAll(acquiesceShift); } // else { // acquiesceShift.forEach(mdcDeviceCalendarVo -> { // mdcDeviceCalendarVo.setEquipmentId(equipmentId); // mdcDeviceCalendarVo.setEffectiveDate(stringDate); // }); // // 设置é»è®¤çå¶ // result.addAll(acquiesceShift); // } } } catch (Exception e) { e.printStackTrace(); @@ -132,4 +136,46 @@ return result; } /** * 计ç®å®é çäº§å¤©æ° * * @param shiftSubId * @param equipmentId * @param validDate * @return */ @Override public BigDecimal computeActualWorkDayCount(String shiftSubId, String equipmentId, String validDate) { validDate = validDate.replaceAll("-", ""); List<String> validDateList = this.baseMapper.computeActualWorkDayCount(shiftSubId, equipmentId, validDate); return new BigDecimal(validDateList.size()); } /** * æ¥è¯¢ç次åç±» * * @param equipmentId * @param validDate * @return */ @Override public List<String> findShiftSort(String equipmentId, String validDate) { validDate = validDate.replaceAll("-", ""); return this.baseMapper.findShiftSort(equipmentId, validDate); } /** * 计ç®ç次æ¶é´ * * @param shiftSubId * @param equipmentId * @param validDate * @return */ @Override public BigDecimal computeShiftTimeCount(String shiftSubId, String equipmentId, String validDate) { Integer shiftCount = this.baseMapper.computeShiftTimeCount(shiftSubId, equipmentId, validDate); return new BigDecimal(shiftCount).multiply(new BigDecimal("8")).multiply(new BigDecimal("60")); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOvertimeServiceImpl.java
@@ -8,10 +8,10 @@ import org.apache.shiro.SecurityUtils; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.entity.MdcEquipmentOvertime; import org.jeecg.modules.mdc.entity.MdcNoplanClose; import org.jeecg.modules.mdc.mapper.MdcEquipmentOvertimeMapper; import org.jeecg.modules.mdc.service.IMdcEquipmentOvertimeService; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; @@ -20,6 +20,10 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.time.Duration; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -124,4 +128,30 @@ mv.addObject(NormalExcelConstants.DATA_LIST, mdcEquipmentOvertimes); return mv; } /** * 计ç®å çæ¶é´ï¼åéï¼ * * @param shiftSubId * @param equipmentId * @param validDate * @return */ @Override public BigDecimal computeOvertime(String shiftSubId, String equipmentId, String validDate) { List<MdcEquipmentOvertime> list = this.baseMapper.computeOvertime(shiftSubId, equipmentId, validDate); BigDecimal result = new BigDecimal("0"); if (list != null && !list.isEmpty()) { for (MdcEquipmentOvertime equipmentOvertime : list) { String date = DateUtils.format(DateUtils.toDate(validDate + "-01", DateUtils.STR_DATE), DateUtils.STR_DATE) + " "; String startTime = date + equipmentOvertime.getStartTime(); String endTime = date + equipmentOvertime.getEndTime(); LocalDateTime localStartTime = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern(DateUtils.STR_DATE_TIME_SMALL)); LocalDateTime localEndTime = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern(DateUtils.STR_DATE_TIME_SMALL)); int minutes = Math.toIntExact(Duration.between(localStartTime, localEndTime).toMinutes()); result = result.add(new BigDecimal(minutes)); } } return result; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.system.vo.DictModel; import org.jeecg.modules.mdc.dto.EquipmentMachingDto; import org.jeecg.modules.mdc.dto.MdcEquipmentRunningSectionDto; import org.jeecg.modules.mdc.entity.*; @@ -12,6 +13,7 @@ import org.jeecg.modules.mdc.util.TimeFieldUtils; import org.jeecg.modules.mdc.vo.MdcAlarmAnalyzeQueryVo; import org.jeecg.modules.mdc.vo.MdcEquipmentRunningSectionVo; import org.jeecg.modules.system.service.ISysDictService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -39,6 +41,12 @@ @Resource private IEquipmentWorkLineService equipmentWorkLineService; @Resource private ISysDictService sysDictService; @Resource private IEquipmentRunningTraceService equipmentRunningTraceService; @Override public List<MdcEquipmentRunningSectionDto> logList(MdcEquipmentRunningSectionVo equipmentRunningSectionVo) { @@ -483,8 +491,51 @@ //save errorList super.saveBatch(errorList); } List<DictModel> dictList = sysDictService.queryDictItemsByCode("data_synchronization_flag"); if (dictList != null && !dictList.isEmpty() && "0".equals(dictList.get(0).getValue())) { this.dataSynchronizationHandler(list, errorList); } } } /** * æ°æ®åæ¥å¤ç * @param list * @param errorList */ private void dataSynchronizationHandler(List<MdcEquipmentRunningSection> list, List<MdcEquipmentRunningSection> errorList) { // æ°æ®è½¬æ¢ List<EquipmentRunningTrace> equipList = new ArrayList<>(); if (list != null && !list.isEmpty()) { list.forEach(item -> { EquipmentRunningTrace equipmentRunningSection = new EquipmentRunningTrace(); equipmentRunningSection.setEquipment(item.getEquipmentId()); equipmentRunningSection.setAlarm(item.getAlarm()); equipmentRunningSection.setCreateTime(item.getCreateTime()); equipmentRunningSection.setDuration(item.getDuration()); equipmentRunningSection.setEndTime(item.getEndTime()); equipmentRunningSection.setStartTime(item.getStartTime()); equipmentRunningSection.setStatus(item.getStatus()); equipmentRunningSection.setSequencenumber(item.getSequenceNumber()); equipList.add(equipmentRunningSection); }); } if (errorList != null && !errorList.isEmpty()) { errorList.forEach(item -> { EquipmentRunningTrace equipmentRunningSection = new EquipmentRunningTrace(); equipmentRunningSection.setEquipment(item.getEquipmentId()); equipmentRunningSection.setAlarm(item.getAlarm()); equipmentRunningSection.setCreateTime(item.getCreateTime()); equipmentRunningSection.setDuration(item.getDuration()); equipmentRunningSection.setEndTime(item.getEndTime()); equipmentRunningSection.setStartTime(item.getStartTime()); equipmentRunningSection.setStatus(item.getStatus()); equipmentRunningSection.setSequencenumber(item.getSequenceNumber()); equipList.add(equipmentRunningSection); }); } equipmentRunningTraceService.saveBatch(equipList); } /** * è·å设å¤è¿è¡è®°å½ææ©çæ°æ® lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java
@@ -3,16 +3,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang.StringUtils; import org.jeecg.modules.mdc.entity.Equipment; import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection; import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; import org.jeecg.modules.mdc.entity.MdcSystemParameters; import org.jeecg.common.system.vo.DictModel; import org.jeecg.modules.mdc.entity.*; import org.jeecg.modules.mdc.mapper.MdcEquipmentStatisticalInfoMapper; import org.jeecg.modules.mdc.service.IEquipmentService; import org.jeecg.modules.mdc.service.IMdcEquipmentRunningSectionService; import org.jeecg.modules.mdc.service.IMdcEquipmentStatisticalInfoService; import org.jeecg.modules.mdc.service.IMdcSystemParametersService; import org.jeecg.modules.mdc.service.*; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.system.service.ISysDictService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +33,12 @@ @Resource private IMdcSystemParametersService mdcSystemParametersService; @Resource private ISysDictService sysDictService; @Resource private IEquipmentStatisticalInfoService equipmentStatisticalInfoService; /** * 计ç®è®¾å¤åæ¥è¿è¡æ°æ® @@ -65,8 +67,29 @@ } if (!result.isEmpty()) { this.saveBatch(result); List<DictModel> dictList = sysDictService.queryDictItemsByCode("data_synchronization_flag"); if (dictList != null && !dictList.isEmpty() && "0".equals(dictList.get(0).getValue())) { List<EquipmentStatisticalInfo> list = this.dataHandle(result); equipmentStatisticalInfoService.saveBatch(list); } } } private List<EquipmentStatisticalInfo> dataHandle(List<MdcEquipmentStatisticalInfo> list) { List<EquipmentStatisticalInfo> result = new ArrayList<>(); list.forEach(item -> { EquipmentStatisticalInfo equipmentStatisticalInfo = new EquipmentStatisticalInfo(); equipmentStatisticalInfo.setEquipment(item.getEquipmentId()); equipmentStatisticalInfo.setTheDate(item.getTheDate()); equipmentStatisticalInfo.setClosedLong(item.getCloseLong()); equipmentStatisticalInfo.setOpeningLong(item.getOpenLong()); equipmentStatisticalInfo.setErroringLong(item.getErrorLong()); equipmentStatisticalInfo.setProcessingLong(item.getProcessLong()); equipmentStatisticalInfo.setWaitingLong(item.getWaitLong()); result.add(equipmentStatisticalInfo); }); return result; } private List<MdcEquipmentStatisticalInfo> equipmentStatisticalProcess(Equipment equipment, String dateTime) { Date initDate = null; lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java
@@ -18,6 +18,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -74,6 +75,25 @@ } } /** * æ¥è¯¢ä¸»è½´è¿è¡æ¶é´ * * @param equipmentId * @param validDate * @param shiftSubId * @return */ @Override public BigDecimal findSpindleRunDuration(String equipmentId, String validDate, String shiftSubId) { validDate = validDate.replaceAll("-", ""); BigDecimal duration = this.baseMapper.findSpindleRunDuration(equipmentId, validDate, shiftSubId); if (duration != null && duration.compareTo(BigDecimal.ZERO) != 0) { return duration.divide(new BigDecimal("60"), 0, RoundingMode.HALF_UP); } else { return new BigDecimal("0"); } } @Transactional(readOnly = true) List<MdcEquipmentStatisticalShiftInfo> equipmentShiftStatisticalProcess(Equipment equipment, String dateTime) { Date initDate = null; lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcNoplanCloseServiceImpl.java
@@ -9,9 +9,7 @@ import org.apache.shiro.SecurityUtils; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.entity.MdcEquipment; import org.jeecg.modules.mdc.entity.MdcEquipmentRepair; import org.jeecg.modules.mdc.entity.MdcNoplanClose; import org.jeecg.modules.mdc.entity.MdcTorqueConfig; import org.jeecg.modules.mdc.mapper.MdcNoplanCloseMapper; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.mdc.service.IMdcNoplanCloseService; @@ -25,6 +23,10 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.time.Duration; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -317,4 +319,30 @@ mv.addObject(NormalExcelConstants.DATA_LIST, mdcNoplanCloses); return mv; } @Override public BigDecimal findNoplanTimeDuration(String equipmentId, String validDate, String noplanType) { BigDecimal result = new BigDecimal("0"); String startDate = DateUtils.format(DateUtils.toDate(validDate + "-01", DateUtils.STR_DATE), DateUtils.STR_DATE) + " 00:00:00"; Date startTime = DateUtils.toDate(startDate, DateUtils.STR_DATE_TIME_SMALL); String endDate = DateUtils.format(DateUtils.addMonth(1, DateUtils.toDate(startDate, DateUtils.STR_DATE_TIME_SMALL)), DateUtils.STR_DATE_TIME_SMALL); Date endTime = DateUtils.toDate(endDate, DateUtils.STR_DATE_TIME_SMALL); List<MdcNoplanClose> mdcNoplanCloseList = this.baseMapper.findNoplanTimeDuration(equipmentId, noplanType, startDate, endDate); // æ¶é´ä¿®æ£ å¹¶è®¡ç® if (mdcNoplanCloseList != null && !mdcNoplanCloseList.isEmpty()) { for (MdcNoplanClose mdcNoplanClose : mdcNoplanCloseList) { if (mdcNoplanClose.getStartTime().before(startTime)) { mdcNoplanClose.setStartTime(startTime); } if (mdcNoplanClose.getEndTime().after(endTime)) { mdcNoplanClose.setEndTime(endTime); } LocalDateTime localStartDate = LocalDateTime.ofInstant(mdcNoplanClose.getStartTime().toInstant(), ZoneId.systemDefault()); LocalDateTime localEndDate = LocalDateTime.ofInstant(mdcNoplanClose.getEndTime().toInstant(), ZoneId.systemDefault()); int minutes = Math.toIntExact(Duration.between(localStartDate, localEndDate).toMinutes()); result = result.add(new BigDecimal(minutes)); } } return result; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,187 @@ package org.jeecg.modules.mdc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.mdc.constant.MdcConstant; import org.jeecg.modules.mdc.entity.MdcEquipment; import org.jeecg.modules.mdc.entity.MdcOverallEquipmentEfficiency; import org.jeecg.modules.mdc.entity.MdcStandardProcessDuration; import org.jeecg.modules.mdc.mapper.MdcOverallEquipmentEfficiencyMapper; import org.jeecg.modules.mdc.service.*; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.YearMonth; import java.util.ArrayList; import java.util.List; /** * @author: LiuS * @create: 2023-10-18 09:25 */ @Service public class MdcOverallEquipmentEfficiencyServiceImpl extends ServiceImpl<MdcOverallEquipmentEfficiencyMapper, MdcOverallEquipmentEfficiency> implements IMdcOverallEquipmentEfficiencyService { @Resource private IMdcEquipmentService mdcEquipmentService; @Resource private IMdcEquipmentOvertimeService mdcEquipmentOvertimeService; @Resource private IMdcDeviceCalendarService mdcDeviceCalendarService; @Resource private IMdcNoplanCloseService mdcNoplanCloseService; @Resource private IMdcPlanCloseService mdcPlanCloseService; @Resource private IMdcPassRateService mdcPassRateService; @Resource private IMdcStandardProcessDurationService mdcStandardProcessDurationService; @Resource private IMdcEquipmentStatisticalShiftInfoService mdcEquipmentStatisticalShiftInfoService; /** * 计ç®è®¾å¤ç»¼åæçOEE */ @Override public void runningOverallEquipmentEfficiency() { /* OEE = æ¶é´å¼å¨ç à æ§è½å¼å¨ç Ã åæ ¼åç æ¶é´å¼å¨ç = ï¼è´è·æ¶é´ - é计ååæºæ¶é´ï¼ / è´è·æ¶é´ à 100% æ§è½å¼å¨ç = åå¼å¨æ¶é´ / å¼å¨æ¶é´ à 100% åæ ¼åç = å å·¥æ°é - ä¸åæ ¼æ°é / å å·¥æ°é è´è·æ¶é´ = æ¥å工使¶é´ - 计ååæºæ¶é´ é计ååæºæ¶é´ = è´è·æ¶é´ - 主轴è¿è½¬æ¶é´ 工使¥åæ¶é´ = æ¥åæ¶é´ - æ³å®åæ¥ - å伿¥ + å çæ¶é´ åå¼å¨æ¶é´ = æ åå å·¥æ¶é´ à å å·¥æ°é */ List<MdcOverallEquipmentEfficiency> result = new ArrayList<>(); // è·åæææ¥æ æ ¼å¼ yyyy-MM String validDate = YearMonth.now().minusMonths(1).toString(); // è·å设å¤å表 List<MdcEquipment> equipmentList = mdcEquipmentService.list(); for (MdcEquipment mdcEquipment : equipmentList) { String equipmentId = mdcEquipment.getEquipmentId(); // æ¥è¯¢ç次åç±» List<String> shiftSubIdList = mdcDeviceCalendarService.findShiftSort(equipmentId, validDate); // æ éåæºæ¶é¿ç»è®¡(åé) BigDecimal breakdownDownDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.BREAKDOWN_DOWN); // æ¢åè°è¯æ¶é¿ç»è®¡(åé) BigDecimal conversionDebugDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.CONVERSION_DEBUG); // ç©æç缺æ¶é¿ç»è®¡(åé) BigDecimal materialShortageDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.MATERIAL_SHORTAGE); // 计åç任塿¶é¿ç»è®¡(åé) BigDecimal plannedTaskDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.PLANNED_TASK); // æ£éªæ¶é¿ç»è®¡(åé) BigDecimal inspectDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.INSPECT); // å ¶ä»æ¶é¿ç»è®¡(åé) BigDecimal otherDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.OTHER); // 计åä¿å »æ¶é¿ç»è®¡(åé) BigDecimal plannedMaintenanceDuration = new BigDecimal("0"); // ä¼è®®/å¹è®æ¶é¿ç»è®¡(åé) BigDecimal conferenceTrainingDuration = new BigDecimal("0"); // å ¶å®ä¼æ¯æ¶é¿ç»è®¡(åé) BigDecimal otherRestDuration = new BigDecimal("0"); if (shiftSubIdList != null && !shiftSubIdList.isEmpty()) { for (String shiftSubId : shiftSubIdList) { MdcOverallEquipmentEfficiency mdcOverallEquipmentEfficiency = new MdcOverallEquipmentEfficiency(); // æ¶é´å¼å¨çè®¡ç® mdcOverallEquipmentEfficiency.setEquipmentId(equipmentId); mdcOverallEquipmentEfficiency.setEquipmentName(mdcEquipment.getEquipmentName()); mdcOverallEquipmentEfficiency.setEquipmentModel(mdcEquipment.getEquipmentModel()); mdcOverallEquipmentEfficiency.setValidDate(validDate); // çæ¬¡ çæ¬¡æ¶é´ mdcOverallEquipmentEfficiency.setShiftSubId(shiftSubId); BigDecimal shiftTimeCount = mdcDeviceCalendarService.computeShiftTimeCount(shiftSubId, equipmentId, validDate); mdcOverallEquipmentEfficiency.setShiftTimeCount(shiftTimeCount); // 计ç®å çæ¶é´ BigDecimal overtime = mdcEquipmentOvertimeService.computeOvertime(shiftSubId, equipmentId, validDate); mdcOverallEquipmentEfficiency.setOvertime(overtime); // 计ç®å®é çäº§å¤©æ° BigDecimal actualWorkDayCount = mdcDeviceCalendarService.computeActualWorkDayCount(shiftSubId, equipmentId, validDate); mdcOverallEquipmentEfficiency.setActualWorkDayCount(actualWorkDayCount); // æåº¦å®é çäº§æ»æ¶é´(åé) mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().add(overtime)); // æ éåæºæ¶é¿ç»è®¡(åé) mdcOverallEquipmentEfficiency.setBreakdownDownDuration(breakdownDownDuration); // æ¢åè°è¯æ¶é¿ç»è®¡(åé) mdcOverallEquipmentEfficiency.setConversionDebugDuration(conversionDebugDuration); // ç©æç缺æ¶é¿ç»è®¡(åé) mdcOverallEquipmentEfficiency.setMaterialShortageDuration(materialShortageDuration); // 计åç任塿¶é¿ç»è®¡(åé) mdcOverallEquipmentEfficiency.setPlannedTaskDuration(plannedTaskDuration); // æ£éªæ¶é¿ç»è®¡(åé) mdcOverallEquipmentEfficiency.setInspectDuration(inspectDuration); // å ¶ä»æ¶é¿ç»è®¡(åé) mdcOverallEquipmentEfficiency.setOtherDuration(otherDuration); // 计åä¿å »æ¶é¿ç»è®¡(åé) mdcOverallEquipmentEfficiency.setPlannedMaintenanceDuration(plannedMaintenanceDuration); // ä¼è®®/å¹è®æ¶é¿ç»è®¡(åé) mdcOverallEquipmentEfficiency.setConferenceTrainingDuration(conferenceTrainingDuration); // å ¶å®ä¼æ¯æ¶é¿ç»è®¡(åé) mdcOverallEquipmentEfficiency.setOtherRestDuration(otherRestDuration); /* è´è·æ¶é´(å°æ¶) = 工使¥åæ¶é´ - 计ååæºæ¶é´ 工使¥åæ¶é´ = æ¥åæ¶é´ - æ³å®åæ¥ - å伿¥ + å çæ¶é´ è®¡ååæºæ¶é´ = 计åä¿å »æ¶é¿ + ä¼è®®/å¹è®æ¶é¿ + ä¼è®®/å¹è®æ¶é¿ */ // mdcOverallEquipmentEfficiency.getShiftTimeCount() - plannedMaintenanceDuration - conferenceTrainingDuration - otherRestDuration // è´è·æ¶é´(åé) BigDecimal loadTime = mdcOverallEquipmentEfficiency.getShiftTimeCount().subtract(plannedMaintenanceDuration).subtract(conferenceTrainingDuration).subtract(otherRestDuration); mdcOverallEquipmentEfficiency.setLoadTime(loadTime.divide(new BigDecimal("60"), 1, RoundingMode.HALF_UP)); // æ¶é´å¼å¨ç BigDecimal timeActuationRate = BigDecimal.ZERO; if (loadTime.compareTo(BigDecimal.ZERO) == 0) { mdcOverallEquipmentEfficiency.setTimeActuationRate(BigDecimal.ZERO); } else { timeActuationRate = (loadTime.subtract(breakdownDownDuration).subtract(conversionDebugDuration).subtract(materialShortageDuration).subtract(plannedTaskDuration).subtract(inspectDuration).subtract(otherDuration)).divide(loadTime, 4, RoundingMode.HALF_UP); mdcOverallEquipmentEfficiency.setTimeActuationRate(timeActuationRate); } // å å·¥é¶ä»¶æ°(ä»¶) processQuantity BigDecimal processQuantity = mdcPassRateService.findProcessQuantity(equipmentId, validDate); mdcOverallEquipmentEfficiency.setProcessQuantity(processQuantity); // æ åå å·¥æ¶é´(åé) MdcStandardProcessDuration mdcStandardProcessDuration = mdcStandardProcessDurationService.getOne(new LambdaQueryWrapper<MdcStandardProcessDuration>().eq(MdcStandardProcessDuration::getEquipmentId, equipmentId)); if (mdcStandardProcessDuration != null) { mdcOverallEquipmentEfficiency.setStandardProcessDuration(new BigDecimal(mdcStandardProcessDuration.getDuration()).multiply(processQuantity)); } else { mdcOverallEquipmentEfficiency.setStandardProcessDuration(BigDecimal.ZERO); } // æ§è½å¼å¨ç = 主轴è¿è¡æ¶é´/è´è·æ¶é´ // æ¥è¯¢ä¸»è½´è¿è¡æ¶é´(åé) BigDecimal spindleRunDuration = mdcEquipmentStatisticalShiftInfoService.findSpindleRunDuration(equipmentId, validDate, shiftSubId); if (spindleRunDuration.compareTo(BigDecimal.ZERO) != 0) { mdcOverallEquipmentEfficiency.setPerformanceRate(spindleRunDuration.divide(loadTime, 4, RoundingMode.HALF_UP)); } else { mdcOverallEquipmentEfficiency.setPerformanceRate(BigDecimal.ZERO); } // åºåæ° unqualifiedQuantity BigDecimal unqualifiedQuantity = mdcPassRateService.findUnqualifiedQuantity(equipmentId, validDate); mdcOverallEquipmentEfficiency.setUnqualifiedQuantity(unqualifiedQuantity); // åæ ¼ç if (processQuantity.compareTo(BigDecimal.ZERO) == 0) { mdcOverallEquipmentEfficiency.setPassRate(BigDecimal.ONE); } else { mdcOverallEquipmentEfficiency.setPassRate((processQuantity.subtract(unqualifiedQuantity)).divide(processQuantity, 4, RoundingMode.HALF_UP)); } // 设å¤ç»¼åæç = æ¶é´å¼å¨ç à æ§è½å¼å¨ç Ã åæ ¼åç mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(timeActuationRate.multiply(mdcOverallEquipmentEfficiency.getPerformanceRate()).multiply(mdcOverallEquipmentEfficiency.getPassRate())); if (mdcOverallEquipmentEfficiency.getOverallEquipmentEfficiency().compareTo(BigDecimal.ZERO) == 0) { mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(BigDecimal.ONE); } result.add(mdcOverallEquipmentEfficiency); } } } super.saveBatch(result); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcPassRateServiceImpl.java
@@ -10,10 +10,10 @@ import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.entity.MdcEquipment; import org.jeecg.modules.mdc.entity.MdcPassRate; import org.jeecg.modules.mdc.entity.MdcStandardProcessDuration; import org.jeecg.modules.mdc.mapper.MdcPassRateMapper; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.mdc.service.IMdcPassRateService; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; @@ -24,6 +24,8 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -193,4 +195,22 @@ mv.addObject(NormalExcelConstants.DATA_LIST, mdcPassRates); return mv; } @Override public BigDecimal findProcessQuantity(String equipmentId, String validDate) { String startTime = DateUtils.format(DateUtils.toDate(validDate + "-01 00:00:00", DateUtils.STR_DATE_TIME_SMALL), DateUtils.STR_DATE_TIME_SMALL); LocalDate localDate = LocalDate.of(Integer.parseInt(validDate.split("-")[0]), Integer.parseInt(validDate.split("-")[1]), Integer.parseInt("01")).plusMonths(1); String endTime = DateUtils.format(DateUtils.toDate(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL), DateUtils.STR_DATE_TIME_SMALL); Integer result = this.baseMapper.findProcessQuantity(equipmentId, startTime, endTime); return result == null ? new BigDecimal("0") : new BigDecimal(result); } @Override public BigDecimal findUnqualifiedQuantity(String equipmentId, String validDate) { String startTime = DateUtils.format(DateUtils.toDate(validDate + "-01 00:00:00", DateUtils.STR_DATE_TIME_SMALL), DateUtils.STR_DATE_TIME_SMALL); LocalDate localDate = LocalDate.of(Integer.parseInt(validDate.split("-")[0]), Integer.parseInt(validDate.split("-")[1]), Integer.parseInt("01")).plusMonths(1); String endTime = DateUtils.format(DateUtils.toDate(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL), DateUtils.STR_DATE_TIME_SMALL); Integer result = this.baseMapper.findUnqualifiedQuantity(equipmentId, startTime, endTime); return result == null ? new BigDecimal("0") : new BigDecimal(result); } } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepart.java
@@ -89,9 +89,11 @@ private Date updateTime; /**使ç¨é¨é¨ç¼ç */ @TableField(exist = false) private String useDepartNum; /**ç»´ä¿®é¨é¨ç¼ç */ @TableField(exist = false) private String repairDepartNum; //update-begin---author:wangshuai ---date:20200308 forï¼[JTC-119]å¨é¨é¨ç®¡çèåä¸è®¾ç½®é¨é¨è´è´£äººï¼æ°å¢å段è´è´£äººidsåæ§çè´è´£äººids