From 996e6ef3e621a7c4dfb271bb181c737bd2980630 Mon Sep 17 00:00:00 2001 From: lyh <925863403@qq.com> Date: 星期四, 12 六月 2025 11:46:50 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- 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-tms/src/main/java/org/jeecg/modules/tms/entity/BaseTools.java | 5 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/entity/AndonOrder.java | 164 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRate.java | 20 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java | 21 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-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java | 2 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java | 0 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-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java | 3 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundOrderServiceImpl.java | 1 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekMaintenanceOrderDetail.java | 0 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentServiceImpl.java | 13 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-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-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java | 3 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/WebsocketPushEquStatusJob.java | 108 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java | 70 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/mdc/service/impl/MdcEquipmentPunchServiceImpl.java | 234 ++ 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-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java | 235 ++ lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java | 0 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderMapper.xml | 29 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java | 26 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java | 14 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java | 98 + 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 | 368 ++++ lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/PreparationOrderAndDetailDto.java | 61 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java | 5 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java | 0 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentMapper.xml | 18 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java | 3 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderDetailService.java | 27 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrder.java | 111 + lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/PreparationOrderStatus.java | 56 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java | 52 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java | 89 + lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/BaseToolsController.java | 99 + lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java | 0 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java | 326 ++++ lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/PreparationOrderConvert.java | 25 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java | 39 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml | 6 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-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml | 15 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java | 21 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/EquOeeMonth.java | 20 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java | 20 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java | 15 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/controller/AndonOrderController.java | 44 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/board/mapper/DtBoardMapper.java | 17 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcAlarmInfoMapper.xml | 9 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml | 63 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/OutboundOrderConvert.java | 10 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-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderMapper.java | 24 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java | 5 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderDetailServiceImpl.java | 43 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/mapper/xml/MdcEquipmentPunchMapper.xml | 42 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-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java | 43 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java | 0 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java | 32 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-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaHolesToolsVo.java | 3 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcAlarmInfoMapper.java | 2 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderDetailMapper.xml | 93 + 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 | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml | 20 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java | 3 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java | 3 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java | 3 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderDetailMapper.java | 40 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java | 4 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml | 27 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java | 96 + lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java | 39 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-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java | 145 + /dev/null | 62 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-mdc/src/main/java/org/jeecg/modules/board/vo/EquAlarm.java | 21 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java | 18 116 files changed, 4,602 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-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java index e588f05..0cae0d9 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java @@ -100,8 +100,28 @@ } break; case SECOND_MAINTENANCE: + if (result instanceof EamSecondMaintenanceOrder) { + EamSecondMaintenanceOrder order = (EamSecondMaintenanceOrder) result; + if (SecondMaintenanceStatusEnum.COMPLETE.name().equals(order.getMaintenanceStatus())) { + log.setEquipmentId(order.getEquipmentId()); + log.setBusinessId(order.getId()); + log.setOperator(order.getOperator()); + log.setDescription(order.getConfirmComment()); + log.setCreateTime(order.getActualEndTime()); + } + } break; case THIRD_MAINTENANCE: + if (result instanceof EamThirdMaintenanceOrder) { + EamThirdMaintenanceOrder order = (EamThirdMaintenanceOrder) result; + if (ThirdMaintenanceStatusEnum.COMPLETE.name().equals(order.getMaintenanceStatus())) { + log.setEquipmentId(order.getEquipmentId()); + log.setBusinessId(order.getId()); + log.setOperator(order.getOperator()); + log.setDescription(order.getLeaderConfirmComment()); + log.setCreateTime(order.getActualEndTime()); + } + } break; case REPORT_REPAIR: if (result instanceof EamReportRepair) { 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/EamSecondMaintenanceOrder.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.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/EamThirdMaintenanceOrder.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.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 99% 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 index a44565e..6045e70 100644 --- 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 @@ -33,13 +33,13 @@ import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.eam.service.IEamRepairOrderService; import org.jeecg.modules.eam.service.IEamReportRepairService; +import org.jeecg.modules.eam.util.DateUtils; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; import org.jeecg.modules.flowable.service.IFlowDefinitionService; import org.jeecg.modules.flowable.service.IFlowTaskService; -import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; import org.jeecg.modules.system.service.ISysUserService; import org.jeecg.modules.system.vo.UserSelector; 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..f238759 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java @@ -0,0 +1,96 @@ +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("/equRepairList") + public Result<?> equRepairList(@ApiParam(value = "productionId", required = true) String productionId) { + List<EquRepair> result = dtBoardService.equRepairList(productionId); + return Result.OK(result); + } + + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java new file mode 100644 index 0000000..12e64b6 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.board.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.board.vo.EquRepair; + +import java.util.List; + +/** + * @Author: Lius + * @CreateTime: 2025-06-11 + * @Description: + */ +@Mapper +public interface DtBoardMapper { + List<EquRepair> equRepairList(@Param("equipmentIdList") List<String> equipmentIdList, @Param("date") String date); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml new file mode 100644 index 0000000..566cd4b --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.jeecg.modules.board.mapper.DtBoardMapper"> + + <select id="equRepairList" resultType="org.jeecg.modules.board.vo.EquRepair"> + SELECT + t3.equipment_code equipmentId, + COUNT(*) faultNum, + ROUND( + SUM(DATEDIFF(MINUTE, t2.fault_start_time, t1.actual_end_time)) / 60.0, + 2 + ) faultTime + FROM + eam_repair_order t1 + LEFT JOIN eam_report_repair t2 ON t1.report_id = t2.id + LEFT JOIN eam_equipment t3 ON t1.equipment_id = t3.id + WHERE + t1.repair_status = 'COMPLETE' + AND t2.fault_start_time > #{date} + AND t3.equipment_code IN + <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=","> + #{ id } + </foreach> + GROUP BY + t3.equipment_code + </select> +</mapper> \ No newline at end of file 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..be4172a --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java @@ -0,0 +1,32 @@ +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); + + List<EquRepair> equRepairList(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..ebea97e --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java @@ -0,0 +1,368 @@ +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.mapper.DtBoardMapper; +import org.jeecg.modules.board.service.IDtBoardService; +import org.jeecg.modules.board.vo.*; +import org.jeecg.modules.eam.service.IEamRepairOrderService; +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.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +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; + + @Resource + private DtBoardMapper dtBoardMapper; + + /** + * 杞﹂棿淇℃伅 + */ + @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; + } + + /** + * 璁惧鏁呴殰 + * @param productionId + * @return + */ + @Override + public List<EquRepair> equRepairList(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; + } + LocalDateTime currentDate = LocalDate.now().minusMonths(1).atStartOfDay(); + String format = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + List<EquRepair> result = dtBoardMapper.equRepairList(equipmentIdList, format); + 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/EquRepair.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java new file mode 100644 index 0000000..8122dfc --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java @@ -0,0 +1,26 @@ +package org.jeecg.modules.board.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author: Lius + * @CreateTime: 2025-06-10 + * @Description: 璁惧鏁呴殰 + */ +@Data +public class EquRepair { + /** + * 璁惧缂栧彿 + */ + private String equipmentId; + /** + * 鏁呴殰娆℃暟 + */ + private BigDecimal faultNum; + /** + * 鏁呴殰鏃堕暱 + */ + private BigDecimal faultTime; +} 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/controller/AndonOrderController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java new file mode 100644 index 0000000..a9a33ee --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java @@ -0,0 +1,44 @@ +package org.jeecg.modules.mdc.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.modules.mdc.entity.AndonOrder; +import org.jeecg.modules.mdc.service.IAndonOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + /** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +@Api(tags="andon_order") +@RestController +@RequestMapping("/AndonOrder/andonOrder") +@Slf4j +public class AndonOrderController extends JeecgController<AndonOrder, IAndonOrderService> { + @Autowired + private IAndonOrderService andonOrderService; + + /** + * 绋嬪簭鍛煎彨 + * + * @param andonOrder + * @return + */ + @AutoLog(value = "瀹夌伅宸ュ崟-绋嬪簭鍛煎彨") + @ApiOperation(value = "瀹夌伅宸ュ崟-绋嬪簭鍛煎彨", notes = "瀹夌伅宸ュ崟-绋嬪簭鍛煎彨") + @PostMapping(value = "/procedureCall") + public Result<?> procedureCall(@RequestBody AndonOrder andonOrder) { + andonOrderService.procedureCall(andonOrder); + return Result.OK("鍛煎彨鎴愬姛锛�"); + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java new file mode 100644 index 0000000..482612f --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java @@ -0,0 +1,70 @@ +package org.jeecg.modules.mdc.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Api(tags="涓婁笅鐝墦鍗¤褰曡〃") +@RestController +@RequestMapping("/mdcEquipmentPunch") +@Slf4j +public class MdcEquipmentPunchController extends JeecgController<MdcEquipmentPunch, IMdcEquipmentPunchService> { + @Autowired + private IMdcEquipmentPunchService mdcEquipmentPunchService; + + private static final String msg = "鎵撳崱鎴愬姛锛�"; + + /** + * 鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌 + * + * @return + */ + @ApiOperation(value="鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌", notes="鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌") + @GetMapping(value = "/list") + public Result<List<MdcEquipmentPunch>> queryList() { + return Result.OK(mdcEquipmentPunchService.queryList()); + } + + /** + * 涓婄彮鎵撳崱 + * + * @param mdcEquipmentPunch + * @return + */ + @AutoLog(value = "涓婄彮鎵撳崱") + @ApiOperation(value="涓婄彮鎵撳崱", notes="涓婄彮鎵撳崱") + @PostMapping(value = "/workUp") + public Result<String> workUp(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) { + mdcEquipmentPunchService.workUp(mdcEquipmentPunch); + return Result.OK(msg); + } + + /** + * 涓嬬彮鎵撳崱 + * + * @param mdcEquipmentPunch + * @return + */ + @AutoLog(value = "涓嬬彮鎵撳崱") + @ApiOperation(value="涓嬬彮鎵撳崱", notes="涓嬬彮鎵撳崱") + @PostMapping(value = "/workDown") + public Result<String> workDown(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) { + mdcEquipmentPunchService.workDown(mdcEquipmentPunch); + return Result.OK(msg); + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java new file mode 100644 index 0000000..5321b7a --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java @@ -0,0 +1,164 @@ +package org.jeecg.modules.mdc.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; + +import cn.hutool.core.date.DatePattern; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +@Data +@TableName("andon_order") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "andon_order瀵硅薄", description = "andon_order") +public class AndonOrder implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "涓婚敭") + private String id; + /** + * 璁惧缂栧彿 + */ + @Excel(name = "璁惧缂栧彿", width = 15) + @ApiModelProperty(value = "璁惧缂栧彿") + private String equipmentId; + /** + * 鎵�灞炲巶鎴� + */ + @Excel(name = "鎵�灞炲巶鎴�", width = 15) + @ApiModelProperty(value = "鎵�灞炲巶鎴�") + private String plantName; + /** + * 瀹夌伅绫诲瀷 + */ + @Excel(name = "瀹夌伅绫诲瀷", width = 15) + @ApiModelProperty(value = "瀹夌伅绫诲瀷") + private String andonType; + /** + * 瀹夌伅浜�(鍛煎彨浜�) + */ + @Excel(name = "瀹夌伅浜�", width = 15) + @ApiModelProperty(value = "瀹夌伅浜�") + private String operator; + /** + * 鍛煎彨鍘熷洜 + */ + @Excel(name = "鍛煎彨鍘熷洜", width = 15) + @ApiModelProperty(value = "鍛煎彨鍘熷洜") + private String callReason; + /** + * 瀹夌伅鏃堕棿 + */ + @Excel(name = "瀹夌伅鏃堕棿", width = 15, format = DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "瀹夌伅鏃堕棿") + private Date operateTime; + /** + * 鍝嶅簲浜�(璐d换浜�) + */ + @Excel(name = "鍝嶅簲浜�", width = 15) + @ApiModelProperty(value = "鍝嶅簲浜�") + private String responder; + /** + * 鍝嶅簲鏃堕棿 + */ + @Excel(name = "鍝嶅簲鏃堕棿", width = 15, format = DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "鍝嶅簲鏃堕棿") + private Date responseTime; + /** + * 澶勭悊浜� + */ + @Excel(name = "澶勭悊浜�", width = 15) + @ApiModelProperty(value = "澶勭悊浜�") + private String processor; + /** + * 澶勭悊瀹屾垚鏃堕棿 + */ + @Excel(name = "澶勭悊瀹屾垚鏃堕棿", width = 15, format = DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "澶勭悊瀹屾垚鏃堕棿") + private Date processTime; + /** + * 瀹夌伅鐘舵��;寰呭搷搴斻�佸緟澶勭悊銆佸凡瀹屾垚 + */ + @Excel(name = "瀹夌伅鐘舵��;寰呭搷搴斻�佸緟澶勭悊銆佸凡瀹屾垚", width = 15) + @ApiModelProperty(value = "瀹夌伅鐘舵��;寰呭搷搴斻�佸緟澶勭悊銆佸凡瀹屾垚") + private String orderStatus; + /** + * 闂鎻忚堪 + */ + @Excel(name = "闂鎻忚堪", width = 15) + @ApiModelProperty(value = "闂鎻忚堪") + private String problemDescreption; + /** + * 澶勭悊缁撴灉鎻忚堪 + */ + @Excel(name = "澶勭悊缁撴灉鎻忚堪", width = 15) + @ApiModelProperty(value = "澶勭悊缁撴灉鎻忚堪") + private String resolutionDescreption; + /** + * 澶勭悊缁撴灉鍥剧墖 + */ + @Excel(name = "澶勭悊缁撴灉鍥剧墖", width = 15) + @ApiModelProperty(value = "澶勭悊缁撴灉鍥剧墖") + private String imageFiles; + /** + * 鍒犻櫎鏍囪 + */ + @Excel(name = "鍒犻櫎鏍囪", width = 15) + @ApiModelProperty(value = "鍒犻櫎鏍囪") + @TableLogic + private Integer delFlag; + /** + * 鍒涘缓浜� + */ + @ApiModelProperty(value = "鍒涘缓浜�") + private String createBy; + /** + * 鍒涘缓鏃堕棿 + */ + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "鍒涘缓鏃堕棿") + private Date createTime; + /** + * 鏇存柊浜� + */ + @ApiModelProperty(value = "鏇存柊浜�") + private String updateBy; + /** + * 鏇存柊鏃堕棿 + */ + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "鏇存柊鏃堕棿") + private Date updateTime; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java new file mode 100644 index 0000000..b64bcc4 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java @@ -0,0 +1,145 @@ +package org.jeecg.modules.mdc.entity; + +import java.io.Serializable; +import java.util.Date; + +import cn.hutool.core.date.DatePattern; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.jeecg.common.aspect.annotation.Dict; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Data +@TableName("mdc_equipment_punch") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "mdc_equipment_punch瀵硅薄", description = "mdc_equipment_punch") +public class MdcEquipmentPunch implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private String id; + /** + * 璁惧缂栧彿 + */ + @Excel(name = "璁惧缂栧彿", width = 15) + @ApiModelProperty(value = "璁惧缂栧彿") + private String equipmentId; + /** + * 鎵撳崱鐢ㄦ埛 + */ + @Excel(name = "鎵撳崱鐢ㄦ埛", width = 15) + @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛") + private String punchUser; + /** + * 鎵撳崱鐢ㄦ埛璐﹀彿 + */ + @Excel(name = "鎵撳崱鐢ㄦ埛璐﹀彿", width = 15) + @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛璐﹀彿") + @TableField(exist = false) + private String punchUserRealName; + /** + * 鎵撳崱鐢ㄦ埛鍚嶇О + */ + @Excel(name = "鎵撳崱鐢ㄦ埛鍚嶇О", width = 15) + @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛鍚嶇О") + @TableField(exist = false) + private String punchUserUserName; + /** + * 涓婄彮鏃堕棿 + */ + @Excel(name = "涓婄彮鏃堕棿", width = 15, format = DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "涓婄彮鏃堕棿") + private Date checkInTime; + /** + * 涓嬬彮鏃堕棿 + */ + @Excel(name = "涓嬬彮鏃堕棿", width = 15, format = DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "涓嬬彮鏃堕棿") + private Date checkOutTime; + /** + * 璁板綍鏃ユ湡 + */ + @Excel(name = "璁板綍鏃ユ湡", width = 15) + @ApiModelProperty(value = "璁板綍鏃ユ湡") + private String recordDate; + /** + * 鐝 + */ + @Excel(name = "鐝", width = 15) + @ApiModelProperty(value = "鐝") + @Dict(dicCode = "shift_schedule") + private Integer shiftSchedule; + /** + * 鐝鍚嶇О + */ + @Excel(name = "鐝鍚嶇О", width = 15) + @ApiModelProperty(value = "鐝鍚嶇О") + @TableField(exist = false) + private String shiftScheduleName; + /** + * 鏄惁缂哄崱 + */ + @Excel(name = "鏄惁缂哄崱", width = 15) + @ApiModelProperty(value = "鏄惁缂哄崱") + private Integer isAbsent; + /** + * 鏄惁杩熷埌 + */ + @Excel(name = "鏄惁杩熷埌", width = 15) + @ApiModelProperty(value = "鏄惁杩熷埌") + private Integer isLate; + /** + * 鏄惁鏃╅�� + */ + @Excel(name = "鏄惁鏃╅��", width = 15) + @ApiModelProperty(value = "鏄惁鏃╅��") + private Integer isEarly; + /** + * 鍒涘缓浜� + */ + @ApiModelProperty(value = "鍒涘缓浜�") + private String createBy; + /** + * 鍒涘缓鏃堕棿 + */ + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "鍒涘缓鏃堕棿") + private Date createTime; + /** + * 鏇存柊浜� + */ + @ApiModelProperty(value = "鏇存柊浜�") + private String updateBy; + /** + * 鏇存柊鏃堕棿 + */ + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "鏇存柊鏃堕棿") + private Date updateTime; +} 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/AndonOrderMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java new file mode 100644 index 0000000..c624816 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.mdc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.mdc.entity.AndonOrder; + +/** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +public interface AndonOrderMapper extends BaseMapper<AndonOrder> { + +} 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/MdcEquipmentPunchMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java new file mode 100644 index 0000000..3b45151 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java @@ -0,0 +1,18 @@ +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.MdcEquipmentPunch; + +import java.util.List; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface MdcEquipmentPunchMapper extends BaseMapper<MdcEquipmentPunch> { + + List<MdcEquipmentPunch> list(@Param("equipmentIds") List<String> equipmentIds, @Param("date") String date); +} 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/AndonOrderMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml new file mode 100644 index 0000000..cd37885 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.jeecg.modules.mdc.mapper.AndonOrderMapper"> + +</mapper> \ No newline at end of file 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/MdcEquipmentPunchMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml new file mode 100644 index 0000000..48cc0e8 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.jeecg.modules.mdc.mapper.MdcEquipmentPunchMapper"> + + <select id="list" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentPunch"> + SELECT + p.id, + p.equipment_id, + p.punch_user, + p.check_in_time, + p.check_out_time, + p.record_date, + p.is_absent, + p.is_late, + p.is_early, + p.create_by, + p.create_time, + p.update_by, + p.update_time, + p.shift_schedule, + u.realname punchUserRealName, + u.username punchUserUserName, + d1.item_text shiftScheduleName + FROM + mdc_equipment_punch p + INNER JOIN sys_user u ON u.id = p.punch_user + INNER JOIN (SELECT i1.item_text, i1.item_value + FROM sys_dict_item i1 + LEFT JOIN sys_dict i2 ON i2.id = i1.dict_id + WHERE i2.dict_code = 'shift_schedule') d1 + ON d1.item_value = CAST (p.shift_schedule AS nvarchar) + where 1=1 + AND p.equipment_id IN + <foreach collection="equipmentIds" item="equipmentId" open="(" close=")" separator=","> + #{equipmentId} + </foreach> + <if test="date != null and date != ''"> + AND p.record_date = #{date} + </if> + order by p.equipment_id desc, p.shift_schedule asc + </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/IAndonOrderService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java new file mode 100644 index 0000000..c0ae7dd --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java @@ -0,0 +1,15 @@ +package org.jeecg.modules.mdc.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.mdc.entity.AndonOrder; + +/** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +public interface IAndonOrderService extends IService<AndonOrder> { + + void procedureCall(AndonOrder andonOrder); +} 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/IMdcEquipmentPunchService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java new file mode 100644 index 0000000..79be14a --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java @@ -0,0 +1,21 @@ +package org.jeecg.modules.mdc.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; + +import java.util.List; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface IMdcEquipmentPunchService extends IService<MdcEquipmentPunch> { + + List<MdcEquipmentPunch> queryList(); + + void workUp(MdcEquipmentPunch mdcEquipmentPunch); + + void workDown(MdcEquipmentPunch mdcEquipmentPunch); +} 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/AndonOrderServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java new file mode 100644 index 0000000..813d192 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java @@ -0,0 +1,89 @@ +package org.jeecg.modules.mdc.service.impl; + +import cn.hutool.core.date.DatePattern; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.compress.utils.Lists; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecg.common.constant.WebsocketConst; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.modules.mdc.dto.MdcEquProDto; +import org.jeecg.modules.mdc.entity.AndonOrder; +import org.jeecg.modules.mdc.mapper.AndonOrderMapper; +import org.jeecg.modules.mdc.service.IAndonOrderService; +import org.jeecg.modules.mdc.service.IMdcEquipmentService; +import org.jeecg.modules.mdc.util.DateUtils; +import org.jeecg.modules.mdc.vo.AndonOrderWebSocketVo; +import org.jeecg.modules.message.websocket.WebSocket; +import org.jeecg.modules.system.service.ISysUserService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +@Service +public class AndonOrderServiceImpl extends ServiceImpl<AndonOrderMapper, AndonOrder> implements IAndonOrderService { + + @Resource + private IMdcEquipmentService mdcEquipmentService; + @Resource + private WebSocket webSocket; + @Resource + private ISysUserService userService; + @Override + public void procedureCall(AndonOrder andonOrder) { + if (StringUtils.isBlank(andonOrder.getEquipmentId())) { + throw new JeecgBootException("璇烽�夋嫨璁惧锛�"); + } + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + List<String> equipmentIds = Arrays.asList(andonOrder.getEquipmentId().split(StringPool.COMMA)); + + List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(equipmentIds); + Map<String, MdcEquProDto> equipmentIdToProductionIdMap = equipmentList.stream().collect(Collectors.toMap(MdcEquProDto::getEquipmentId, comRateDto -> comRateDto)); + List<AndonOrder> list = Lists.newArrayList(); + for (String equipmentId : equipmentIds) { + AndonOrder andonOrderInfo = new AndonOrder(); + andonOrderInfo.setEquipmentId(equipmentId); + andonOrderInfo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(equipmentId) ? equipmentIdToProductionIdMap.get(equipmentId).getId() : null); + andonOrderInfo.setAndonType(StringPool.ONE); + andonOrderInfo.setOperator(andonOrder.getOperator()); + andonOrderInfo.setOperateTime(new Date()); + andonOrderInfo.setResponder(userId); + andonOrderInfo.setCallReason(andonOrder.getCallReason()); + list.add(andonOrderInfo); + } + + if (this.saveBatch(list)) { + List<AndonOrderWebSocketVo> andonOrderWebSocketVoList = Lists.newArrayList(); + //璁剧疆websocket璇锋眰娑堟伅鏁版嵁 + for (AndonOrder order : list) { + AndonOrderWebSocketVo andonOrderWebSocketVo = new AndonOrderWebSocketVo(); + andonOrderWebSocketVo.setEquipmentId(order.getEquipmentId()); + andonOrderWebSocketVo.setCallPersonnel(userService.getById(order.getOperator()).getRealname()); + andonOrderWebSocketVo.setCallTime(DateUtils.format(order.getOperateTime(), DatePattern.NORM_DATE_PATTERN)); + andonOrderWebSocketVo.setCallReason(order.getCallReason()); + andonOrderWebSocketVo.setAndonType("绋嬪簭鍛煎彨"); + andonOrderWebSocketVo.setPersonResponsible(user.getRealname()); + andonOrderWebSocketVo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(order.getEquipmentId()) ? equipmentIdToProductionIdMap.get(order.getEquipmentId()).getProductionName() : null); + andonOrderWebSocketVoList.add(andonOrderWebSocketVo); + } + + //鍙戦�亀ebsocket璇锋眰 + JSONObject jsonObject = new JSONObject(); + jsonObject.put(WebsocketConst.MSG_CMD, "andon"); + jsonObject.put("data", andonOrderWebSocketVoList); + webSocket.sendMessage(jsonObject.toJSONString()); + } + } +} 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/MdcEquipmentPunchServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java new file mode 100644 index 0000000..8b79829 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java @@ -0,0 +1,234 @@ +package org.jeecg.modules.mdc.service.impl; + + +import cn.hutool.core.date.DatePattern; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.compress.utils.Lists; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; +import org.jeecg.modules.mdc.mapper.MdcEquipmentPunchMapper; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchService; +import org.jeecg.modules.mdc.service.IMdcEquipmentService; +import org.jeecg.modules.mdc.util.DateUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Service +public class MdcEquipmentPunchServiceImpl extends ServiceImpl<MdcEquipmentPunchMapper, MdcEquipmentPunch> implements IMdcEquipmentPunchService { + + @Resource + private IMdcEquipmentService mdcEquipmentService; + + /** + * 鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌 + * @return + */ + @Override + public List<MdcEquipmentPunch> queryList() { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + List<String> equipmentIds = Lists.newArrayList(); + if (StringUtils.isNotBlank(user.getEquipmentIds())) { + equipmentIds = Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA)); + }else { + equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); + } + + if (CollectionUtils.isEmpty(equipmentIds)) { + return Lists.newArrayList(); + } + + if (StringUtils.isBlank(userId)) { + return Lists.newArrayList(); + } + + //鏍规嵁璁惧銆佸綋鍓嶆棩鏈熸煡璇㈡墦鍗¤褰� + List<MdcEquipmentPunch> mdcEquipmentPunches = this.baseMapper.list(equipmentIds, DateUtils.format(new Date(), DatePattern.PURE_DATE_PATTERN)); + return mdcEquipmentPunches; + } + + /** + * 涓婄彮鎵撳崱 + * @param mdcEquipmentPunch + */ + @Override + public void workUp(MdcEquipmentPunch mdcEquipmentPunch) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + + if (StringUtils.isBlank(mdcEquipmentPunch.getEquipmentId())) { + throw new JeecgBootException("璇烽�夋嫨鎵撳崱璁惧锛�"); + } + + /** + * 鏍¢獙鏄惁鍦ㄦ湁鏁堟墦鍗¤寖鍥翠箣鍐� + * 鏃╃彮涓婄彮鍗℃湁鏁堣寖鍥翠负锛�00:00:00 ~ 17:30:00 + * 鏅氱彮涓婄彮鍗℃湁鏁堣寖鍥翠负锛�00:00:00 ~ 23:00:00 + */ + Date startDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 00:00:00", + DatePattern.NORM_DATETIME_PATTERN + ); + Date endDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 17:30:00", + DatePattern.NORM_DATETIME_PATTERN + ); + if (mdcEquipmentPunch.getShiftSchedule() == 2) { + //鏅氱彮鏃犳晥鎵撳崱鏃堕棿鑼冨洿 + endDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 23:00:00", + DatePattern.NORM_DATETIME_PATTERN + ); + } + + if (startDate.compareTo(mdcEquipmentPunch.getCheckInTime()) == 1 || endDate.compareTo(mdcEquipmentPunch.getCheckInTime()) == -1) { + throw new JeecgBootException("鏈湪鏈夋晥涓婄彮鎵撳崱鏃堕棿鍐咃紝涓嶈兘鎵撳崱锛�"); + } + + //鏌ヨ鎵�閫夎澶囧綋澶╂槸鍚﹀凡鎵撲笂鐝崱 + List<String> equipmentIdList = Arrays.asList(mdcEquipmentPunch.getEquipmentId().split(StringPool.COMMA)); + String currentDate = DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.PURE_DATE_PATTERN); + + //鏃╃彮涓婄彮姝e父鏈�鏅氭墦鍗℃椂闂� + String checkInTime = DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 08:30:00"; + + //鏌ヨ褰撳墠璁惧銆佸綋鍓嶆墦鍗$被鍨嬫墦鍗¤褰� + List<MdcEquipmentPunch> equipmentPunchList = this.list(new LambdaQueryWrapper<MdcEquipmentPunch>() + .eq(MdcEquipmentPunch::getShiftSchedule, mdcEquipmentPunch.getShiftSchedule()) + .eq(MdcEquipmentPunch::getRecordDate, currentDate) + .in(MdcEquipmentPunch::getEquipmentId, equipmentIdList)); + List<MdcEquipmentPunch> mdcEquipmentPunchList = equipmentPunchList.stream().filter(equipmentPunch -> Objects.nonNull(equipmentPunch.getCheckInTime())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(mdcEquipmentPunchList)) { + List<String> equipmentIds = equipmentPunchList.stream() + .filter(mdcEquipmentPunchInfo -> Objects.nonNull(mdcEquipmentPunchInfo.getCheckInTime())) + .map(MdcEquipmentPunch::getEquipmentId) + .distinct() + .collect(Collectors.toList()); + throw new JeecgBootException("璁惧[" + StringUtils.join(equipmentIds, StringPool.COMMA) + "]宸叉墦鍗★紝鏃犻渶閲嶅鎵撳崱"); + } + + List<MdcEquipmentPunch> list = Lists.newArrayList(); + + //鐗规畩澶勭悊鏅氱彮涓婄彮鍗� + if (mdcEquipmentPunch.getShiftSchedule() == 2) { + //鏅氱彮姝e父涓婄彮鍗℃渶鏅氭墦鍗℃椂闂� + checkInTime = DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 17:00:00"; + } + + + for (String equipment : equipmentIdList) { + Optional<MdcEquipmentPunch> first = equipmentPunchList.stream().filter(equipmentPunch -> Objects.isNull(equipmentPunch.getCheckInTime()) && equipment.equals(equipmentPunch.getEquipmentId())).findFirst(); + MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch(); + if (first.isPresent()) { + equipmentPunch = first.get(); + }else { + equipmentPunch.setEquipmentId(equipment); + equipmentPunch.setPunchUser(userId); + equipmentPunch.setRecordDate(currentDate); + equipmentPunch.setShiftSchedule(mdcEquipmentPunch.getShiftSchedule()); + equipmentPunch.setIsAbsent(0); + equipmentPunch.setIsEarly(0); + } + equipmentPunch.setCheckInTime(mdcEquipmentPunch.getCheckInTime()); + //鎵撳崱鏃堕棿澶т簬8锛�30/17:00鏃朵负杩熷埌鎵撳崱 + equipmentPunch.setIsLate(mdcEquipmentPunch.getCheckInTime().compareTo(DateUtils.getFormatDate(checkInTime, DatePattern.NORM_DATETIME_PATTERN)) == 1 ? 1 : 0); + + list.add(equipmentPunch); + } + this.saveOrUpdateBatch(list); + } + + @Override + public void workDown(MdcEquipmentPunch mdcEquipmentPunch) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + + if (StringUtils.isBlank(mdcEquipmentPunch.getEquipmentId())) { + throw new JeecgBootException("璇烽�夋嫨鎵撳崱璁惧锛�"); + } + + /** + * 鏍¢獙褰撳墠涓嬬彮鍗℃槸鍚﹀湪鏈夋晥涓嬬彮鎵撳崱鑼冨洿涔嬪唴 + * 鏃╃彮涓嬬彮鏃犳晥鎵撳崱鏃堕棿鑼冨洿涓�00:00:00 ~ 08:30:00 + * 鏅氱彮涓嬬彮鏃犳晥鎵撳崱鏃堕棿鑼冨洿涓�00:00:00 ~ 17:00:00 + */ + Date startDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 00:00:00", + DatePattern.NORM_DATETIME_PATTERN + ); + Date endDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 08:30:00", + DatePattern.NORM_DATETIME_PATTERN + ); + Date checkOutTime = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 17:30:00", + DatePattern.NORM_DATETIME_PATTERN + ); + if (mdcEquipmentPunch.getShiftSchedule() == 2) { + //鏅氱彮鏃犳晥鎵撳崱鏃堕棿鑼冨洿 + endDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 17:00:00", + DatePattern.NORM_DATETIME_PATTERN + ); + //鏅氱彮姝e父涓嬬彮鏈�鏃╂墦鍗℃椂闂� + checkOutTime = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 23:00:00", + DatePattern.NORM_DATETIME_PATTERN + ); + } + + if (startDate.compareTo(mdcEquipmentPunch.getCheckOutTime()) == 1 + || endDate.compareTo(mdcEquipmentPunch.getCheckOutTime()) == 1) { + throw new JeecgBootException("鏈湪鏈夋晥涓嬬彮鎵撳崱鏃堕棿鍐咃紝涓嶈兘鎵撳崱锛�"); + } + + //鏌ヨ褰撳墠鎵�閫夎澶囨槸鍚﹀瓨鍦ㄤ笂鐝墦鍗¤褰� + List<String> equipmentIdList = Arrays.asList(mdcEquipmentPunch.getEquipmentId().split(StringPool.COMMA)); + String currentDate = DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.PURE_DATE_PATTERN); + List<MdcEquipmentPunch> equipmentPunchList = this.list(new LambdaQueryWrapper<MdcEquipmentPunch>() + .eq(MdcEquipmentPunch::getShiftSchedule, mdcEquipmentPunch.getShiftSchedule()) + .eq(MdcEquipmentPunch::getRecordDate, currentDate) + .in(MdcEquipmentPunch::getEquipmentId, equipmentIdList)); + + List<MdcEquipmentPunch> list = Lists.newArrayList(); + + for (String equipmentId : equipmentIdList) { + Optional<MdcEquipmentPunch> mdcEquipmentPunchOptional = equipmentPunchList.stream() + .filter(mdcEquipmentPunch1 -> mdcEquipmentPunch1.getEquipmentId().equals(equipmentId)) + .findFirst(); + MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch(); + if (mdcEquipmentPunchOptional.isPresent()) { + equipmentPunch = mdcEquipmentPunchOptional.get(); + }else { + equipmentPunch.setIsAbsent(1); + equipmentPunch.setIsLate(0); + equipmentPunch.setEquipmentId(equipmentId); + equipmentPunch.setShiftSchedule(mdcEquipmentPunch.getShiftSchedule()); + equipmentPunch.setPunchUser(userId); + equipmentPunch.setRecordDate(currentDate); + } + equipmentPunch.setCheckOutTime(mdcEquipmentPunch.getCheckOutTime()); + + //涓嬬彮鎵撳崱鏃堕棿鏃╀簬17:30/23:00鍒欎负鏃╅�� + equipmentPunch.setIsEarly(checkOutTime.compareTo(mdcEquipmentPunch.getCheckOutTime()) == 1 ? 1 : 0); + list.add(equipmentPunch); + } + + this.saveOrUpdateBatch(list); + } +} 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-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java new file mode 100644 index 0000000..411a4ec --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java @@ -0,0 +1,52 @@ +package org.jeecg.modules.mdc.vo; + +import lombok.Data; + +@Data +public class AndonOrderWebSocketVo { + + /** + * 璁惧缂栧彿 + */ + private String equipmentId; + + /** + * 鍛煎彨浜哄憳 + */ + private String callPersonnel; + + /** + * 瀹夌伅绫诲瀷 + */ + private String andonType; + + /** + * 鍛煎彨鏃堕棿 + */ + private String callTime; + + /** + * 鍛煎彨鍘熷洜 + */ + private String callReason; + + /** + * 璐d换浜� + */ + private String personResponsible; + + /** + * 鎶ヤ慨鏃堕棿 + */ + private String repairTime; + + /** + * 鏁呴殰鎻忚堪 + */ + private String faultInfo; + + /** + * 鎵�灞炲巶鎴� + */ + private String plantName; +} diff --git a/lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java b/lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java deleted file mode 100644 index a104726..0000000 --- a/lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.jeecg.modules.msi.utils; - - -import org.apache.cxf.endpoint.Client; -import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; -import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; - - -public class WebServiceUtil { - /** - * 1.浠g悊绫诲伐鍘傜殑鏂瑰紡,闇�瑕佹嬁鍒板鏂圭殑鎺ュ彛鍦板潃, 鍚屾椂闇�瑕佸紩鍏ユ帴鍙� - */ - public static void invokeService_1(String address, Class<?> tClass){ - // 鎺ュ彛鍦板潃 - //String address = "http://localhost:8080/services/ws/api?wsdl"; - // 浠g悊宸ュ巶 - JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean(); - // 璁剧疆浠g悊鍦板潃 - jaxWsProxyFactoryBean.setAddress(address); - // 璁剧疆鎺ュ彛绫诲瀷 - jaxWsProxyFactoryBean.setServiceClass(tClass); - // 鍒涘缓涓�涓唬鐞嗘帴鍙e疄鐜� - Object us = jaxWsProxyFactoryBean.create(); - // 鏁版嵁鍑嗗 - String data = "hello world"; - // 璋冪敤浠g悊鎺ュ彛鐨勬柟娉曡皟鐢ㄥ苟杩斿洖缁撴灉 - //String result = us.emrService(data); - //System.out.println("杩斿洖缁撴灉:" + result); - } - - /** - * 3. 鍔ㄦ�佽皟鐢� - */ - public static String invokeService(String uri, String data, String method) - { - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(uri); - Object[] objects = new Object[0]; - try { - objects = client.invoke(method, data); - } catch (Exception e) { - e.printStackTrace(); - } - return String.valueOf(objects[0]); - } - - /** - * 2. 鍔ㄦ�佽皟鐢� - */ - public static String invokeServiceObJect(String uri,Object[] datas, String method) - { - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(uri); - Object[] objects = new Object[0]; - try { - objects = client.invoke(method, datas); - } catch (Exception e) { - e.printStackTrace(); - } - return String.valueOf(objects[0]); - } -} 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); + } } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/BaseToolsController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/BaseToolsController.java index 38db085..c259364 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/BaseToolsController.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/BaseToolsController.java @@ -1,5 +1,8 @@ package org.jeecg.modules.tms.controller; +import java.io.File; +import java.io.IOException; +import java.net.URLEncoder; import java.util.Arrays; import java.util.Map; import javax.servlet.http.HttpServletRequest; @@ -7,6 +10,8 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.tms.entity.*; @@ -575,4 +580,98 @@ IPage<SharpeeningVo> resultPage = baseToolsService.pageWithSharpedAndConfig(page, queryWrapper); return Result.OK(resultPage); } + + + /** + * 瀵煎叆妯℃澘涓嬭浇 + * + */ + @RequestMapping(value = "/loadTemplate") + public void loadTemplate(HttpServletRequest request, HttpServletResponse response) throws IOException { + + Map<String,String[]> req = request.getParameterMap(); + String paraTypeFlag = ""; + if(req.get("paraTypeFlag") != null){ + paraTypeFlag = req.get("paraTypeFlag")[0]; + } + if("1".equals(paraTypeFlag)){ + Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\鍒�鍏蜂俊鎭鍏ユā鏉�-閫氱敤鍙傛暟.xlsx")); + //瀵煎嚭Workbook + //璁剧疆鍝嶅簲澶� + String fileName = "鍒�鍏蜂俊鎭鍏ユā鏉�-閫氱敤鍙傛暟.xlsx"; + // 瀵规枃浠跺悕杩涜URL缂栫爜锛岄槻姝腑鏂囦贡鐮� + String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); + // 灏哤orkbook鍐欏叆鍝嶅簲杈撳嚭娴� + try { // try-with-resources鑷姩鍏抽棴璧勬簮 + workbook.write(response.getOutputStream()); + response.flushBuffer(); + } catch (IOException e) { + // 寮傚父澶勭悊锛堝璁板綍鏃ュ織锛� + throw new IOException("涓嬭浇妯℃澘澶辫触", e); + } + }else if("2".equals(paraTypeFlag)){ + Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\鍒�鍏蜂俊鎭鍏ユā鏉�-瀛斿姞宸ュ伐鍏�.xlsx")); + String fileName = "鍒�鍏蜂俊鎭鍏ユā鏉�-瀛斿姞宸ュ伐鍏�.xlsx"; + String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); + try { + workbook.write(response.getOutputStream()); + response.flushBuffer(); + } catch (IOException e) { + throw new IOException("涓嬭浇妯℃澘澶辫触", e); + } + }else if("3".equals(paraTypeFlag)){ + Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\鍒�鍏蜂俊鎭鍏ユā鏉�-铻虹汗宸ュ叿.xlsx")); + String fileName = "鍒�鍏蜂俊鎭鍏ユā鏉�-铻虹汗宸ュ叿.xlsx"; + String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); + try { + workbook.write(response.getOutputStream()); + response.flushBuffer(); + } catch (IOException e) { + throw new IOException("涓嬭浇妯℃澘澶辫触", e); + } + }else if("4".equals(paraTypeFlag)){ + Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\鍒�鍏蜂俊鎭鍏ユā鏉�-閾e墛宸ュ叿.xlsx")); + String fileName = "鍒�鍏蜂俊鎭鍏ユā鏉�-閾e墛宸ュ叿.xlsx"; + String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); + try { + workbook.write(response.getOutputStream()); + response.flushBuffer(); + } catch (IOException e) { + throw new IOException("涓嬭浇妯℃澘澶辫触", e); + } + }else if("5".equals(paraTypeFlag)){ + Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\鍒�鍏蜂俊鎭鍏ユā鏉�-杞﹀墛宸ュ叿.xlsx")); + String fileName = "鍒�鍏蜂俊鎭鍏ユā鏉�-杞﹀墛宸ュ叿.xlsx"; + String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); + try { + workbook.write(response.getOutputStream()); + response.flushBuffer(); + } catch (IOException e) { + throw new IOException("涓嬭浇妯℃澘澶辫触", e); + } + }else if("6".equals(paraTypeFlag)){ + Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\鍒�鍏蜂俊鎭鍏ユā鏉�-鍒�鐗�.xlsx")); + String fileName = "鍒�鍏蜂俊鎭鍏ユā鏉�-鍒�鐗�.xlsx"; + String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); + try { + workbook.write(response.getOutputStream()); + response.flushBuffer(); + } catch (IOException e) { + throw new IOException("涓嬭浇妯℃澘澶辫触", e); + } + } + + } } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java new file mode 100644 index 0000000..0a84ad8 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java @@ -0,0 +1,326 @@ +package org.jeecg.modules.tms.controller; + +import com.alibaba.fastjson.JSONObject; +import org.jeecg.common.system.query.QueryGenerator; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.tms.entity.dto.PreparationOrderAndDetailDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.web.servlet.ModelAndView; +import java.util.Arrays; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.tms.entity.PreparationOrderDetail; +import org.jeecg.modules.tms.entity.PreparationOrder; +import org.jeecg.modules.tms.service.IPreparationOrderService; +import org.jeecg.modules.tms.service.IPreparationOrderDetailService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.SecurityUtils; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Description: 鍒�鍏峰噯澶囧崟 + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Api(tags="鍒�鍏峰噯澶囧崟") +@RestController +@RequestMapping("/tms/preparationOrder") +@Slf4j +public class PreparationOrderController extends JeecgController<PreparationOrder, IPreparationOrderService> { + + @Autowired + private IPreparationOrderService preparationOrderService; + + @Autowired + private IPreparationOrderDetailService preparationOrderDetailService; + + + /*---------------------------------涓昏〃澶勭悊-begin-------------------------------------*/ + + /** + * 鍒嗛〉鍒楄〃鏌ヨ + * @param preparationOrder + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "鍒�鍏峰噯澶囧崟-鍒嗛〉鍒楄〃鏌ヨ") + @ApiOperation(value="鍒�鍏峰噯澶囧崟-鍒嗛〉鍒楄〃鏌ヨ", notes="鍒�鍏峰噯澶囧崟-鍒嗛〉鍒楄〃鏌ヨ") + @GetMapping(value = "/list") + public Result<IPage<PreparationOrder>> queryPageList(PreparationOrder preparationOrder, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Map<String, String[]> parameterMap = req.getParameterMap(); + QueryWrapper<PreparationOrder> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrder, parameterMap); + Page<PreparationOrder> page = new Page<PreparationOrder>(pageNo, pageSize); + IPage<PreparationOrder> pageList = preparationOrderService.queryPageList(page, parameterMap); + return Result.OK(pageList); + } + + /** + * 娣诲姞 + * @param preparationOrder + * @return + */ + @AutoLog(value = "鍒�鍏峰噯澶囧崟-娣诲姞") + @ApiOperation(value="鍒�鍏峰噯澶囧崟-娣诲姞", notes="鍒�鍏峰噯澶囧崟-娣诲姞") + //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:add") + @PostMapping(value = "/add") + public Result<String> add(@RequestBody PreparationOrder preparationOrder) { + preparationOrderService.save(preparationOrder); + return Result.OK("娣诲姞鎴愬姛锛�"); + } + + /** + * 缂栬緫 + * @param preparationOrder + * @return + */ + @AutoLog(value = "鍒�鍏峰噯澶囧崟-缂栬緫") + @ApiOperation(value="鍒�鍏峰噯澶囧崟-缂栬緫", notes="鍒�鍏峰噯澶囧崟-缂栬緫") + //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result<String> edit(@RequestBody PreparationOrder preparationOrder) { + preparationOrderService.updateById(preparationOrder); + return Result.OK("缂栬緫鎴愬姛!"); + } + + + @AutoLog(value = "鍒�鍏峰噯澶囧崟-纭瀹屾垚") + @ApiOperation(value="鍒�鍏峰噯澶囧崟-璋冩満鍛樹慨姝g‘璁�", notes = "鍒�鍏峰噯澶囧崟-璋冩満鍛樹慨姝g‘璁�") + @RequestMapping(value = "/editTotal", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result<String> editTotal(@RequestBody PreparationOrderAndDetailDto preparationOrderAndDetailDto) { + preparationOrderService.editTotal(preparationOrderAndDetailDto); + return Result.OK("纭瀹屾垚锛�"); + } + + /** + * 閫氳繃id鍒犻櫎 + * @param id + * @return + */ + @AutoLog(value = "鍒�鍏峰噯澶囧崟-閫氳繃id鍒犻櫎鍑嗗鍗曞強鏄庣粏") + @ApiOperation(value="鍒�鍏峰噯澶囧崟-閫氳繃id鍒犻櫎鍑嗗鍗曞強鏄庣粏", notes="鍒�鍏峰噯澶囧崟-閫氳繃id鍒犻櫎鍑嗗鍗曞強鏄庣粏") + //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:delete") + @DeleteMapping(value = "/delete") + public Result<String> delete(@RequestParam(name="id",required=true) String id) { + preparationOrderService.delMain(id); + return Result.OK("鍒犻櫎鎴愬姛!"); + } + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + @AutoLog(value = "鍒�鍏峰噯澶囧崟-鎵归噺鍒犻櫎") + @ApiOperation(value="鍒�鍏峰噯澶囧崟-鎵归噺鍒犻櫎", notes="鍒�鍏峰噯澶囧崟-鎵归噺鍒犻櫎") + //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { + preparationOrderService.delBatchMain(Arrays.asList(ids.split(","))); + return Result.OK("鎵归噺鍒犻櫎鎴愬姛!"); + } + + @AutoLog(value = "鍒�鍏峰噯澶囧崟-杞嚭搴撶敵璇峰崟") + @ApiOperation(value = "鍒�鍏峰噯澶囧崟-杞嚭搴撶敵璇峰崟", notes = "鍒�鍏峰噯澶囧崟-杞嚭搴撶敵璇峰崟") + //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:convert") + @PostMapping(value = "/convertToOutboundOrder") + public Result<String> convertToOutboundOrder(@RequestBody List<String> preparationOrderIds) { + List<String> result = preparationOrderService.convertToOutboundOrder(preparationOrderIds); + return Result.OK(JSONObject.toJSONString(result)); + } + + /** + * 瀵煎嚭 + * @return + */ + //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, PreparationOrder preparationOrder) { + return super.exportXls(request, preparationOrder, PreparationOrder.class, "鍒�鍏峰噯澶囧崟"); + } + + /** + * 瀵煎叆 + * @return + */ + //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, PreparationOrder.class); + } + /*---------------------------------涓昏〃澶勭悊-end-------------------------------------*/ + + + /*--------------------------------瀛愯〃澶勭悊-鍒�鍏峰噯澶囧崟鏄庣粏-begin----------------------------------------------*/ + /** + * 閫氳繃涓昏〃ID鏌ヨ + * @return + */ + //@AutoLog(value = "鍒�鍏峰噯澶囧崟鏄庣粏-閫氳繃涓昏〃ID鏌ヨ") + @ApiOperation(value="鍒�鍏峰噯澶囧崟鏄庣粏-閫氳繃涓昏〃ID鏌ヨ", notes="鍒�鍏峰噯澶囧崟鏄庣粏-閫氳繃涓昏〃ID鏌ヨ") + @GetMapping(value = "/listPreparationOrderDetailByMainId") + public Result<IPage<PreparationOrderDetail>> listPreparationOrderDetailByMainId(PreparationOrderDetail preparationOrderDetail, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + Map<String, String[]> parameterMap = req.getParameterMap(); + QueryWrapper<PreparationOrderDetail> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrderDetail, parameterMap); + Page<PreparationOrderDetail> page = new Page<PreparationOrderDetail>(pageNo, pageSize); + IPage<PreparationOrderDetail> pageList = preparationOrderDetailService.queryPageList(page, parameterMap); + return Result.OK(pageList); + } + + /** + * 娣诲姞 + * @param preparationOrderDetail + * @return + */ + @AutoLog(value = "鍒�鍏峰噯澶囧崟鏄庣粏-娣诲姞") + @ApiOperation(value="鍒�鍏峰噯澶囧崟鏄庣粏-娣诲姞", notes="鍒�鍏峰噯澶囧崟鏄庣粏-娣诲姞") + @PostMapping(value = "/addPreparationOrderDetail") + public Result<String> addPreparationOrderDetail(@RequestBody PreparationOrderDetail preparationOrderDetail) { + preparationOrderDetailService.save(preparationOrderDetail); + return Result.OK("娣诲姞鎴愬姛锛�"); + } + + /** + * 缂栬緫 + * @param preparationOrderDetail + * @return + */ + @AutoLog(value = "鍒�鍏峰噯澶囧崟鏄庣粏-缂栬緫") + @ApiOperation(value="鍒�鍏峰噯澶囧崟鏄庣粏-缂栬緫", notes="鍒�鍏峰噯澶囧崟鏄庣粏-缂栬緫") + @RequestMapping(value = "/editPreparationOrderDetail", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result<String> editPreparationOrderDetail(@RequestBody PreparationOrderDetail preparationOrderDetail) { + preparationOrderDetailService.updateById(preparationOrderDetail); + return Result.OK("缂栬緫鎴愬姛!"); + } + + /** + * 閫氳繃id鍒犻櫎 + * @param id + * @return + */ + @AutoLog(value = "鍒�鍏峰噯澶囧崟鏄庣粏-閫氳繃id鍒犻櫎") + @ApiOperation(value="鍒�鍏峰噯澶囧崟鏄庣粏-閫氳繃id鍒犻櫎", notes="鍒�鍏峰噯澶囧崟鏄庣粏-閫氳繃id鍒犻櫎") + @DeleteMapping(value = "/deletePreparationOrderDetail") + public Result<String> deletePreparationOrderDetail(@RequestParam(name="id",required=true) String id) { + preparationOrderDetailService.removeById(id); + return Result.OK("鍒犻櫎鎴愬姛!"); + } + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + @AutoLog(value = "鍒�鍏峰噯澶囧崟鏄庣粏-鎵归噺鍒犻櫎") + @ApiOperation(value="鍒�鍏峰噯澶囧崟鏄庣粏-鎵归噺鍒犻櫎", notes="鍒�鍏峰噯澶囧崟鏄庣粏-鎵归噺鍒犻櫎") + @DeleteMapping(value = "/deleteBatchPreparationOrderDetail") + public Result<String> deleteBatchPreparationOrderDetail(@RequestParam(name="ids",required=true) String ids) { + this.preparationOrderDetailService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("鎵归噺鍒犻櫎鎴愬姛!"); + } + + /** + * 瀵煎嚭 + * @return + */ + @RequestMapping(value = "/exportPreparationOrderDetail") + public ModelAndView exportPreparationOrderDetail(HttpServletRequest request, PreparationOrderDetail preparationOrderDetail) { + // Step.1 缁勮鏌ヨ鏉′欢 + QueryWrapper<PreparationOrderDetail> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrderDetail, request.getParameterMap()); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + // Step.2 鑾峰彇瀵煎嚭鏁版嵁 + List<PreparationOrderDetail> pageList = preparationOrderDetailService.list(queryWrapper); + List<PreparationOrderDetail> exportList = null; + + // 杩囨护閫変腑鏁版嵁 + String selections = request.getParameter("selections"); + if (oConvertUtils.isNotEmpty(selections)) { + List<String> selectionList = Arrays.asList(selections.split(",")); + exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); + } else { + exportList = pageList; + } + + // Step.3 AutoPoi 瀵煎嚭Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + //姝ゅ璁剧疆鐨刦ilename鏃犳晥,鍓嶇浼氶噸鏇存柊璁剧疆涓�涓� + mv.addObject(NormalExcelConstants.FILE_NAME, "鍒�鍏峰噯澶囧崟鏄庣粏"); + mv.addObject(NormalExcelConstants.CLASS, PreparationOrderDetail.class); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("鍒�鍏峰噯澶囧崟鏄庣粏鎶ヨ〃", "瀵煎嚭浜�:" + sysUser.getRealname(), "鍒�鍏峰噯澶囧崟鏄庣粏")); + mv.addObject(NormalExcelConstants.DATA_LIST, exportList); + return mv; + } + + /** + * 瀵煎叆 + * @return + */ + @RequestMapping(value = "/importPreparationOrderDetail/{mainId}") + public Result<?> importPreparationOrderDetail(HttpServletRequest request, HttpServletResponse response, @PathVariable("mainId") String mainId) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); + for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { + // 鑾峰彇涓婁紶鏂囦欢瀵硅薄 + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List<PreparationOrderDetail> list = ExcelImportUtil.importExcel(file.getInputStream(), PreparationOrderDetail.class, params); + for (PreparationOrderDetail temp : list) { + temp.setPreparationOrderId(mainId); + } + long start = System.currentTimeMillis(); + preparationOrderDetailService.saveBatch(list); + log.info("娑堣�楁椂闂�" + (System.currentTimeMillis() - start) + "姣"); + return Result.OK("鏂囦欢瀵煎叆鎴愬姛锛佹暟鎹鏁帮細" + list.size()); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("鏂囦欢瀵煎叆澶辫触:" + e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("鏂囦欢瀵煎叆澶辫触锛�"); + } + + /*--------------------------------瀛愯〃澶勭悊-鍒�鍏峰噯澶囧崟鏄庣粏-end----------------------------------------------*/ + + + + +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/OutboundOrderConvert.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/OutboundOrderConvert.java index 96d0f66..f369fd9 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/OutboundOrderConvert.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/OutboundOrderConvert.java @@ -2,17 +2,25 @@ import org.jeecg.modules.tms.entity.OutboundOrder; import org.jeecg.modules.tms.entity.dto.OutboundOrderAndDetailDto; +import org.mapstruct.BeanMapping; import org.mapstruct.Mapper; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.ReportingPolicy; import org.mapstruct.factory.Mappers; /** * 浣跨敤 MapStruct 鏂瑰紡杩涜灞炴�у鍒� * 娉ㄦ剰涓嶈兘鏀惧湪 mybatis鎵弿鐨刴apper鍖呬笅闈紝鍚﹀垯浼氭姤閿� */ -@Mapper +@Mapper( + unmappedTargetPolicy = ReportingPolicy.IGNORE, // 蹇界暐鐩爣涓湭琚槧灏勭殑瀛楁 + componentModel = "spring" // 濡傛灉浣跨敤 Spring锛屽彲鐢熸垚 Spring 绠$悊鐨� Bean +) public interface OutboundOrderConvert { + OutboundOrderConvert INSTANCE = Mappers.getMapper(OutboundOrderConvert.class); + @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)// 蹇界暐 null 瀛楁 OutboundOrder convert(OutboundOrderAndDetailDto dto); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/PreparationOrderConvert.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/PreparationOrderConvert.java new file mode 100644 index 0000000..8e88a03 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/PreparationOrderConvert.java @@ -0,0 +1,25 @@ +package org.jeecg.modules.tms.convert; + +import org.jeecg.modules.tms.entity.PreparationOrder; +import org.jeecg.modules.tms.entity.dto.PreparationOrderAndDetailDto; +import org.mapstruct.BeanMapping; +import org.mapstruct.Mapper; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.factory.Mappers; + +/** + * 浣跨敤 MapStruct 鏂瑰紡杩涜灞炴�у鍒� + * 娉ㄦ剰涓嶈兘鏀惧湪 mybatis鎵弿鐨刴apper鍖呬笅闈紝鍚﹀垯浼氭姤閿� + */ +@Mapper( + unmappedTargetPolicy = ReportingPolicy.IGNORE, // 蹇界暐鐩爣涓湭琚槧灏勭殑瀛楁 + componentModel = "spring" // 濡傛灉浣跨敤 Spring锛屽彲鐢熸垚 Spring 绠$悊鐨� Bean +) +public interface PreparationOrderConvert { + + PreparationOrderConvert INSTANCE = Mappers.getMapper(PreparationOrderConvert.class); + + @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)// 蹇界暐 null 瀛楁 + PreparationOrder convert(PreparationOrderAndDetailDto dto); +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/BaseTools.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/BaseTools.java index aaa61bf..d99691d 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/BaseTools.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/BaseTools.java @@ -108,4 +108,9 @@ @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "鏇存柊鏃堕棿") private Date updateTime; + + /**宸ュ叿鍥剧墖*/ + @Excel(name = "宸ュ叿鍥剧墖", width = 15) + @ApiModelProperty(value = "宸ュ叿鍥剧墖") + private String toolPicture; } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java index 23b6d36..b821f7e 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableLogic; +import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; @@ -22,6 +23,7 @@ * @Version: V1.0 */ @Data +@Accessors(chain = true) @TableName("tms_outbound_detail") @ApiModel(value="tms_outbound_detail瀵硅薄", description="鍑哄簱鐢宠鍗曟槑缁�") public class OutboundDetail implements Serializable { diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java index 4520bf9..d8c9232 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java @@ -5,6 +5,8 @@ import java.util.Date; import com.baomidou.mybatisplus.annotation.*; +import liquibase.pro.packaged.E; +import lombok.experimental.Accessors; import org.jeecgframework.poi.excel.annotation.Excel; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; @@ -20,6 +22,7 @@ * @Version: V1.0 */ @Data +@Accessors(chain = true) @TableName("tms_outbound_order") @ApiModel(value="tms_outbound_order瀵硅薄", description="tms_outbound_order") public class OutboundOrder implements Serializable { @@ -98,6 +101,42 @@ @Excel(name = "澶囨敞", width = 15) @ApiModelProperty(value = "澶囨敞") private String remark; + /**鍑嗗鍗曠紪鍙�*/ + @Excel(name = "鍑嗗鍗曠紪鍙�", width = 15) + @ApiModelProperty(value = "鍑嗗鍗曠紪鍙�") + private String preparationOrderId; + /**闆朵欢鍥惧彿*/ + @Excel(name = "闆朵欢鍥惧彿", width = 15) + @ApiModelProperty(value = "闆朵欢鍥惧彿") + private String partDrawingNo; + /**闆朵欢鍚嶇О*/ + @Excel(name = "闆朵欢鍚嶇О", width = 15) + @ApiModelProperty(value = "闆朵欢鍚嶇О") + private String partName; + /**闆朵欢鏉愭枡*/ + @Excel(name = "闆朵欢鏉愭枡", width = 15) + @ApiModelProperty(value = "闆朵欢鏉愭枡") + private String partMaterial; + /**鍔犲伐鎵规*/ + @Excel(name = "宸ュ簭锛堝伐姝ュ彿锛�", width = 15) + @ApiModelProperty(value = "宸ュ簭锛堝伐姝ュ彿锛�") + private String productionProcessesNo; + /**鍔犲伐鎵规*/ + @Excel(name = "鍔犲伐鎵规", width = 15) + @ApiModelProperty(value = "鍔犲伐鎵规") + private String batchCode; + /**鍔犲伐鏁伴噺*/ + @Excel(name = "鍔犲伐鏁伴噺", width = 15) + @ApiModelProperty(value = "鍔犲伐鏁伴噺") + private String machiningCount; + /**鍔犲伐璁惧*/ + @Excel(name = "鍔犲伐璁惧", width = 15) + @ApiModelProperty(value = "鍔犲伐璁惧") + private String equipmentCode; + /**绋嬪簭鍚�*/ + @Excel(name = "绋嬪簭鍚�", width = 15) + @ApiModelProperty(value = "绋嬪簭鍚�") + private String ncName; /**绉熸埛鍙�*/ @Excel(name = "绉熸埛鍙�", width = 15) @ApiModelProperty(value = "绉熸埛鍙�") diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrder.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrder.java new file mode 100644 index 0000000..6f2e2b9 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrder.java @@ -0,0 +1,111 @@ +package org.jeecg.modules.tms.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description: 鍒�鍏峰噯澶囧崟 + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Data +@Accessors(chain = true) +@TableName("tms_preparation_order") +@ApiModel(value="tms_preparation_order瀵硅薄", description="鍒�鍏峰噯澶囧崟") +public class PreparationOrder implements Serializable { + private static final long serialVersionUID = 1L; + + /**涓婚敭*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "涓婚敭") + private String id; + /**鍑嗗鍗曠紪鍙�*/ + @Excel(name = "鍑嗗鍗曠紪鍙�", width = 15) + @ApiModelProperty(value = "鍑嗗鍗曠紪鍙�") + private String preparationOrderNum; + /**闆朵欢鍥惧彿*/ + @Excel(name = "闆朵欢鍥惧彿", width = 15) + @ApiModelProperty(value = "闆朵欢鍥惧彿") + private String partDrawingNo; + /**闆朵欢鍚嶇О*/ + @Excel(name = "闆朵欢鍚嶇О", width = 15) + @ApiModelProperty(value = "闆朵欢鍚嶇О") + private String partName; + /**闆朵欢鏉愭枡*/ + @Excel(name = "闆朵欢鏉愭枡", width = 15) + @ApiModelProperty(value = "闆朵欢鏉愭枡") + private String partMaterial; + /**宸ュ簭锛堝伐姝ュ彿锛�*/ + @Excel(name = "宸ュ簭锛堝伐姝ュ彿锛�", width = 15) + @ApiModelProperty(value = "宸ュ簭锛堝伐姝ュ彿锛�") + private String productionProcessesNo; + /**鍔犲伐鎵规*/ + @Excel(name = "鍔犲伐鎵规", width = 15) + @ApiModelProperty(value = "鍔犲伐鎵规") + private String batchCode; + /**鍔犲伐鏁伴噺*/ + @Excel(name = "鍔犲伐鏁伴噺", width = 15) + @ApiModelProperty(value = "鍔犲伐鏁伴噺") + private String machiningCount; + /**鍔犲伐璁惧*/ + @Excel(name = "鍔犲伐璁惧", width = 15) + @ApiModelProperty(value = "鍔犲伐璁惧") + private String equipmentCode; + /**绋嬪簭鍚�*/ + @Excel(name = "绋嬪簭鍚�", width = 15) + @ApiModelProperty(value = "绋嬪簭鍚�") + private String ncName; + /**鍑嗗鍗曞嚭搴撴暟閲�*/ + @Excel(name = "鍑嗗鍗曞嚭搴撴暟閲�", width = 15) + @ApiModelProperty(value = "鍑嗗鍗曞嚭搴撴暟閲�") + private java.math.BigDecimal outboundQuantity; + /**鍗曞瓙鐘舵��;1.鏈鏍革紱2.璋冩満鍛樺凡瀹℃牳锛�3.宸茶浆鍑哄簱鐢宠*/ + @Dict(dicCode = "preparation_order_status") + @Excel(name = "鍗曞瓙鐘舵��;1.鏈鏍革紱2.璋冩満鍛樺凡瀹℃牳锛�3.宸茶浆鍑哄簱鐢宠", width = 15) + @ApiModelProperty(value = "鍗曞瓙鐘舵��;1.鏈鏍革紱2.璋冩満鍛樺凡瀹℃牳锛�3.宸茶浆鍑哄簱鐢宠") + private String orderStatus; + /**鍑嗗鍗曟彁浜ゆ椂闂�;鎻愪氦鑷冲嚭搴撶敵璇峰崟鐨勬椂闂�*/ + @Excel(name = "鍑嗗鍗曟彁浜ゆ椂闂�;鎻愪氦鑷冲嚭搴撶敵璇峰崟鐨勬椂闂�", width = 15, format = "yyyy-MM-dd HH:mm") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm") + @ApiModelProperty(value = "鍑嗗鍗曟彁浜ゆ椂闂�;鎻愪氦鑷冲嚭搴撶敵璇峰崟鐨勬椂闂�") + private Date outboundTime; + /**澶囨敞*/ + @Excel(name = "澶囨敞", width = 15) + @ApiModelProperty(value = "澶囨敞") + private String remark; + /**绉熸埛鍙�*/ + @Excel(name = "绉熸埛鍙�", width = 15) + @ApiModelProperty(value = "绉熸埛鍙�") + private String tenantId; + /**鍒涘缓浜�*/ + @ApiModelProperty(value = "鍒涘缓浜�") + private String createBy; + /**鍒涘缓鏃堕棿;DNC鎺ㄩ�佹暟鎹椂闂�*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm") + @ApiModelProperty(value = "鍒涘缓鏃堕棿;DNC鎺ㄩ�佹暟鎹椂闂�") + private Date createTime; + /**鏇存柊浜�*/ + @ApiModelProperty(value = "鏇存柊浜�") + private String updateBy; + /**鏇存柊鏃堕棿*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm") + @ApiModelProperty(value = "鏇存柊鏃堕棿") + private Date updateTime; +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java new file mode 100644 index 0000000..99f9164 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java @@ -0,0 +1,98 @@ +package org.jeecg.modules.tms.entity; + +import java.io.Serializable; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.jeecg.common.aspect.annotation.Dict; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import java.util.Date; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description: 鍒�鍏峰噯澶囧崟鏄庣粏 + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Data +@TableName("tms_preparation_order_detail") +@ApiModel(value="tms_preparation_order_detail瀵硅薄", description="鍒�鍏峰噯澶囧崟鏄庣粏") +public class PreparationOrderDetail implements Serializable { + private static final long serialVersionUID = 1L; + + /**涓婚敭*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "涓婚敭") + private String id; + /**鍑嗗鍗曞彿*/ + @ApiModelProperty(value = "鍑嗗鍗曞彿") + private String preparationOrderId; + /**鍒�鍏风紪鐮�*/ + @Excel(name = "鍒�鍏风紪鐮�", width = 15) + @ApiModelProperty(value = "鍒�鍏风紪鐮�(tms_base_tool琛╥d瀛楁)") + private String toolCode; + /**鍒�鍏风紪鍙�*/ + @Excel(name = "鍒�鍏风紪鍙�", width = 15) + @ApiModelProperty(value = "鍒�鍏风紪鍙�") + private String toolId; + /**鐢宠鍑哄簱鏁伴噺*/ + @Excel(name = "鐢宠鍑哄簱鏁伴噺", width = 15) + @ApiModelProperty(value = "鐢宠鍑哄簱鏁伴噺") + private java.math.BigDecimal outboundQuantity; + /**绉熸埛鍙�*/ + @Excel(name = "绉熸埛鍙�", width = 15) + @ApiModelProperty(value = "绉熸埛鍙�") + private String tenantId; + /**鍒涘缓浜�*/ + @ApiModelProperty(value = "鍒涘缓浜�") + private String createBy; + /**鍒涘缓鏃堕棿*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "鍒涘缓鏃堕棿") + private Date createTime; + /**鏇存柊浜�*/ + @ApiModelProperty(value = "鏇存柊浜�") + private String updateBy; + /**鏇存柊鏃堕棿*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "鏇存柊鏃堕棿") + private Date updateTime; + + /**鍒�鍏风紪鐮�(tms_base_tool琛╰ool_code瀛楁)*/ + @TableField(exist = false) + @ApiModelProperty(value = "鍒�鍏风紪鐮�(tms_base_tool琛╰ool_code瀛楁)") + private String toolNum; + /**涓枃鍚嶇О*/ + @TableField(exist = false) + @ApiModelProperty(value = "涓枃鍚嶇О") + private String chineseName; + /**鍨嬪彿/鍥惧彿*/ + @TableField(exist = false) + @ApiModelProperty(value = "鍨嬪彿/鍥惧彿") + private String toolModel; + /**宸ュ叿绫诲瀷*/ + @TableField(exist = false) + @ApiModelProperty(value = "宸ュ叿绫诲瀷") + @Dict(dicCode = "application_type") + private String applicationType; + /**鍒�鍏锋潗鏂�*/ + @TableField(exist = false) + @ApiModelProperty(value = "鍒�鍏锋潗鏂�") + private String toolMaterial; + /**闆朵欢鏉愭枡*/ + @TableField(exist = false) + @ApiModelProperty(value = "闆朵欢鏉愭枡") + private String partMaterial; + /**鍘傚*/ + @TableField(exist = false) + @ApiModelProperty(value = "鍘傚") + private String supplierId; +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/PreparationOrderAndDetailDto.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/PreparationOrderAndDetailDto.java new file mode 100644 index 0000000..3ee4e94 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/PreparationOrderAndDetailDto.java @@ -0,0 +1,61 @@ +package org.jeecg.modules.tms.entity.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecg.modules.tms.entity.PreparationOrderDetail; +import org.springframework.format.annotation.DateTimeFormat; +import java.util.Date; +import java.util.List; + +@Data +public class PreparationOrderAndDetailDto { + + /**涓婚敭*/ + @ApiModelProperty(value = "涓婚敭") + private String id; + /**鍑嗗鍗曠紪鍙�*/ + @ApiModelProperty(value = "鍑嗗鍗曠紪鍙�") + private String preparationOrderNum; + /**闆朵欢鍥惧彿*/ + @ApiModelProperty(value = "闆朵欢鍥惧彿") + private String partDrawingNo; + /**闆朵欢鍚嶇О*/ + @ApiModelProperty(value = "闆朵欢鍚嶇О") + private String partName; + /**闆朵欢鏉愭枡*/ + @ApiModelProperty(value = "闆朵欢鏉愭枡") + private String partMaterial; + /**宸ュ簭锛堝伐姝ュ彿锛�*/ + @ApiModelProperty(value = "宸ュ簭锛堝伐姝ュ彿锛�") + private String productionProcessesNo; + /**鍔犲伐鎵规*/ + @ApiModelProperty(value = "鍔犲伐鎵规") + private String batchCode; + /**鍔犲伐鏁伴噺*/ + @ApiModelProperty(value = "鍔犲伐鏁伴噺") + private String machiningCount; + /**鍔犲伐璁惧*/ + @ApiModelProperty(value = "鍔犲伐璁惧") + private String equipmentCode; + /**绋嬪簭鍚�*/ + @ApiModelProperty(value = "绋嬪簭鍚�") + private String ncName; + /**鍑嗗鍗曞嚭搴撴暟閲�*/ + @ApiModelProperty(value = "鍑嗗鍗曞嚭搴撴暟閲�") + private java.math.BigDecimal outboundQuantity; + /**鍗曞瓙鐘舵��;1.鏈鏍革紱2.璋冩満鍛樺凡瀹℃牳锛�3.宸茶浆鍑哄簱鐢宠*/ + @ApiModelProperty(value = "鍗曞瓙鐘舵��;1.鏈鏍革紱2.璋冩満鍛樺凡瀹℃牳锛�3.宸茶浆鍑哄簱鐢宠") + private String orderStatus; + /**鍑嗗鍗曟彁浜ゆ椂闂�;鎻愪氦鑷冲嚭搴撶敵璇峰崟鐨勬椂闂�*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm") + @ApiModelProperty(value = "鍑嗗鍗曟彁浜ゆ椂闂�;鎻愪氦鑷冲嚭搴撶敵璇峰崟鐨勬椂闂�") + private Date outboundTime; + /**澶囨敞*/ + @ApiModelProperty(value = "澶囨敞") + private String remark; + /**鍒�鍏峰噯澶囧崟鏄庣粏*/ + @ApiModelProperty(value = "鍒�鍏峰噯澶囧崟鏄庣粏") + private List<PreparationOrderDetail> preparationOrderDetailList; +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java index 0ce3390..feab8e2 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java @@ -163,4 +163,7 @@ @ApiModelProperty(value = "澶囨敞") private String remark; + @ApiModelProperty(value = "宸ュ叿鍥剧墖") + private String toolPicture; + } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java index 1cfa455..a01e7d7 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java @@ -94,4 +94,7 @@ @ApiModelProperty(value = "澶囨敞") private String remark; + @ApiModelProperty(value = "宸ュ叿鍥剧墖") + private String toolPicture; + } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaHolesToolsVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaHolesToolsVo.java index 59dbf3c..45ce3ff 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaHolesToolsVo.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaHolesToolsVo.java @@ -188,4 +188,7 @@ @ApiModelProperty(value = "澶囨敞") private String remark; + @ApiModelProperty(value = "宸ュ叿鍥剧墖") + private String toolPicture; + } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java index 8315462..e8b4d74 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java @@ -191,4 +191,7 @@ @ApiModelProperty(value = "澶囨敞") private String remark; + @ApiModelProperty(value = "宸ュ叿鍥剧墖") + private String toolPicture; + } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java index b2a9781..ddae238 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java @@ -160,4 +160,7 @@ @ApiModelProperty(value = "澶囨敞") private String remark; + @ApiModelProperty(value = "宸ュ叿鍥剧墖") + private String toolPicture; + } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java index 304fcc5..00f3d00 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java @@ -198,4 +198,7 @@ @ApiModelProperty(value = "澶囨敞") private String remark; + @ApiModelProperty(value = "宸ュ叿鍥剧墖") + private String toolPicture; + } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java index e8e8165..274955b 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java @@ -8,7 +8,8 @@ TOOL_BORROW("1", "宸ュ叿鍊熺敤"), MAINTENANCE_OUTBOUND("2", "缁翠慨鍑哄簱"), CALIBRATION_OUTBOUND("3", "妫�瀹氬嚭搴�"), - GRINDING_OUTBOUND("4", "鍒冪(鍑哄簱"); + GRINDING_OUTBOUND("4", "鍒冪(鍑哄簱"), + PREPARATION_OUTBOUND("5", "鍑嗗鍗曞嚭搴�"); private final String value; private final String description; diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/PreparationOrderStatus.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/PreparationOrderStatus.java new file mode 100644 index 0000000..7335ee4 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/PreparationOrderStatus.java @@ -0,0 +1,56 @@ +package org.jeecg.modules.tms.enums; + + +import lombok.Getter; + +import java.util.Objects; + +/** + * 鍒�鍏峰噯澶囧崟鐘舵�佹灇涓剧被 + */ +@Getter +public enum PreparationOrderStatus { + /** + * 寰呭鏍哥姸鎬侊紝鍊间负1 + */ + PENDING_AUDIT("1", "鏈鏍�"), + + /** + * 瀹℃牳閫氳繃鐘舵�侊紝鍊间负2 + */ + AUDITED("2", "璋冩満鍛樺凡瀹℃牳"), + + /** + * 杞嚭搴撶敵璇风姸鎬侊紝鍊间负3 + */ + CONVERT("3", "宸茶浆鍑哄簱鐢宠"); + + private final String value; + private final String description; + + /** + * 鏋勯�犳柟娉� + * + * @param value 鐘舵�佸�� + * @param description 鐘舵�佹弿杩� + */ + PreparationOrderStatus(String value, String description) { + this.value = value; + this.description = description; + } + + /** + * 鏍规嵁鐘舵�佸�艰幏鍙栧搴旂殑鏋氫妇瀹炰緥 + * + * @param value 鐘舵�佸�� + * @return 瀵瑰簲鐨勬灇涓惧疄渚嬶紝濡傛灉鎵句笉鍒板尮閰嶇殑鍊煎垯杩斿洖null + */ + public static PreparationOrderStatus fromValue(String value) { + for (PreparationOrderStatus status : values()) { + if (Objects.equals(status.getValue(), value)) { + return status; + } + } + return null; + } +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderDetailMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderDetailMapper.java new file mode 100644 index 0000000..e521471 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderDetailMapper.java @@ -0,0 +1,40 @@ +package org.jeecg.modules.tms.mapper; + +import java.util.List; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.jeecg.modules.tms.entity.PreparationOrderDetail; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +/** + * @Description: 鍒�鍏峰噯澶囧崟鏄庣粏 + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface PreparationOrderDetailMapper extends BaseMapper<PreparationOrderDetail> { + + /** + * 閫氳繃涓昏〃id鍒犻櫎瀛愯〃鏁版嵁 + * + * @param mainId 涓昏〃id + * @return boolean + */ + public boolean deleteByMainId(@Param("mainId") String mainId); + + /** + * 閫氳繃涓昏〃id鏌ヨ瀛愯〃鏁版嵁 + * + * @param mainId 涓昏〃id + * @return List<PreparationOrderDetail> + */ + public List<PreparationOrderDetail> selectByMainId(@Param("mainId") String mainId); + + IPage<PreparationOrderDetail> queryPageList(Page<PreparationOrderDetail> page, + @Param(Constants.WRAPPER) Wrapper<PreparationOrderDetail> queryWrapper); +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderMapper.java new file mode 100644 index 0000000..5965d11 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderMapper.java @@ -0,0 +1,24 @@ +package org.jeecg.modules.tms.mapper; + +import java.util.List; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.tms.entity.PreparationOrder; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 鍒�鍏峰噯澶囧崟 + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface PreparationOrderMapper extends BaseMapper<PreparationOrder> { + + IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page, + @Param(Constants.WRAPPER) Wrapper<PreparationOrder> queryWrapper); +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml index 5b34e8c..c6df81e 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml @@ -13,6 +13,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, + t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, @@ -81,6 +82,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, + t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, @@ -113,6 +115,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, + t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, @@ -171,6 +174,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, + t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, @@ -238,6 +242,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, + t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, @@ -309,6 +314,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, + t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderDetailMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderDetailMapper.xml new file mode 100644 index 0000000..4f99dc4 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderDetailMapper.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.jeecg.modules.tms.mapper.PreparationOrderDetailMapper"> + + <delete id="deleteByMainId" parameterType="java.lang.String"> + DELETE + FROM tms_preparation_order_detail + WHERE + preparation_order_id = #{mainId} + </delete> + + <select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.tms.entity.PreparationOrderDetail"> + SELECT * + FROM tms_preparation_order_detail + WHERE + preparation_order_id = #{mainId} + </select> + <select id="queryPageList" resultType="org.jeecg.modules.tms.entity.PreparationOrderDetail"> + SELECT + t1.id id, + t1.preparation_order_id preparationOrderId, + t1.tool_code toolCode, + t1.outbound_quantity outboundQuantity, + t1.tenant_id tenantId, + t1.create_by createBy, + t1.create_time createTime, + t1.update_by updateBy, + t1.update_time updateTime, + t2.tool_code toolNum, + t2.chinese_name chineseName, + t2.tool_model toolModel, + t2.parama_table_name paramaTableName, + t3.application_type applicationType, + t3.supplier_id supplierId, + <choose> + <when test="ew.paramNameValuePairs.paramaTableName == '1'"> + t4.tool_material toolMaterial, + t4.part_material partMaterial + </when> + <when test="ew.paramNameValuePairs.paramaTableName == '2'"> + t5.tool_material toolMaterial, + t5.part_material partMaterial + </when> + <when test="ew.paramNameValuePairs.paramaTableName == '3'"> + t6.tool_material toolMaterial, + t6.part_material partMaterial + </when> + <when test="ew.paramNameValuePairs.paramaTableName == '4'"> + t7.tool_material toolMaterial, + t7.part_material partMaterial + </when> + <when test="ew.paramNameValuePairs.paramaTableName == '5'"> + t8.tool_material toolMaterial, + t8.part_material partMaterial + </when> + <when test="ew.paramNameValuePairs.paramaTableName == '6'"> + t9.tool_material toolMaterial, + t9.part_material partMaterial + </when> + <otherwise> + t10.tool_material toolMaterial, + t10.part_material partMaterial + </otherwise> + </choose> + FROM tms_preparation_order_detail t1 + LEFT JOIN tms_base_tools t2 on t1.tool_code = t2.id + LEFT JOIN tms_tools_config_property t3 on t3.tool_code = t2.id + <choose> + <when test="ew.paramNameValuePairs.paramaTableName == '1'"> + LEFT JOIN tms_para_common_tool t4 on t4.tool_code = t2.id + </when> + <when test="ew.paramNameValuePairs.paramaTableName == '2'"> + LEFT JOIN tms_para_hole_tools t5 on t5.tool_code = t2.id + </when> + <when test="ew.paramNameValuePairs.paramaTableName == '3'"> + LEFT JOIN tms_para_threading_tool t6 on t6.tool_code = t2.id + </when> + <when test="ew.paramNameValuePairs.paramaTableName == '4'"> + LEFT JOIN tms_para_mill_tool t7 on t7.tool_code = t2.id + </when> + <when test="ew.paramNameValuePairs.paramaTableName == '5'"> + LEFT JOIN tms_para_turning_tools t8 on t8.tool_code = t2.id + </when> + <when test="ew.paramNameValuePairs.paramaTableName == '6'"> + LEFT JOIN tms_para_blade t9 on t9.tool_code = t2.id + </when> + <otherwise> + LEFT JOIN tms_para_common_tool t10 on t10.tool_code = t2.id + </otherwise> + </choose> + ${ew.customSqlSegment} + </select> +</mapper> diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderMapper.xml new file mode 100644 index 0000000..b610ad3 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderMapper.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.jeecg.modules.tms.mapper.PreparationOrderMapper"> + + <select id="queryPageList" resultType="org.jeecg.modules.tms.entity.PreparationOrder"> + SELECT + t.id AS id, + t.preparation_order_num AS preparationOrderNum, + t.part_drawing_no AS partDrawingNo, + t.part_name AS partName, + t.part_material AS partMaterial, + t.production_processes_no AS productionProcessesNo, + t.batch_code AS batchCode, + t.machining_count AS machiningCount, + t.equipment_code AS equipmentCode, + t.nc_name AS ncName, + t.outbound_quantity AS outboundQuantity, + t.order_status AS orderStatus, + t.outbound_time AS outboundTime, + t.remark AS remark, + t.tenant_id AS tenantId, + t.create_by AS createBy, + t.create_time AS createTime, + t.update_by AS updateBy, + t.update_time AS updateTime + FROM tms_preparation_order t + ${ew.customSqlSegment} + </select> +</mapper> \ No newline at end of file diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderDetailService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderDetailService.java new file mode 100644 index 0000000..81b2380 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderDetailService.java @@ -0,0 +1,27 @@ +package org.jeecg.modules.tms.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.jeecg.modules.tms.entity.PreparationOrderDetail; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; +import java.util.Map; + +/** + * @Description: 鍒�鍏峰噯澶囧崟鏄庣粏 + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface IPreparationOrderDetailService extends IService<PreparationOrderDetail> { + + /** + * 閫氳繃涓昏〃id鏌ヨ瀛愯〃鏁版嵁 + * + * @param mainId + * @return List<PreparationOrderDetail> + */ + public List<PreparationOrderDetail> selectByMainId(String mainId); + + IPage<PreparationOrderDetail> queryPageList(Page<PreparationOrderDetail> page, Map<String, String[]> parameterMap); +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java new file mode 100644 index 0000000..3c2026c --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java @@ -0,0 +1,43 @@ +package org.jeecg.modules.tms.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.jeecg.modules.tms.entity.PreparationOrderDetail; +import org.jeecg.modules.tms.entity.PreparationOrder; +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.tms.entity.dto.PreparationOrderAndDetailDto; +import org.springframework.beans.factory.annotation.Autowired; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * @Description: 鍒�鍏峰噯澶囧崟 + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface IPreparationOrderService extends IService<PreparationOrder> { + + /** + * 鍒犻櫎涓�瀵瑰 + * + * @param id + */ + public void delMain (String id); + + /** + * 鎵归噺鍒犻櫎涓�瀵瑰 + * + * @param idList + */ + public void delBatchMain (Collection<? extends Serializable> idList); + + + void editTotal(PreparationOrderAndDetailDto preparationOrderAndDetailDto); + + List<String> convertToOutboundOrder(List<String> preparationOrderIds); + + IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page, Map<String, String[]> parameterMap); +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundOrderServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundOrderServiceImpl.java index ad52aa3..36f8868 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundOrderServiceImpl.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundOrderServiceImpl.java @@ -262,6 +262,7 @@ num++; //杞崲鍥炲瓧绗︿覆骞朵繚鐣欏墠瀵奸浂 String result = String.format("%0" + currentCode.length() + "d", num); + //鎵撳嵃浜岀淮鐮� //淇濆瓨鍏ュ簱娴佹按 InStoreDetail inStoreDetail = new InStoreDetail(); inStoreDetail.setInboundTime(inboundTime); diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java index 936e09c..3befbbf 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java @@ -83,6 +83,8 @@ private OutboundOrderMapper outboundOrderMapper; @Autowired private OutboundDetailMapper outboundDetailMapper; + @Autowired + private OutboundOrderConvert outboundOrderConvert; @Override @Transactional(rollbackFor = Exception.class) @@ -103,7 +105,7 @@ @Override @Transactional(rollbackFor = Exception.class) public void addTotal(OutboundOrderAndDetailDto outboundOrder) { - OutboundOrder order = OutboundOrderConvert.INSTANCE.convert(outboundOrder); + OutboundOrder order = outboundOrderConvert.convert(outboundOrder); order.setHandler(Objects.requireNonNull(getCurrentUser()).getId()); order.setOutNum(businessCodeRuleService.generateBusinessCodeSeq("outBoundOrder")); order.setOrderStatus(OutBillStatus.DRAFT.getValue()); @@ -155,7 +157,7 @@ //鍒犻櫎鎵�鏈夋槑缁� outboundDetailService.remove(new LambdaQueryWrapper<OutboundDetail>() .eq(OutboundDetail::getOutStorehouseId, outboundOrder.getId())); - OutboundOrder outboundOrderUpdate = BeanUtil.copyProperties(outboundOrder, OutboundOrder.class); + OutboundOrder outboundOrderUpdate = outboundOrderConvert.convert(outboundOrder); outboundOrderMapper.updateById(outboundOrderUpdate); List<OutboundDetail> detailList = CollectionUtil.newArrayList(); outboundOrder.getOutboundDetailList().forEach(item->{ @@ -175,13 +177,14 @@ if (!Objects.equals(outboundOrder.getOrderStatus(), OutBillStatus.DRAFT.getValue())) { throw new JeecgBootException("鏃犳硶鎻愪氦闈炶崏绋跨姸鎬佺殑鍑哄簱鐢宠鍗曪紒"); } - //閿佸畾鐢宠鍗曟槑缁嗕腑宸ュ叿搴撳瓨 - if (lockOutboundStock(id)) { - //鍚姩娴佺▼ - if (triggerProcess(outboundOrder)) { - outboundOrder.setOrderStatus(OutBillStatus.SUBMITTED.getValue()); - updateById(outboundOrder); - } + if (!OutStorehouseType.PREPARATION_OUTBOUND.getValue().equals(outboundOrder.getOutStorehouseType())) { + //涓嶆槸浠庡噯澶囧崟杞叆鐨勫嚭搴撶敵璇凤紝鎵ц閿佸簱 + lockOutboundStock(id); + } + //鍚姩娴佺▼ + if (triggerProcess(outboundOrder)) { + outboundOrder.setOrderStatus(OutBillStatus.SUBMITTED.getValue()); + updateById(outboundOrder); } } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderDetailServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderDetailServiceImpl.java new file mode 100644 index 0000000..f904465 --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderDetailServiceImpl.java @@ -0,0 +1,43 @@ +package org.jeecg.modules.tms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.jeecg.modules.tms.entity.PreparationOrderDetail; +import org.jeecg.modules.tms.mapper.PreparationOrderDetailMapper; +import org.jeecg.modules.tms.service.IPreparationOrderDetailService; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description: 鍒�鍏峰噯澶囧崟鏄庣粏 + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Service +public class PreparationOrderDetailServiceImpl extends ServiceImpl<PreparationOrderDetailMapper, PreparationOrderDetail> implements IPreparationOrderDetailService { + + @Autowired + private PreparationOrderDetailMapper preparationOrderDetailMapper; + + @Override + public List<PreparationOrderDetail> selectByMainId(String mainId) { + return preparationOrderDetailMapper.selectByMainId(mainId); + } + + @Override + public IPage<PreparationOrderDetail> queryPageList(Page<PreparationOrderDetail> page, Map<String, String[]> parameterMap) { + QueryWrapper<PreparationOrderDetail> queryWrapper = Wrappers.query(); + String[] preparationOrderIds = parameterMap.get("preparationOrderId"); + if (preparationOrderIds != null && preparationOrderIds.length > 0) { + queryWrapper.eq("t1.preparation_order_id", preparationOrderIds[0]); + } + return this.baseMapper.queryPageList(page, queryWrapper); + } +} diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java new file mode 100644 index 0000000..6bb0dfc --- /dev/null +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java @@ -0,0 +1,235 @@ +package org.jeecg.modules.tms.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.subject.Subject; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; +import org.jeecg.modules.tms.convert.PreparationOrderConvert; +import org.jeecg.modules.tms.entity.*; +import org.jeecg.modules.tms.entity.dto.PreparationOrderAndDetailDto; +import org.jeecg.modules.tms.enums.*; +import org.jeecg.modules.tms.mapper.PreparationOrderDetailMapper; +import org.jeecg.modules.tms.mapper.PreparationOrderMapper; +import org.jeecg.modules.tms.service.*; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: 鍒�鍏峰噯澶囧崟 + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Service +public class PreparationOrderServiceImpl extends ServiceImpl<PreparationOrderMapper, PreparationOrder> implements IPreparationOrderService { + + @Autowired + private PreparationOrderMapper preparationOrderMapper; + @Autowired + private PreparationOrderDetailMapper preparationOrderDetailMapper; + @Autowired + private IPreparationOrderDetailService preparationOrderDetailService; + @Autowired + private IToolLedgerService toolLedgerService; + @Autowired + private IToolLedgerDetailService toolLedgerDetailService; + @Autowired + private IOutboundOrderService outboundOrderService; + @Autowired + private IOutboundDetailService outboundDetailService; + @Autowired + private ISysBusinessCodeRuleService businessCodeRuleService; + @Autowired + private IBaseToolsService baseToolsService; + @Autowired + private PreparationOrderConvert preparationOrderConvert; + + @Override + @Transactional(rollbackFor = Exception.class) + public void delMain(String id) { + preparationOrderDetailMapper.deleteByMainId(id); + preparationOrderMapper.deleteById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delBatchMain(Collection<? extends Serializable> idList) { + for(Serializable id:idList) { + preparationOrderDetailMapper.deleteByMainId(id.toString()); + preparationOrderMapper.deleteById(id); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void editTotal(PreparationOrderAndDetailDto preparationOrderAndDetailDto) { + //鍏堝垹闄ゆ墍鏈夋槑缁� + preparationOrderDetailMapper.delete(new LambdaQueryWrapper<PreparationOrderDetail>() + .eq(PreparationOrderDetail::getPreparationOrderId, preparationOrderAndDetailDto.getId())); + PreparationOrder preparationOrder = preparationOrderConvert.convert(preparationOrderAndDetailDto); + updateById(preparationOrder); + List<PreparationOrderDetail> detailUpdateList = CollectionUtil.newArrayList(); + preparationOrderAndDetailDto.getPreparationOrderDetailList().forEach(item->{ + item.setPreparationOrderId(preparationOrder.getId()); + detailUpdateList.add(item); + }); + preparationOrderDetailService.saveBatch(detailUpdateList); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public List<String> convertToOutboundOrder(List<String> preparationOrderIds) { + List<String> resultMessage = CollectionUtil.newArrayList(); + List<PreparationOrder> preparationOrderList = listByIds(preparationOrderIds); + //鏍¢獙鍑嗗鍗曟槑缁嗕腑鐨勬暟閲� + for (PreparationOrder preparationOrder : preparationOrderList) { + if (PreparationOrderStatus.PENDING_AUDIT.getValue().equals(preparationOrder.getOrderStatus())) { + resultMessage.add("鍑嗗鍗曘��" + preparationOrder.getPreparationOrderNum() + "銆戞湭瀹℃牳锛屾棤娉曡浆鍑哄簱鐢宠锛�"); + continue; + } + if (PreparationOrderStatus.CONVERT.getValue().equals(preparationOrder.getOrderStatus())) { + resultMessage.add("鍑嗗鍗曘��" + preparationOrder.getPreparationOrderNum() + "銆戝凡缁忚浆鍑猴紝璇峰嬁閲嶅鎻愪氦锛�"); + continue; + } + List<PreparationOrderDetail> preparationOrderDetailList = preparationOrderDetailService.list(new LambdaQueryWrapper<PreparationOrderDetail>() + .eq(PreparationOrderDetail::getPreparationOrderId, preparationOrder.getId())); + Map<String, BigDecimal> preparationOrderToolCodeMap = preparationOrderDetailList.stream().collect(Collectors.toMap(PreparationOrderDetail::getToolCode, + PreparationOrderDetail::getOutboundQuantity, (k1, k2) -> k1)); + List<ToolLedgerDetail> toolLedgerDetailList = toolLedgerDetailService.list(new LambdaQueryWrapper<ToolLedgerDetail>() + .in(ToolLedgerDetail::getToolCode, preparationOrderToolCodeMap.keySet()) + .eq(ToolLedgerDetail::getQuantity, BigDecimal.ONE) + .eq(ToolLedgerDetail::getStatus, ToolCirculationStatus.IN_STOCK.getValue())); + Map<String, List<ToolLedgerDetail>> ledgerDetailToolCodeMap = toolLedgerDetailList.stream().collect(Collectors.groupingBy(ToolLedgerDetail::getToolCode)); + + List<OutboundDetail> outboundDetailList = CollectionUtil.newArrayList(); + for (PreparationOrderDetail preparationOrderDetail : preparationOrderDetailList) { + String toolCode = preparationOrderDetail.getToolCode(); + BigDecimal needQuantity = preparationOrderDetail.getOutboundQuantity(); + List<ToolLedgerDetail> toolLedgerDetails = ledgerDetailToolCodeMap.get(toolCode); + BigDecimal stockQuantity = Optional.ofNullable(toolLedgerDetails).orElse(Collections.emptyList()).stream() + .map(ToolLedgerDetail::getQuantity) + .reduce(BigDecimal.ZERO, BigDecimal::add); + if (CollectionUtil.isEmpty(toolLedgerDetails) || stockQuantity.compareTo(needQuantity) < 0) { + BaseTools tools = baseToolsService.getById(toolCode); + resultMessage.add("鍑嗗鍗曘��" + preparationOrder.getPreparationOrderNum() +"銆戜腑锛岀紪鐮佷负銆�" + tools.getToolCode() + "銆戠殑宸ュ叿锛屽簱瀛樹笉瓒筹紝杞嚭搴撶敵璇峰崟澶辫触锛�"); + break; + } else { + //浠庡簱瀛樻槑缁嗕腑鍙栧嚭闇�瑕佺殑鏁伴噺锛屾寚瀹氬埌鎶� + List<ToolLedgerDetail> selectedTools = toolLedgerDetails.subList(0, needQuantity.intValue()); + //鐢熸垚鐢宠鍗曟槑缁� + selectedTools.forEach(item->{ + OutboundDetail detail = new OutboundDetail() + .setToolCode(item.getToolCode()) + .setToolId(item.getToolId()) + .setOutboundQuantity(item.getQuantity()) + .setStorageLocation(item.getWarehouseId()) + .setOutboundLocation(item.getPositionCode()) + .setStatus(OutBoundStatusEnum.NOT_OUTBOUND.getValue()) + .setCreateBy(Objects.requireNonNull(getCurrentUser()).getUsername()) + .setCreateTime(new Date()); + outboundDetailList.add(detail); + }); + } + } + BigDecimal totalOutboundQuantity = preparationOrderDetailList.stream() + .map(detail -> Optional.ofNullable(detail.getOutboundQuantity()).orElse(BigDecimal.ZERO)) + .reduce(BigDecimal.ZERO, BigDecimal::add); + if (outboundDetailList.size() == totalOutboundQuantity.intValue()) { + //鎸囧畾鍒版妸鐨勬暟閲忎笌闇�姹傛暟閲忎竴鑷达紝婊¤冻杞嚭搴撶敵璇峰崟鐨勬潯浠讹紝鐢熸垚鍑哄簱鐢宠鍗� + OutboundOrder order = new OutboundOrder() + .setOutNum(businessCodeRuleService.generateBusinessCodeSeq("outBoundOrder")) + .setOutStorehouseType(OutStorehouseType.PREPARATION_OUTBOUND.getValue()) + .setHandler(Objects.requireNonNull(getCurrentUser()).getId()) + .setReviewer(Objects.requireNonNull(getCurrentUser()).getUsername()) + .setOrderStatus(OutBillStatus.DRAFT.getValue()) + .setSubjectMatter("鍒�鍏峰噯澶囧崟杞叆") + .setPreparationOrderId(preparationOrder.getId()) + .setPartDrawingNo(preparationOrder.getPartDrawingNo()) + .setPartName(preparationOrder.getPartName()) + .setPartMaterial(preparationOrder.getPartMaterial()) + .setProductionProcessesNo(preparationOrder.getProductionProcessesNo()) + .setBatchCode(preparationOrder.getBatchCode()) + .setMachiningCount(preparationOrder.getMachiningCount()) + .setEquipmentCode(preparationOrder.getEquipmentCode()) + .setNcName(preparationOrder.getNcName()) + .setCreateBy(Objects.requireNonNull(getCurrentUser()).getUsername()) + .setCreateTime(new Date()); + outboundOrderService.save(order); + outboundDetailList.forEach(item -> item.setOutStorehouseId(order.getId())); + outboundDetailService.saveBatch(outboundDetailList); + //閿佸畾搴撳瓨鍙拌处鏄庣粏搴撳瓨 + LambdaQueryWrapper<ToolLedgerDetail> queryWrapper = new LambdaQueryWrapper<>(); + String codeIdString = outboundDetailList.stream() + .map(detail -> "'" + detail.getToolCode() + ":" + detail.getToolId() + "'") + .collect(Collectors.joining(",")); + String sql = "(tool_code + ':' + tool_id) IN (" + codeIdString + ")"; + queryWrapper.apply(sql); + toolLedgerDetailService.update(new ToolLedgerDetail().setQuantity(BigDecimal.ZERO), queryWrapper); + //閿佸畾搴撳瓨鍙拌处涓昏〃 + List<ToolLedger> toolLedgerList = toolLedgerService.list(new LambdaQueryWrapper<ToolLedger>() + .in(ToolLedger::getToolId, preparationOrderToolCodeMap.keySet())); + toolLedgerList.forEach(item -> { + BigDecimal outboundQuantity = preparationOrderToolCodeMap.getOrDefault(item.getToolId(), BigDecimal.ZERO); + item.setAvailableCount(Optional.ofNullable(item.getAvailableCount()).orElse(BigDecimal.ZERO).subtract(outboundQuantity)); + }); + toolLedgerService.updateBatchById(toolLedgerList); + //鏇存柊鍑嗗鍗曠姸鎬� + updateById(new PreparationOrder() + .setId(preparationOrder.getId()) + .setOutboundTime(new Date()) + .setOrderStatus(PreparationOrderStatus.CONVERT.getValue()));//3.宸茶浆鍑哄簱鐢宠 + resultMessage.add("鍑嗗鍗曘��" + preparationOrder.getPreparationOrderNum() + "銆戣浆鍑哄簱鐢宠鍗曟垚鍔燂紒"); + } + } + return resultMessage; + } + + @Override + public IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page, Map<String, String[]> parameterMap) { + QueryWrapper<PreparationOrder> queryWrapper = Wrappers.query(); + String[] preparationOrderNums = parameterMap.get("preparationOrderNum"); + if (preparationOrderNums != null && preparationOrderNums.length > 0) { + queryWrapper.like("t.preparation_order_num", preparationOrderNums[0]); + } + String[] orderStatuses = parameterMap.get("orderStatus"); + if (orderStatuses != null && orderStatuses.length > 0) { + queryWrapper.eq("t.order_status", orderStatuses[0]); + } + String[] beginTimes = parameterMap.get("beginTime"); + if (beginTimes != null && beginTimes.length > 0) { + queryWrapper.ge("t.create_time", beginTimes[0]); + } + String[] endTimes = parameterMap.get("endTime"); + if (endTimes != null && endTimes.length > 0) { + queryWrapper.le("t.create_time", endTimes[0]); + } + queryWrapper.orderByAsc("t.create_time"); + return this.baseMapper.queryPageList(page, queryWrapper); + } + + private LoginUser getCurrentUser() { + // 鑾峰彇褰撳墠璁よ瘉鐨勭櫥褰曠敤鎴蜂俊鎭� + Subject currentUser = SecurityUtils.getSubject(); + if (currentUser != null && currentUser.isAuthenticated()) { + Object principal = currentUser.getPrincipal(); + if (principal instanceof LoginUser) { + return (LoginUser) principal; + } + } + return null; + } + +} -- Gitblit v1.9.3