lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ package org.jeecg.modules.mdc.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.service.MdcEfficiencyReportService; import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo; import org.jeecg.modules.mdc.vo.MdcEfficiencyVo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * @author: LiuS * @create: 2023-06-15 17:17 */ @Slf4j @Api(tags = "è®¾å¤æçæ¥è¡¨") @RestController @RequestMapping("/mdc/efficiencyReport") public class MdcEfficiencyReportController { @Resource private MdcEfficiencyReportService mdcEfficiencyReportService; @AutoLog(value = "è®¾å¤æçæ¥è¡¨-å©ç¨çå表æ¥è¯¢") @ApiOperation(value = "è®¾å¤æçæ¥è¡¨-å©ç¨çå表æ¥è¯¢", notes = "è®¾å¤æçæ¥è¡¨-å©ç¨çå表æ¥è¯¢") @GetMapping("/efficiencyList") public Result efficiencyList(MdcEfficiencyReportQueryVo vo) { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); MdcEfficiencyVo result = mdcEfficiencyReportService.efficiencyList(userId, vo); return Result.OK(result); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,60 @@ package org.jeecg.modules.mdc.dto; import lombok.Data; import java.math.BigDecimal; /** * @author: LiuS * @create: 2023-06-16 15:12 */ @Data public class MdcEfficiencyDto { /** * 设å¤ç¼ç */ private String equipmentId; /** * 设å¤åç§° */ private String equipmentName; /** * 设å¤ç±»å */ private String equipmentType; /** * æææ¥æ */ private String theDate; /** * å å·¥æ¶é¿ */ private BigDecimal processLong; /** * å©ç¨ç */ private BigDecimal utilizationRate; /** * å¼å¨ç */ private BigDecimal startRate; /** * 弿ºç */ private BigDecimal openRate; /** * 弿ºæ¶é¿ */ private BigDecimal openLong; /** * å¾ æºæ¶é¿ */ private BigDecimal waitLong; /** * å ³æºæ¶é¿ */ private BigDecimal closeLong; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyListDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package org.jeecg.modules.mdc.dto; import lombok.Data; import java.util.List; /** * @author: LiuS * @create: 2023-06-19 10:37 */ @Data public class MdcEfficiencyListDto { /** * 设å¤ç¼ç */ private String equipmentId; /** * 设å¤åç§° */ private String equipmentName; /** * 设å¤ç±»å */ private String equipmentType; /** * å©ç¨çæ°æ® */ private List<MdcEfficiencyResultDto> list; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,49 @@ package org.jeecg.modules.mdc.dto; import lombok.Data; import java.math.BigDecimal; /** * @author: LiuS * @create: 2023-06-27 16:34 */ @Data public class MdcEfficiencyResultDto { /** * æææ¥æ */ 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; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package org.jeecg.modules.mdc.mapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.dto.MdcEfficiencyDto; import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo; import java.util.List; /** * @author: LiuS * @create: 2023-06-19 10:40 */ public interface MdcEfficiencyReportMapper { /** * æ¥è¯¢å©ç¨çæ°æ® * * @param vo * @return */ List<MdcEfficiencyDto> efficiencyList(@Param("vo") MdcEfficiencyReportQueryVo vo); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ <?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.MdcEfficiencyReportMapper"> <!--æ¥è¯¢å©ç¨çæ°æ®--> <select id="efficiencyList" resultType="org.jeecg.modules.mdc.dto.MdcEfficiencyDto"> SELECT t2.equipment_id equipmentId, t2.equipment_name equipmentName, t2.equipment_type equipmentType, t1.the_date, t1.process_long processLong, t1.process_long / 86400 utilizationRate, CASE WHEN t1.open_long > 0 THEN t1.process_long / t1.open_long ELSE 0 END startRate, t1.open_long / 86400 openRate, t1.open_long openLong, t1.wait_long waitLong, t1.close_long closeLong FROM mdc_equipment t2 LEFT JOIN mdc_equipment_statistical_info t1 ON t1.equipment_id = t2.equipment_id WHERE t1.the_date <= #{ vo.endTime } AND t1.the_date >= #{ vo.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> ORDER BY t1.the_date </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java
@@ -6,13 +6,15 @@ /** * @Description: 设å¤åæ¥è¿è¡æ°æ®è¡¨ * @Author: jeecg-boot * @Date: 2023-04-14 * @Date: 2023-04-14 * @Version: V1.0 */ public interface IMdcEquipmentStatisticalInfoService extends IService<MdcEquipmentStatisticalInfo> { /** * 计ç®è®¾å¤åæ¥è¿è¡æ°æ® * * @param dateTime */ void runningAllEquipmentStatisticalProcess(String dateTime); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcUtilizationRateService.java
@@ -6,6 +6,7 @@ import org.jeecg.modules.mdc.entity.MdcUtilizationRate; import javax.servlet.http.HttpServletRequest; import java.util.List; /** * @Description: çåæ°è®¾ç½® @@ -50,4 +51,11 @@ * @return */ Boolean deleteBatchUtilization(String ids); /** * æ ¹æ®ç±»åæ¥è¯¢ * @param type * @return */ List<MdcUtilizationRate> listByType(String type); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package org.jeecg.modules.mdc.service; import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo; import org.jeecg.modules.mdc.vo.MdcEfficiencyVo; /** * @author: LiuS * @create: 2023-06-15 17:25 */ public interface MdcEfficiencyReportService { /** * å©ç¨çæ¥è¡¨ * * @param userId * @param vo * @return */ MdcEfficiencyVo efficiencyList(String userId, MdcEfficiencyReportQueryVo vo); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,128 @@ package org.jeecg.modules.mdc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import net.sf.saxon.expr.Component; import org.apache.commons.lang3.StringUtils; import org.jeecg.modules.mdc.dto.MdcEfficiencyDto; import org.jeecg.modules.mdc.dto.MdcEfficiencyListDto; import org.jeecg.modules.mdc.dto.MdcEfficiencyResultDto; import org.jeecg.modules.mdc.entity.MdcEquipment; 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.IMdcUtilizationRateService; import org.jeecg.modules.mdc.service.MdcEfficiencyReportService; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo; import org.jeecg.modules.mdc.vo.MdcEfficiencyVo; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** * @author: LiuS * @create: 2023-06-16 09:52 */ @Service public class MdcEfficiencyReportServiceImpl implements MdcEfficiencyReportService { @Resource private IMdcEquipmentService mdcEquipmentService; @Resource private MdcEfficiencyReportMapper mdcEfficiencyReportMapper; @Resource private IMdcUtilizationRateService mdcUtilizationRateService; /** * å©ç¨çæ¥è¡¨ * * @param userId * @param vo * @return */ @Override public MdcEfficiencyVo efficiencyList(String userId, MdcEfficiencyReportQueryVo vo) { MdcEfficiencyVo result = new MdcEfficiencyVo(); List<MdcEfficiencyListDto> listDtos = new ArrayList<>(); List<String> equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { if ("2".equals(vo.getTypeTree())) { // é¨é¨å±çº§ equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); } else { // 产线å±çº§ equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); } } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { // åå°è®¾å¤ä¿¡æ¯ vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); } else { // æ¥è¯¢ç¨æ·æ¥æçææè®¾å¤ä¿¡æ¯ if ("2".equals(vo.getTypeTree())) { // é¨é¨å±çº§ equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { // 产线å±çº§ equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } vo.setEquipmentIdList(equipmentIds); // æ¥è¯¢å©ç¨çæ°æ® List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo); // å©ç¨çç级 List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); //å°è£ ç»æ List<MdcEfficiencyDto> equipmentList = efficiencyList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MdcEfficiencyDto::getEquipmentId))), ArrayList::new)); List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime())); for (MdcEfficiencyDto mdcEfficiencyDto : equipmentList) { MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); mdcEfficiencyListDto.setEquipmentId(mdcEfficiencyDto.getEquipmentId()); mdcEfficiencyListDto.setEquipmentName(mdcEfficiencyDto.getEquipmentName()); mdcEfficiencyListDto.setEquipmentType(mdcEfficiencyDto.getEquipmentType()); List<MdcEfficiencyResultDto> list = new ArrayList<>(); for (String date : dates) { list.add(this.efficiencyRate(efficiencyList, date, mdcEfficiencyDto, mdcUtilizationRateList)); } mdcEfficiencyListDto.setList(list); listDtos.add(mdcEfficiencyListDto); } result.setLists(listDtos); result.setDates(dates); return result; } private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, MdcEfficiencyDto mdcEfficiencyDto, List<MdcUtilizationRate> mdcUtilizationRateList) { MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); for (MdcEfficiencyDto efficiencyDto : efficiencyList) { if (date.equals(efficiencyDto.getTheDate()) && efficiencyDto.getEquipmentId().equals(mdcEfficiencyDto.getEquipmentId())) { mdcEfficiencyResultDto.setTheDate(efficiencyDto.getTheDate()); mdcEfficiencyResultDto.setProcessLong(efficiencyDto.getProcessLong()); mdcEfficiencyResultDto.setUtilizationRate(efficiencyDto.getUtilizationRate()); mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate()); mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate()); mdcEfficiencyResultDto.setOpenRate(efficiencyDto.getOpenRate()); mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong()); mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong()); mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong()); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (efficiencyDto.getUtilizationRate().longValue() * 100 > mdcUtilizationRate.getMinimumRange() && efficiencyDto.getUtilizationRate().longValue() * 100 <= mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } } return mdcEfficiencyResultDto; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
@@ -155,8 +155,9 @@ list = notExecuteData; } } else { if (notExecuteData != null && !notExecuteData.isEmpty()) if (notExecuteData != null && !notExecuteData.isEmpty()) { list.addAll(notExecuteData); } } } else { LambdaQueryWrapper<MdcEquipmentRunningSection> queryWrapper = new LambdaQueryWrapper<>(); lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcUtilizationRateServiceImpl.java
@@ -1,5 +1,6 @@ package org.jeecg.modules.mdc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import javax.servlet.http.HttpServletRequest; import java.sql.Array; import java.util.Arrays; import java.util.List; /** * @Description: çåæ°è®¾ç½® @@ -56,4 +58,14 @@ public Boolean deleteBatchUtilization(String ids) { return this.removeByIds(Arrays.asList(ids.split(","))); } /** * æ ¹æ®ç±»åæ¥è¯¢å©ç¨çå±çº§ * @param type * @return */ @Override public List<MdcUtilizationRate> listByType(String type) { return this.baseMapper.selectList(new LambdaQueryWrapper<MdcUtilizationRate>().eq(MdcUtilizationRate::getRateParameterType, type)); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java
@@ -635,6 +635,25 @@ return list; } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼yyyyMMdd * @param start * @param end * @return */ public static List<String> getDatesStringList2(Date start, Date end) { List<String> list = new ArrayList<>(); int i = getDays(start, end); for(int j = 0; j <= i; j++) { if(j == 0) { list.add(format(start, STRDATE)); } else { list.add(format(plusTime(start, j), STRDATE)); } } return list; } public static List<String> getMonthBetween(Date start, Date end){ List<String> list = new ArrayList<>(); Calendar min = Calendar.getInstance(); @@ -666,6 +685,21 @@ return startTime == null ? removeTime(new Date()) : startTime; } /** * è·ådateStrçæ¥ææ ¼å¼yyyyMMdd * @param dateStr * @return */ public static Date getShortDate2(String dateStr) { SimpleDateFormat sdf = new SimpleDateFormat(STRDATE); Date startTime = null; try { startTime = sdf.parse(dateStr); } catch (ParseException e) { } return startTime == null ? removeTime(new Date()) : startTime; } public static Date getFormatDate(String dateStr,String format) { SimpleDateFormat sdf = new SimpleDateFormat(format); Date startTime = null; lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/EquipmentCalendarVo.java
@@ -13,10 +13,14 @@ public class EquipmentCalendarVo { private String equipmentId; /*å¼å§æ¶é´*/ /** * å¼å§æ¶é´ */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") private LocalDate takeEffectDate; /*ç»ææ¶é´*/ /** * ç»ææ¶é´ */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") private LocalDate invalidDate; lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyReportQueryVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,40 @@ package org.jeecg.modules.mdc.vo; import lombok.Data; import java.util.List; /** * @author: LiuS * @create: 2023-06-15 17:58 */ @Data public class MdcEfficiencyReportQueryVo { /** * å¼å§æ¶é´ -> 20220101 */ private String startTime; /** * ç»ææ¶é´ -> 20220101 */ private String endTime; /** * æ ç±»å -> 1:车é´å±çº§ 2:é¨é¨å±çº§ */ private String typeTree; /** * å±çº§ID */ private String parentId; /** * 设å¤Id */ private String equipmentId; /** * 设å¤ids */ private List<String> equipmentIdList; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ package org.jeecg.modules.mdc.vo; import lombok.Data; import org.jeecg.modules.mdc.dto.MdcEfficiencyListDto; import java.util.List; /** * @author: LiuS * @create: 2023-06-16 09:44 */ @Data public class MdcEfficiencyVo { /** * å©ç¨çæ°æ® */ private List<MdcEfficiencyListDto> lists; // /** // * å©ç¨çæ°æ® // */ // private List<MdcEfficiencyDto> list; private List<String> dates; }