From 40c22341b74d5bec60cbec08e338d8c8b22fcc92 Mon Sep 17 00:00:00 2001 From: lius <Lius2225@163.com> Date: 星期四, 27 七月 2023 17:28:23 +0800 Subject: [PATCH] 班次利用率 --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java | 10 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRepairMapper.xml | 22 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRepairMapper.java | 4 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDateVo.java | 17 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java | 10 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyShiftListDto.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyShiftResultDto.java | 49 +++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRepairService.java | 11 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java | 10 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java | 478 +++++++++++++++++++++++++---- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalShiftInfo.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRepairServiceImpl.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 244 +++++++++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml | 28 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java | 10 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml | 43 ++ 16 files changed, 880 insertions(+), 68 deletions(-) diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyShiftListDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyShiftListDto.java index 200180d..105506d 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyShiftListDto.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyShiftListDto.java @@ -36,5 +36,5 @@ /** * 鍒╃敤鐜囨暟鎹� */ - private List<MdcEfficiencyResultDto> dataList; + private List<MdcEfficiencyShiftResultDto> dataList; } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyShiftResultDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyShiftResultDto.java new file mode 100644 index 0000000..aa92a72 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyShiftResultDto.java @@ -0,0 +1,49 @@ +package org.jeecg.modules.mdc.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author: LiuS + * @create: 2023-07-26 16:04 + */ +@Data +public class MdcEfficiencyShiftResultDto { + /** + * 鏈夋晥鏃ユ湡 + */ + private String theDate; + /** + * 鍔犲伐鏃堕暱 + */ + private BigDecimal processLong; + /** + * 鍒╃敤鐜� + */ + private BigDecimal utilizationRate; + /** + * 寮�鍔ㄧ巼 + */ + private BigDecimal startRate; + /** + * 寮�鏈虹巼 + */ + private BigDecimal openRate; + /** + * 寮�鏈烘椂闀� + */ + private BigDecimal openLong; + /** + * 寰呮満鏃堕暱 + */ + private BigDecimal waitLong; + /** + * 鍏虫満鏃堕暱 + */ + private BigDecimal closeLong; + /** + * 棰滆壊 + */ + private String color; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalShiftInfo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalShiftInfo.java index 1ffc1f7..3feb581 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalShiftInfo.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalShiftInfo.java @@ -76,6 +76,11 @@ @ApiModelProperty(value = "鎶ヨ鏃堕暱") private BigDecimal errorLong = new BigDecimal("0"); /** + * 鏈夋晥鎬绘椂闀� + */ + @ApiModelProperty(value = "鏈夋晥鎬绘椂闀�") + private BigDecimal totalLong = new BigDecimal("0"); + /** * 鏈夋晥鏃ユ湡 */ @ApiModelProperty(value = "鏈夋晥鏃ユ湡") diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java index 7462e8e..f041ad2 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java @@ -2,7 +2,9 @@ import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.dto.MdcEfficiencyDto; +import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo; import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo; +import org.jeecg.modules.mdc.vo.MdcEfficiencyReportShiftQueryVo; import java.util.List; @@ -27,4 +29,12 @@ * @return */ List<MdcEfficiencyDto> efficiencyPOList(@Param("vo") MdcEfficiencyReportQueryVo vo); + + /** + * 寰楀埌鎵�鏈夌彮娆℃暟鎹箣鍜� + * + * @param vo + * @return + */ + List<MdcEquipmentStatisticalShiftInfo> efficiencyShiftSumList(@Param("vo") MdcEfficiencyReportShiftQueryVo vo); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRepairMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRepairMapper.java index c02fd62..d99633e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRepairMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRepairMapper.java @@ -5,6 +5,9 @@ import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.entity.MdcEquipmentRepair; +import java.util.Date; +import java.util.List; + /** * @Description: 璁惧缁翠慨浼戠彮 @@ -21,4 +24,5 @@ */ IPage<MdcEquipmentRepair> pageList(IPage<MdcEquipmentRepair> pageData, @Param("repair") MdcEquipmentRepair repair); + List<MdcEquipmentRepair> selectByIdAndTime(@Param("equipmentId") String equipmentid, @Param("startDate") Date startDate, @Param("endDate") Date endDate); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java index 2a3a7c6..8ef1f7c 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java @@ -39,4 +39,14 @@ * 璁$畻涓�娈垫椂闂村唴鐨勬暟鎹� */ List<MdcEquipmentRunningSection> listEquipmentRunningSection(@Param("equipmentId") String equipmentid, @Param("startLong") long start, @Param("endLong") long end); + + /** + * 璁$畻涓�娈垫椂闂村唴鐨勮繍琛屾暟鎹� + */ + List<MdcEquipmentRunningSection> listEquipmentRunningSectionRun(@Param("equipmentId") String equipmentid, @Param("startLong") long start, @Param("endLong") long end); + + /** + * 璁$畻涓�娈垫椂闂村唴鐨勬晠闅滄暟鎹� + */ + List<MdcEquipmentRunningSection> listEquipmentRunningSectionError(@Param("equipmentId") String equipmentid, @Param("startLong") long start, @Param("endLong") long end); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml index d5d3516..e85db73 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml @@ -68,4 +68,47 @@ </if> ORDER BY t1.the_date </select> + + <!--寰楀埌鎵�鏈夌彮娆℃暟鎹箣鍜�--> + <select id="efficiencyShiftSumList" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo"> + SELECT + t2.equipment_id equipmentId, + t2.equipment_name equipmentName, + t2.equipment_type equipmentType, + t1.the_date theDate, + t1.shift_id shiftId, + t1.shift_sub_id shiftSubId, + SUM ( t1.process_long ) processLong, + SUM ( t1.open_long ) openLong, + SUM ( t1.wait_long ) waitLong, + SUM ( t1.close_long ) closeLong + FROM + mdc_equipment t2 + LEFT JOIN mdc_equipment_statistical_shift_info t1 ON t1.equipment_id = t2.equipment_id + <where> + AND t1.the_date <= #{ endTime } + AND t1.the_date >= #{ startTime } + <if test="vo.equipmentIdList != null and vo.equipmentIdList.size() > 0 "> + AND t2.equipment_id IN + <foreach collection="vo.equipmentIdList" item="id" index="index" open="(" close=")" separator=","> + #{ id } + </foreach> + </if> + <if test="vo.shiftId != null and vo.shiftId != ''"> + AND t1.shift_id = #{ vo.shiftId } + </if> + <if test="vo.shiftSubId != null and vo.shiftSubId != ''"> + AND t1.shift_sub_id = #{ vo.shiftSubId } + </if> + </where> + GROUP BY + t2.equipment_id, + t2.equipment_name, + t2.equipment_type, + t1.the_date, + t1.shift_id, + t1.shift_sub_id + ORDER BY + t1.the_date + </select> </mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRepairMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRepairMapper.xml index 9159e09..553523b 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRepairMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRepairMapper.xml @@ -31,4 +31,26 @@ ORDER BY START_TIME ASC </select> + <!--鏌ヨ鏌愭鏃堕棿鍐呮槸鍚︽湁缁翠慨浼戠彮鏁版嵁--> + <select id="selectByIdAndTime" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentRepair"> + SELECT + * + FROM + mdc_equipment_repair + <where> + <if test="equipmentId != null and equipmentId!= ''"> + AND equipment_id = #{ equipmentId } + </if> + <if test="startTime != null and endTime!= null"> + AND ( + ( START_TIME <![CDATA[ >= ]]> #{ startTime } AND START_TIME <![CDATA[ <= ]]> #{ endTime } ) + OR ( START_TIME <![CDATA[ <= ]]> #{ startTime } AND END_TIME <![CDATA[ >= ]]> #{ endTime }) + OR ( END_TIME <![CDATA[ >= ]]> #{ startTime } AND END_TIME <![CDATA[ <= ]]> #{ endTime } ) + OR ( START_TIME <![CDATA[ <= ]]> #{ startTime } AND END_TIME <![CDATA[ >= ]]> #{ endTime } ) + ) + </if> + </where> + ORDER BY start_time ASC + </select> + </mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml index a9566ea..7d4294e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml @@ -43,5 +43,33 @@ start_time </select> + <!--璁$畻涓�娈垫椂闂村唴鐨勮繍琛屾暟鎹�--> + <select id="listEquipmentRunningSectionRun" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection"> + SELECT + * + FROM + mdc_equipment_running_section + WHERE + equipment_id = #{ equipmentId } + AND status <![CDATA[ <> ]]> '22' + AND (start_long <= #{ endLong } AND end_long >= #{ startLong }) + ORDER BY + start_time + </select> + + <!--璁$畻涓�娈垫椂闂村唴鐨勬晠闅滄暟鎹�--> + <select id="listEquipmentRunningSectionError" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection"> + SELECT + * + FROM + mdc_equipment_running_section + WHERE + equipment_id = #{ equipmentId } + AND status = '22' + AND (start_long <= #{ endLong } AND end_long >= #{ startLong }) + ORDER BY + start_time + </select> + </mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRepairService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRepairService.java index 7c8d353..ca3464c 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRepairService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRepairService.java @@ -28,6 +28,7 @@ /** * 鍒嗛〉鏌ヨ + * * @param userId * @param page * @param repair @@ -43,4 +44,14 @@ * @return */ boolean updateMdcRepair(MdcEquipmentRepair repair); + + /** + * 鏌ヨ鏌愭鏃堕棿鍐呮槸鍚︽湁缁翠慨浼戠彮鏁版嵁 + * + * @param equipmentid + * @param startDate + * @param endDate + * @return + */ + List<MdcEquipmentRepair> mdcRepairListDate(String equipmentid, Date startDate, Date endDate); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java index 35e2297..1174bb4 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java @@ -51,4 +51,14 @@ * 鏌ヨ鏌愪釜璁惧涓�娈垫椂闂村唴鐨勬暟鎹� */ List<MdcEquipmentRunningSection> listRunningSectionFromLog(String equipmentid, long start, long end); + + /** + * 鏌ヨ鎽镐釜璁惧涓�娈垫椂闂村唴鐨勮繍琛屾暟鎹� + */ + List<MdcEquipmentRunningSection> listEquipmentRunningSectionRun(String equipmentid, long start, long end); + + /** + * 鏌ヨ鎽镐釜璁惧涓�娈垫椂闂村唴鐨勬晠闅滄暟鎹� + */ + List<MdcEquipmentRunningSection> listEquipmentRunningSectionError(String equipmentid, long start, long end); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java index f7c0b2d..2fca558 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java @@ -6,9 +6,12 @@ import org.jeecg.common.exception.JeecgBootException; import org.jeecg.modules.mdc.dto.*; import org.jeecg.modules.mdc.entity.MdcEquipment; +import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo; +import org.jeecg.modules.mdc.entity.MdcShiftSub; import org.jeecg.modules.mdc.entity.MdcUtilizationRate; import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper; import org.jeecg.modules.mdc.service.IMdcEquipmentService; +import org.jeecg.modules.mdc.service.IMdcShiftSubService; import org.jeecg.modules.mdc.service.IMdcUtilizationRateService; import org.jeecg.modules.mdc.service.MdcEfficiencyReportService; import org.jeecg.modules.mdc.util.DateUtils; @@ -22,6 +25,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; /** * @author: LiuS @@ -44,6 +48,9 @@ @Resource private IMdcProductionService mdcProductionService; + + @Resource + private IMdcShiftSubService mdcShiftSubService; /** * 鍒╃敤鐜囨姤琛� @@ -449,10 +456,244 @@ result.setMdcEfficiencyList(listDtos); } else { // 鐝鍒╃敤鐜囩瓑绾� - List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl"); + List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl"); + // 鐝鍒╃敤鐜囨暟鎹� + List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList = mdcEfficiencyReportMapper.efficiencyShiftSumList(vo); + // 灏佽缁撴灉 + if ("2".equals(vo.getTypeTree())) { + // 閮ㄩ棬灞傜骇 + List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList()); + // 鏌ヨ鎵�鏈夐儴闂ㄤ俊鎭� + List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString())); + // 鐝鍚嶇О鏄剧ず澶勭悊 + String shiftSubName = ""; + if (StringUtils.isBlank(vo.getShiftId())) { + // 鍚堝苟璁惧姣忓ぉ鎵�鏈夌彮娆$殑鏁版嵁 + shiftSubName = "鍏ㄩ儴"; + } else { + List<MdcShiftSub> mdcShiftSubList = new ArrayList<>(); + if (StringUtils.isBlank(vo.getShiftSubId())) { + // 鎷兼帴鎵�閫夌彮鍒朵笅鐨勬墍鏈夌彮娆″悕绉� + mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getShiftId, vo.getShiftId()).eq(MdcShiftSub::getShiftSubStatus, "1")); + mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId())).collect(Collectors.toList()); + } else { + // 璁剧疆褰撳墠閫夋嫨鐨勭彮娆″悕绉� + mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getId, vo.getShiftSubId()).eq(MdcShiftSub::getShiftSubStatus, "1")); + mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId()) && mdcEquipmentShiftRateVo.getShiftSubId().equals(vo.getShiftSubId())).collect(Collectors.toList()); + } + List<String> shiftSubNames = mdcShiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList()); + shiftSubName = String.join(",", shiftSubNames); + } + // 鍚堝苟鍚屼竴澶╁鐝鏁版嵁 + mdcEquipmentStatisticalShiftInfoList = this.handleEfficiencyShiftList(mdcEquipmentStatisticalShiftInfoList); + for (MdcEquDepDto mdcEquDepDto : equipmentList) { + MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto = new MdcEfficiencyShiftListDto(); + mdcEfficiencyShiftListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); + mdcEfficiencyShiftListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); + mdcEfficiencyShiftListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); + mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName); + switch (mdcEquDepDto.getOrgType()) { + case "1": + mdcEfficiencyShiftListDto.setLevel1(mdcEquDepDto.getDepartName()); + break; + case "2": + mdcEfficiencyShiftListDto.setLevel2(mdcEquDepDto.getDepartName()); + break; + case "3": + mdcEfficiencyShiftListDto.setLevel3(mdcEquDepDto.getDepartName()); + break; + default: + } + + SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null); + if (sysDepart != null) { + switch (sysDepart.getOrgType()) { + case "1": + mdcEfficiencyShiftListDto.setLevel1(sysDepart.getDepartName()); + break; + case "2": + mdcEfficiencyShiftListDto.setLevel2(sysDepart.getDepartName()); + break; + case "3": + mdcEfficiencyShiftListDto.setLevel3(sysDepart.getDepartName()); + break; + default: + } + if (StringUtils.isNotEmpty(sysDepart.getParentId())) { + departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> { + switch (depart1.getOrgType()) { + case "1": + mdcEfficiencyShiftListDto.setLevel1(depart1.getDepartName()); + break; + case "2": + mdcEfficiencyShiftListDto.setLevel2(depart1.getDepartName()); + break; + case "3": + mdcEfficiencyShiftListDto.setLevel3(depart1.getDepartName()); + break; + default: + } + }); + } + } + List<MdcEfficiencyShiftResultDto> list = new ArrayList<>(); + for (String date : dates) { + list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList)); + } + mdcEfficiencyShiftListDto.setDataList(list); + listDtos.add(mdcEfficiencyShiftListDto); + } + } else { + // 浜х嚎灞傜骇 + List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); + // 鏌ヨ鎵�鏈変骇绾夸俊鎭� + List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString())); + + // 鐝鍚嶇О鏄剧ず澶勭悊 + String shiftSubName = ""; + if (StringUtils.isBlank(vo.getShiftId())) { + // 鍚堝苟璁惧姣忓ぉ鎵�鏈夌彮娆$殑鏁版嵁 + shiftSubName = "鍏ㄩ儴"; + } else { + List<MdcShiftSub> mdcShiftSubList = new ArrayList<>(); + if (StringUtils.isBlank(vo.getShiftSubId())) { + // 鎷兼帴鎵�閫夌彮鍒朵笅鐨勬墍鏈夌彮娆″悕绉� + mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getShiftId, vo.getShiftId()).eq(MdcShiftSub::getShiftSubStatus, "1")); + mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId())).collect(Collectors.toList()); + } else { + // 璁剧疆褰撳墠閫夋嫨鐨勭彮娆″悕绉� + mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getId, vo.getShiftSubId()).eq(MdcShiftSub::getShiftSubStatus, "1")); + mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId()) && mdcEquipmentShiftRateVo.getShiftSubId().equals(vo.getShiftSubId())).collect(Collectors.toList()); + } + List<String> shiftSubNames = mdcShiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList()); + shiftSubName = String.join(",", shiftSubNames); + } + // 鍚堝苟鍚屼竴澶╁鐝鏁版嵁 + mdcEquipmentStatisticalShiftInfoList = this.handleEfficiencyShiftList(mdcEquipmentStatisticalShiftInfoList); + for (MdcEquProDto mdcEquProDto : equipmentList) { + MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto = new MdcEfficiencyShiftListDto(); + mdcEfficiencyShiftListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); + mdcEfficiencyShiftListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); + mdcEfficiencyShiftListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); + mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName); + switch (mdcEquProDto.getOrgType()) { + case "1": + mdcEfficiencyShiftListDto.setLevel1(mdcEquProDto.getProductionName()); + break; + case "2": + mdcEfficiencyShiftListDto.setLevel2(mdcEquProDto.getProductionName()); + break; + case "3": + mdcEfficiencyShiftListDto.setLevel3(mdcEquProDto.getProductionName()); + break; + default: + } + MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null); + if (mdcProduction != null) { + switch (mdcProduction.getOrgType()) { + case "1": + mdcEfficiencyShiftListDto.setLevel1(mdcProduction.getProductionName()); + break; + case "2": + mdcEfficiencyShiftListDto.setLevel2(mdcProduction.getProductionName()); + break; + case "3": + mdcEfficiencyShiftListDto.setLevel3(mdcProduction.getProductionName()); + break; + default: + } + if (StringUtils.isNotEmpty(mdcProduction.getParentId())) { + productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> { + switch (production1.getOrgType()) { + case "1": + mdcEfficiencyShiftListDto.setLevel1(production1.getProductionName()); + break; + case "2": + mdcEfficiencyShiftListDto.setLevel2(production1.getProductionName()); + break; + case "3": + mdcEfficiencyShiftListDto.setLevel3(production1.getProductionName()); + break; + default: + } + }); + } + } + List<MdcEfficiencyShiftResultDto> list = new ArrayList<>(); + for (String date : dates) { + list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList)); + } + mdcEfficiencyShiftListDto.setDataList(list); + listDtos.add(mdcEfficiencyShiftListDto); + } + } + result.setMdcEfficiencyList(listDtos); } + return result; + } + + private MdcEfficiencyShiftResultDto efficiencyShiftRate(List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) { + MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto(); + if (mdcEquipmentStatisticalShiftInfoList != null && !mdcEquipmentStatisticalShiftInfoList.isEmpty()) { + for (MdcEquipmentStatisticalShiftInfo equipmentStatisticalShiftInfo : mdcEquipmentStatisticalShiftInfoList) { + if (date.equals(equipmentStatisticalShiftInfo.getTheDate()) && equipmentStatisticalShiftInfo.getEquipmentId().equals(equipmentId)) { + mdcEfficiencyShiftResultDto.setTheDate(equipmentStatisticalShiftInfo.getTheDate()); + mdcEfficiencyShiftResultDto.setProcessLong(equipmentStatisticalShiftInfo.getProcessLong()); + mdcEfficiencyShiftResultDto.setUtilizationRate(equipmentStatisticalShiftInfo.getProcessLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP)); + mdcEfficiencyShiftResultDto.setCloseLong(equipmentStatisticalShiftInfo.getCloseLong()); + mdcEfficiencyShiftResultDto.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong()); + mdcEfficiencyShiftResultDto.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong()); + mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP)); + for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { + if (mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) { + mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); + } + } + } + } + } else { + mdcEfficiencyShiftResultDto.setTheDate(date); + mdcEfficiencyShiftResultDto.setProcessLong(new BigDecimal("0")); + mdcEfficiencyShiftResultDto.setUtilizationRate(new BigDecimal("0")); + mdcEfficiencyShiftResultDto.setStartRate(new BigDecimal("0")); + mdcEfficiencyShiftResultDto.setOpenRate(new BigDecimal("0")); + mdcEfficiencyShiftResultDto.setOpenLong(new BigDecimal("0")); + mdcEfficiencyShiftResultDto.setWaitLong(new BigDecimal("0")); + mdcEfficiencyShiftResultDto.setCloseLong(new BigDecimal("0")); + for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { + if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { + mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); + } + } + } + return mdcEfficiencyShiftResultDto; + } + + /** + * 鍚堝苟鍚屼竴澶╁悓鐝鏁版嵁 + * + * @param mdcEquipmentStatisticalShiftInfoList + * @return + */ + private List<MdcEquipmentStatisticalShiftInfo> handleEfficiencyShiftList(List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList) { + List<MdcEquipmentStatisticalShiftInfo> result = new ArrayList<>(); + Map<String, MdcEquipmentStatisticalShiftInfo> map = new HashMap<>(); + for (MdcEquipmentStatisticalShiftInfo equipmentStatisticalShiftInfo : mdcEquipmentStatisticalShiftInfoList) { + if (map.containsKey(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate())) { + MdcEquipmentStatisticalShiftInfo vo = map.get(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate()); + vo.setProcessLong(vo.getProcessLong().add(equipmentStatisticalShiftInfo.getProcessLong())); + vo.setOpenLong(vo.getOpenLong().add(equipmentStatisticalShiftInfo.getOpenLong())); + vo.setWaitLong(vo.getWaitLong().add(equipmentStatisticalShiftInfo.getWaitLong())); + vo.setCloseLong(vo.getCloseLong().add(equipmentStatisticalShiftInfo.getCloseLong())); + } else { + map.put(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate(), equipmentStatisticalShiftInfo); + } + } + for (String s : map.keySet()) { + result.add(map.get(s)); + } return result; } @@ -548,7 +789,6 @@ mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } - } } } else { diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRepairServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRepairServiceImpl.java index 5b083fe..3391b4a 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRepairServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRepairServiceImpl.java @@ -239,4 +239,9 @@ return result; } + @Override + public List<MdcEquipmentRepair> mdcRepairListDate(String equipmentid, Date startDate, Date endDate) { + return this.baseMapper.selectByIdAndTime(equipmentid, startDate, endDate); + } + } \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java index afefa7a..1d529cf 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java @@ -579,6 +579,16 @@ return running; } + @Override + public List<MdcEquipmentRunningSection> listEquipmentRunningSectionRun(String equipmentid, long start, long end) { + return this.baseMapper.listEquipmentRunningSectionRun(equipmentid, start, end); + } + + @Override + public List<MdcEquipmentRunningSection> listEquipmentRunningSectionError(String equipmentid, long start, long end) { + return this.baseMapper.listEquipmentRunningSectionError(equipmentid, start, end); + } + private Map<String, List<MdcEquipmentRunningSectionDto>> logCharts(MdcEquipmentRunningSectionVo equipmentRunningSectionVo, String date) { Map<String, List<MdcEquipmentRunningSectionDto>> map = new HashMap<>(); List<MdcEquipmentRunningSectionDto> normal = new ArrayList<>(); diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java index 9b9c7dc..cc27400 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java @@ -4,14 +4,13 @@ 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.MdcEquipmentRepair; import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection; import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo; import org.jeecg.modules.mdc.mapper.MdcEquipmentStatisticalShiftInfoMapper; -import org.jeecg.modules.mdc.service.IEquipmentService; -import org.jeecg.modules.mdc.service.IMdcDeviceCalendarService; -import org.jeecg.modules.mdc.service.IMdcEquipmentRunningSectionService; -import org.jeecg.modules.mdc.service.IMdcEquipmentStatisticalShiftInfoService; +import org.jeecg.modules.mdc.service.*; import org.jeecg.modules.mdc.util.DateUtils; +import org.jeecg.modules.mdc.vo.MdcDateVo; import org.jeecg.modules.mdc.vo.MdcDeviceCalendarVo; import org.jeecg.modules.mdc.vo.MdcShiftDateVo; import org.springframework.stereotype.Service; @@ -22,6 +21,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; /** * @Description: 璁惧鍗曟棩鐝杩愯鏁版嵁琛� @@ -39,6 +39,9 @@ @Resource private IMdcDeviceCalendarService mdcDeviceCalendarService; + + @Resource + private IMdcEquipmentRepairService mdcEquipmentRepairService; /** * 璁$畻璁惧鍗曟棩鐝杩愯鏁版嵁 @@ -141,6 +144,7 @@ equipmentStatisticalShiftInfo.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong().add(shiftInfo.getOpenLong())); equipmentStatisticalShiftInfo.setErrorLong(equipmentStatisticalShiftInfo.getErrorLong().add(shiftInfo.getErrorLong())); } + resultList.add(equipmentStatisticalShiftInfo); } } } @@ -158,79 +162,423 @@ if (dates == null || StringUtils.isBlank(equipmentid)) { return null; } - //涓嶈繃婊や紤鐝拰缁翠慨 - //鑾峰彇鐝鏃堕棿娈靛唴鏁版嵁 - List<MdcEquipmentRunningSection> sectionList = mdcEquipmentRunningSectionService.listEquipmentRunningSection(equipmentid, dates.getStart(), dates.getEnd()); - //鏌ヨ鏃犳暟鎹渶瑕丒quipmentLog瑙f瀽 - if (sectionList.isEmpty()) { - sectionList = mdcEquipmentRunningSectionService.listRunningSectionFromLog(equipmentid, dates.getStart(), dates.getEnd()); - } - if (sectionList == null || sectionList.isEmpty()) { - sectionList = new ArrayList<>(); - } - //澶勭悊鏁版嵁 - long datesStart = dates.getStart(); - long datesEnd = dates.getEnd(); - for (int i = 0; i < sectionList.size(); i++) { - MdcEquipmentRunningSection equipmentRunningSection = sectionList.get(i); - long start = equipmentRunningSection.getStartTime().getTime(); - long end = equipmentRunningSection.getEndTime().getTime(); - if (datesStart <= start) { - equipmentRunningSection.setStartTime(equipmentRunningSection.getStartTime()); + //鏌ヨ鏄惁闇�瑕佺淮淇殑璁惧 + List<MdcEquipmentRepair> repairs = mdcEquipmentRepairService.mdcRepairListDate(equipmentid, dates.getStartDate(), dates.getEndDate()); + //鍒跺害鏃堕棿娈靛唴鐨勪紤鐝拰缁翠慨鏃堕棿娈电瓫閫� + List<MdcEquipmentRepair> repairList = this.findSubRepairs(repairs, dates); + List<MdcDateVo> dateList = new ArrayList<>(); + if (repairList == null || repairList.isEmpty()) { + //鍒跺害鏃堕棿娈靛唴娌℃湁缁翠慨鍜屼紤鐝椂闂存 + MdcEquipmentStatisticalShiftInfo shiftInfo = mdcRateEquipment(equipmentid, dates.getStartDate(), dates.getEndDate()); + return shiftInfo; + } else { + 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() ) { + MdcDateVo d1 = new MdcDateVo(); + d1.setStartTime(dates.getStartDate()); + d1.setEndTime(repairList.get(0).getStartTime()); + dateList.add(d1); + MdcDateVo d2 = new MdcDateVo(); + d2.setStartTime(repairList.get(0).getEndTime()); + d2.setEndTime(dates.getEndDate()); + dateList.add(d2); + } else if (start == dates.getStart() && end < dates.getEnd()){ + MdcDateVo d2 = new MdcDateVo(); + d2.setStartTime(repairList.get(0).getEndTime()); + d2.setEndTime(dates.getEndDate()); + dateList.add(d2); + } else if (start > dates.getStart() && end == dates.getEnd()) { + MdcDateVo d1 = new MdcDateVo(); + d1.setStartTime(dates.getStartDate()); + d1.setEndTime(repairList.get(0).getStartTime()); + dateList.add(d1); + } else { + //浼戠彮 + MdcEquipmentStatisticalShiftInfo vo = new MdcEquipmentStatisticalShiftInfo(); + vo.setTotalLong(BigDecimal.ZERO); + vo.setErrorLong(BigDecimal.ZERO); + vo.setProcessLong(BigDecimal.ZERO); + vo.setWaitLong(BigDecimal.ZERO); + vo.setCloseLong(BigDecimal.ZERO); + vo.setOpenLong(BigDecimal.ZERO); + return vo; + } } else { - equipmentRunningSection.setStartTime(dates.getStartDate()); - } - if (datesEnd >= end) { - equipmentRunningSection.setEndTime(equipmentRunningSection.getEndTime()); - } else { - equipmentRunningSection.setEndTime(dates.getEndDate()); - } - Long sen = DateUtils.differentSecond(equipmentRunningSection.getStartTime(), equipmentRunningSection.getEndTime()); - if (sen <= 0) { - sectionList.remove(i); - i--; - } else { - equipmentRunningSection.setDuration(sen); - equipmentRunningSection.setStartLong(equipmentRunningSection.getStartTime().getTime()); - equipmentRunningSection.setEndLong(equipmentRunningSection.getEndTime().getTime()); + long s = dates.getStartDate().getTime(); + 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 ) { + MdcDateVo d = new MdcDateVo(); + d.setStartTime(dates.getStartDate()); + d.setEndTime(repairList.get(i).getStartTime()); + if (d.getEndTime().getTime() != d.getStartTime().getTime()) { + dateList.add(d); + } + dates.setStartDate(repairList.get(i).getEndTime()); + } else if (start == s) { + dates.setStartDate(repairList.get(i).getEndTime()); + } + if(i == repairList.size() -1 ) { + if(dates.getStartDate().getTime() >= end) { + MdcDateVo d = new MdcDateVo(); + d.setStartTime(repairList.get(i).getEndTime()); + d.setEndTime(dates.getEndDate()); + if (d.getEndTime().getTime() != d.getStartTime().getTime()) { + dateList.add(d); + } + } + } + } } } MdcEquipmentStatisticalShiftInfo shiftInfo = new MdcEquipmentStatisticalShiftInfo(); - shiftInfo.setEquipmentId(equipmentid); - shiftInfo.setShiftId(dates.getShiftId()); - shiftInfo.setShiftSubId(dates.getShiftSubId()); - shiftInfo.setTheDate(dates.getDay()); - long waitLong = 0L; - long processLong = 0L; - long closeLong = 0L; - long errorLong = 0L; - for (MdcEquipmentRunningSection equipmentRunningSection : sectionList) { - Long duration = equipmentRunningSection.getDuration(); - int status = equipmentRunningSection.getStatus(); - if (status == 2) { - waitLong += duration; + for (MdcDateVo date : dateList) { + MdcEquipmentStatisticalShiftInfo v = mdcRateEquipment(equipmentid, date.getStartTime(), date.getEndTime()); + shiftInfo.setTotalLong(v.getTotalLong().add(shiftInfo.getTotalLong())); + shiftInfo.setOpenLong(v.getOpenLong().add(shiftInfo.getOpenLong())); + shiftInfo.setCloseLong(v.getCloseLong().add(shiftInfo.getCloseLong())); + shiftInfo.setWaitLong(v.getWaitLong().add(shiftInfo.getWaitLong())); + shiftInfo.setProcessLong(v.getProcessLong().add(shiftInfo.getProcessLong())); + shiftInfo.setErrorLong(v.getErrorLong().add(shiftInfo.getErrorLong())); + } + return shiftInfo; + } + + private MdcEquipmentStatisticalShiftInfo mdcRateEquipment(String equipmentid, Date startDate, Date endDate) { + MdcDateVo date = new MdcDateVo(); + date.setStartTime(startDate); + date.setEndTime(endDate); + List<MdcEquipmentRunningSection> runningSections = new ArrayList<>(); + runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSectionRun(equipmentid, startDate.getTime(), endDate.getTime()); + //鏌ヨ濡傛灉鏃犳暟鎹渶瑕� EquipmentLog 瑙f瀽 + if (runningSections == null || runningSections.isEmpty()) { + runningSections = mdcEquipmentRunningSectionService.listRunningSectionFromLog(equipmentid, startDate.getTime(), endDate.getTime()); + } + if(runningSections == null || runningSections.isEmpty()) { + runningSections = new ArrayList<>(); + } + List<MdcEquipmentRunningSection> sectionErrors = mdcEquipmentRunningSectionService.listEquipmentRunningSectionError(equipmentid, startDate.getTime(), endDate.getTime()); + + // 鎺掗櫎鍩虹閰嶇疆鎶ヨ鍙凤紙鍩虹閰嶇疆鎶ヨ鍙风殑涓嶇畻鎶ヨ锛� + //sectionErrors = filterSectionErrors(equipmentId, sectionErrors); + MdcEquipmentStatisticalShiftInfo shiftInfo = new MdcEquipmentStatisticalShiftInfo(); + BigDecimal totalLongRairs = new BigDecimal("0"); + List<MdcEquipmentRunningSection> sectionList = findStatsEquipment(null, runningSections, date, sectionErrors); + if (sectionList == null || sectionList.isEmpty()) { + shiftInfo.setEquipmentId(equipmentid); + return shiftInfo; + } + List<MdcEquipmentRunningSection> runs = new ArrayList<>(); + List<MdcEquipmentRunningSection> errs = new ArrayList<>(); + for (MdcEquipmentRunningSection section : sectionList) { + if (section.getStatus() == 22 || section.getStatus() == 0) { + errs.add(section); } - if (status == 3) { - processLong += duration; - } - if (status == 0) { - closeLong += duration; - } - if (status == 22) { - errorLong += duration; + if (section.getStatus() == 3) { + runs.add(section); } } - shiftInfo.setWaitLong(new BigDecimal(waitLong)); - shiftInfo.setProcessLong(new BigDecimal(processLong)); - shiftInfo.setCloseLong(new BigDecimal(closeLong)); - //寮�鏈烘椂闂磋绠椾负 鏈夋晥鏃堕暱 - 鍏虫満鏃堕暱 - shiftInfo.setOpenLong(new BigDecimal((datesEnd - datesStart) / 1000).subtract(shiftInfo.getCloseLong())); - shiftInfo.setErrorLong(new BigDecimal(errorLong)); + // 鍙婃�诲伐鏃� => 鏈夋晥鏃堕暱鍑� + BigDecimal totalLong = new BigDecimal(DateUtils.getSeconds(startDate, endDate)).subtract(totalLongRairs); + // 璁$畻鍔犲伐 + BigDecimal processLong = new BigDecimal("0"); + if (runs != null && !runs.isEmpty()) { + processLong = processLongInfo(runs); + } + // 鍏虫満鏁版嵁 + List<MdcEquipmentRunningSection> closes = errs.stream().filter(section -> section.getStatus() != 22).collect(Collectors.toList()); + // 鍏虫満鏃堕暱 + BigDecimal closeLong = new BigDecimal("0"); + closeLong = closeLong(closes); + + /*鏁呴殰鏃堕棿 errs => 鍏虫満鏁版嵁 + 鎶ヨ鏁版嵁 */ + BigDecimal faultLong = new BigDecimal("0"); + faultLong = faultLongInfo(errs); + + //鎶ヨ鏁版嵁 + List<MdcEquipmentRunningSection> alarms = errs.stream().filter(section -> section.getStatus() == 22).collect(Collectors.toList()); + + //鎶ヨ鏃堕暱 + BigDecimal alarmLong = new BigDecimal("0"); + alarmLong = alarmLong(alarms); + + //寰呮満鏃堕暱 => 鏈夋晥鏃堕暱 - 杩愯鏃堕暱 - 鎶ヨ鏃堕暱 + BigDecimal waitLong = totalLong.subtract(processLong).subtract(alarmLong); + if (waitLong.compareTo(BigDecimal.ZERO) < 0) { + waitLong = new BigDecimal("0"); + } + + // 寮�鏈烘椂闀� => 鏈夋晥鏃堕暱 - 鍏虫満鏃堕暱 + BigDecimal openLong = totalLong.subtract(closeLong); + if (openLong.compareTo(BigDecimal.ZERO) < 0) { + openLong = new BigDecimal("0"); + } + + shiftInfo.setProcessLong(processLong); + shiftInfo.setTotalLong(totalLong); + shiftInfo.setWaitLong(waitLong); + shiftInfo.setErrorLong(alarmLong); + shiftInfo.setCloseLong(closeLong); + shiftInfo.setOpenLong(openLong); return shiftInfo; } /** + * 缁熻鍏虫満鏃堕暱 + */ + private BigDecimal closeLong(List<MdcEquipmentRunningSection> closes) { + BigDecimal closeLong = new BigDecimal("0"); + for (MdcEquipmentRunningSection alarm : closes) { + closeLong = closeLong.add(new BigDecimal(alarm.getDuration())); + } + return closeLong; + } + + /** + * 缁熻鎶ヨ鏃堕暱 + */ + private BigDecimal alarmLong(List<MdcEquipmentRunningSection> alarms) { + BigDecimal alarmLong = new BigDecimal("0"); + for (MdcEquipmentRunningSection alarm : alarms) { + alarmLong = alarmLong.add(new BigDecimal(alarm.getDuration())); + } + return alarmLong; + } + + /** + * 缁熻鏁呴殰鏃堕暱 + */ + private BigDecimal faultLongInfo(List<MdcEquipmentRunningSection> errs) { + BigDecimal faultLong = new BigDecimal("0"); + for (MdcEquipmentRunningSection e : errs) { + faultLong = faultLong.add(new BigDecimal(e.getDuration())); + } + return faultLong; + } + + /** + * 缁熻鍔犲伐鏃堕暱 + */ + private BigDecimal processLongInfo(List<MdcEquipmentRunningSection> runs) { + BigDecimal processLong = new BigDecimal("0"); + for (MdcEquipmentRunningSection se : runs) { + if (se.getStatus() == 3) { + processLong = processLong.add(new BigDecimal(se.getDuration())); + } + } + return processLong; + } + + private List<MdcEquipmentRunningSection> findStatsEquipment(List<MdcEquipmentRepair> repairs, List<MdcEquipmentRunningSection> sRun, MdcDateVo mdcDate, List<MdcEquipmentRunningSection> errors) { + if (sRun == null || sRun.isEmpty()) { + //鏃犳暟鎹鐞� + //TODO + return null; + } + Long startMdc = mdcDate.getStartTime().getTime(); + Long endMdc = mdcDate.getEndTime().getTime(); + if (sRun != null && !sRun.isEmpty()) { + 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()); + } else { + sRun.get(i).setStartTime(mdcDate.getStartTime()); + } + if (endMdc >= end) { + sRun.get(i).setEndTime( sRun.get(i).getEndTime()); + } else { + sRun.get(i).setEndTime(mdcDate.getEndTime()); + } + 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()); + } + } + } + //閮ㄥ垎鏁版嵁鏄淮淇� 1銆佽繍琛岀姸鎬佷笅鎶ヨ鎯呭喌 + List<MdcEquipmentRunningSection> faultRun = new ArrayList<>(); + //鍒跺害鏃堕棿娈靛唴鎶ヨ鏁版嵁 + 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()); + } else { + errors.get(i).setStartTime(mdcDate.getStartTime()); + } + if (endMdc >= end) { + errors.get(i).setEndTime( errors.get(i).getEndTime()); + } else { + errors.get(i).setEndTime(mdcDate.getEndTime()); + } + 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()); + } + } + + //鎶婅繍琛屼腑瀛樺湪鐨勬姤璀﹀墧闄ゆ帀 + for (MdcEquipmentRunningSection se : sRun) { + long runStart = se.getStartTime().getTime(); + long runEnd = se.getEndTime().getTime(); + if (se.getStatus() == 3) { + if (errors != null && !errors.isEmpty() ) { + //澶勭悊鎶ヨ鏁版嵁 + 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 ) { + errors.get(i).setEndTime(se.getStartTime()); + Long sen = DateUtils.differentSecond(errors.get(i).getStartTime(), + errors.get(i).getEndTime()); + errors.get(i).setDuration(sen); + errors.get(i).setStartLong(errors.get(i).getStartTime().getTime()); + errors.get(i).setEndLong(errors.get(i).getEndTime().getTime()); + } + // 鎶ヨ寮�濮� 澶т簬 杩愯寮�濮� 锛� 鎶ヨ寮�濮� 灏忎簬 杩愯缁撴潫 锛屾姤璀︾粨鏉� 澶т簬 杩愯缁撴潫 + 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()); + errors.get(i).setDuration(sen); + errors.get(i).setStartLong(errors.get(i).getStartTime().getTime()); + errors.get(i).setEndLong(errors.get(i).getEndTime().getTime()); + } + // 鎶ヨ寮�濮� 澶т簬 杩愯寮�濮� 锛� 鎶ヨ寮�濮� 灏忎簬 杩愯缁撴潫 锛屾姤璀︾粨鏉� 澶т簬 杩愯寮�濮嬶紝鎶ヨ缁撴潫 灏忎簬 杩愯缁撴潫 + else if (errStart >= runStart && errStart < runEnd && + errEnd > runStart && errEnd <= runEnd ){ + errors.remove(i); + i--; + } + //濡傛灉瓒呭嚭鑼冨洿 + else if (errStart <= runStart && errStart < runEnd && + errEnd > runStart && errEnd >= runEnd ) { + MdcEquipmentRunningSection errOne = new MdcEquipmentRunningSection(); + errOne.setEndTime(errors.get(i).getEndTime()); + + errors.get(i).setStartTime(errors.get(i).getStartTime()); + errors.get(i).setEndTime(se.getStartTime()); + Long sen = DateUtils.differentSecond(errors.get(i).getStartTime(), + errors.get(i).getEndTime()); + // + + //TODO + errOne.setStatus(22); + errOne.setEquipmentId(errors.get(i).getEquipmentId()); + errOne.setStartTime(se.getEndTime()); + errors.get(i).setDuration(sen); + errors.get(i).setStartLong(errors.get(i).getStartTime().getTime()); + errors.get(i).setEndLong(errors.get(i).getEndTime().getTime()); + + Long one = DateUtils.differentSecond(errOne.getStartTime(), errOne.getEndTime()); + errOne.setDuration(one); + errOne.setStartLong(errOne.getStartTime().getTime()); + errOne.setEndLong(errOne.getEndTime().getTime()); + if (sen <= 0) { + errors.remove(i); + errors.add(i,errOne); + } else { + errors.add(i+1,errOne); + i++; + } + } else { + continue; + } + } + } + } + } + } + //澶勭悊鎶ヨ鏁版嵁 + List<MdcEquipmentRunningSection> sectionList = new ArrayList<>(); + if (sRun != null && !sRun.isEmpty()) { + for (MdcEquipmentRunningSection se : sRun) { + sectionList.add(se); + } + } + //鎶ヨ鍓旈櫎杩愯鎶ヨ + if (errors != null && !errors.isEmpty()) { + sectionList.addAll(errors); + } + //鍏虫満澶勭悊涓烘晠闅滄姤璀� + if (faultRun != null && !faultRun.isEmpty()) { + sectionList.addAll(faultRun); + } + return sectionList; + } + + private List<MdcEquipmentRepair> findSubRepairs(List<MdcEquipmentRepair> repairs, MdcShiftDateVo dates) { + if (repairs == null || repairs.isEmpty() || dates == null) { + return null; + } + for (MdcEquipmentRepair repair : repairs) { + //璋冩暣 + Date start = null; + Date end = null; + long dStart = dates.getStartDate().getTime(); + long dEnd = dates.getEndDate().getTime(); + long rStart = repair.getStartTime().getTime(); + long rEnd = repair.getEndTime().getTime(); + + if (rStart <= dStart && rEnd >= dStart && rEnd <= dEnd) { + start = dates.getStartDate(); + end = repair.getEndTime(); + } else if (rStart >= dStart && rEnd <= dEnd) { + start = repair.getStartTime(); + end = repair.getEndTime(); + } else if (rStart >= dStart && rStart <= dEnd && rEnd >= dEnd) { + start = repair.getStartTime(); + end = dates.getEndDate(); + } else if (rStart <= dStart && rEnd >= dEnd) { + start = dates.getStartDate(); + end = dates.getEndDate(); + } + repair.setStartTime(start); + repair.setEndTime(end); + //澶勭悊寮傚父鏁版嵁 + if (start == null || end == null) { + repair.setSecondLong(0); + } else { + try { + repair.setSecondLong(DateUtils.getSeconds(start, end)); + } catch (Exception e) { + repair.setSecondLong(0); + } + + } + + } + for (int i = 0; i < repairs.size(); i++) { + if (repairs.get(i).getStartTime() == null || repairs.get(i).getEndTime() == null || repairs.get(i).getSecondLong() == 0) { + repairs.remove(i); + i--; + } + } + return repairs; + } + + /** * 鏃堕棿闂澶勭悊 濡傛灉褰撳ぉ鏈�鏈熬鏃堕棿澶т簬褰撳墠鏃堕棿 杩斿洖0 * * @param temp diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDateVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDateVo.java new file mode 100644 index 0000000..77fc75d --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDateVo.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.mdc.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * @author: LiuS + * @create: 2023-07-27 09:58 + */ +@Data +public class MdcDateVo { + private Date startTime; + private Date endTime; + private Long start; + private Long end; +} -- Gitblit v1.9.3