qushaowei
2023-11-07 094a9290c836827bc1f45fd3549e7cd2ea1e1e45
Merge branch 'master' of http://117.34.109.166:18448/r/mdc_430 into develop
已添加17个文件
已修改25个文件
1308 ■■■■■ 文件已修改
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentOvertimeController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/EquipmentRunningTrace.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/EquipmentStatisticalInfo.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcOverallEquipmentEfficiency.java 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcProcessQuantity.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOverallEquipmentEfficiencyJob.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentRunningTraceMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentStatisticalInfoMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDeviceCalendarMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentOvertimeMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcNoplanCloseMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOverallEquipmentEfficiencyMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcPassRateMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentRunningTraceMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentStatisticalInfoMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDeviceCalendarMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOvertimeMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcNoplanCloseMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOverallEquipmentEfficiencyMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcPassRateMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentRunningTraceService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentStatisticalInfoService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOvertimeService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcNoplanCloseService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOverallEquipmentEfficiencyService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcPassRateService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentRunningTraceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentStatisticalInfoServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOvertimeServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcNoplanCloseServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcPassRateServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepart.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
@@ -119,9 +123,35 @@
        //获取当前登录用户
        //update-begin---author:wangshuai ---date:20211227  for:[JTC-116]导出人写死了------------
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("加班管理列表数据", "导出人:"+user.getRealname(), "加班管理"));
        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("加班管理列表数据", "导出人:" + user.getRealname(), "加班管理"));
        //update-end---author:wangshuai ---date:20211227  for:[JTC-116]导出人写死了------------
        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,10 +491,53 @@
                //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);
    }
    /**
     * èŽ·å–è®¾å¤‡è¿è¡Œè®°å½•æœ€æ—©çš„æ•°æ®
     */
    @Override
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,9 +67,30 @@
        }
        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.*;
@@ -71,6 +72,25 @@
        }
        if (!result.isEmpty()) {
            this.saveBatch(result);
        }
    }
    /**
     * æŸ¥è¯¢ä¸»è½´è¿è¡Œæ—¶é—´
     *
     * @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");
        }
    }
@@ -173,10 +193,10 @@
            MdcEquipmentStatisticalShiftInfo shiftInfo = mdcRateEquipment(equipmentid, dates.getStartDate(), dates.getEndDate());
            return shiftInfo;
        } else {
            if (repairList.size() == 1 ) {
            if (repairList.size() == 1) {
                long start = repairList.get(0).getStartTime().getTime();
                long end = repairList.get(0).getEndTime().getTime();
                if ( start > dates.getStart() && end < dates.getEnd() ) {
                if (start > dates.getStart() && end < dates.getEnd()) {
                    MdcDateVo d1 = new MdcDateVo();
                    d1.setStartTime(dates.getStartDate());
                    d1.setEndTime(repairList.get(0).getStartTime());
@@ -185,7 +205,7 @@
                    d2.setStartTime(repairList.get(0).getEndTime());
                    d2.setEndTime(dates.getEndDate());
                    dateList.add(d2);
                } else  if (start == dates.getStart() && end < dates.getEnd()){
                } else if (start == dates.getStart() && end < dates.getEnd()) {
                    MdcDateVo d2 = new MdcDateVo();
                    d2.setStartTime(repairList.get(0).getEndTime());
                    d2.setEndTime(dates.getEndDate());
@@ -208,11 +228,11 @@
                }
            } else {
                long s = dates.getStartDate().getTime();
                for (int i = 0 ; i < repairList.size(); i ++) {
                for (int i = 0; i < repairList.size(); i++) {
                    long start = repairList.get(i).getStartTime().getTime();
                    long end = repairList.get(i).getEndTime().getTime();
                    if (start > s ) {
                    if (start > s) {
                        MdcDateVo d = new MdcDateVo();
                        d.setStartTime(dates.getStartDate());
                        d.setEndTime(repairList.get(i).getStartTime());
@@ -223,8 +243,8 @@
                    } else if (start == s) {
                        dates.setStartDate(repairList.get(i).getEndTime());
                    }
                    if(i == repairList.size() -1 ) {
                        if(dates.getStartDate().getTime() >= end) {
                    if (i == repairList.size() - 1) {
                        if (dates.getStartDate().getTime() >= end) {
                            MdcDateVo d = new MdcDateVo();
                            d.setStartTime(repairList.get(i).getEndTime());
                            d.setEndTime(dates.getEndDate());
@@ -259,7 +279,7 @@
        if (runningSections == null || runningSections.isEmpty()) {
            runningSections = mdcEquipmentRunningSectionService.listRunningSectionFromLog(equipmentid, startDate.getTime(), endDate.getTime());
        }
        if(runningSections == null || runningSections.isEmpty()) {
        if (runningSections == null || runningSections.isEmpty()) {
            runningSections = new ArrayList<>();
        }
        List<MdcEquipmentRunningSection> sectionErrors = mdcEquipmentRunningSectionService.listEquipmentRunningSectionError(equipmentid, startDate.getTime(), endDate.getTime());
@@ -299,7 +319,7 @@
        /*故障时间  errs => å…³æœºæ•°æ® + æŠ¥è­¦æ•°æ® */
        BigDecimal faultLong = new BigDecimal("0");
        faultLong =  faultLongInfo(errs);
        faultLong = faultLongInfo(errs);
        //报警数据
        List<MdcEquipmentRunningSection> alarms = errs.stream().filter(section -> section.getStatus() == 22).collect(Collectors.toList());
