From 96be94fc3c33c49e15b538bebbea455e839a7a7b Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期二, 10 六月 2025 16:32:12 +0800 Subject: [PATCH] 数字孪生看板接口 维修service提取到公共模块 --- lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java | 2 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java | 3 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml | 30 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml | 15 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java | 3 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java | 0 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOeeInfoMapper.xml | 13 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRate.java | 20 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOeeMonth.java | 20 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java | 0 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java | 0 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java | 0 lxzn-boot-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java | 25 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml | 0 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java | 10 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java | 6 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java | 6 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java | 4 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java | 0 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcAlarmInfoMapper.xml | 9 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekMaintenanceOrderDetail.java | 0 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml | 63 + lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentServiceImpl.java | 13 lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java | 12 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java | 0 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcAlarmInfoServiceImpl.java | 4 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java | 5 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrderDetail.java | 0 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquStatus.java | 15 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IEquipmentService.java | 6 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcAlarmInfoService.java | 1 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/WebsocketPushEquStatusJob.java | 108 ++ lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java | 0 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOperation.java | 16 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceImpl.java | 6 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java | 0 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java | 0 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java | 0 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java | 3 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java | 0 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java | 30 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml | 0 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentMapper.java | 14 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquDowntimeInfo.java | 23 lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java | 1 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcAlarmInfoMapper.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java | 10 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java | 340 ++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRateMonth.java | 20 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java | 0 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java | 0 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml | 20 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java | 4 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentMapper.xml | 18 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java | 95 ++ lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/util/DateUtils.java | 1089 ++++++++++++++++++++++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRunInfo.java | 24 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java | 0 /dev/null | 74 - lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java | 0 lxzn-module-mdc/pom.xml | 5 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java | 10 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java | 39 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAlarm.java | 21 68 files changed, 2,163 insertions(+), 108 deletions(-) diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java b/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java index 2343268..a258837 100644 --- a/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java +++ b/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; diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java b/lxzn-boot-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java index 55417e1..bfbd96a 100644 --- a/lxzn-boot-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java +++ b/lxzn-boot-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java @@ -14,6 +14,7 @@ /** * websocket 鍓嶇灏唗oken鏀惧埌瀛愬崗璁噷浼犲叆 涓庡悗绔缓绔嬭繛鎺ユ椂闇�瑕佺敤鍒癶ttp鍗忚锛屾澶勭敤浜庢牎楠宼oken鐨勬湁鏁堟�� + * * @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瀹夊叏鏍¢獙锛孭ath = {}锛宼oken:{}", request.getRequestURI(), token); + log.debug("Websocket杩炴帴 Token瀹夊叏鏍¢獙锛孭ath = {}锛宼oken:{}", request.getRequestURI(), token); - try { - TokenUtils.verifyToken(token, commonApi, redisUtil); - } catch (Exception exception) { - //log.error("Websocket杩炴帴 Token瀹夊叏鏍¢獙澶辫触锛孖P:{}, Token:{}, Path = {}锛屽紓甯革細{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); - log.debug("Websocket杩炴帴 Token瀹夊叏鏍¢獙澶辫触锛孖P:{}, Token:{}, Path = {}锛屽紓甯革細{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); - return; + try { + TokenUtils.verifyToken(token, commonApi, redisUtil); + } catch (Exception exception) { + //log.error("Websocket杩炴帴 Token瀹夊叏鏍¢獙澶辫触锛孖P:{}, Token:{}, Path = {}锛屽紓甯革細{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); + log.debug("Websocket杩炴帴 Token瀹夊叏鏍¢獙澶辫触锛孖P:{}, 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); } diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java index 982587e..93a33b0 100644 --- a/lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java +++ b/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"); diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrderDetail.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrderDetail.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrderDetail.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrderDetail.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamWeekMaintenanceOrderDetail.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekMaintenanceOrderDetail.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamWeekMaintenanceOrderDetail.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekMaintenanceOrderDetail.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java similarity index 94% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java index d3616d8..922934e 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java +++ b/lxzn-module-eam-common/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; diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java similarity index 95% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java index 15b0dd3..2bf13c2 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java +++ b/lxzn-module-eam-common/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; diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/util/DateUtils.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/util/DateUtils.java new file mode 100644 index 0000000..fd0d32f --- /dev/null +++ b/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澶╃殑鏃堕棿鍖洪棿锛宔ndTime 涓哄綋澶╃殑鍚庝竴澶�0鐐癸紝 + * startTime 涓篹ndTime鍓峝ays澶� + * + * @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鐨勬棩鏈熸牸寮弝yyy-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鐨勬棩鏈熸牸寮弝yyyMMdd + * + * @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锛岄獙璇佸け璐ヨ繑鍥瀎alse + */ + 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杞琲nt 瀛樺湪婧㈠嚭鎯呭喌 鏍规嵁涓氬姟鎯呭喌缂栬緫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; + } +} diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentMapper.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentMapper.java index 5cdf91e..bec930b 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentMapper.java +++ b/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); } diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java index e0e0e88..0a71450 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java +++ b/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); } diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentMapper.xml b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentMapper.xml index b504640..126990b 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentMapper.xml +++ b/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> \ No newline at end of file diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml index 80df077..3d0755f 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml +++ b/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> diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IEquipmentService.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IEquipmentService.java index 8dfe74b..9649a2c 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IEquipmentService.java +++ b/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); } diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcAlarmInfoService.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcAlarmInfoService.java index aee61dc..2b65899 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcAlarmInfoService.java +++ b/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); } diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java index e4e1ba3..f3493f9 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java +++ b/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 diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentServiceImpl.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentServiceImpl.java index 3db46bc..03126fb 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentServiceImpl.java +++ b/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); + } } diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java index 9f09066..c4d6284 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java +++ b/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); + } + } diff --git a/lxzn-module-mdc/pom.xml b/lxzn-module-mdc/pom.xml index bfb2188..51cc508 100644 --- a/lxzn-module-mdc/pom.xml +++ b/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> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java new file mode 100644 index 0000000..861621f --- /dev/null +++ b/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 + } + + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java new file mode 100644 index 0000000..07069e7 --- /dev/null +++ b/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); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java new file mode 100644 index 0000000..bf79693 --- /dev/null +++ b/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 椹卞姩瀵瑰簲鐨勫睍绀哄弬鏁� 骞舵牴鎹甼ey 鎷艰浠� 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璁惧涓昏酱杞�熷瓧娈祍pindlespeed + 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; + } + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAlarm.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAlarm.java new file mode 100644 index 0000000..63ac695 --- /dev/null +++ b/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; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquDowntimeInfo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquDowntimeInfo.java new file mode 100644 index 0000000..0e08d53 --- /dev/null +++ b/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; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOeeMonth.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOeeMonth.java new file mode 100644 index 0000000..ecf89aa --- /dev/null +++ b/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; + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOperation.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOperation.java new file mode 100644 index 0000000..7788f84 --- /dev/null +++ b/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; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRunInfo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRunInfo.java new file mode 100644 index 0000000..a394dbd --- /dev/null +++ b/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; + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquStatus.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquStatus.java new file mode 100644 index 0000000..aed1047 --- /dev/null +++ b/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; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRate.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRate.java new file mode 100644 index 0000000..879f6b2 --- /dev/null +++ b/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; + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRateMonth.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRateMonth.java new file mode 100644 index 0000000..8983c4c --- /dev/null +++ b/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; + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOverallEquipmentEfficiencyJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOverallEquipmentEfficiencyJob.java deleted file mode 100644 index 304cc7b..0000000 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOverallEquipmentEfficiencyJob.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.jeecg.modules.mdc.job; - -import lombok.extern.slf4j.Slf4j; -import org.jeecg.common.util.DateUtils; -import org.jeecg.modules.mdc.service.IMdcOverallEquipmentEfficiencyService; -import org.jeecg.modules.mdc.util.ThrowableUtil; -import org.jeecg.modules.quartz.entity.QuartzJob; -import org.jeecg.modules.quartz.entity.SysQuartzLog; -import org.jeecg.modules.quartz.service.IQuartzJobService; -import org.jeecg.modules.quartz.service.ISysQuartzLogService; -import org.jeecg.modules.system.service.ISysAnnouncementService; -import org.quartz.*; - -import javax.annotation.Resource; -import java.util.Date; -import java.util.List; - -/** - * @Description: 瀹氭椂璁$畻璁惧缁煎悎鏁堢巼OEE浠诲姟 - * @author: LiuS - * @create: 2023-07-24 10:26 - */ -@PersistJobDataAfterExecution -@DisallowConcurrentExecution -@Slf4j -public class RunningOverallEquipmentEfficiencyJob implements Job { - - /** - * 鑻ュ弬鏁板彉閲忓悕淇敼 QuartzJobController涓篃闇�瀵瑰簲淇敼 鏃堕棿锛� yyyyMMdd 渚嬶細 20230414 - */ - private String parameter; - - public void setParameter(String parameter) { - this.parameter = parameter; - } - - @Resource - private IQuartzJobService quartzJobService; - - @Resource - private ISysAnnouncementService sysAnnouncementService; - - @Resource - private ISysQuartzLogService sysQuartzLogService; - - @Resource - private IMdcOverallEquipmentEfficiencyService mdcOverallEquipmentEfficiencyService; - - @Override - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - SysQuartzLog quartzLog = new SysQuartzLog(); - quartzLog.setCreateTime(new Date()); - List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName()); - if (byJobClassName != null && !byJobClassName.isEmpty()) { - quartzLog.setJobId(byJobClassName.get(0).getId()); - } - quartzLog.setParams(this.parameter); - log.info("瀹氭椂璁$畻璁惧缁煎悎鏁堢巼OEE浠诲姟 RunningOverallEquipmentEfficiencyJob start! 鏃堕棿:" + DateUtils.now(), this.parameter); - long startTime = System.currentTimeMillis(); - try { - mdcOverallEquipmentEfficiencyService.runningOverallEquipmentEfficiency(this.parameter); - quartzLog.setIsSuccess(0); - } catch (Exception e) { - quartzLog.setIsSuccess(-1); - quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); - // 鍙戦�佹秷鎭�氱煡 - sysAnnouncementService.jobSendMessage("瀹氭椂缁熻娈垫椂闂翠换鍔�", quartzLog.getExceptionDetail()); - } - long endTime = System.currentTimeMillis(); - quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); - sysQuartzLogService.save(quartzLog); - } - -} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/WebsocketPushEquStatusJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/WebsocketPushEquStatusJob.java new file mode 100644 index 0000000..b0a70c8 --- /dev/null +++ b/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); + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcAlarmInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcAlarmInfoMapper.java index 67a2a02..486151e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcAlarmInfoMapper.java +++ b/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); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java index 5446655..b1ea9c5 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java +++ b/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); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java index 03bb2bd..5843f5a 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java +++ b/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); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java index 041a098..af54a04 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java +++ b/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); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcAlarmInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcAlarmInfoMapper.xml index 00e233e..4e71d72 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcAlarmInfoMapper.xml +++ b/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> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml index e5adea6..898cd96 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml +++ b/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> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml index 2d4f020..e542769 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml +++ b/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> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOeeInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOeeInfoMapper.xml index 664b2fa..3261ab9 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOeeInfoMapper.xml +++ b/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> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java index 80807ff..db2f22e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java +++ b/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); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java index 4b27b44..516822e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java +++ b/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); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java index f544260..1a0bdab 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java +++ b/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); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcAlarmInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcAlarmInfoServiceImpl.java index 4f20292..12b90a1 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcAlarmInfoServiceImpl.java +++ b/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); + } } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceImpl.java index 8826b16..e914e8e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceImpl.java +++ b/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()); diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java index 87b92ae..c149df2 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java +++ b/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); + } } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java index d166372..dd23560 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java +++ b/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); + } + } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java index b2ccf23..35d7d6d 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java +++ b/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); //==========銆恮ebsocket鎺ュ彈銆佹帹閫佹秷鎭瓑鏂规硶 鈥斺�� 鍏蜂綋鏈嶅姟鑺傜偣鎺ㄩ�亀s娑堟伅銆�======================================================================================== + @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銆憃nOpen 寮傚父", 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鎺ュ彈銆佹帹閫佹秷鎭瓑鏂规硶 鈥斺�� 鍏蜂綋鏈嶅姟鑺傜偣鎺ㄩ�亀s娑堟伅銆�======================================================================================== - + //==========銆愰噰鐢╮edis鍙戝竷璁㈤槄妯″紡鈥斺�旀帹閫佹秷鎭��======================================================================================== /** @@ -187,5 +200,5 @@ } } //=======銆愰噰鐢╮edis鍙戝竷璁㈤槄妯″紡鈥斺�旀帹閫佹秷鎭��========================================================================================== - + } \ No newline at end of file diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java index f53d482..fe64c7a 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java +++ b/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); } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml index 7d0b8f2..ae5f5d3 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml +++ b/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> diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java index 104a9db..d5d6e64 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java +++ b/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); } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java index c502486..a3128e2 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java +++ b/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); + } } -- Gitblit v1.9.3