From 2473cd2814fd7c8fa1d132704dd9ab190f43f3ff Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期五, 20 六月 2025 14:17:09 +0800 Subject: [PATCH] 同步涉密网功能 --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml | 16 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 | 48 + lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml | 14 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java | 3 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyDto.java | 13 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java | 165 +++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOeeInfoMapper.xml | 13 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRate.java | 20 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOeeMonth.java | 20 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java | 20 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java | 9 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java | 6 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java | 44 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java | 6 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java | 4 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java | 17 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java | 20 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcAlarmInfoMapper.xml | 10 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml | 63 ++ lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentServiceImpl.java | 12 lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java | 14 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcAlarmInfoServiceImpl.java | 5 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquStatus.java | 15 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IEquipmentService.java | 6 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcAlarmInfoService.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/WebsocketPushEquStatusJob.java | 111 +++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOperation.java | 16 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceImpl.java | 6 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java | 17 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 48 + lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java | 35 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java | 5 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentMapper.java | 6 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 | 18 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquDowntimeInfo.java | 23 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcAlarmInfoMapper.java | 3 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 | 382 ++++++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRateMonth.java | 20 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/CollectEquipmentDataMonthJob.java | 50 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml | 18 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java | 6 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentStatisticalDto.java | 16 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml | 19 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-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentMapper.xml | 18 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java | 103 +++ 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/IEquipmentAlarmService.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRunInfo.java | 24 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java | 120 +++ 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/entity/MdcEquipmentStatisticalInfoMonth.java | 24 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml | 13 63 files changed, 1,800 insertions(+), 40 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..ef6acb1 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 @@ -171,7 +171,7 @@ */ String SUPPLIERTYPE_1 = "1"; String SUPPLIERTYPE_2 = "2"; - /** + /** * 鍚屾宸ヤ綔娴佸紩鎿�1鍚屾0涓嶅悓姝� */ Integer ACT_SYNC_1 = 1; @@ -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-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..1038895 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 @@ -30,4 +32,8 @@ @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..0f89fab 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 @@ -1,5 +1,23 @@ <?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.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..54d9324 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 @@ -372,4 +372,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..c25121f 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,6 @@ */ 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..90c7384 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,8 @@ */ 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..d06285f 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,8 @@ import org.jeecg.modules.mdc.service.IEquipmentService; import org.springframework.stereotype.Service; +import java.util.List; + /** * @Description: 閲囬泦璁惧琛� * @Author: liuS @@ -39,4 +41,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/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..61d23bc --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java @@ -0,0 +1,103 @@ +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); + } + + @ApiOperation(value = "鏁板瓧瀛敓鐪嬫澘-璁惧瀹夌伅淇℃伅", notes = "鏁板瓧瀛敓鐪嬫澘-璁惧瀹夌伅淇℃伅") + @GetMapping("/equAndonList") + public Result<?> equAndonList(@ApiParam(value = "productionId", required = true) String productionId) { + List<EquAndon> result = dtBoardService.equAndonList(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..8133429 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java @@ -0,0 +1,35 @@ +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); + + List<EquAndon> equAndonList(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..38d74e0 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java @@ -0,0 +1,382 @@ +package org.jeecg.modules.board.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.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; + + @Resource + private IAndonOrderService andonOrderService; + + /** + * 杞﹂棿淇℃伅 + */ + @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.equAlarmList(equipmentIdList); + 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; + } + + /** + * 璁惧鏁呴殰 + */ + @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; + } + + /** + * 璁惧瀹夌伅闂 + */ + @Override + public List<EquAndon> equAndonList(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; + } + List<EquAndon> result = andonOrderService.equAndonList(equipmentIdList); + 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/EquAndon.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java new file mode 100644 index 0000000..78eb963 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.board.vo; + +import lombok.Data; + +/** + * @Author: Lius + * @CreateTime: 2025-06-12 + * @Description: 瀹夌伅淇℃伅 + */ +@Data +public class EquAndon { + /** + * 璁惧缂栧彿 + */ + private String equipmentId; + /** + * 瀹夌伅闂 + */ + private String andonInfo; +} 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..7d707f5 --- /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/dto/MdcEfficiencyDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyDto.java index d868159..1e6d764 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyDto.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyDto.java @@ -55,6 +55,17 @@ * 鍏虫満鏃堕暱 */ private BigDecimal closeLong; - + /** + * 鏁呴殰鏃堕暱 + */ + private BigDecimal faultLong; + /** + * 鏁呴殰鐜� + */ + private BigDecimal faultRate; + /** + * 杩愯鏃堕暱(鍘婚櫎鏁呴殰鏃堕棿) + */ + private BigDecimal removeFaultRunLong; } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java index 6ce2977..2086182 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEfficiencyResultDto.java @@ -43,11 +43,23 @@ */ private BigDecimal closeLong = BigDecimal.ZERO; /** + * 鏁呴殰鏃堕暱 + */ + private BigDecimal faultLong = BigDecimal.ZERO; + /** + * 鏁呴殰鐜� + */ + private BigDecimal faultRate = BigDecimal.ZERO; + /** + * 杩愯鏃堕暱(鍘婚櫎鏁呴殰鏃堕棿) + */ + private BigDecimal removeFaultRunLong = BigDecimal.ZERO; + /** * 棰滆壊 */ private String color; - public MdcEfficiencyResultDto(String theDate, BigDecimal processLong, BigDecimal utilizationRate, BigDecimal startRate, BigDecimal openRate, BigDecimal openLong, BigDecimal waitLong, BigDecimal closeLong) { + public MdcEfficiencyResultDto(String theDate, BigDecimal processLong, BigDecimal utilizationRate, BigDecimal startRate, BigDecimal openRate, BigDecimal openLong, BigDecimal waitLong, BigDecimal closeLong, BigDecimal faultLong, BigDecimal faultRate, BigDecimal removeFaultRunLong) { this.theDate = theDate; this.processLong = processLong; this.utilizationRate = utilizationRate; @@ -56,6 +68,9 @@ this.openLong = openLong; this.waitLong = waitLong; this.closeLong = closeLong; + this.faultLong = faultLong; + this.faultRate = faultRate; + this.removeFaultRunLong = removeFaultRunLong; } public MdcEfficiencyResultDto() { diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentStatisticalDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentStatisticalDto.java index 62877b1..fe21267 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentStatisticalDto.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentStatisticalDto.java @@ -37,6 +37,22 @@ */ private BigDecimal totalLong = new BigDecimal("0"); /** + * 鏁呴殰鏃堕暱 + */ + private BigDecimal faultLong = new BigDecimal("0"); + /** + * 鏁呴殰鐜� + */ + private BigDecimal faultRate = new BigDecimal("0"); + /** + * 杩愯鏃堕暱(鍘婚櫎鏁呴殰鏃堕棿) + */ + private BigDecimal removeFaultRunLong = new BigDecimal("0"); + /** + * 鍘婚櫎鏁呴殰鏃堕棿鍒╃敤鐜� + */ + private BigDecimal removeFaultRate = new BigDecimal("0"); + /** * 澶╂暟 */ private BigDecimal dayNum; 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..5a81906 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java @@ -0,0 +1,165 @@ +package org.jeecg.modules.mdc.entity; + +import cn.hutool.core.date.DatePattern; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecg.common.constant.CommonConstant; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @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 = "瀹夌伅绫诲瀷") + @Dict(dicCode = "andon_type") + 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 = "瀹夌伅鐘舵��;寰呭搷搴斻�佸緟澶勭悊銆佸凡瀹屾垚") + @Dict(dicCode = "order_status") + 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 = CommonConstant.DEL_FLAG_0; + /** + * 鍒涘缓浜� + */ + @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/MdcEquipmentStatisticalInfoMonth.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalInfoMonth.java index c987011..822b2ca 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalInfoMonth.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentStatisticalInfoMonth.java @@ -78,6 +78,18 @@ @ApiModelProperty(value = "鎶ヨ鏃堕暱") private Integer errorLong; /** + * 鏁呴殰鏃堕暱 + */ + @Excel(name = "鏁呴殰鏃堕暱", width = 15) + @ApiModelProperty(value = "鏁呴殰鏃堕暱") + private Integer faultLong; + /** + * 鍘婚櫎鏁呴殰鏃堕棿鐨勮繍琛屾椂闂� + */ + @Excel(name = "鍘婚櫎鏁呴殰鏃堕棿鐨勮繍琛屾椂闂�", width = 15) + @ApiModelProperty(value = "鍘婚櫎鏁呴殰鏃堕棿鐨勮繍琛屾椂闂�") + private Integer removeFaultRunLong; + /** * 鍒╃敤鐜� */ @Excel(name = "鍒╃敤鐜�", width = 15) @@ -96,6 +108,18 @@ @ApiModelProperty(value = "寮�鏈虹巼") private BigDecimal openRate; /** + * 鏁呴殰鐜� + */ + @Excel(name = "鏁呴殰鐜�", width = 15) + @ApiModelProperty(value = "鏁呴殰鐜�") + private BigDecimal faultRate; + /** + * 鍘婚櫎鏁呴殰鏃堕棿鍒╃敤鐜� + */ + @Excel(name = "鍘婚櫎鏁呴殰鏃堕棿鍒╃敤鐜�", width = 15) + @ApiModelProperty(value = "鍘婚櫎鏁呴殰鏃堕棿鍒╃敤鐜�") + private BigDecimal removeFaultRate; + /** * 鍒涘缓鏃堕棿 */ @Excel(name = "鍒涘缓鏃堕棿", width = 20, format = "yyyy-MM-dd HH:mm:ss") diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/CollectEquipmentDataMonthJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/CollectEquipmentDataMonthJob.java index 456f302..07bbabf 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/CollectEquipmentDataMonthJob.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/CollectEquipmentDataMonthJob.java @@ -84,7 +84,7 @@ if (StringUtils.isNotBlank(this.parameter)) { date = DateUtils.format(DateUtils.toDate(this.parameter, DateUtils.STRYEARMONTH), DateUtils.STRYEARMONTH); } else { - date = DateUtils.format(DateUtils.getNow(), DateUtils.STRYEARMONTH); + date = DateUtils.format(DateUtils.addMonth(-1, DateUtils.getNow()), DateUtils.STRYEARMONTH); } mdcEquipmentStatisticalInfoMonthService.remove(new LambdaQueryWrapper<MdcEquipmentStatisticalInfoMonth>().eq(MdcEquipmentStatisticalInfoMonth::getTheMonth, date)); mdcEquipmentStatisticalShiftInfoMonthService.remove(new LambdaQueryWrapper<MdcEquipmentStatisticalShiftInfoMonth>().eq(MdcEquipmentStatisticalShiftInfoMonth::getTheMonth, date)); @@ -100,14 +100,20 @@ MdcEquipmentStatisticalInfoMonth mdcEquipmentStatisticalInfoMonth = new MdcEquipmentStatisticalInfoMonth(); mdcEquipmentStatisticalInfoMonth.setEquipmentId(mdcEquipment.getEquipmentId()); mdcEquipmentStatisticalInfoMonth.setTheMonth(date); - mdcEquipmentStatisticalInfoMonth.setCloseLong(mdcEquipmentStatisticalDto.getCloseLong().intValue()); - mdcEquipmentStatisticalInfoMonth.setErrorLong(mdcEquipmentStatisticalDto.getErrorLong().intValue()); - mdcEquipmentStatisticalInfoMonth.setOpenLong(mdcEquipmentStatisticalDto.getOpenLong().intValue()); - mdcEquipmentStatisticalInfoMonth.setProcessLong(mdcEquipmentStatisticalDto.getProcessLong().intValue()); - mdcEquipmentStatisticalInfoMonth.setWaitLong(mdcEquipmentStatisticalDto.getWaitLong().intValue()); - mdcEquipmentStatisticalInfoMonth.setOpenRate(mdcEquipmentStatisticalDto.getOpenLong().divide((new BigDecimal("86400").multiply(mdcEquipmentStatisticalDto.getDayNum())), 4, RoundingMode.HALF_UP)); - mdcEquipmentStatisticalInfoMonth.setStartRate(mdcEquipmentStatisticalDto.getOpenLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentStatisticalDto.getProcessLong().divide(mdcEquipmentStatisticalDto.getOpenLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO); - mdcEquipmentStatisticalInfoMonth.setUtilizationRate(mdcEquipmentStatisticalDto.getProcessLong().divide((new BigDecimal("86400").multiply(mdcEquipmentStatisticalDto.getDayNum())), 4, RoundingMode.HALF_UP)); + if (mdcEquipmentStatisticalDto != null) { + mdcEquipmentStatisticalInfoMonth.setCloseLong(mdcEquipmentStatisticalDto.getCloseLong().intValue()); + mdcEquipmentStatisticalInfoMonth.setErrorLong(mdcEquipmentStatisticalDto.getErrorLong().intValue()); + mdcEquipmentStatisticalInfoMonth.setOpenLong(mdcEquipmentStatisticalDto.getOpenLong().intValue()); + mdcEquipmentStatisticalInfoMonth.setProcessLong(mdcEquipmentStatisticalDto.getProcessLong().intValue()); + mdcEquipmentStatisticalInfoMonth.setWaitLong(mdcEquipmentStatisticalDto.getWaitLong().intValue()); + mdcEquipmentStatisticalInfoMonth.setOpenRate(mdcEquipmentStatisticalDto.getOpenLong().divide((new BigDecimal("864").multiply(mdcEquipmentStatisticalDto.getDayNum())), 4, RoundingMode.HALF_UP)); + mdcEquipmentStatisticalInfoMonth.setStartRate(mdcEquipmentStatisticalDto.getOpenLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentStatisticalDto.getProcessLong().divide(mdcEquipmentStatisticalDto.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); + mdcEquipmentStatisticalInfoMonth.setUtilizationRate(mdcEquipmentStatisticalDto.getProcessLong().divide((new BigDecimal("864").multiply(mdcEquipmentStatisticalDto.getDayNum())), 4, RoundingMode.HALF_UP)); + mdcEquipmentStatisticalInfoMonth.setFaultLong(mdcEquipmentStatisticalDto.getFaultLong().intValue()); + mdcEquipmentStatisticalInfoMonth.setFaultRate(mdcEquipmentStatisticalDto.getFaultRate()); + mdcEquipmentStatisticalInfoMonth.setRemoveFaultRate(mdcEquipmentStatisticalDto.getRemoveFaultRate()); + mdcEquipmentStatisticalInfoMonth.setRemoveFaultRunLong(mdcEquipmentStatisticalDto.getRemoveFaultRunLong().intValue()); + } mdcEquipmentStatisticalInfoMonthList.add(mdcEquipmentStatisticalInfoMonth); // step.3 姹囨�荤彮娆″埄鐢ㄧ巼鏁版嵁 MdcEquipmentStatisticalDto mdcEquipmentShiftStatisticalDto = mdcEquipmentStatisticalShiftInfoService.findByEquipmentAndMonth(mdcEquipment.getEquipmentId(), date); @@ -115,15 +121,17 @@ mdcEquipmentShiftInfoMonth.setEquipmentId(mdcEquipment.getEquipmentId()); mdcEquipmentShiftInfoMonth.setTheMonth(date); mdcEquipmentShiftInfoMonth.setShiftType(CommonConstant.SHIFT_TYPE_1); - mdcEquipmentShiftInfoMonth.setCloseLong(mdcEquipmentShiftStatisticalDto.getCloseLong().intValue()); - mdcEquipmentShiftInfoMonth.setTotalLong(mdcEquipmentShiftStatisticalDto.getTotalLong().intValue()); - mdcEquipmentShiftInfoMonth.setOpenLong(mdcEquipmentShiftStatisticalDto.getOpenLong().intValue()); - mdcEquipmentShiftInfoMonth.setErrorLong(mdcEquipmentShiftStatisticalDto.getErrorLong().intValue()); - mdcEquipmentShiftInfoMonth.setWaitLong(mdcEquipmentShiftStatisticalDto.getWaitLong().intValue()); - mdcEquipmentShiftInfoMonth.setProcessLong(mdcEquipmentShiftStatisticalDto.getProcessLong().intValue()); - mdcEquipmentShiftInfoMonth.setUtilizationRate(mdcEquipmentShiftStatisticalDto.getTotalLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentShiftStatisticalDto.getProcessLong().divide(mdcEquipmentShiftStatisticalDto.getTotalLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO); - mdcEquipmentShiftInfoMonth.setStartRate(mdcEquipmentShiftStatisticalDto.getOpenLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentShiftStatisticalDto.getProcessLong().divide(mdcEquipmentShiftStatisticalDto.getOpenLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO); - mdcEquipmentShiftInfoMonth.setOpenRate(mdcEquipmentShiftStatisticalDto.getTotalLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentShiftStatisticalDto.getOpenLong().divide(mdcEquipmentShiftStatisticalDto.getTotalLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO); + if (mdcEquipmentShiftStatisticalDto != null) { + mdcEquipmentShiftInfoMonth.setCloseLong(mdcEquipmentShiftStatisticalDto.getCloseLong().intValue()); + mdcEquipmentShiftInfoMonth.setTotalLong(mdcEquipmentShiftStatisticalDto.getTotalLong().intValue()); + mdcEquipmentShiftInfoMonth.setOpenLong(mdcEquipmentShiftStatisticalDto.getOpenLong().intValue()); + mdcEquipmentShiftInfoMonth.setErrorLong(mdcEquipmentShiftStatisticalDto.getErrorLong().intValue()); + mdcEquipmentShiftInfoMonth.setWaitLong(mdcEquipmentShiftStatisticalDto.getWaitLong().intValue()); + mdcEquipmentShiftInfoMonth.setProcessLong(mdcEquipmentShiftStatisticalDto.getProcessLong().intValue()); + mdcEquipmentShiftInfoMonth.setUtilizationRate(mdcEquipmentShiftStatisticalDto.getTotalLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentShiftStatisticalDto.getProcessLong().divide(mdcEquipmentShiftStatisticalDto.getTotalLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); + mdcEquipmentShiftInfoMonth.setStartRate(mdcEquipmentShiftStatisticalDto.getOpenLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentShiftStatisticalDto.getProcessLong().divide(mdcEquipmentShiftStatisticalDto.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); + mdcEquipmentShiftInfoMonth.setOpenRate(mdcEquipmentShiftStatisticalDto.getTotalLong().compareTo(BigDecimal.ZERO) > 0 ? mdcEquipmentShiftStatisticalDto.getOpenLong().divide(mdcEquipmentShiftStatisticalDto.getTotalLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); + } mdcEquipmentStatisticalShiftInfoMonthList.add(mdcEquipmentShiftInfoMonth); // step.4 姹囨�诲悇鐝鍒╃敤鐜囨暟鎹� List<MdcEquipmentStatisticalDto> essdList = mdcEquipmentStatisticalShiftInfoService.findShiftByEquipmentAndMonth(mdcEquipment.getEquipmentId(), date); @@ -139,9 +147,9 @@ equipmentStatisticalShiftInfoMonth.setErrorLong(equipmentStatisticalDto.getErrorLong().intValue()); equipmentStatisticalShiftInfoMonth.setWaitLong(equipmentStatisticalDto.getWaitLong().intValue()); equipmentStatisticalShiftInfoMonth.setProcessLong(equipmentStatisticalDto.getProcessLong().intValue()); - equipmentStatisticalShiftInfoMonth.setUtilizationRate(equipmentStatisticalDto.getTotalLong().compareTo(BigDecimal.ZERO) > 0 ? equipmentStatisticalDto.getProcessLong().divide(equipmentStatisticalDto.getTotalLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO); - equipmentStatisticalShiftInfoMonth.setStartRate(equipmentStatisticalDto.getOpenLong().compareTo(BigDecimal.ZERO) > 0 ? equipmentStatisticalDto.getProcessLong().divide(equipmentStatisticalDto.getOpenLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO); - equipmentStatisticalShiftInfoMonth.setOpenRate(equipmentStatisticalDto.getTotalLong().compareTo(BigDecimal.ZERO) > 0 ? equipmentStatisticalDto.getOpenLong().divide(equipmentStatisticalDto.getTotalLong(), 4, RoundingMode.HALF_UP) : BigDecimal.ZERO); + equipmentStatisticalShiftInfoMonth.setUtilizationRate(equipmentStatisticalDto.getTotalLong().compareTo(BigDecimal.ZERO) > 0 ? equipmentStatisticalDto.getProcessLong().divide(equipmentStatisticalDto.getTotalLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); + equipmentStatisticalShiftInfoMonth.setStartRate(equipmentStatisticalDto.getOpenLong().compareTo(BigDecimal.ZERO) > 0 ? equipmentStatisticalDto.getProcessLong().divide(equipmentStatisticalDto.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); + equipmentStatisticalShiftInfoMonth.setOpenRate(equipmentStatisticalDto.getTotalLong().compareTo(BigDecimal.ZERO) > 0 ? equipmentStatisticalDto.getOpenLong().divide(equipmentStatisticalDto.getTotalLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); mdcEquipmentStatisticalShiftInfoMonthList.add(equipmentStatisticalShiftInfoMonth); } } 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..a925be8 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/WebsocketPushEquStatusJob.java @@ -0,0 +1,111 @@ +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.DisallowConcurrentExecution; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +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..6224509 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.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.AndonOrder; + +import java.util.List; + +/** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +public interface AndonOrderMapper extends BaseMapper<AndonOrder> { + + List<AndonOrder> equAndonList(@Param("equipmentIdList") List<String> equipmentIdList); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java index 4bbcd26..389bd8f 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java @@ -1,11 +1,17 @@ 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.EquipmentAlarm; + +import java.util.List; /** * @author: LiuS * @create: 2023-04-12 16:39 */ public interface EquipmentAlarmMapper extends BaseMapper<EquipmentAlarm> { + + List<EquipmentAlarm> equAlarmList(@Param("equipmentIdList") List<String> equipmentIdList); + } 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..bf1e785 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,6 @@ */ public interface MdcAlarmInfoMapper extends BaseMapper<MdcAlarmInfo> { + MdcAlarmInfo findAlarmContent(@Param("alarmNo") String alarmNo, @Param("equipmentId") String equipmentId); + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java index 5446655..b1ea9c5 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.board.vo.EquDowntimeInfo; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.vo.MdcDowntimeVo; @@ -20,4 +21,6 @@ IPage<MdcDowntimeDto> pageList(Page<MdcDowntimeDto> page, @Param("mdcDowntimeVo") MdcDowntimeVo mdcDowntimeVo); List<MdcDowntime> findPlanTimeDuration(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate, @Param("closeType") String closeType); + + List<EquDowntimeInfo> equDowntimeStatistics(@Param("equipmentIdList") List<String> equipmentIdList, @Param("start") String start, @Param("end") String end); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java index 03bb2bd..5843f5a 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java @@ -5,6 +5,8 @@ import org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto; import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; +import java.util.List; + /** * @Description: 璁惧鍗曟棩杩愯鏁版嵁琛� * @Author: jeecg-boot @@ -28,4 +30,8 @@ Integer selectProcessLong(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate); MdcEquipmentStatisticalDto findByEquipmentAndMonth(@Param("equipmentId") String equipmentId, @Param("date") String date); + + MdcEquipmentStatisticalInfo findByEquIdsAndMonth(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month); + + List<MdcEquipmentStatisticalInfo> findByEquipmentAndDate(@Param("equipmentIdList") List<String> equipmentIdList, @Param("date") String date); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java index 041a098..af54a04 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java @@ -7,6 +7,9 @@ import org.jeecg.modules.mdc.entity.MdcOeeInfo; import org.jeecg.modules.mdc.vo.MdcOeeInfoVo; +import java.math.BigDecimal; +import java.util.List; + /** * @Description: OEE琛� * @Author: lius @@ -22,4 +25,6 @@ * @return */ IPage<MdcOeeInfo> pageList(Page<MdcOeeInfo> page, @Param("mdcOeeInfoVo") MdcOeeInfoVo mdcOeeInfoVo); + + BigDecimal findByEquIdAndMonth(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml new file mode 100644 index 0000000..36ecafa --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml @@ -0,0 +1,19 @@ +<?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"> + + <select id="equAndonList" resultType="org.jeecg.modules.mdc.entity.AndonOrder"> + SELECT + * + FROM + andon_order + WHERE + CONVERT ( DATE, create_time ) = CONVERT ( DATE, GETDATE( ) ) + AND equipment_id IN + <foreach collection="equipmentIdList" index="index" item="id" open="(" separator="," close=")"> + #{id} + </foreach> + ORDER BY + create_time + </select> +</mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml new file mode 100644 index 0000000..07a9412 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml @@ -0,0 +1,16 @@ +<?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.EquipmentAlarmMapper"> + + <select id="equAlarmList" resultType="org.jeecg.modules.mdc.entity.EquipmentAlarm"> + SELECT TOP 15 * + FROM + EquipmentAlarm + WHERE EquipmentID IN + <foreach collection="equipmentIdList" index="index" item="id" open="(" separator="," close=")"> + #{id} + </foreach> + AND alarmNo != '' + ORDER BY collecttime DESC + </select> +</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..d7e5038 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,14 @@ <!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..85d3ca7 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,22 @@ 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 + 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 + </select> </mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml index b249fad..d7c9488 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml @@ -18,10 +18,14 @@ t1.open_long / 86400 openRate, t1.open_long openLong, t1.wait_long waitLong, - t1.close_long closeLong + t1.close_long closeLong, + COALESCE(t3.fault_long, 0) faultLong, + COALESCE(t3.fault_rate, 0) faultRate, + COALESCE(t3.remove_fault_run_long, 0) removeFaultRunLong FROM mdc_equipment t2 LEFT JOIN mdc_equipment_statistical_info t1 ON t1.equipment_id = t2.equipment_id + LEFT JOIN mdc_equipment_fault_info t3 ON t2.equipment_id = t3.equipment_id AND t1.the_date = t3.the_date WHERE t1.the_date <= #{ vo.endTime } AND t1.the_date >= #{ vo.startTime } @@ -191,7 +195,8 @@ SELECT t3.equipment_name, t1.utilization_rate AS utilizationRate, - t2.utilization_rate AS shiftUtilizationRate + t2.utilization_rate AS shiftUtilizationRate, + t1.remove_fault_rate AS amendUtilizationRate FROM mdc_equipment_statistical_info_month t1 LEFT JOIN mdc_equipment_statistical_shift_info_month t2 ON t1.the_month = t2.the_month AND t2.shift_type = 1 @@ -211,7 +216,8 @@ SELECT t3.team_code AS teamCode, t1.utilization_rate AS utilizationRate, - t2.utilization_rate AS shiftUtilizationRate + t2.utilization_rate AS shiftUtilizationRate, + t1.remove_fault_rate AS amendUtilizationRate FROM mdc_equipment_statistical_info_month t1 LEFT JOIN mdc_equipment_statistical_shift_info_month t2 ON t1.the_month = t2.the_month AND t2.shift_type = 1 @@ -230,6 +236,7 @@ t1.the_month AS theMonth, AVG ( t1.utilization_rate ) AS utilizationRate, AVG ( t2.utilization_rate ) AS shiftUtilizationRate, + AVG ( t1.remove_fault_rate ) AS amendUtilizationRate, SUM ( t1.process_long ) AS processLong FROM mdc_equipment_statistical_info_month t1 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..273ae3b 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 @@ -15,15 +15,49 @@ <select id="findByEquipmentAndMonth" resultType="org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto"> SELECT - SUM(open_long) openLong, - SUM(close_long) closeLong, - SUM(wait_long) waitLong, - SUM(process_long) processLong, - SUM(error_long) errorLong, + SUM ( t1.open_long ) openLong, + SUM ( t1.close_long ) closeLong, + SUM ( t1.wait_long ) waitLong, + SUM ( t1.process_long ) processLong, + SUM ( t1.error_long ) errorLong, + SUM ( t2.fault_long ) faultLong, + AVG ( t2.fault_rate ) faultRate, + SUM ( t2.remove_fault_run_long ) removeFaultRunLong, + AVG ( t2.remove_fault_rate ) removeFaultRate, COUNT(*) dayNum FROM - mdc_equipment_statistical_info + mdc_equipment_statistical_info t1 LEFT JOIN mdc_equipment_fault_info t2 ON t1.equipment_id = t2.equipment_id AND t1.the_date = t2.the_date WHERE - equipment_id = #{equipmentId} AND the_date LIKE CONCAT(#{date}, '%') + t1.equipment_id = #{equipmentId} AND t1.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..ddb66e1 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..d392a52 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.mdc.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.board.vo.EquAndon; +import org.jeecg.modules.mdc.entity.AndonOrder; + +import java.util.List; + +/** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +public interface IAndonOrderService extends IService<AndonOrder> { + + void procedureCall(AndonOrder andonOrder); + + List<EquAndon> equAndonList(List<String> equipmentIdList); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java index 1b072fe..56b6113 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java @@ -12,4 +12,6 @@ */ public interface IEquipmentAlarmService extends IService<EquipmentAlarm> { List<EquipmentAlarm> findEquipmentAlarmByDate(String equipmentId, Date startTime, Date endTime); + + List<EquipmentAlarm> equAlarmList(List<String> equipmentIdList); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java index 80807ff..db2f22e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java @@ -3,11 +3,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.board.vo.EquDowntimeInfo; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.vo.MdcDowntimeVo; import javax.servlet.http.HttpServletRequest; +import java.util.List; /** * @Description: 寰呮満鍋滄満琛� @@ -35,4 +37,6 @@ * @return */ Integer findPlanTimeDuration(String equipmentId, String validDate, String closeType); + + List<EquDowntimeInfo> equDowntimeStatistics(List<String> equipmentIdList, String start, String end); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java index 4b27b44..516822e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java @@ -4,6 +4,8 @@ import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * @Description: 璁惧鍗曟棩杩愯鏁版嵁琛� * @Author: lius @@ -29,4 +31,8 @@ Integer selectProcessLong(String equipmentId, String validDate); MdcEquipmentStatisticalDto findByEquipmentAndMonth(String equipmentId, String date); + + MdcEquipmentStatisticalInfo findByEquIdsAndMonth(List<String> equipmentIdList, String month); + + List<MdcEquipmentStatisticalInfo> findByEquipmentAndDate(List<String> equipmentIdList, String date); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java index f544260..1a0bdab 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java @@ -9,6 +9,8 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.List; /** * @Description: OEE琛� @@ -44,4 +46,5 @@ */ void computeOee(MdcOeeComputeVo mdcOeeComputeVo); + BigDecimal findByEquIdAndMonth(List<String> equipmentIdList, String month); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java new file mode 100644 index 0000000..0abd10a --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java @@ -0,0 +1,120 @@ +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.board.vo.EquAndon; +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.ISysDictService; +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; + @Resource + private ISysDictService sysDictService; + + @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.setOrderStatus(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.setRepairTime(StringPool.EMPTY); + andonOrderWebSocketVo.setFaultInfo(StringPool.EMPTY); + 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()); + } + } + + /** + * 瀹夌伅闂鍒楄〃 + */ + @Override + public List<EquAndon> equAndonList(List<String> equipmentIdList) { + List<EquAndon> result = new ArrayList<>(); + List<AndonOrder> andonOrderList = this.baseMapper.equAndonList(equipmentIdList); + if (andonOrderList != null && !andonOrderList.isEmpty()) { + andonOrderList.forEach(andonOrder -> { + EquAndon equAndon = new EquAndon(); + equAndon.setEquipmentId(andonOrder.getEquipmentId()); + StringBuilder infoBuilder = new StringBuilder(); + infoBuilder.append("瀹夌伅绫诲瀷: ").append(sysDictService.queryDictTextByKey("andon_type",andonOrder.getAndonType())).append("\n"); + infoBuilder.append("瀹夌伅浜�: ").append(sysDictService.queryTableDictTextByKey("sys_user", "realname", "id", andonOrder.getOperator())).append("\n"); + infoBuilder.append("瀹夌伅鏃堕棿: ").append(DateUtils.format(andonOrder.getOperateTime(), DateUtils.STR_DATE_TIME_SMALL)).append("\n"); + infoBuilder.append("瀹夌伅鐘舵��: ").append(sysDictService.queryDictTextByKey("order_status",andonOrder.getOrderStatus())).append("\n"); + equAndon.setAndonInfo(infoBuilder.toString()); + result.add(equAndon); + }); + } + return result; + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java index aa11e2d..15f3a9c 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java @@ -22,4 +22,9 @@ .ge(EquipmentAlarm::getCollecttime, startTime).le(EquipmentAlarm::getCollecttime, endTime) .eq(EquipmentAlarm::getEquipmentid, equipmentId).orderByDesc(EquipmentAlarm::getCollecttime)); } + + @Override + public List<EquipmentAlarm> equAlarmList(List<String> equipmentIdList) { + return this.baseMapper.equAlarmList(equipmentIdList); + } } 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..a423277 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,9 @@ @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/MdcEfficiencyReportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java index 631c938..55ea7fd 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java @@ -196,6 +196,12 @@ mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong()); mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); + mdcEfficiencyResultDto1.setFaultLong(mdcEfficiencyResultDto.getFaultLong()); + mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); + mdcEfficiencyResultDto1.setFaultRate(mdcEfficiencyResultDto.getFaultRate()); + mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); + mdcEfficiencyResultDto1.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong()); + mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { @@ -284,6 +290,12 @@ mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong()); mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); + mdcEfficiencyResultDto1.setFaultLong(mdcEfficiencyResultDto.getFaultLong()); + mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); + mdcEfficiencyResultDto1.setFaultRate(mdcEfficiencyResultDto.getFaultRate()); + mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); + mdcEfficiencyResultDto1.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong()); + mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { @@ -349,7 +361,10 @@ a.getOpenRate().add(b.getOpenRate()), a.getOpenLong().add(b.getOpenLong()), a.getWaitLong().add(b.getWaitLong()), - a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add); + a.getCloseLong().add(b.getCloseLong()), + a.getFaultLong().add(b.getFaultLong()), + a.getFaultRate().add(b.getFaultRate()), + a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); }); for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); @@ -392,7 +407,10 @@ a.getOpenRate().add(b.getOpenRate()), a.getOpenLong().add(b.getOpenLong()), a.getWaitLong().add(b.getWaitLong()), - a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add); + a.getCloseLong().add(b.getCloseLong()), + a.getFaultLong().add(b.getFaultLong()), + a.getFaultRate().add(b.getFaultRate()), + a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); }); for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); @@ -696,7 +714,10 @@ a.getOpenRate().add(b.getOpenRate()), a.getOpenLong().add(b.getOpenLong()), a.getWaitLong().add(b.getWaitLong()), - a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add); + a.getCloseLong().add(b.getCloseLong()), + a.getFaultLong().add(b.getFaultLong()), + a.getFaultRate().add(b.getFaultRate()), + a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); }); for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); @@ -706,6 +727,9 @@ mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); + mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); + mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); + mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { @@ -740,12 +764,16 @@ a.getOpenRate().add(b.getOpenRate()), a.getOpenLong().add(b.getOpenLong()), a.getWaitLong().add(b.getWaitLong()), - a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add); + a.getCloseLong().add(b.getCloseLong()), + a.getFaultLong().add(b.getFaultLong()), + a.getFaultRate().add(b.getFaultRate()), + a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); }); for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); + mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { @@ -2146,6 +2174,9 @@ mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong()); mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong()); mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong()); + mdcEfficiencyResultDto.setFaultLong(efficiencyDto.getFaultLong()); + mdcEfficiencyResultDto.setFaultRate(efficiencyDto.getFaultRate()); + mdcEfficiencyResultDto.setRemoveFaultRunLong(efficiencyDto.getRemoveFaultRunLong()); long rate = efficiencyDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { @@ -2163,6 +2194,9 @@ mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0")); mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0")); mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0")); + mdcEfficiencyResultDto.setFaultLong(new BigDecimal("0")); + mdcEfficiencyResultDto.setFaultRate(new BigDecimal("0")); + mdcEfficiencyResultDto.setRemoveFaultRunLong(new BigDecimal("0")); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); @@ -2178,6 +2212,9 @@ mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0")); mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0")); mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0")); + mdcEfficiencyResultDto.setFaultLong(new BigDecimal("0")); + mdcEfficiencyResultDto.setFaultRate(new BigDecimal("0")); + mdcEfficiencyResultDto.setRemoveFaultRunLong(new BigDecimal("0")); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); @@ -2191,6 +2228,9 @@ efficiencyResultDto.setOpenLong(efficiencyResultDto.getOpenLong().add(mdcEfficiencyResultDto.getOpenLong())); efficiencyResultDto.setWaitLong(efficiencyResultDto.getWaitLong().add(mdcEfficiencyResultDto.getWaitLong())); efficiencyResultDto.setCloseLong(efficiencyResultDto.getCloseLong().add(mdcEfficiencyResultDto.getCloseLong())); + efficiencyResultDto.setFaultLong(efficiencyResultDto.getFaultLong().add(mdcEfficiencyResultDto.getFaultLong())); + efficiencyResultDto.setFaultRate(efficiencyResultDto.getFaultRate().add(mdcEfficiencyResultDto.getFaultRate())); + efficiencyResultDto.setRemoveFaultRunLong(efficiencyResultDto.getRemoveFaultRunLong().add(mdcEfficiencyResultDto.getRemoveFaultRunLong())); return mdcEfficiencyResultDto; } 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-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 632ce9e..8b47cf0 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 @@ -177,6 +177,15 @@ List<String> findProIdsByUId(String userId, List<String> allProductionIds); /** + * + * @param productionId + * @return + */ + List<String> findChildByProId(String productionId); + + String findProName(String equipmentId); + + /** * 鏍规嵁浜х嚎orgCode鏌ヨ浜х嚎 * @param orgCode * @return 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 7f378ca..291d646 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 @@ -629,6 +629,16 @@ } @Override + public List<String> findChildByProId(String productionId) { + return this.baseMapper.findChildByProId(productionId); + } + + @Override + public String findProName(String equipmentId) { + return this.baseMapper.findProName(equipmentId); + } + + @Override public MdcProduction findByOrgCode(String orgCode){ return this.baseMapper.selectOne(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getOrgCode, orgCode)); } -- Gitblit v1.9.3