@@ -381,75 +401,75 @@
            //TODO
            return null;
        }
        Long  startMdc =  mdcDate.getStartTime().getTime();
        Long  endMdc =  mdcDate.getEndTime().getTime();
        Long startMdc = mdcDate.getStartTime().getTime();
        Long endMdc = mdcDate.getEndTime().getTime();
        if (sRun != null && !sRun.isEmpty()) {
            for (int i = 0 ; i < sRun.size() ; i ++) {
            for (int i = 0; i < sRun.size(); i++) {
                Long start = sRun.get(i).getStartTime().getTime();
                Long end =  sRun.get(i).getEndTime().getTime();
                if (startMdc <= start ) {
                    sRun.get(i).setStartTime( sRun.get(i).getStartTime());
                Long end = sRun.get(i).getEndTime().getTime();
                if (startMdc <= start) {
                    sRun.get(i).setStartTime(sRun.get(i).getStartTime());
                } else {
                    sRun.get(i).setStartTime(mdcDate.getStartTime());
                }
                if (endMdc >= end) {
                    sRun.get(i).setEndTime( sRun.get(i).getEndTime());
                    sRun.get(i).setEndTime(sRun.get(i).getEndTime());
                } else {
                    sRun.get(i).setEndTime(mdcDate.getEndTime());
                }
                Long sen = DateUtils.differentSecond( sRun.get(i).getStartTime(),
                Long sen = DateUtils.differentSecond(sRun.get(i).getStartTime(),
                        sRun.get(i).getEndTime());
                if (sen <= 0) {
                    sRun.remove(i);
                    i--;
                } else {
                    sRun.get(i).setDuration(sen);
                    sRun.get(i).setStartLong( sRun.get(i).getStartTime().getTime());
                    sRun.get(i).setEndLong( sRun.get(i).getEndTime().getTime());
                    sRun.get(i).setStartLong(sRun.get(i).getStartTime().getTime());
                    sRun.get(i).setEndLong(sRun.get(i).getEndTime().getTime());
                }
            }
        }
        //部分数据是维修  1、运行状态下报警情况
        List<MdcEquipmentRunningSection> faultRun = new ArrayList<>();
        //制度时间段内报警数据
        if (errors != null && !errors.isEmpty() ) {
            for (int i = 0 ; i < errors.size() ; i ++) {
        if (errors != null && !errors.isEmpty()) {
            for (int i = 0; i < errors.size(); i++) {
                Long start = errors.get(i).getStartTime().getTime();
                Long end =  errors.get(i).getEndTime().getTime();
                if (startMdc <= start ) {
                    errors.get(i).setStartTime( errors.get(i).getStartTime());
                Long end = errors.get(i).getEndTime().getTime();
                if (startMdc <= start) {
                    errors.get(i).setStartTime(errors.get(i).getStartTime());
                } else {
                    errors.get(i).setStartTime(mdcDate.getStartTime());
                }
                if (endMdc >= end) {
                    errors.get(i).setEndTime( errors.get(i).getEndTime());
                    errors.get(i).setEndTime(errors.get(i).getEndTime());
                } else {
                    errors.get(i).setEndTime(mdcDate.getEndTime());
                }
                Long sen = DateUtils.differentSecond( errors.get(i).getStartTime(),
                Long sen = DateUtils.differentSecond(errors.get(i).getStartTime(),
                        errors.get(i).getEndTime());
                if (sen <= 0) {
                    errors.remove(i);
                    i--;
                } else {
                    errors.get(i).setDuration(sen);
                    errors.get(i).setStartLong( errors.get(i).getStartTime().getTime());
                    errors.get(i).setEndLong( errors.get(i).getEndTime().getTime());
                    errors.get(i).setStartLong(errors.get(i).getStartTime().getTime());
                    errors.get(i).setEndLong(errors.get(i).getEndTime().getTime());
                }
            }
            //把运行中存在的报警剔除掉
            for (MdcEquipmentRunningSection se : sRun) {
                long runStart = se.getStartTime().getTime();
                long runEnd =  se.getEndTime().getTime();
                long runEnd = se.getEndTime().getTime();
                if (se.getStatus() == 3) {
                    if (errors != null && !errors.isEmpty() ) {
                    if (errors != null && !errors.isEmpty()) {
                        //处理报警数据
                        for (int i = 0 ; i < errors.size(); i ++ ) {
                        for (int i = 0; i < errors.size(); i++) {
                            long errStart = errors.get(i).getStartTime().getTime();
                            long errEnd = errors.get(i).getEndTime().getTime();
                            // æŠ¥è­¦å¼€å§‹ å°äºŽ è¿è¡Œå¼€å§‹  æŠ¥è­¦ç»“束 å°äºŽè¿è¡Œç»“束 æŠ¥è­¦ç»“束 å¤§äºŽ è¿è¡Œå¼€å§‹
                            if ( errStart  < runStart && errEnd <= runEnd && errEnd >  runStart ) {
                            if (errStart < runStart && errEnd <= runEnd && errEnd > runStart) {
                                errors.get(i).setEndTime(se.getStartTime());
                                Long sen = DateUtils.differentSecond(errors.get(i).getStartTime(),
                                        errors.get(i).getEndTime());
@@ -458,7 +478,7 @@
                                errors.get(i).setEndLong(errors.get(i).getEndTime().getTime());
                            }
                            // æŠ¥è­¦å¼€å§‹ å¤§äºŽ è¿è¡Œå¼€å§‹ ï¼Œ æŠ¥è­¦å¼€å§‹ å°äºŽ è¿è¡Œç»“束 ï¼ŒæŠ¥è­¦ç»“束 å¤§äºŽ è¿è¡Œç»“束
                            else if (errStart >=  runStart && errStart < runEnd &&  errEnd > runEnd ) {
                            else if (errStart >= runStart && errStart < runEnd && errEnd > runEnd) {
                                errors.get(i).setStartTime(se.getEndTime());
                                Long sen = DateUtils.differentSecond(errors.get(i).getStartTime(),
                                        errors.get(i).getEndTime());
@@ -468,13 +488,13 @@
                            }
                            // æŠ¥è­¦å¼€å§‹ å¤§äºŽ è¿è¡Œå¼€å§‹ ï¼Œ æŠ¥è­¦å¼€å§‹ å°äºŽ è¿è¡Œç»“束 ï¼ŒæŠ¥è­¦ç»“束 å¤§äºŽ è¿è¡Œå¼€å§‹ï¼ŒæŠ¥è­¦ç»“束 å°äºŽ  è¿è¡Œç»“束
                            else if (errStart >= runStart && errStart < runEnd &&
                                    errEnd > runStart && errEnd <= runEnd ){
                                    errEnd > runStart && errEnd <= runEnd) {
                                errors.remove(i);
                                i--;
                            }
                            //如果超出范围
                            else if (errStart <= runStart && errStart < runEnd &&
                                    errEnd > runStart && errEnd >= runEnd ) {
                                    errEnd > runStart && errEnd >= runEnd) {
                                MdcEquipmentRunningSection errOne = new MdcEquipmentRunningSection();
                                errOne.setEndTime(errors.get(i).getEndTime());
@@ -498,9 +518,9 @@
                                errOne.setEndLong(errOne.getEndTime().getTime());
                                if (sen <= 0) {
                                    errors.remove(i);
                                    errors.add(i,errOne);
                                    errors.add(i, errOne);
                                } else {
                                    errors.add(i+1,errOne);
                                    errors.add(i + 1, errOne);
                                    i++;
                                }
                            } else {
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;
@@ -312,9 +314,35 @@
        //获取当前登录用户
        //update-begin---author:wangshuai ---date:20211227  for:[JTC-116]导出人写死了------------
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("非计划停机维护列表数据", "导出人:"+user.getRealname(), "非计划停机维护"));
        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("非计划停机维护列表数据", "导出人:" + user.getRealname(), "非计划停机维护"));
        //update-end---author:wangshuai ---date:20211227  for:[JTC-116]导出人写死了------------
        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