lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
@@ -598,6 +598,11 @@ String DICT_MDC_STAFF_TEAM = "mdc_staff_team"; /** * 驱å¨åæ°åä½åå ¸ç¼å· */ String DICT_EQUIPMENT_RUN_UNIT = "equipment_run_unit"; /** * å çæ°æ® èªå¨è®¡ç®æ è¯ 1(æ¯) 2(å¦) */ Integer AUTO_FLAG_Y = 1; @@ -612,8 +617,11 @@ */ String CLOSE_TYPE_0 = "0"; String CLOSE_TYPE_1 = "1"; String ORG_TYPE = "3"; /** * 产线类å 1ä¸çº§é¨é¨ 2åé¨é¨ 3åé¨é¨ */ String ORG_TYPE_2 = "2"; String ORG_TYPE_3 = "3"; Integer SHIFT_TYPE_1 = 1; Integer SHIFT_TYPE_2 = 2; lxzn-boot-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java
@@ -14,6 +14,7 @@ /** * websocket å端å°tokenæ¾å°ååè®®éä¼ å ¥ ä¸å端建ç«è¿æ¥æ¶éè¦ç¨å°httpåè®®ï¼æ¤å¤ç¨äºæ ¡éªtokençæææ§ * * @Author taoYan * @Date 2022/4/21 17:01 **/ @@ -34,20 +35,22 @@ if (redisUtil == null) { redisUtil = SpringContextUtils.getBean(RedisUtil.class); } HttpServletRequest request = (HttpServletRequest)servletRequest; String token = request.getHeader(TOKEN_KEY); HttpServletRequest request = (HttpServletRequest) servletRequest; if (request.getHeader(TOKEN_KEY) != null) { String token = request.getHeader(TOKEN_KEY); log.debug("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªï¼Path = {}ï¼token:{}", request.getRequestURI(), token); log.debug("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªï¼Path = {}ï¼token:{}", request.getRequestURI(), token); try { TokenUtils.verifyToken(token, commonApi, redisUtil); } catch (Exception exception) { //log.error("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªå¤±è´¥ï¼IP:{}, Token:{}, Path = {}ï¼å¼å¸¸ï¼{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); log.debug("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªå¤±è´¥ï¼IP:{}, Token:{}, Path = {}ï¼å¼å¸¸ï¼{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); return; try { TokenUtils.verifyToken(token, commonApi, redisUtil); } catch (Exception exception) { //log.error("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªå¤±è´¥ï¼IP:{}, Token:{}, Path = {}ï¼å¼å¸¸ï¼{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); log.debug("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªå¤±è´¥ï¼IP:{}, Token:{}, Path = {}ï¼å¼å¸¸ï¼{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); return; } HttpServletResponse response = (HttpServletResponse) servletResponse; response.setHeader(TOKEN_KEY, token); } HttpServletResponse response = (HttpServletResponse)servletResponse; response.setHeader(TOKEN_KEY, token); filterChain.doFilter(servletRequest, servletResponse); } lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
@@ -99,6 +99,7 @@ filterChainDefinitionMap.put("/sys/getQrcodeToken/**", "anon"); //ç嬿«ç filterChainDefinitionMap.put("/sys/checkAuth", "anon"); //æææ¥å£æé¤ filterChainDefinitionMap.put("/msi/**", "anon"); //éææ¥å£ filterChainDefinitionMap.put("/board/dtBoard/**", "anon"); //æ°ååªççæ¿æ¥å£æé¤ filterChainDefinitionMap.put("/", "anon"); filterChainDefinitionMap.put("/doc.html", "anon"); lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrderDetail.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekMaintenanceOrderDetail.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java
ÎļþÃû´Ó lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java ÐÞ¸Ä @@ -5,9 +5,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; import org.jeecgframework.poi.excel.annotation.Excel; import java.io.Serializable; import java.util.List; lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java
ÎļþÃû´Ó lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java ÐÞ¸Ä @@ -8,9 +8,7 @@ import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.modules.eam.entity.EamRepairOrder; import org.jeecg.modules.eam.entity.EamReportRepair; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.beans.BeanUtils; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/util/DateUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,1089 @@ package org.jeecg.modules.eam.util; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.ZoneId; import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; public class DateUtils { private final static long DAYTIMESUNSET = 86400; /** * @return å¾å°æå¤© */ public static Date getNextDay(Date d1) { long d2 = d1.getTime() + 86400 * 1000; return new Date(d2); } /** * @return å¾å°æ¨å¤© */ public static Date getPreviousDay(Date d1) { long d2 = d1.getTime() - 86400 * 1000; return new Date(d2); } /** * @return è¿åæ¶é´å·®çè¯è¨æè¿° å¦1天2å°æ¶5å6ç§ */ public static String different(Date d1, Date d2) { if (d1 == null || d2 == null) { return ""; } StringBuilder strB = new StringBuilder(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { //毫ç§ms long diff = d2.getTime() - d1.getTime(); long diffSeconds = diff / 1000 % 60; long diffMinutes = diff / (60 * 1000) % 60; long diffHours = diff / (60 * 60 * 1000) % 24; long diffDays = diff / (24 * 60 * 60 * 1000); if (diffDays > 0) { strB.append(diffDays + " 天 "); strB.append(diffHours + " å°æ¶ "); strB.append(diffMinutes + " åé "); strB.append(diffSeconds + " ç§ "); } else if (diffHours > 0) { strB.append(diffHours + " å°æ¶ "); strB.append(diffMinutes + " åé "); strB.append(diffSeconds + " ç§ "); } else if (diffMinutes > 0) { strB.append(diffMinutes + " åé "); strB.append(diffSeconds + " ç§ "); } else { strB.append(diffSeconds + " ç§ "); } } catch (Exception e) { e.printStackTrace(); } return strB.toString(); } /** * @return è·å两个dateçæ¶é´å·®ï¼ç»æä¸ºç§ é¤ */ public static long differentSecond(Date startDate, Date endDate) { return new BigDecimal(endDate.getTime() - startDate.getTime()).divide(new BigDecimal("1000"), 0, BigDecimal.ROUND_HALF_UP).longValue(); // return (endDate.getTime() - startDate.getTime()) / 1000; } /** * @return è·å两个dateçæ¶é´å·®ï¼ç»æä¸ºåé */ public static Integer differentMinutes(Date startDate, Date endDate) { return new BigDecimal(endDate.getTime() - startDate.getTime()).divide(new BigDecimal("60000"), 0, RoundingMode.HALF_UP).intValue(); } /** * @return è¿åä¼ å ¥æ¶é´ç0ç¹0å0ç§ */ public static Date getTodayZero(Date d) { Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return cal.getTime(); } /** * @return è¿åä¼ å ¥æ¶é´ç0ç¹0å0ç§ */ public static Date getTomorrowZero(Date d) { Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.add(Calendar.DAY_OF_MONTH, 1); return cal.getTime(); } /** * @return 夿æ¶é´æ¯å¦æ¯å½å¤© */ public static boolean isTaday(Date date) { Date now = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd"); String nowDay = sf.format(now); String day = sf.format(date); return day.equals(nowDay); } /** * @return å¤æä¸¤ä¸ªæ¶é´æ¯å¦ä¸ºåä¸å¤© */ public static boolean isOneDay(Date d1, Date d2) { SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd"); String d1Str = sf.format(d1); String d2Str = sf.format(d2); return d1Str.equals(d2Str); } /** * @return å¤æä¸¤ä¸ªæ¶é´æ¯å¦ä¸ºåä¸å¹´ */ public static boolean isOneYear(Date d1, Date d2) { SimpleDateFormat sf = new SimpleDateFormat("yyyy"); String d1Str = sf.format(d1); String d2Str = sf.format(d2); return d1Str.equals(d2Str); } public static String dateProportion(Date start, Date end) { float differentSecond = DateUtils.differentSecond(start, end); float f = differentSecond / DAYTIMESUNSET * 100; return String.format("%.2f", f) + "%"; } public static Date strToDate(String dateStr, String format) { SimpleDateFormat sf = new SimpleDateFormat(format); Date result = null; try { result = sf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return result; } public static final String STR_DATE = "yyyy-MM-dd"; public static final String STRDATE = "yyyyMMdd"; public static final String STR_YEAR_MONTH = "yyyy-MM"; public static final String STRYEARMONTH = "yyyyMM"; public static final String STR_DATE_TIME = "yyyy-MM-dd HH:mm:ss.SSS"; public static final String STR_DATE_TIME_SMALL = "yyyy-MM-dd HH:mm:ss"; public static final String STR_DATE_TIME_MIN = "yyyy-MM-dd HH:mm"; public static final String STR_DATE_TIME_HOUR = "yyyy-MM-dd HH"; public static final String STR_DATE_TIME_FULL = "yyyyMMddHHmmssSSS"; public static final String STR_HHMMSS = "HH:mm:ss"; public static final String STR_HHMM = "HH:mm"; public static final String STR_MMDD = "MM-dd"; /** * <p> * Description: å®é ææ æä»½ * </p> * * @param startDate * @param endDate * @return obj [0] å®é ææ æä»½ ä¾å¦å®é ææ æä»½ï¼3.86ï¼æä¹æ¯3个æå26天 obj[1] å®é åæ´æä»½ ï¼3ï¼ */ public static Integer getRealMonth(Date startDate, Date endDate) { Integer month = 0; Calendar start = Calendar.getInstance(); start.setTime(startDate); Calendar end = Calendar.getInstance(); end.setTime(endDate); int year = start.get(Calendar.YEAR); int year2 = end.get(Calendar.YEAR); int month2 = start.get(Calendar.MONTH); int month3 = end.get(Calendar.MONTH); try { while (start.before(end)) { start.add(Calendar.MONTH, 1); month++; } } catch (Exception e) { e.printStackTrace(); } int day2 = start.get(Calendar.DAY_OF_MONTH); int day3 = end.get(Calendar.DAY_OF_MONTH); int tmpYear = year2 - year; if (day2 == day3) { return (tmpYear * 12) + (month3 - month2); } return month == 0 ? month : (month - 1); } public static Date getNow() { return new Date(System.currentTimeMillis()); } public static int getDayOfMonth() { Calendar aCalendar = Calendar.getInstance(Locale.CHINA); int day = aCalendar.getActualMaximum(Calendar.DATE); return day; } /** * <p> * Description: ä¿®æ¹æ¶é´ä¸ºæå®æ¶é´å½å¤©ç23:59:59.000 * </p> * * @param date éè¦ä¿®æ¹çæ¶é´ * @return ä¿®æ¹åçæ¶é´ */ public static Date fillTime(Date date) { Date result = removeTime(date); result.setTime(result.getTime() + 24 * 60 * 60 * 1000 - 1000); // å ä¸å¤© return result; } /** * @param date å½åæ¶é´ * @param i å¾åå 天 * @return */ public static Date fillBeforeTime(Date date, Integer i) { Date result = removeTime(date); Calendar calendar = Calendar.getInstance(); // å¾å°æ¥å calendar.setTime(result);// æå½åæ¶é´èµç»æ¥å calendar.add(Calendar.DAY_OF_MONTH, i); // 设置为åä¸å¤© result.setTime(calendar.getTime().getTime() + 24 * 60 * 60 * 1000 - 1000); // å ä¸å¤© return result; } /** * <p> * Description: ä¿®æ¹æ¶é´ä¸ºæå®æ¶é´åä¸å¤©ç00:00:00 * </p> * * @param date éè¦ä¿®æ¹çæ¶é´ * @return ä¿®æ¹åçæ¶é´ */ public static Date plusTime(Date date, Integer i) { Date result = removeTime(date); Calendar calendar = Calendar.getInstance(); // å¾å°æ¥å calendar.setTime(result);// æå½åæ¶é´èµç»æ¥å calendar.add(Calendar.DAY_OF_MONTH, i); // 设置为åä¸å¤© return calendar.getTime(); } /** * <p> * Description: å»ææ¥ææ¶é´ä¸çæ¶é´é¨å * </p> * å¦: 2013-11-11 18:56:33 ---> 2013-11-11 00:00:00 * * @param date éè¦ä¿®æ¹çæ¶é´ * @return ä¿®æ¹åçæ¶é´ */ public static Date removeTime(Date date) { Date result = null; try { SimpleDateFormat df = new SimpleDateFormat(STR_DATE); String dateStr = df.format(date); result = df.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return result; } /** * <p> * Description: æé»è®¤æ ¼å¼(yyyy-MM-dd HH:mm:ss.SSS)è·åæ¶é´å符串 * </p> * * @param date è¦è½¬æ¢çæ¥æ * @return 转æ¢åçæ¶é´å符串 */ public static String format(Date date) { SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME); return df.format(date); } public static Date parseDate(Date date, String format) { SimpleDateFormat df = new SimpleDateFormat(format); try { date = df.parse(df.format(date)); } catch (ParseException e) { e.printStackTrace(); } return date; } public static Date getDelayedYear() { Calendar curr = Calendar.getInstance(); curr.set(Calendar.YEAR, curr.get(Calendar.YEAR) + 1); Date date = curr.getTime(); return date; } /** * <p> * Description: ææå®æ ¼å¼è·åæ¶é´å符串 * </p> * * @param date è¦è½¬æ¢çæ¥æ * @param format æ ¼å¼,ä¾å¦:yyyy-MM-dd HH:mm:ss.SSS * @return 转æ¢åçæ¶é´å符串 */ public static String format(Date date, String format) { SimpleDateFormat df = new SimpleDateFormat(format); return df.format(date); } /** * <p> * Description: å æå½æ° * </p> * * @param month æä»½æ° * @return */ public static Date addMonth(Integer month, Date time) { Calendar c = Calendar.getInstance(); c.setTime(time); c.add(Calendar.MONTH, month); return c.getTime(); } public static Boolean greater(Date startTime, Date endTime) { return startTime.getTime() > endTime.getTime(); } public static Boolean less(Date startTime, Date endTime) { return startTime.getTime() < endTime.getTime(); } public static Boolean equals(Date startTime, Date endTime) { return startTime.getTime() == endTime.getTime(); } public static Integer getDiffMonth(Calendar c, Calendar c1) { return (c.get(Calendar.YEAR) - c1.get(Calendar.YEAR)) * 12 + (c.get(Calendar.MONTH) - c1.get(Calendar.MONTH)); } /** * æ¯å¦ä¸ºåä¸å¤© */ public static boolean equalsDay(Date a, Date b) { return removeTime(a).getTime() == removeTime(b).getTime(); } public static Integer getDays(Date startTime, Date endTime) { Calendar c = Calendar.getInstance(); c.setTime(startTime); Calendar c1 = Calendar.getInstance(); c1.setTime(endTime); long t1 = c.getTimeInMillis(); long t2 = c1.getTimeInMillis(); // 计ç®å¤©æ° Long days = (t2 - t1) / (24 * 60 * 60 * 1000); return days.intValue(); } public static Integer getSeconds(Date startTime, Date endTime) { try { Calendar c = Calendar.getInstance(); c.setTime(startTime); Calendar c1 = Calendar.getInstance(); c1.setTime(endTime); long t1 = c.getTimeInMillis(); long t2 = c1.getTimeInMillis(); // 计ç®ç§æ° Long days = (t2 - t1) / (1000); return days.intValue(); } catch (Exception e) { return 0; } } //è·åå°æ¶å·® public static double subHours(Date startTime, Date endTime) { Calendar c = Calendar.getInstance(); c.setTime(startTime); Calendar c1 = Calendar.getInstance(); c1.setTime(endTime); double t1 = c.getTimeInMillis(); double t2 = c1.getTimeInMillis(); // 计ç®å¤©æ° double hours = (t2 - t1) / (1000 * 60 * 60); return Double.valueOf(new DecimalFormat("#.00").format(hours)); } //æ ¹æ®å½åæ¶é´ååºçæ¥æè·åå¹´é¾ public static int getAge(Date birthDay) { Calendar cal = Calendar.getInstance(); // ååºç³»ç»å½åæ¶é´çå¹´ãæãæ¥é¨å int yearNow = cal.get(Calendar.YEAR); int monthNow = cal.get(Calendar.MONTH); int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); cal.setTime(birthDay); // ååºåºçæ¥æçå¹´ãæãæ¥é¨å int yearBirth = cal.get(Calendar.YEAR); int monthBirth = cal.get(Calendar.MONTH); int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); // å½å年份ä¸åºç年份ç¸åï¼åæ¥è®¡ç®å¹´é¾ int age = yearNow - yearBirth; // å½åæä»½ä¸åºçæ¥æçæä»½ç¸æ¯ï¼å¦ææä»½å°äºåºçæä»½ï¼åå¹´é¾ä¸å1ï¼è¡¨ç¤ºä¸æ»¡å¤å°å¨å² if (monthNow <= monthBirth) { // 妿æä»½ç¸çï¼å¨æ¯è¾æ¥æï¼å¦æå½åæ¥ï¼å°äºåºçæ¥ï¼ä¹å1ï¼è¡¨ç¤ºä¸æ»¡å¤å°å¨å² if (monthNow == monthBirth) { if (dayOfMonthNow < dayOfMonthBirth) { age--; } } else { age--; } } return age; } public static Date subDays(Date startTime, Integer day) { Calendar c = Calendar.getInstance(); c.setTime(startTime); c.add(Calendar.DATE, day * -1); return c.getTime(); } public static Date addDays(Date startTime, Integer day) { Calendar c = Calendar.getInstance(); c.setTime(startTime); c.add(Calendar.DATE, day); return c.getTime(); } /*public static Date addHours(Date startTime, Integer hours) { Calendar c = Calendar.getInstance(); c.setTime(startTime); c.add(Calendar.HOUR, hours ); return c.getTime(); }*/ public static Date toDate(String date, String format) { SimpleDateFormat df = new SimpleDateFormat(format); try { return df.parse(date); } catch (ParseException e) { e.printStackTrace(); } return null; } public static Date toDateFull(String date) { SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME); try { return df.parse(date); } catch (ParseException e) { e.printStackTrace(); } return null; } public static Date toDateMedium(String date) { SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME_SMALL); try { Date dd = df.parse(date); return dd; } catch (ParseException e) { return null; } } public static Integer getDate(Date date) { if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int day = calendar.get(Calendar.DATE); return day; } return null; } public static Integer getYear() { return getYear(new Date()); } public static Integer getYear(Date date) { if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int year = calendar.get(Calendar.YEAR); return year; } return null; } public static Integer getMonth() { return getMonth(new Date()); } public static Integer getMonth(Date date) { if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int month = calendar.get(Calendar.MONTH); return month + 1; } return null; } public static Integer getDay() { return getDay(new Date()); } public static Integer getDay(Date date) { if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int day = calendar.get(Calendar.DAY_OF_MONTH); return day; } return null; } public static Date[] getMonthStartTimeAndEndTime(Integer month) { Calendar calendar = Calendar.getInstance(); Date[] dates = new Date[2]; Date startTime = null; Date endsTime = null; if (month != null) { calendar.set(Calendar.MONTH, month); //è·å¾å°æ¬æç第ä¸å¤© calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); startTime = calendar.getTime(); startTime = DateUtils.removeTime(startTime); //è·å¾å°æ¬æçæåä¸å¤© calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); endsTime = calendar.getTime(); endsTime = DateUtils.fillTime(endsTime); } dates[0] = startTime; dates[1] = endsTime; return dates; } public static Date[] getMonthStartTimeAndEndTime(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); Integer month = calendar.get(Calendar.MONTH); Date[] dates = new Date[2]; Date startTime = null; Date endsTime = null; if (month != null) { calendar.set(Calendar.MONTH, month); //è·å¾å°æ¬æç第ä¸å¤© calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); startTime = calendar.getTime(); startTime = DateUtils.removeTime(startTime); //è·å¾å°æ¬æçæåä¸å¤© calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); endsTime = calendar.getTime(); endsTime = DateUtils.fillTime(endsTime); } dates[0] = startTime; dates[1] = endsTime; return dates; } /** * è·ådayså¤©çæ¶é´åºé´ï¼endTime 为å½å¤©çåä¸å¤©0ç¹ï¼ * startTime 为endTimeådays天 * * @param days * @return */ public static Date[] getDaysStartTimeAndEndTime(Integer days) { Date[] dates = new Date[2]; Date endDate = plusTime(removeTime(getNow()), 1); Date startDate = subDays(endDate, days); dates[0] = startDate; dates[1] = endDate; return dates; } /** * æ ¹æ®æä¸å¹´è·åæåä¸å¤©çæ¶é´ * 2013 ---> 2013-12-31 23:59:59.000 * * @param year * @return */ public static Date getYearEndDay(Integer year) { Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.YEAR, year); calendar.roll(Calendar.DAY_OF_YEAR, -1); Date yearLast = calendar.getTime(); Date lastYear = DateUtils.fillTime(yearLast); return lastYear; } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼yyyy-MM-dd * * @param start * @param end * @return */ public static List<String> getDatesStringList(Date start, Date end, String strDate) { 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; } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼yyyy-MM-dd * * @param start * @param end * @return */ public static List<String> getDatesStringList(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, STR_DATE)); } else { list.add(format(plusTime(start, j), STR_DATE)); } } 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; } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼MM-dd * * @param start * @param end * @return */ public static List<String> getDatesStringLists(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, STR_MMDD)); } else { list.add(format(plusTime(start, j), STR_MMDD)); } } return list; } public static List<String> getMonthBetween(Date start, Date end) { List<String> list = new ArrayList<>(); Calendar min = Calendar.getInstance(); Calendar max = Calendar.getInstance(); min.setTime(start); min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1); max.setTime(end); max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2); Calendar curr = min; while (curr.before(max)) { list.add(format(curr.getTime(), STR_YEAR_MONTH)); curr.add(Calendar.MONTH, 1); } return list; } /** * è·ådateStrçæ¥ææ ¼å¼yyyy-MM-dd * * @param dateStr * @return */ public static Date getShortDate(String dateStr) { SimpleDateFormat sdf = new SimpleDateFormat(STR_DATE); Date startTime = null; try { startTime = sdf.parse(dateStr); } catch (ParseException e) { } 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; try { startTime = sdf.parse(dateStr); } catch (ParseException e) { } return startTime == null ? removeTime(new Date()) : startTime; } /** * @param time * @param n * @return å¨ä¸ä¸ªæ¶é´ä¸å ç§ */ public static Date addSecond(Date time, Integer n) { Calendar c = Calendar.getInstance(); c.setTime(time); c.add(Calendar.SECOND, n); return c.getTime(); } /** * @param time * @param n * @return å¨ä¸ä¸ªæ¶é´ä¸å åé */ public static Date addMinute(Date time, Integer n) { Calendar c = Calendar.getInstance(); c.setTime(time); c.add(Calendar.MINUTE, n); return c.getTime(); } /** * @param time * @param n * @return å¨ä¸ä¸ªæ¶é´ä¸å å°æ¶ */ public static Date addHour(Date time, Integer n) { Calendar c = Calendar.getInstance(); c.setTime(time); c.add(Calendar.HOUR_OF_DAY, n); return c.getTime(); } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼yyyy-MM-dd * * @param start * @param end * @return */ public static List<String> getDateMonth(String start, String end) { List<String> list = new ArrayList<>(); SimpleDateFormat yyyyMM = new SimpleDateFormat("yyyy-MM"); Date startyear = null; try { startyear = yyyyMM.parse(start); Date endyear = yyyyMM.parse(end); Calendar dd = Calendar.getInstance();//å®ä¹æ¥æå®ä¾ dd.setTime(startyear);//è®¾ç½®æ¥æèµ·å§æ¶é´ while (dd.getTime().before(endyear)) {//夿æ¯å¦å°ç»ææ¥æ String str = yyyyMM.format(dd.getTime()); dd.add(Calendar.MONTH, 1);//è¿è¡å½åæ¥ææä»½å 1 list.add(str); } list.add(yyyyMM.format(endyear)); } catch (ParseException e) { e.printStackTrace(); } return list; } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼yyyy * * @param start * @param end * @return */ public static List<String> getDateYear(String start, String end) { List<String> list = new ArrayList<>(); SimpleDateFormat yyyy = new SimpleDateFormat("yyyy"); Date startyear = null; try { startyear = yyyy.parse(start); Date endyear = yyyy.parse(end); Calendar dd = Calendar.getInstance();//å®ä¹æ¥æå®ä¾ dd.setTime(startyear);//è®¾ç½®æ¥æèµ·å§æ¶é´ while (dd.getTime().before(endyear)) {//夿æ¯å¦å°ç»ææ¥æ String str = yyyy.format(dd.getTime()); dd.add(Calendar.YEAR, 1);//è¿è¡å½åæ¥ææä»½å 1 list.add(str); } list.add(yyyy.format(endyear)); } catch (ParseException e) { e.printStackTrace(); } return list; } /** * è·åå½åæ¶é´ å®ä½å°å°æ¶ * æ ¼å¼ä¸º yyyy-MM-dd hh:mm * ä¾ï¼2018-02-27 11:00 * * @return */ public static Date getNowHourDate() { Date now = getNow(); Date result; Calendar calendar = Calendar.getInstance(); calendar.setTime(now); int hour = calendar.get(Calendar.HOUR_OF_DAY); String dateStr = format(now, STR_DATE); dateStr = dateStr + " " + (hour < 10 ? "0" + hour : hour) + ":00"; result = toDate(dateStr, STR_DATE_TIME_MIN); return result; } /** * è·åæ¯æ¥8:11æ11:11çæ¶é´ç¹ * * @return */ public static Date getNowHourDateTo() { Date now = getNow(); Date result; Calendar calendar = Calendar.getInstance(); calendar.setTime(now); int hour = calendar.get(Calendar.HOUR_OF_DAY); if (hour != 8 && hour != 11) { return null; } int minute = calendar.get(Calendar.MINUTE); if (minute < 11) { return null; } String dateStr = format(now, STR_DATE); dateStr = dateStr + " " + (hour < 10 ? "0" + hour : hour) + ":11"; result = toDate(dateStr, STR_DATE_TIME_MIN); return result; } /** * è·åæ¯æ¥8:00ã13:00ã20:00çæ¶é´ç¹ * * @return */ public static List<Date> getHourDateList(Date time) { List<Date> result = new ArrayList<>(); result.add(addHour(time, 8)); result.add(addHour(time, 13)); result.add(addHour(time, 20)); return result; } /** * è·å䏿çæåä¸å¤© * * @return */ public static Date getPreviousMonthLastDay() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_MONTH, 0); return DateUtils.removeTime(calendar.getTime()); } /** * è·åendæ¶é´æç第ä¸å¤© * * @param end æä»½æåä¸å¤© * @return */ public static Date getTheMonthFirstDay(Date end) { Calendar calendar = Calendar.getInstance(); calendar.setTime(end); calendar.set(Calendar.DAY_OF_MONTH, 1); return calendar.getTime(); } public static String secToTimeHour(int time) { String timeStr = null; int hour = 0; if (time <= 0) { return "0å°æ¶"; } else { BigDecimal bigDecimal = new BigDecimal(time); BigDecimal bigDecimal1 = new BigDecimal(3600); BigDecimal hourBigDecimal = new BigDecimal(0); hourBigDecimal = new BigDecimal(String.valueOf(bigDecimal)). divide(new BigDecimal(String.valueOf(bigDecimal1)), 2, BigDecimal.ROUND_HALF_UP); timeStr = hourBigDecimal + "å°æ¶"; } return timeStr; } public static String secToTime(int time) { String timeStr = null; int hour = 0; int minute = 0; int second = 0; if (time <= 0) return " "; else { minute = time / 60; if (minute < 60) { second = time % 60; timeStr = unitFormat(minute) + "å" + unitFormat(second) + " ç§"; } else { hour = minute / 60; minute = minute % 60; second = time - hour * 3600 - minute * 60; timeStr = unitFormat(hour) + "å°æ¶" + unitFormat(minute) + "å" + unitFormat(second) + "ç§"; } } return timeStr; } public static String unitFormat(int i) { String retStr = null; if (i >= 0 && i < 10) retStr = "0" + Integer.toString(i); else retStr = "" + i; return retStr; } /** * éªè¯æ¶é´ * * @param time æ¶é´å符串 HH:mm * @return éªè¯æåè¿åtrueï¼éªè¯å¤±è´¥è¿åfalse */ public static boolean checkTime(String time) { String regex = "([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; return Pattern.matches(regex, time); } /** * è·åæ¯æ¥07:30:00çæ¶é´ç¹ * æ ¼å¼ä¸º yyyy-MM-dd HH:mm:ss * ä¾ï¼2018-05-28 07:30:00 * * @return */ public static Date getHourDateTo(Date now, String time) { String dateStr = format(now, STR_DATE); dateStr = dateStr + " " + time; Date result = toDate(dateStr, STR_DATE_TIME_SMALL); return result; } public static Date setTimeForDay(Date theDate, String planTime) { Calendar cal = Calendar.getInstance(); cal.setTime(theDate); String[] times = planTime.split(":"); cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(times[0])); cal.set(Calendar.MINUTE, Integer.parseInt(times[1])); cal.set(Calendar.SECOND, Integer.parseInt(times[2])); return cal.getTime(); } public static long getTimeWithOutDay(Date d) { return d.getTime() / 1000 % 86400; } /** * @param lo æ¯«ç§æ° * @return String yyyy-MM-dd HH:mm:ss * @Description: longç±»åè½¬æ¢ææ¥æ */ public static String longToDate(long lo) { Date date = new Date(lo); SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sd.format(date); } /** * @param startDate * @param endDate * @return */ public static List<Date> getWeekDays(LocalDate startDate, LocalDate endDate) { List<Date> result = new ArrayList<>(); List<LocalDate> dateList = Stream.iterate(startDate, localDate -> localDate.plusDays(1)) .limit(ChronoUnit.DAYS.between(startDate, endDate) + 1) .filter(localDate -> DayOfWeek.SATURDAY.equals(DayOfWeek.of(localDate.get(ChronoField.DAY_OF_WEEK))) || DayOfWeek.SUNDAY.equals(DayOfWeek.of(localDate.get(ChronoField.DAY_OF_WEEK)))) .collect(Collectors.toList()); dateList.forEach(localDate -> result.add(Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()))); return result; } /** * @param smallDate * @param bigDate * @desc è·åä¸¤ä¸ªæ¥æä¹é´çå¤©æ° */ public static Integer getDaysBetween(String smallDate, String bigDate) throws ParseException { // æ¥ææ ¼å¼ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); // è·åä¸¤ä¸ªæ¥æçæ¶é´æ³ Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(smallDate)); long smallTime = cal.getTimeInMillis(); cal.setTime(sdf.parse(bigDate)); long bigTime = cal.getTimeInMillis(); // ç¸å·®çæ¥æ long days = (bigTime - smallTime) / (1000 * 3600 * 24); // long转int å卿º¢åºæ åµ æ ¹æ®ä¸å¡æ åµç¼è¾catchä¸è¿åå¼ try { return Integer.parseInt(String.valueOf(days)); } catch (NumberFormatException e) { e.printStackTrace(); return 0; } } /** * æ¥æè½¬æ¢ï¼å°æ¥å£è¿åç20180524转为2018-05-24 * * @param str * @return */ public static String dateConvertion(String str) { Date parse = null; String dateString = ""; try { parse = new SimpleDateFormat("yyyyMMdd").parse(str); dateString = new SimpleDateFormat("yyyy-MM-dd").format(parse); } catch (ParseException e) { dateString = null; } return dateString; } } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentMapper.java
@@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Select; import org.jeecg.modules.mdc.entity.Equipment; import java.util.List; /** * @Description: éé设å¤è¡¨ * @Author: liuS @@ -19,15 +21,19 @@ @Select(" SELECT name FROM SysObjects Where XType='U' AND name = '${saveTableName}' ") String checkTableExists(@Param("saveTableName") String saveTableName); @Select(" SELECT COUNT(CollectTime) num FROM ${saveTableName} WHERE CollectTime < '${day}' ") @Select(" SELECT COUNT(CollectTime) num FROM [${saveTableName}] WHERE CollectTime < '${day}' ") Integer checkTableDataNum(@Param("saveTableName") String saveTableName, @Param("day") String day); @Insert(" INSERT INTO ${tableName} SELECT * FROM ${lastTableName} WHERE CollectTime < '${date}' ") @Insert(" INSERT INTO [${tableName}] SELECT * FROM [${lastTableName}] WHERE CollectTime < '${date}' ") void insertTableData(@Param("tableName") String tableName, @Param("lastTableName") String lastTableName, @Param("date") String date); @Delete(" delete from ${tableName} where CollectTime < '${day}' ") @Delete(" delete from [${tableName}] where CollectTime < '${day}' ") void deleteTableData(@Param("tableName") String saveTableName, @Param("day") String day); @Insert(" SELECT * INTO ${tableName} FROM ${lastTableName} WHERE CollectTime < '${date}' ") @Insert(" SELECT * INTO [${tableName}] FROM [${lastTableName}] WHERE CollectTime < '${date}' ") void insertNoTableData(@Param("tableName") String tableName, @Param("lastTableName") String lastTableName, @Param("date") String date); List<Equipment> listByProds(@Param("proIds") List<String> proIds); Equipment findByEquId(@Param("equipmentId") String equipmentId); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
@@ -141,5 +141,7 @@ List<MdcEquipment> findByProIdsAndType(@Param("mdcProductionIds") List<String> mdcProductionIds, @Param("typeList") List<String> typeList); List<String> getEquIdsByProIds(@Param("proIds") List<String> proIds); List<MdcEquipment> getEquipmentList(@Param("allProductionIds") List<String> allProductionIds); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentMapper.xml
@@ -2,4 +2,22 @@ <!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.EquipmentMapper"> <select id="listByProds" resultType="org.jeecg.modules.mdc.entity.Equipment"> SELECT t1.* FROM Equipment t1 LEFT JOIN mdc_equipment t2 ON t1.EquipmentID = t2.equipment_id LEFT JOIN mdc_production_equipment t3 ON t2.id = t3.equipment_id <where> t3.production_id IN <foreach collection="proIds" index="index" item="id" open="(" separator="," close=")"> #{id} </foreach> </where> </select> <select id="findByEquId" resultType="org.jeecg.modules.mdc.entity.Equipment"> SELECT TOP 1 * FROM Equipment WHERE EquipmentID = #{equipmentId} </select> </mapper> lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -354,6 +354,7 @@ #{equipmentType} </foreach> </select> <select id="queryByDepartIdsAndType" resultType="org.jeecg.modules.mdc.entity.MdcEquipment"> SELECT e.*, @@ -372,4 +373,18 @@ </foreach> </select> <select id="getEquIdsByProIds" resultType="java.lang.String"> SELECT t1.equipment_id FROM mdc_equipment t1 LEFT JOIN mdc_production_equipment t2 ON t1.id = t2.equipment_id <where> t2.production_id IN <foreach collection="proIds" index="index" item="id" open="(" separator="," close=")"> #{id} </foreach> </where> </select> </mapper> lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IEquipmentService.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mdc.entity.Equipment; import java.util.List; /** * @Description: éé设å¤è¡¨ * @Author: liuS @@ -48,4 +50,8 @@ * @param day */ void insertNoTableData(String backupTableName, String tableName, String day); List<Equipment> listByProds(List<String> proIds); Equipment findByEquId(String equipmentId); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcAlarmInfoService.java
@@ -11,4 +11,5 @@ */ public interface IMdcAlarmInfoService extends IService<MdcAlarmInfo> { MdcAlarmInfo findAlarmContent(String alarmNo, String equipmentId); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
@@ -240,6 +240,9 @@ */ List<MdcEquipment> findByProIdsAndType(List<String> allProductionIds, List<String> typeList); List<String> getEquIdsByProIds(List<String> proIds); /** * æ ¹æ®ç¨æ·æ¥è¯¢è®¾å¤åè¡¨ä¿¡æ¯ * @return lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentServiceImpl.java
@@ -6,6 +6,9 @@ import org.jeecg.modules.mdc.service.IEquipmentService; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; /** * @Description: éé设å¤è¡¨ * @Author: liuS @@ -39,4 +42,14 @@ public void insertNoTableData(String backupTableName, String tableName, String day) { this.baseMapper.insertNoTableData(backupTableName, tableName, day); } @Override public List<Equipment> listByProds(List<String> proIds) { return this.baseMapper.listByProds(proIds); } @Override public Equipment findByEquId(String equipmentId) { return this.baseMapper.findByEquId(equipmentId); } } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -1070,4 +1070,9 @@ return equipmentIds; } @Override public List<String> getEquIdsByProIds(List<String> proIds) { return this.baseMapper.getEquIdsByProIds(proIds); } } lxzn-module-mdc/pom.xml
@@ -25,6 +25,11 @@ <artifactId>lxzn-module-mdc-common</artifactId> <version>3.4.3</version> </dependency> <dependency> <groupId>org.jeecgframework.boot</groupId> <artifactId>lxzn-module-eam-common</artifactId> <version>3.4.3</version> </dependency> </dependencies> </project> lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,95 @@ package org.jeecg.modules.board.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.board.service.IDtBoardService; import org.jeecg.modules.board.vo.*; import org.jeecg.modules.system.entity.MdcProduction; 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; import java.util.List; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: æ°ååªççæ¿æ¥å£ */ @Slf4j @Api(tags = "æ°ååªççæ¿") @RestController @RequestMapping("/board/dtBoard") public class DtBoardController { @Resource private IDtBoardService dtBoardService; @ApiOperation(value = "æ°ååªççæ¿-è·å车é´åç»", notes = "æ°ååªççæ¿-è·å车é´åç»") @GetMapping("/productionList") public Result<?> productionList() { List<MdcProduction> result = dtBoardService.productionList(); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-è®¾å¤æåº¦å©ç¨ç", notes = "æ°ååªççæ¿-è®¾å¤æåº¦å©ç¨ç") @GetMapping("/equipmentMonthUtilizationRate") public Result<?> equipmentMonthUtilizationRate(@ApiParam(value = "productionId", required = true) String productionId) { List<EquUtilRateMonth> result = dtBoardService.equipmentMonthUtilizationRate(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-设å¤å©ç¨ç", notes = "æ°ååªççæ¿-设å¤å©ç¨ç") @GetMapping("/equipmentUtilizationRate") public Result<?> equipmentUtilizationRate(@ApiParam(value = "productionId", required = true) String productionId) { List<EquUtilRate> result = dtBoardService.equipmentUtilizationRate(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-æåº¦OEE", notes = "æ°ååªççæ¿-æåº¦OEE") @GetMapping("/equipmentMonthOee") public Result<?> equipmentMonthOee(@ApiParam(value = "productionId", required = true) String productionId) { List<EquOeeMonth> result = dtBoardService.equipmentMonthOee(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-设å¤è¿è¡ç¶æç»è®¡", notes = "æ°ååªççæ¿-设å¤è¿è¡ç¶æ") @GetMapping("/equipmentOperationStatistics") public Result<?> equipmentOperationStatistics(@ApiParam(value = "productionId", required = true) String productionId) { EquOperation result = dtBoardService.equipmentOperationStatistics(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-设å¤ä¿¡æ¯", notes = "æ°ååªççæ¿-设å¤ä¿¡æ¯") @GetMapping("/equipmentRunInfo") public Result<?> equipmentRunInfo(@ApiParam(value = "equipmentId", required = true) String equipmentId) { List<EquRunInfo> result = dtBoardService.equipmentRunInfo(equipmentId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-设å¤åæºç»è®¡", notes = "æ°ååªççæ¿-设å¤åæºç»è®¡") @GetMapping("/equDowntimeStatistics") public Result<?> equDowntimeStatistics(@ApiParam(value = "productionId", required = true) String productionId) { List<EquDowntimeInfo> result = dtBoardService.equDowntimeStatistics(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-è®¾å¤æ¥è¦", notes = "æ°ååªççæ¿-è®¾å¤æ¥è¦") @GetMapping("/equAlarmList") public Result<?> equAlarmList(@ApiParam(value = "productionId", required = true) String productionId) { List<EquAlarm> result = dtBoardService.equAlarmList(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-è®¾å¤æ é", notes = "æ°ååªççæ¿-è®¾å¤æ é") @GetMapping("/equAlarmList") public Result<?> equAlarmList(@ApiParam(value = "productionId", required = true) String productionId) { dtBoardService } } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ package org.jeecg.modules.board.service; import org.jeecg.modules.board.vo.*; import org.jeecg.modules.system.entity.MdcProduction; import java.util.List; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: */ public interface IDtBoardService { List<MdcProduction> productionList(); List<EquUtilRateMonth> equipmentMonthUtilizationRate(String productionId); List<EquUtilRate> equipmentUtilizationRate(String productionId); List<EquOeeMonth> equipmentMonthOee(String productionId); EquOperation equipmentOperationStatistics(String productionId); List<EquRunInfo> equipmentRunInfo(String equipmentId); List<EquDowntimeInfo> equDowntimeStatistics(String productionId); List<EquAlarm> equAlarmList(String productionId); } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,340 @@ package org.jeecg.modules.board.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import liquibase.pro.packaged.I; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.DictModel; import org.jeecg.modules.board.service.IDtBoardService; import org.jeecg.modules.board.vo.*; import org.jeecg.modules.mdc.constant.MdcConstant; import org.jeecg.modules.mdc.entity.*; import org.jeecg.modules.mdc.service.*; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.service.IMdcProductionService; import org.jeecg.modules.system.service.ISysDictService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: */ @Service public class DtBoardServiceImpl implements IDtBoardService { @Resource private IMdcProductionService mdcProductionService; @Resource private IMdcEquipmentService mdcEquipmentService; @Resource private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService; @Resource private IMdcOeeInfoService mdcOeeInfoService; @Resource private IEquipmentService equipmentService; @Resource private IEquipmentWorkLineService equipmentWorkLineService; @Resource private IMdcDriveTypeParamConfigService mdcDriveTypeParamConfigService; @Resource private ISysDictService sysDictService; @Resource private IMdcDowntimeService mdcDowntimeService; @Resource private IEquipmentAlarmService equipmentAlarmService; @Resource private IMdcAlarmInfoService mdcAlarmInfoService; /** * 车é´ä¿¡æ¯ */ @Override public List<MdcProduction> productionList() { return mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getOrgType, CommonConstant.ORG_TYPE_2).eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0).orderByAsc(MdcProduction::getProductionOrder)); } /** * è®¾å¤æåº¦å©ç¨ç */ @Override public List<EquUtilRateMonth> equipmentMonthUtilizationRate(String productionId) { // ç»è£ è¿åæ°æ® LocalDate now = LocalDate.now(); Date start = DateUtils.toDate(now.plusMonths(-12).toString(), DateUtils.STR_DATE); Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE); List<String> monthBetween = DateUtils.getMonthBetween(start, end); Map<String, EquUtilRateMonth> resultMap = monthBetween.stream().collect(Collectors.toMap( date -> date, date -> new EquUtilRateMonth(date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ"), (existing, replacement) -> existing, // å¤çé®å²çªçå并彿°ï¼é常ä¸ä¼å²çªï¼ LinkedHashMap::new // æå®ä½¿ç¨LinkedHashMapä¿ææå ¥é¡ºåº )); List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return new ArrayList<>(resultMap.values()); } List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); if (equipmentIdList == null || equipmentIdList.isEmpty()) { return new ArrayList<>(resultMap.values()); } for (String month : monthBetween) { MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findByEquIdsAndMonth(equipmentIdList, month.replaceAll("-", "")); if (mdcEquipmentStatisticalInfo != null) { if (resultMap.containsKey(month)) { EquUtilRateMonth equUtilRateMonth = resultMap.get(month); if (mdcEquipmentStatisticalInfo.getProcessLong().compareTo(BigDecimal.ZERO) > 0) { equUtilRateMonth.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); } resultMap.put(month, equUtilRateMonth); } } } return new ArrayList<>(resultMap.values()); } /** * 设å¤å©ç¨ç(æ¨å¤©) */ @Override public List<EquUtilRate> equipmentUtilizationRate(String productionId) { List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return null; } List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); if (equipmentIdList == null || equipmentIdList.isEmpty()) { return null; } Map<String, EquUtilRate> resultMap = new LinkedHashMap<>(); equipmentIdList.forEach(equipmentId -> { EquUtilRate equUtilRate = new EquUtilRate(equipmentId); resultMap.put(equipmentId, equUtilRate); }); String yesterday = LocalDate.now().plusDays(-1).toString(); List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfoList = mdcEquipmentStatisticalInfoService.findByEquipmentAndDate(equipmentIdList, yesterday.replaceAll("-", "")); if (mdcEquipmentStatisticalInfoList != null && !mdcEquipmentStatisticalInfoList.isEmpty()) { mdcEquipmentStatisticalInfoList.forEach(mdcEquipmentStatisticalInfo -> { if (resultMap.containsKey(mdcEquipmentStatisticalInfo.getEquipmentId())) { EquUtilRate equUtilRate = resultMap.get(mdcEquipmentStatisticalInfo.getEquipmentId()); if (mdcEquipmentStatisticalInfo.getProcessLong().compareTo(BigDecimal.ZERO) > 0) { equUtilRate.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); } resultMap.put(mdcEquipmentStatisticalInfo.getEquipmentId(), equUtilRate); } }); } return new ArrayList<>(resultMap.values()); } /** * æåº¦è®¾å¤ç»¼åæç */ @Override public List<EquOeeMonth> equipmentMonthOee(String productionId) { LocalDate now = LocalDate.now(); Date start = DateUtils.toDate(now.plusMonths(-12).toString(), DateUtils.STR_DATE); Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE); List<String> monthBetween = DateUtils.getMonthBetween(start, end); Map<String, EquOeeMonth> resultMap = monthBetween.stream().collect(Collectors.toMap( date -> date, date -> new EquOeeMonth(date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ"), (existing, replacement) -> existing, // å¤çé®å²çªçå并彿°ï¼é常ä¸ä¼å²çªï¼ LinkedHashMap::new // æå®ä½¿ç¨LinkedHashMapä¿ææå ¥é¡ºåº )); List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return new ArrayList<>(resultMap.values()); } List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); if (equipmentIdList == null || equipmentIdList.isEmpty()) { return new ArrayList<>(resultMap.values()); } for (String month : monthBetween) { BigDecimal oee = mdcOeeInfoService.findByEquIdAndMonth(equipmentIdList, month); if (oee != null) { EquOeeMonth equOeeMonth = resultMap.get(month); equOeeMonth.setOee(oee.setScale(2, RoundingMode.HALF_UP)); resultMap.put(month, equOeeMonth); } } return new ArrayList<>(resultMap.values()); } /** * 设å¤ç¶æç»è®¡ */ @Override public EquOperation equipmentOperationStatistics(String productionId) { EquOperation equOperation = new EquOperation(); List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return equOperation; } List<Equipment> equipmentList = equipmentService.listByProds(proIds); if (equipmentList == null || equipmentList.isEmpty()) { return equOperation; } for (Equipment equipment : equipmentList) { if (equipment.getOporation() != null) { switch (equipment.getOporation()) { case 1: case 2: equOperation.setStandby(equOperation.getStandby() + 1); break; case 3: equOperation.setRun(equOperation.getRun() + 1); break; case 22: equOperation.setAlarm(equOperation.getAlarm() + 1); break; default: equOperation.setShutdown(equOperation.getShutdown() + 1); break; } } else { equOperation.setShutdown(equOperation.getShutdown() + 1); } } return equOperation; } /** * 设å¤è¿è¡ä¿¡æ¯ */ @Override public List<EquRunInfo> equipmentRunInfo(String equipmentId) { List<EquRunInfo> equRunInfoList = new ArrayList<>(); Equipment equipment = equipmentService.findByEquId(equipmentId); if (equipment != null) { //å¡«å 设å¤åºç¡ä¿¡æ¯ equRunInfoList.add(new EquRunInfo("设å¤åç§°", equipment.getEquipmentname(), "")); equRunInfoList.add(new EquRunInfo("设å¤ç¼å·", equipment.getEquipmentid(), "")); if (equipment.getOporation() != null && equipment.getOporation() != 0) { String saveTableName = equipment.getSavetablename(); Map<String, Object> mapData = equipmentWorkLineService.getDataList(saveTableName); if (mapData != null) { //è·å MDC 驱å¨å¯¹åºçå±ç¤ºåæ° å¹¶æ ¹æ®key æ¼è£ ä» workData æ¥è¯¢çæ°æ® List<MdcDriveTypeParamConfig> mdcDriveTypeParamList = mdcDriveTypeParamConfigService.getShowDriveParam(equipment.getDrivetype()); if (mdcDriveTypeParamList != null && !mdcDriveTypeParamList.isEmpty()) { List<DictModel> dictItems = sysDictService.getDictItems(CommonConstant.DICT_EQUIPMENT_RUN_UNIT); Map<String, DictModel> resultMap = new HashMap<>(); dictItems.forEach(dictModel -> { resultMap.put(dictModel.getText(), dictModel); }); for (MdcDriveTypeParamConfig mdcDriveTypeParamConfig : mdcDriveTypeParamList) { EquRunInfo equRunInfo = new EquRunInfo(); String englishName = mdcDriveTypeParamConfig.getEnglishName(); String chineseName = mdcDriveTypeParamConfig.getChineseName(); equRunInfo.setKey(chineseName); if (mapData.containsKey(englishName)) { Object object = mapData.get(englishName); String value = ""; if ("CollectTime".equals(englishName)) { Date date = object == null ? null : (Date) object; value = DateUtils.format(date, DateUtils.STR_DATE_TIME_SMALL); } else if ("ZUOLAN".equals(equipment.getDrivetype()) && "spindlespeed".equals(englishName) && equipment.getOporation() == 3) { // ZUOLAN设å¤ä¸»è½´è½¬éåæ®µspindlespeed value = String.valueOf(((new Random().nextInt(35)) + 1) * 100); } else if ("ZUOLAN".equals(equipment.getDrivetype()) && "spindleload".equals(englishName) && equipment.getOporation() == 3) { // ZUOLAN设å¤ä¸»è½´è´è·å段spindleload value = String.valueOf(Integer.valueOf(new Random().nextInt(21))); } else if ("ZUOLAN".equals(equipment.getDrivetype()) && "spindlebeilv".equals(englishName) && equipment.getOporation() == 3) { // ZUOLAN设å¤ä¸»è½´åçåæ®µspindlebeilv value = String.valueOf((new Random().nextInt(13)) * 10); } else if ("ZUOLAN".equals(equipment.getDrivetype()) && "feedbeilv".equals(englishName) && equipment.getOporation() == 3) { // ZUOLAN设å¤è¿ç»åçåæ®µfeedbeilv value = String.valueOf((new Random().nextInt(13)) * 10); } else { value = object == null ? "" : object.toString(); } equRunInfo.setValue(value); // 设置åä½ if (resultMap.containsKey(chineseName)) { DictModel dictModel = resultMap.get(chineseName); equRunInfo.setUnit(dictModel.getValue()); } equRunInfoList.add(equRunInfo); } } } } } } return equRunInfoList; } /** * 设å¤åæºç»è®¡ */ @Override public List<EquDowntimeInfo> equDowntimeStatistics(String productionId) { List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return null; } List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); if (equipmentIdList == null || equipmentIdList.isEmpty()) { return null; } LocalDate end = LocalDate.now(); LocalDate start = end.plusDays(-30); List<EquDowntimeInfo> result = mdcDowntimeService.equDowntimeStatistics(equipmentIdList, start.toString(), end.toString()); result.forEach(equDowntimeInfo -> { equDowntimeInfo.setDuration(equDowntimeInfo.getDuration().setScale(2, RoundingMode.HALF_UP)); }); return result; } /** * è®¾å¤æ¥è¦å表 */ @Override public List<EquAlarm> equAlarmList(String productionId) { List<EquAlarm> result = new ArrayList<>(); List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return null; } List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); if (equipmentIdList == null || equipmentIdList.isEmpty()) { return null; } List<EquipmentAlarm> equipmentAlarmList = equipmentAlarmService.list(new LambdaQueryWrapper<EquipmentAlarm>().in(EquipmentAlarm::getEquipmentid, equipmentIdList).orderByDesc(EquipmentAlarm::getCollecttime).isNotNull(EquipmentAlarm::getAlarmNo).last("TOP 15")); if (equipmentAlarmList == null || equipmentAlarmList.isEmpty()) { return null; } for (EquipmentAlarm equipmentAlarm : equipmentAlarmList) { MdcAlarmInfo mdcAlarmInfo = mdcAlarmInfoService.findAlarmContent(equipmentAlarm.getAlarmNo(), equipmentAlarm.getEquipmentid()); EquAlarm equAlarm = new EquAlarm(); equAlarm.setEquipmentId(equipmentAlarm.getEquipmentid()); if (mdcAlarmInfo != null) { equAlarm.setAlarmInfo(mdcAlarmInfo.getAlarmContent()); } else { equAlarm.setAlarmInfo(equipmentAlarm.getAlarmContent()); } result.add(equAlarm); } return result; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAlarm.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package org.jeecg.modules.board.vo; import lombok.Data; /** * @Author: Lius * @CreateTime: 2025-06-09 * @Description: è®¾å¤æ¥è¦ä¿¡æ¯ */ @Data public class EquAlarm { /** * 设å¤ç¼å· */ private String equipmentId; /** * æ¥è¦ä¿¡æ¯ */ private String alarmInfo; } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquDowntimeInfo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package org.jeecg.modules.board.vo; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-06-09 * @Description: 设å¤åæºç»è®¡ */ @Data public class EquDowntimeInfo { /** * åæºåå */ private String shutdownInfo; /** * åæºæ¶é¿ */ private BigDecimal duration; } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOeeMonth.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package org.jeecg.modules.board.vo; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: */ @Data public class EquOeeMonth { private String month; private BigDecimal oee = BigDecimal.ZERO; public EquOeeMonth(String month) { this.month = month; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOperation.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package org.jeecg.modules.board.vo; import lombok.Data; /** * @Author: Lius * @CreateTime: 2025-06-06 * @Description: */ @Data public class EquOperation { private Integer shutdown = 0; private Integer alarm = 0; private Integer standby = 0; private Integer run = 0; } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRunInfo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package org.jeecg.modules.board.vo; import lombok.Data; /** * @Author: Lius * @CreateTime: 2025-06-06 * @Description: */ @Data public class EquRunInfo { private String key; private String value; private String unit; public EquRunInfo() { } public EquRunInfo(String key, String value, String unit) { this.key = key; this.value = value; this.unit = unit; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquStatus.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package org.jeecg.modules.board.vo; import lombok.Data; /** * @Author: Lius * @CreateTime: 2025-06-05 * @Description: */ @Data public class EquStatus { private String equipmentId; private Integer state; private String plantName; } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRate.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package org.jeecg.modules.board.vo; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: */ @Data public class EquUtilRate { private String deviceNum; private BigDecimal utilizationRate = BigDecimal.ZERO; public EquUtilRate(String deviceNum) { this.deviceNum = deviceNum; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRateMonth.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package org.jeecg.modules.board.vo; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: */ @Data public class EquUtilRateMonth { private String month; private BigDecimal utilizationRate = BigDecimal.ZERO; public EquUtilRateMonth(String month) { this.month = month; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOverallEquipmentEfficiencyJob.java
ÎļþÒÑɾ³ý lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/WebsocketPushEquStatusJob.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,108 @@ package org.jeecg.modules.mdc.job; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.constant.WebsocketConst; import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.board.vo.EquStatus; import org.jeecg.modules.mdc.entity.Equipment; import org.jeecg.modules.mdc.service.IEquipmentService; import org.jeecg.modules.mdc.util.ThrowableUtil; import org.jeecg.modules.message.websocket.WebSocket; 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.IMdcProductionService; import org.quartz.*; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @Author: Lius * @CreateTime: 2025-06-05 * @Description: websocketæ¨é设å¤ç¶æä»»å¡ */ @DisallowConcurrentExecution @Slf4j public class WebsocketPushEquStatusJob implements Job { @Resource private IQuartzJobService quartzJobService; @Resource private ISysQuartzLogService sysQuartzLogService; @Resource private RedisUtil redisUtil; @Resource private WebSocket webSocket; @Resource private IEquipmentService equipmentService; @Resource private IMdcProductionService mdcProductionService; final private static String redisKey = "board:equipment:status:"; @Override public void execute(JobExecutionContext context) 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()); } long startTime = System.currentTimeMillis(); try { List<Equipment> equipmentList = equipmentService.list(); if (equipmentList != null && !equipmentList.isEmpty()) { List<EquStatus> equStatusList = new ArrayList<>(); for (Equipment equipment : equipmentList) { if (equipment.getOporation() == null) { equipment.setOporation(0); } String key = redisKey + equipment.getEquipmentid(); if (redisUtil.hasKey(key)) { Integer status = (Integer) redisUtil.get(key); if (!status.equals(equipment.getOporation())) { EquStatus equStatus = new EquStatus(); equStatus.setEquipmentId(equipment.getEquipmentid()); equStatus.setState(equipment.getOporation()); // éè¿equipmentIdè·å设å¤è½¦é´åç§° String productionName = mdcProductionService.findProName(equipment.getEquipmentid()); equStatus.setPlantName(productionName); equStatusList.add(equStatus); redisUtil.set(key, equipment.getOporation()); } } else { EquStatus equStatus = new EquStatus(); equStatus.setEquipmentId(equipment.getEquipmentid()); equStatus.setState(equipment.getOporation()); // éè¿equipmentIdè·å设å¤è½¦é´åç§° String productionName = mdcProductionService.findProName(equipment.getEquipmentid()); equStatus.setPlantName(productionName); equStatusList.add(equStatus); redisUtil.set(key, equipment.getOporation()); } } JSONObject jsonObject = new JSONObject(); jsonObject.put(WebsocketConst.MSG_CMD, "equStatus"); jsonObject.put("data", equStatusList); webSocket.sendMessage(jsonObject.toJSONString()); } quartzLog.setIsSuccess(0); } catch (Exception e) { quartzLog.setIsSuccess(-1); quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); } 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/MdcAlarmInfoMapper.java
@@ -1,6 +1,7 @@ package org.jeecg.modules.mdc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.entity.MdcAlarmInfo; /** @@ -11,4 +12,5 @@ */ public interface MdcAlarmInfoMapper extends BaseMapper<MdcAlarmInfo> { MdcAlarmInfo findAlarmContent(@Param("alarmNo") String alarmNo, @Param("equipmentId") String equipmentId); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.board.vo.EquDowntimeInfo; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.vo.MdcDowntimeVo; @@ -20,4 +21,6 @@ IPage<MdcDowntimeDto> pageList(Page<MdcDowntimeDto> page, @Param("mdcDowntimeVo") MdcDowntimeVo mdcDowntimeVo); List<MdcDowntime> findPlanTimeDuration(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate, @Param("closeType") String closeType); List<EquDowntimeInfo> equDowntimeStatistics(@Param("equipmentIdList") List<String> equipmentIdList, @Param("start") String start, @Param("end") String end); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java
@@ -5,6 +5,8 @@ import org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto; import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; import java.util.List; /** * @Description: 设å¤åæ¥è¿è¡æ°æ®è¡¨ * @Author: jeecg-boot @@ -28,4 +30,8 @@ Integer selectProcessLong(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate); MdcEquipmentStatisticalDto findByEquipmentAndMonth(@Param("equipmentId") String equipmentId, @Param("date") String date); MdcEquipmentStatisticalInfo findByEquIdsAndMonth(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month); List<MdcEquipmentStatisticalInfo> findByEquipmentAndDate(@Param("equipmentIdList") List<String> equipmentIdList, @Param("date") String date); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java
@@ -7,6 +7,9 @@ import org.jeecg.modules.mdc.entity.MdcOeeInfo; import org.jeecg.modules.mdc.vo.MdcOeeInfoVo; import java.math.BigDecimal; import java.util.List; /** * @Description: OEE表 * @Author: lius @@ -22,4 +25,6 @@ * @return */ IPage<MdcOeeInfo> pageList(Page<MdcOeeInfo> page, @Param("mdcOeeInfoVo") MdcOeeInfoVo mdcOeeInfoVo); BigDecimal findByEquIdAndMonth(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcAlarmInfoMapper.xml
@@ -2,4 +2,13 @@ <!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.MdcAlarmInfoMapper"> <select id="findAlarmContent" resultType="org.jeecg.modules.mdc.entity.MdcAlarmInfo"> SELECT t1.* FROM mdc_alarm_info t1 LEFT JOIN mdc_equipment t2 ON t1.drive_type = t2.drive_type WHERE t2.equipment_id = #{equipmentId} AND t1.alarm_code = #{alarmNo} </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml
@@ -40,4 +40,24 @@ AND t2.downtime_type = #{closeType} AND t1.the_date = #{validDate} </select> <select id="equDowntimeStatistics" resultType="org.jeecg.modules.board.vo.EquDowntimeInfo"> SELECT t2.downtime_description AS shutdown_info, SUM ( DATEDIFF( SECOND, t1.start_date, t1.end_date ) ) / 3600.0 AS duration_hours FROM mdc_downtime t1 LEFT JOIN mdc_downtime_reason t2 ON t1.reason_id = t2.id WHERE t1.reason_id != '' AND t1.the_date BETWEEN #{start} AND #{end} AND t1.equipment_id IN <foreach collection="equipmentIdList" item="equipmentId" index="index" open="(" close=")" separator=","> #{ equipmentId } </foreach> GROUP BY t2.downtime_description ORDER BY duration_hours DESC </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml
@@ -26,4 +26,34 @@ WHERE equipment_id = #{equipmentId} AND the_date LIKE CONCAT(#{date}, '%') </select> <select id="findByEquIdsAndMonth" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo"> SELECT AVG(open_long) openLong, AVG(close_long) closeLong, AVG(wait_long) waitLong, AVG(process_long) processLong, AVG(error_long) errorLong FROM mdc_equipment_statistical_info WHERE equipment_id IN <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=","> #{ id } </foreach> AND the_date LIKE CONCAT(#{month}, '%') </select> <select id="findByEquipmentAndDate" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo"> SELECT * FROM mdc_equipment_statistical_info WHERE equipment_id IN <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=","> #{ id } </foreach> AND the_date = #{date} </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOeeInfoMapper.xml
@@ -27,4 +27,17 @@ </where> ORDER BY the_date DESC, equipment_id ASC </select> <select id="findByEquIdAndMonth" resultType="java.math.BigDecimal"> SELECT AVG(oee) FROM mdc_oee_info WHERE the_date LIKE CONCAT(#{month}, '%') AND equipment_id IN <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=","> #{ id } </foreach> </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java
@@ -3,11 +3,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.board.vo.EquDowntimeInfo; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.vo.MdcDowntimeVo; import javax.servlet.http.HttpServletRequest; import java.util.List; /** * @Description: å¾ æºåæºè¡¨ @@ -35,4 +37,6 @@ * @return */ Integer findPlanTimeDuration(String equipmentId, String validDate, String closeType); List<EquDowntimeInfo> equDowntimeStatistics(List<String> equipmentIdList, String start, String end); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java
@@ -4,6 +4,8 @@ import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; /** * @Description: 设å¤åæ¥è¿è¡æ°æ®è¡¨ * @Author: lius @@ -29,4 +31,8 @@ Integer selectProcessLong(String equipmentId, String validDate); MdcEquipmentStatisticalDto findByEquipmentAndMonth(String equipmentId, String date); MdcEquipmentStatisticalInfo findByEquIdsAndMonth(List<String> equipmentIdList, String month); List<MdcEquipmentStatisticalInfo> findByEquipmentAndDate(List<String> equipmentIdList, String date); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java
@@ -9,6 +9,8 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.List; /** * @Description: OEE表 @@ -44,4 +46,5 @@ */ void computeOee(MdcOeeComputeVo mdcOeeComputeVo); BigDecimal findByEquIdAndMonth(List<String> equipmentIdList, String month); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcAlarmInfoServiceImpl.java
@@ -15,4 +15,8 @@ @Service public class MdcAlarmInfoServiceImpl extends ServiceImpl<MdcAlarmInfoMapper, MdcAlarmInfo> implements IMdcAlarmInfoService { @Override public MdcAlarmInfo findAlarmContent(String alarmNo, String equipmentId) { return this.baseMapper.findAlarmContent(alarmNo, equipmentId); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceImpl.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.jeecg.modules.board.vo.EquDowntimeInfo; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.mapper.MdcDowntimeMapper; @@ -68,6 +69,11 @@ return result; } @Override public List<EquDowntimeInfo> equDowntimeStatistics(List<String> equipmentIdList, String start, String end) { return this.baseMapper.equDowntimeStatistics(equipmentIdList, start, end); } private List<String> getEquipmentIds(String userId, MdcDowntimeVo mdcDowntimeVo) { if (StringUtils.isNotEmpty(mdcDowntimeVo.getEquipmentId())) { return Collections.singletonList(mdcDowntimeVo.getEquipmentId()); lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java
@@ -323,4 +323,14 @@ public MdcEquipmentStatisticalDto findByEquipmentAndMonth(String equipmentId, String date) { return this.baseMapper.findByEquipmentAndMonth(equipmentId, date); } @Override public MdcEquipmentStatisticalInfo findByEquIdsAndMonth(List<String> equipmentIdList, String month) { return this.baseMapper.findByEquIdsAndMonth(equipmentIdList, month); } @Override public List<MdcEquipmentStatisticalInfo> findByEquipmentAndDate(List<String> equipmentIdList, String date) { return this.baseMapper.findByEquipmentAndDate(equipmentIdList, date); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java
@@ -243,4 +243,9 @@ super.saveBatch(result); } @Override public BigDecimal findByEquIdAndMonth(List<String> equipmentIdList, String month) { return this.baseMapper.findByEquIdAndMonth(equipmentIdList, month); } } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
@@ -2,6 +2,9 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.annotation.Resource; import javax.websocket.*; import javax.websocket.server.PathParam; @@ -23,7 +26,7 @@ @Slf4j @ServerEndpoint("/websocket/{userId}") public class WebSocket { /**线ç¨å®å ¨Map*/ private static ConcurrentHashMap<String, Session> sessionPool = new ConcurrentHashMap<>(); @@ -34,14 +37,23 @@ @Resource private JeecgRedisClient jeecgRedisClient; private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); //==========ãwebsocketæ¥åãæ¨éæ¶æ¯çæ¹æ³ ââ å ·ä½æå¡èç¹æ¨éwsæ¶æ¯ã======================================================================================== @OnOpen public void onOpen(Session session, @PathParam(value = "userId") String userId) { try { sessionPool.put(userId, session); log.info("ãç³»ç» WebSocketãææ°çè¿æ¥ï¼æ»æ°ä¸º:" + sessionPool.size()); // å¯å¨å¿è·³ä»»å¡ï¼æ¯åéåé䏿¬¡å¿è·³æ¶æ¯ // scheduler.scheduleAtFixedRate(() -> { // pushMessage(userId, "{\"cmd\":\"" + WebsocketConst.CMD_USER + "\",\"txt\":\"" + "å¿è·³ååº" + "\"}"); // }, 0, 1, TimeUnit.MINUTES); } catch (Exception e) { log.error("ãç³»ç» WebSocketãonOpen å¼å¸¸", e); } } @@ -50,6 +62,8 @@ try { sessionPool.remove(userId); log.info("ãç³»ç» WebSocketãè¿æ¥æå¼ï¼æ»æ°ä¸º:" + sessionPool.size()); // åæ¶å¿è·³ä»»å¡ scheduler.shutdown(); } catch (Exception e) { e.printStackTrace(); } @@ -93,12 +107,11 @@ log.error(e.getMessage(), e); } } log.info("ãç³»ç» WebSocketãç¾¤åæ¶æ¯:" + message); log.info("ã3D宿¶æ°æ® WebSocketãæ¶æ¯" ); } catch (Exception e) { log.error(e.getMessage(), e); } } /** * wsæ¥å客æ·ç«¯æ¶æ¯ @@ -110,14 +123,14 @@ }else{ log.debug("ãç³»ç» WebSocketãæ¶å°å®¢æ·ç«¯æ¶æ¯:" + message); } //------------------------------------------------------------------------------ JSONObject obj = new JSONObject(); //ä¸å¡ç±»å obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK); //æ¶æ¯å 容 obj.put(WebsocketConst.MSG_TXT, "å¿è·³ååº"); this.pushMessage(userId, obj.toJSONString()); // JSONObject obj = new JSONObject(); // //ä¸å¡ç±»å // obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK); // //æ¶æ¯å 容 // obj.put(WebsocketConst.MSG_TXT, "å¿è·³ååº"); // this.pushMessage(userId, obj.toJSONString()); //------------------------------------------------------------------------------ } @@ -129,11 +142,11 @@ */ @OnError public void onError(Session session, Throwable t) { log.warn("ãç³»ç» WebSocketãæ¶æ¯åºç°é误"); log.warn("ãç³»ç» WebSocketãæ¶æ¯åºç°é误",t); //t.printStackTrace(); } //==========ãç³»ç» WebSocketæ¥åãæ¨éæ¶æ¯çæ¹æ³ ââ å ·ä½æå¡èç¹æ¨éwsæ¶æ¯ã======================================================================================== //==========ãéç¨redisåå¸è®¢é 模å¼ââæ¨éæ¶æ¯ã======================================================================================== /** @@ -187,5 +200,5 @@ } } //=======ãéç¨redisåå¸è®¢é 模å¼ââæ¨éæ¶æ¯ã========================================================================================== } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java
@@ -61,4 +61,8 @@ List<String> findTeamValue(@Param("userId") String userId, @Param("productionList") List<String> productionList); List<String> findProIdsByUId(@Param("userId") String userId, @Param("allProductionIds") List<String> allProductionIds); List<String> findChildByProId(@Param("productionId") String productionId); String findProName(@Param("equipmentId") String equipmentId); } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml
@@ -138,4 +138,67 @@ </foreach> AND user_id = #{userId} </select> <select id="findChildByProId" resultType="java.lang.String"> WITH temp ( id ) AS ( SELECT id FROM mdc_production WHERE id = #{ productionId } AND mdc_flag = '1' UNION ALL SELECT a.id FROM mdc_production a INNER JOIN temp ON a.parent_id = temp.id WHERE a.mdc_flag = '1' ) SELECT * FROM temp </select> <select id="findProName" resultType="java.lang.String"> WITH production_hierarchy AS ( SELECT t3.id, t3.parent_id, t3.production_name, t3.org_type, 0 AS level FROM mdc_equipment t1 JOIN mdc_production_equipment t2 ON t1.id = t2.equipment_id JOIN mdc_production t3 ON t2.production_id = t3.id WHERE t1.equipment_id = #{equipmentId} UNION ALL SELECT t4.id, t4.parent_id, t4.production_name, t4.org_type, ph.level + 1 FROM production_hierarchy ph JOIN mdc_production t4 ON ph.parent_id = t4.id WHERE ph.parent_id IS NOT NULL ) SELECT TOP 1 production_name FROM production_hierarchy WHERE org_type = 2 ORDER BY level ASC </select> </mapper> lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java
@@ -175,4 +175,14 @@ * @return */ List<String> findProIdsByUId(String userId, List<String> allProductionIds); /** * * @param productionId * @return */ List<String> findChildByProId(String productionId); String findProName(String equipmentId); } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
@@ -627,4 +627,14 @@ super.update(updateWrapper); } } @Override public List<String> findChildByProId(String productionId) { return this.baseMapper.findChildByProId(productionId); } @Override public String findProName(String equipmentId) { return this.baseMapper.findProName(equipmentId); } }