From e314b0fa455e21800360e6273c44b54754c65bb6 Mon Sep 17 00:00:00 2001 From: Allenxy <13762749+chaosallen@user.noreply.gitee.com> Date: Tue, 19 Aug 2025 14:56:23 +0800 Subject: [PATCH] =?UTF-8?q?init():=20=E8=B7=9F=E8=B8=AA=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/config/RedisTemplateConfig.java | 64 ++ .../business/constants/CommonConstants.java | 98 ++- .../constants/enums/AlarmStatusEnum.java | 46 ++ .../constants/enums/CoilMergeStatusEnum.java | 45 ++ .../business/constants/enums/DeviceEnum.java | 61 ++ .../constants/enums/ExceptionCodeEnum.java | 30 + .../constants/enums/ExitCutTypeEnum.java | 15 + .../constants/enums/HalfReturnTypeEnum.java | 45 ++ .../business/constants/enums/IOperateMat.java | 15 + .../constants/enums/L1OperateMatEnum.java | 131 ++++ .../constants/enums/LimitItemCode.java | 11 + .../constants/enums/MqOperateEnum.java | 39 ++ .../constants/enums/PlanStatusEnum.java | 65 +- .../constants/enums/PlanTypeEnum.java | 46 ++ .../constants/enums/WebMatOperateEnum.java | 91 --- .../constants/enums/WebOperateMatEnum.java | 336 +++++++++++ .../controller/CrmPdiPlanController.java | 35 -- .../business/controller/TrackController.java | 52 +- .../fizz/business/domain/DeviceDefine.java | 55 ++ .../com/fizz/business/domain/HalfReturn.java | 80 +++ .../com/fizz/business/domain/PdoExcoil.java | 130 ++++ .../fizz/business/domain/PdoStripvalue.java | 559 ++++++++++++++++++ .../com/fizz/business/domain/ProMatmap.java | 38 +- .../com/fizz/business/domain/Segment.java | 477 +++++++++++++++ .../fizz/business/domain/SegmentTotal.java | 357 +++++++++++ .../com/fizz/business/dto/CoilHeadDTO.java | 19 + .../com/fizz/business/dto/CoilMeasureVO.java | 32 + .../com/fizz/business/dto/CoilMergeEvent.java | 22 + .../fizz/business/dto/CoilPositionDTO.java | 39 ++ .../java/com/fizz/business/dto/EventVO.java | 18 + .../fizz/business/dto/ExitCoilInfoDTO.java | 23 + .../java/com/fizz/business/dto/GroupVO.java | 17 + .../fizz/business/dto/L1CoilExitCutDTO.java | 26 + .../fizz/business/dto/L1CoilHeadCutDTO.java | 22 + .../business/dto/L1CoilLineMeasureDTO.java | 239 ++++++++ .../fizz/business/dto/L1CoilOperateDTO.java | 26 + .../fizz/business/dto/L1CoilPointDataDTO.java | 266 +++++++++ .../fizz/business/dto/L3CoilDefectDTO.java | 27 + .../java/com/fizz/business/dto/LimitData.java | 17 + .../java/com/fizz/business/dto/MatmapDTO.java | 17 + .../com/fizz/business/dto/PdiPlanSubDTO.java | 60 ++ .../com/fizz/business/dto/PdoExCoilDTO.java | 51 ++ .../fizz/business/dto/PdoExCoilSubDTO.java | 74 +++ .../com/fizz/business/dto/PointConfigDTO.java | 30 + .../com/fizz/business/dto/PointEvent.java | 19 + .../com/fizz/business/dto/RequestInfo.java | 20 + .../java/com/fizz/business/dto/SegValue.java | 17 + .../com/fizz/business/dto/SegmentDTO.java | 26 + .../fizz/business/dto/WsCoilMeasureDTO.java | 33 ++ .../com/fizz/business/dto/WsSignalMsgDTO.java | 23 + .../com/fizz/business/form/AddDefectForm.java | 42 ++ .../com/fizz/business/form/AdjustPosForm.java | 26 + .../fizz/business/form/CalcPdiPlanForm.java | 134 ++++- .../business/form/ChangePlanStatusForm.java | 16 +- .../fizz/business/form/ConfirmAlarmForm.java | 24 + .../fizz/business/form/CrmPdiPlanForm.java | 212 ++++--- .../fizz/business/form/L1OperateMatForm.java | 32 + .../fizz/business/form/OperateMatForm.java | 42 ++ .../java/com/fizz/business/form/PageForm.java | 12 + .../fizz/business/form/QueryAlarmForm.java | 38 ++ .../fizz/business/form/QueryEventForm.java | 30 + .../fizz/business/form/QueryTargetForm.java | 34 ++ .../fizz/business/form/UpdateDefectForm.java | 23 + .../fizz/business/form/WebOperateMatForm.java | 36 +- .../business/mapper/DeviceDefineMapper.java | 16 + .../business/mapper/HalfReturnMapper.java | 16 + .../fizz/business/mapper/PdoExcoilMapper.java | 18 + .../business/mapper/PdoStripvalueMapper.java | 18 + .../fizz/business/mapper/ProMatmapMapper.java | 8 + .../fizz/business/mapper/SegmentMapper.java | 23 + .../business/mapper/SegmentTotalMapper.java | 18 + .../scheduled/LineMeasureSchedule.java | 7 +- .../business/service/CrmPdiPlanService.java | 7 - .../business/service/PdoExCoilService.java | 20 + .../service/PdoStripValueService.java | 13 + .../business/service/ProMatmapService.java | 2 + .../fizz/business/service/TrackService.java | 22 +- .../service/client/LocalCacheManager.java | 57 ++ .../service/client/PdiPlanClient.java | 49 +- .../service/client/RedisCacheManager.java | 361 +++++++++++ .../service/hanle/EntryMovementHandler.java | 3 + .../service/hanle/ExitCutHandler.java | 3 + .../service/hanle/ExitMeasureHandler.java | 3 + .../service/hanle/ExitMovementHandler.java | 3 + .../service/impl/CrmPdiPlanServiceImpl.java | 120 ---- .../service/impl/PdoExCoilServiceImpl.java | 186 ++++++ .../impl/PdoStripValueServiceImpl.java | 42 ++ .../service/impl/ProMatmapServiceImpl.java | 16 + .../service/impl/TrackServiceImpl.java | 282 +++++++-- .../com/fizz/business/utils/CalcUtil.java | 24 +- .../com/fizz/business/utils/CoilMeasUtil.java | 239 ++++++++ .../fizz/business/utils/DateSplitUtil.java | 194 ++++++ .../business/utils/ErrorDataException.java | 108 ++++ .../com/fizz/business/utils/MatmapUtil.java | 131 ++++ .../com/fizz/business/utils/NumberUtil.java | 118 ++++ .../com/fizz/business/utils/PageUtil.java | 16 + .../com/fizz/business/utils/RedisUtil.java | 225 +++++++ .../com/fizz/business/utils/ReturnInfoVO.java | 33 ++ .../fizz/business/utils/WebSocketUtil.java | 53 +- .../com/fizz/business/vo/CoilMeasureVO.java | 33 ++ .../com/fizz/business/vo/CoilPositionVO.java | 21 + .../com/fizz/business/vo/CrmPdiPlanVO.java | 231 ++++---- .../java/com/fizz/business/vo/EventVO.java | 19 + .../java/com/fizz/business/vo/GroupVO.java | 17 + .../fizz/business/vo/HalfReturnInfoVO.java | 21 + .../java/com/fizz/business/vo/PdiPlanVO.java | 160 +++++ .../com/fizz/business/vo/ReturnInfoVO.java | 33 ++ .../resources/mapper/DeviceDefineMapper.xml | 5 + .../resources/mapper/HalfReturnMapper.xml | 5 + .../main/resources/mapper/PdoExcoilMapper.xml | 5 + .../resources/mapper/PdoExcoilSubMapper.xml | 5 + .../resources/mapper/PdoStripvalueMapper.xml | 5 + .../main/resources/mapper/ProMatmapMapper.xml | 17 +- .../main/resources/mapper/SegmentMapper.xml | 64 ++ .../resources/mapper/SegmentTotalMapper.xml | 7 + .../ruoyi/framework/config/RedisConfig.java | 15 + 116 files changed, 7207 insertions(+), 695 deletions(-) create mode 100644 business/src/main/java/com/fizz/business/config/RedisTemplateConfig.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/AlarmStatusEnum.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/CoilMergeStatusEnum.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/DeviceEnum.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/ExceptionCodeEnum.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/ExitCutTypeEnum.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/HalfReturnTypeEnum.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/IOperateMat.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/L1OperateMatEnum.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/LimitItemCode.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/MqOperateEnum.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/PlanTypeEnum.java delete mode 100644 business/src/main/java/com/fizz/business/constants/enums/WebMatOperateEnum.java create mode 100644 business/src/main/java/com/fizz/business/constants/enums/WebOperateMatEnum.java create mode 100644 business/src/main/java/com/fizz/business/domain/DeviceDefine.java create mode 100644 business/src/main/java/com/fizz/business/domain/HalfReturn.java create mode 100644 business/src/main/java/com/fizz/business/domain/PdoExcoil.java create mode 100644 business/src/main/java/com/fizz/business/domain/PdoStripvalue.java create mode 100644 business/src/main/java/com/fizz/business/domain/Segment.java create mode 100644 business/src/main/java/com/fizz/business/domain/SegmentTotal.java create mode 100644 business/src/main/java/com/fizz/business/dto/CoilHeadDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/CoilMeasureVO.java create mode 100644 business/src/main/java/com/fizz/business/dto/CoilMergeEvent.java create mode 100644 business/src/main/java/com/fizz/business/dto/CoilPositionDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/EventVO.java create mode 100644 business/src/main/java/com/fizz/business/dto/ExitCoilInfoDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/GroupVO.java create mode 100644 business/src/main/java/com/fizz/business/dto/L1CoilExitCutDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/L1CoilHeadCutDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/L1CoilLineMeasureDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/L1CoilOperateDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/L1CoilPointDataDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/L3CoilDefectDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/LimitData.java create mode 100644 business/src/main/java/com/fizz/business/dto/MatmapDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/PdiPlanSubDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/PdoExCoilDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/PdoExCoilSubDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/PointConfigDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/PointEvent.java create mode 100644 business/src/main/java/com/fizz/business/dto/RequestInfo.java create mode 100644 business/src/main/java/com/fizz/business/dto/SegValue.java create mode 100644 business/src/main/java/com/fizz/business/dto/SegmentDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/WsCoilMeasureDTO.java create mode 100644 business/src/main/java/com/fizz/business/dto/WsSignalMsgDTO.java create mode 100644 business/src/main/java/com/fizz/business/form/AddDefectForm.java create mode 100644 business/src/main/java/com/fizz/business/form/AdjustPosForm.java create mode 100644 business/src/main/java/com/fizz/business/form/ConfirmAlarmForm.java create mode 100644 business/src/main/java/com/fizz/business/form/L1OperateMatForm.java create mode 100644 business/src/main/java/com/fizz/business/form/OperateMatForm.java create mode 100644 business/src/main/java/com/fizz/business/form/PageForm.java create mode 100644 business/src/main/java/com/fizz/business/form/QueryAlarmForm.java create mode 100644 business/src/main/java/com/fizz/business/form/QueryEventForm.java create mode 100644 business/src/main/java/com/fizz/business/form/QueryTargetForm.java create mode 100644 business/src/main/java/com/fizz/business/form/UpdateDefectForm.java create mode 100644 business/src/main/java/com/fizz/business/mapper/DeviceDefineMapper.java create mode 100644 business/src/main/java/com/fizz/business/mapper/HalfReturnMapper.java create mode 100644 business/src/main/java/com/fizz/business/mapper/PdoExcoilMapper.java create mode 100644 business/src/main/java/com/fizz/business/mapper/PdoStripvalueMapper.java create mode 100644 business/src/main/java/com/fizz/business/mapper/SegmentMapper.java create mode 100644 business/src/main/java/com/fizz/business/mapper/SegmentTotalMapper.java create mode 100644 business/src/main/java/com/fizz/business/service/PdoExCoilService.java create mode 100644 business/src/main/java/com/fizz/business/service/PdoStripValueService.java create mode 100644 business/src/main/java/com/fizz/business/service/client/LocalCacheManager.java create mode 100644 business/src/main/java/com/fizz/business/service/client/RedisCacheManager.java create mode 100644 business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java create mode 100644 business/src/main/java/com/fizz/business/service/impl/PdoStripValueServiceImpl.java create mode 100644 business/src/main/java/com/fizz/business/utils/CoilMeasUtil.java create mode 100644 business/src/main/java/com/fizz/business/utils/DateSplitUtil.java create mode 100644 business/src/main/java/com/fizz/business/utils/ErrorDataException.java create mode 100644 business/src/main/java/com/fizz/business/utils/MatmapUtil.java create mode 100644 business/src/main/java/com/fizz/business/utils/NumberUtil.java create mode 100644 business/src/main/java/com/fizz/business/utils/PageUtil.java create mode 100644 business/src/main/java/com/fizz/business/utils/RedisUtil.java create mode 100644 business/src/main/java/com/fizz/business/utils/ReturnInfoVO.java create mode 100644 business/src/main/java/com/fizz/business/vo/CoilMeasureVO.java create mode 100644 business/src/main/java/com/fizz/business/vo/CoilPositionVO.java create mode 100644 business/src/main/java/com/fizz/business/vo/EventVO.java create mode 100644 business/src/main/java/com/fizz/business/vo/GroupVO.java create mode 100644 business/src/main/java/com/fizz/business/vo/HalfReturnInfoVO.java create mode 100644 business/src/main/java/com/fizz/business/vo/PdiPlanVO.java create mode 100644 business/src/main/java/com/fizz/business/vo/ReturnInfoVO.java create mode 100644 business/src/main/resources/mapper/DeviceDefineMapper.xml create mode 100644 business/src/main/resources/mapper/HalfReturnMapper.xml create mode 100644 business/src/main/resources/mapper/PdoExcoilMapper.xml create mode 100644 business/src/main/resources/mapper/PdoExcoilSubMapper.xml create mode 100644 business/src/main/resources/mapper/PdoStripvalueMapper.xml create mode 100644 business/src/main/resources/mapper/SegmentMapper.xml create mode 100644 business/src/main/resources/mapper/SegmentTotalMapper.xml diff --git a/business/src/main/java/com/fizz/business/config/RedisTemplateConfig.java b/business/src/main/java/com/fizz/business/config/RedisTemplateConfig.java new file mode 100644 index 0000000..62d5854 --- /dev/null +++ b/business/src/main/java/com/fizz/business/config/RedisTemplateConfig.java @@ -0,0 +1,64 @@ +package com.fizz.business.config; + +import cn.hutool.json.JSONObject; + +import com.fizz.business.dto.CoilHeadDTO; +import com.fizz.business.dto.CoilPositionDTO; +import com.fizz.business.dto.MatmapDTO; +import com.fizz.business.dto.SegmentDTO; +import com.ruoyi.framework.config.RedisConfig; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; + +import java.util.List; + +/** + * 描述: RedisTemplate配置及序列化 + * + * @author daiyue + * @date 2021/3/25 + */ +@Configuration +public class RedisTemplateConfig { + + + @Bean + public RedisTemplate> redisTemplateOfList(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate> redisTemplate = new RedisTemplate<>(); + return RedisConfig.fetchRedisTemplate(redisTemplate, redisConnectionFactory); + } + + + + @Bean + public RedisTemplate redisTemplateOfSegment(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + return RedisConfig.fetchRedisTemplate(redisTemplate, redisConnectionFactory); + } + + @Bean + public RedisTemplate redisTemplateOfMatmap(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + return RedisConfig.fetchRedisTemplate(redisTemplate, redisConnectionFactory); + } + + @Bean + public RedisTemplate redisTemplateOfHead(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + return RedisConfig.fetchRedisTemplate(redisTemplate, redisConnectionFactory); + } + + @Bean + public RedisTemplate redisTemplateOfCoilPos(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + return RedisConfig.fetchRedisTemplate(redisTemplate, redisConnectionFactory); + } + + @Bean + public RedisTemplate redisTemplateOfMap(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + return RedisConfig.fetchRedisTemplate(redisTemplate, redisConnectionFactory); + } +} \ No newline at end of file diff --git a/business/src/main/java/com/fizz/business/constants/CommonConstants.java b/business/src/main/java/com/fizz/business/constants/CommonConstants.java index 333109e..78031cf 100644 --- a/business/src/main/java/com/fizz/business/constants/CommonConstants.java +++ b/business/src/main/java/com/fizz/business/constants/CommonConstants.java @@ -1,25 +1,65 @@ package com.fizz.business.constants; +import com.fizz.business.constants.enums.DeviceEnum; + +import static com.fizz.business.constants.enums.DeviceEnum.DISC; + public class CommonConstants { public static final double RO = 7.86; //硅钢密度 + public static final int OPERATE_FROM_WEB = 1; + public static final String SYSTEM_MODULE = "CPG"; public static class RocketMQ { - public static final String CONSUMER_GROUP_RECEIVE_ALARM_ZR1 = "C-ZG-ZR1-ALARM"; - public static final String CONSUMER_GROUP_RECEIVE_ALARM_ZR2 = "C-ZG-ZR2-ALARM"; - public static final String TOPIC_RECEIVE_ALARM_FROM_PLAT_ZR1 = "ZG-ZR1-ALARM"; - public static final String TOPIC_RECEIVE_ALARM_FROM_PLAT_ZR2 = "ZG-ZR2-ALARM"; + } - public static final String CONSUMER_GROUP_COIL_POINT_DATA_ZR1 = "C-ZG-ZR1-COIL-POINT-DATA"; - public static final String CONSUMER_GROUP_COIL_POINT_DATA_ZR2 = "C-ZG-ZR2-COIL-POINT-DATA"; + public static class CoilMeasure { - public static final String TOPIC_RECEIVE_COIL_POINT_DATA_ZR1 = "ZG-ZR1-COIL-POINT-DATA"; - public static final String TOPIC_RECEIVE_COIL_POINT_DATA_ZR2 = "ZG-ZR2-COIL-POINT-DATA"; + // ======是否展示track_measure的websocket====== + public static final String SHOW_APP_WEB = "0"; // APP\WEB都展示 + public static final String SHOW_APP = "1"; // APP展示 + public static final String SHOW_WEB = "2"; // WEB展示 + public static final String SHOW_NONE = "3"; // APP\WEB都不展示 - public static final String TOPIC_COIL_OUTPUT = "JH_PRODUCTION_PLAN_OUT"; + // 硅钢密度 + public static final double RO = 7.86; - public static final String TOPIC_COIL_DEFECT = "ZG-COIL-DEFECT"; + // 新焊缝判定值 + public static final String NEW_COIL_WD_OFFSET = "NEW_COIL_WD_OFFSET"; + + // 新带头判定值 + public static final String NEW_HEAD_SL_MIN = "NEW_HEAD_SL_MIN"; + // 新带头判定值 + public static final String NEW_HEAD_SL_MAX = "NEW_HEAD_SL_MAX"; + + + //机组运行判定最小速度 + public static final String MIN_PRO_SPEED_LIMIT = "MIN_PRO_SPEED_LIMIT"; + + //卷取机上钢卷号生成最小重量[KG] + public static final String MIN_TR_COIL_WEIGHT = "MIN_TR_COIL_WEIGHT"; + + //最小剪切长度 + public static final String MIN_EXIT_CUT_LENGTH = "MIN_EXIT_CUT_LENGTH"; + + //并卷带头最小距离,机组总长(600)+余量(500) + public static final String MIN_MERGE_POS_LENGTH = "MIN_MERGE_POS_LENGTH"; + + //带钢段 2米为一段 + public static final String SEG_STRIP_LEN = "SEG_STRIP_LEN"; + + //卷取机前一个设备idx + public static final DeviceEnum BEFORE_TR_IDX = DISC; + + // 工艺规程点位代码 + public static final String SETUP_POINT_CODE = "SETUP_POINT_CODE"; + // 工艺规程下限代码 + public static final String SETUP_LOWER_CODE = "SETUP_LOWER_CODE"; + // 工艺规程上限代码 + public static final String SETUP_UPPER_CODE = "SETUP_UPPER_CODE"; + + public static final String MAX_UNIT_SPEED = "MAX_UNIT_SPEED"; } public class RabbitMQ { @@ -29,4 +69,42 @@ public class CommonConstants { public static final String SEND_MODEL = "plateform.modpt.queue"; } + + public static class Redis { + public static final String CACHE = SYSTEM_MODULE + ":cache:"; + + + //******************COMMON_CACHE****************** + public static final String COMMON_CACHE = CACHE + "common:"; + public static final String VIRTUAL_PLAN_KEY = COMMON_CACHE + "virtual-plan"; // 虚拟计划 + public static final String ALARM_KEY_PREFIX = COMMON_CACHE + "alarm:"; // 点位报警前缀 + + + //******************COIL_CACHE****************** + public static final String COIL_CACHE = CACHE + "coil:"; + public static final String COIL_POSITION_KEY = COIL_CACHE + "position"; // 带钢当前位置 + public static final String COIL_STRIP_LOCATION_KEY = COIL_CACHE + "strip-location"; // 带钢上一次焊缝位 + public static final String COIL_POR_IDX_KEY = COIL_CACHE + "por-idx"; // 带钢上一次所在开卷机 + public static final String COIL_SEG_NUM_KEY = COIL_CACHE + "seg-num"; // 带钢segment数量 + public static final String COIL_SEG_LIST_KEY = COIL_CACHE + "seg-list"; // segment list + public static final String COIL_HEAD_CUT_LEN_KEY = COIL_CACHE + "head-cut-len:"; // 带钢头部废料剪切长度 + public static final String COIL_MATMAP_LIST_KEY = COIL_CACHE + "matmap-list"; // matmap list + public static final String COIL_HEAD_LIST_KEY = COIL_CACHE + "head-list"; // head list + public static final String COIL_PREV_HEAD_KEY = COIL_CACHE + "prev-head"; // prev head + public static final String COIL_MERGE_HEAD_KEY = COIL_CACHE + "merge-head"; // merge head + public static final String COIL_MERGE_END_POS_KEY = COIL_CACHE + "merge-end-pos"; // 并卷结束位置 + public static final String EXIT_CUT_LAST_END_POS_KEY = COIL_CACHE + "exit-cut-last-end-pos"; // 出口剪切结束位置 + public static final String HEAD_DEFECT_START_POS = COIL_CACHE + "head-defect-start-pos"; // 头部缺陷起始位置 + public static final String TAIL_DEFECT_START_POS = COIL_CACHE + "tail-defect-start-pos"; // 尾部缺陷起始位置 + public static final String COIL_SETUP_KEY = COIL_CACHE + "setup:"; // 带钢工艺规程数据 + + + //******************COUNTER_CACHE****************** + public static final String COUNTER_CACHE = CACHE + "counter:"; + public static final String COUNTER_EXIT_CUT_KEY = COUNTER_CACHE + "exit-cut"; // 出口剪切计数 + public static final String COUNTER_HEAD_CUT_KEY = COUNTER_CACHE + "head-cut"; // 头部剪切计数 + public static final String COUNTER_POR_ONLINE_KEY = COUNTER_CACHE + "por-online"; // 钢卷上线计数 + public static final String COUNTER_POR_PAY_OVER_KEY = COUNTER_CACHE + "por-pay-over"; // 开卷机甩尾计数 + public static final String COUNTER_TR_UNLOAD_KEY = COUNTER_CACHE + "tr-unload"; // 卷取机卸卷计数 + } } diff --git a/business/src/main/java/com/fizz/business/constants/enums/AlarmStatusEnum.java b/business/src/main/java/com/fizz/business/constants/enums/AlarmStatusEnum.java new file mode 100644 index 0000000..96c3a24 --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/AlarmStatusEnum.java @@ -0,0 +1,46 @@ +package com.fizz.business.constants.enums; + +import com.baomidou.mybatisplus.annotation.IEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * 报警状态枚举 + * + * @author chenhao + * @date 2023/04/24 + */ +@Getter +@AllArgsConstructor +public enum AlarmStatusEnum implements IEnum { + INIT("初始化"), + UNCONFIRMED("报警待确认"), + CONFIRM( "报警已确认") + ; + + private final String desc; + + private static final Map MAP = new HashMap<>(16); + + static { + for (AlarmStatusEnum e : AlarmStatusEnum.values()) { + MAP.put(e.getValue(), e); + } + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static AlarmStatusEnum getByValue(String value) { + return MAP.get(value); + } + + @JsonValue + @Override + public String getValue() { + return this.name(); + } +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/CoilMergeStatusEnum.java b/business/src/main/java/com/fizz/business/constants/enums/CoilMergeStatusEnum.java new file mode 100644 index 0000000..24c607a --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/CoilMergeStatusEnum.java @@ -0,0 +1,45 @@ +package com.fizz.business.constants.enums; + +import com.baomidou.mybatisplus.annotation.IEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * 并卷状态枚举 + * + * @author chenhao + * @date 2023/04/24 + */ +@Getter +@AllArgsConstructor +public enum CoilMergeStatusEnum implements IEnum { + UNPROCESSED("未处理"), + PROCESSED("已处理"), + ; + + private final String desc; + + private static final Map MAP = new HashMap<>(16); + + static { + for (CoilMergeStatusEnum e : CoilMergeStatusEnum.values()) { + MAP.put(e.getValue(), e); + } + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static CoilMergeStatusEnum getByValue(String value) { + return MAP.get(value); + } + + @JsonValue + @Override + public String getValue() { + return this.name(); + } +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/DeviceEnum.java b/business/src/main/java/com/fizz/business/constants/enums/DeviceEnum.java new file mode 100644 index 0000000..58edfcd --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/DeviceEnum.java @@ -0,0 +1,61 @@ +package com.fizz.business.constants.enums; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum DeviceEnum { + POR1(0, "1#开卷机"), + POR2(1, "2#开卷机"), + WELDER(2, "焊机"), + BR1(3, "1#张力辊"), + CEL(4, "入口活套"), + BR2(5, "2#张力辊"), + ALKALI(6, "碱洗"), + DRYING(7, "热烘干"), + BR4(8, "4#张力辊"), + RTF(9, "加热炉"), + SF1(10, "均热炉1"), + EHF(11, "EHF"), + SF2(12, "均热炉2"), + CTF(13, "CTF"), + SF3(14, "均热炉3"), + RJC(15, "控冷段"), + AJC(16, "快冷段"), + BR5(17, "5#张力辊"), + BR6(18, "6#张力辊"), + CXL(19, "出口活套"), + BR7(20, "7#张力辊"), + BR8(21, "8#张力辊"), + COAT(22, "涂机"), + DISC(23, "圆盘剪"), + TR1(24, "1#卷取机"), + TR2(25, "2#卷取机"); + + + private final Integer idx; + private final String desc; + private static final Map MAP = new HashMap<>(); + + static { + for (DeviceEnum e : DeviceEnum.values()) { + MAP.put(e.getValue(), e); + } + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static DeviceEnum getByValue(String value) { + return MAP.get(value); + } + + @JsonValue + public String getValue() { + return this.name(); + } +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/ExceptionCodeEnum.java b/business/src/main/java/com/fizz/business/constants/enums/ExceptionCodeEnum.java new file mode 100644 index 0000000..e1401a1 --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/ExceptionCodeEnum.java @@ -0,0 +1,30 @@ +package com.fizz.business.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 异常错误码枚举 + */ +@Getter +public enum ExceptionCodeEnum { + // 系统级错误 + SYSTEM_ERROR("SYS_500", "系统错误"), + SERVICE_UNAVAILABLE("SYS_503", "服务不可用"), + + // 业务级错误 + DATA_NOT_FOUND("BIZ_404", "数据不存在"), + DATA_VALIDATION_FAILED("BIZ_400", "数据验证失败"), + UNAUTHORIZED_ACCESS("BIZ_401", "未授权访问"), + + // 默认错误 + ERROR("ERR_500", "未知错误"); + + private final String code; + private final String message; + + ExceptionCodeEnum(String code, String message) { + this.code = code; + this.message = message; + } +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/ExitCutTypeEnum.java b/business/src/main/java/com/fizz/business/constants/enums/ExitCutTypeEnum.java new file mode 100644 index 0000000..157ca7c --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/ExitCutTypeEnum.java @@ -0,0 +1,15 @@ +package com.fizz.business.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * + * @author chenhao + * @date 2023/04/24 + */ +@Getter +@AllArgsConstructor +public enum ExitCutTypeEnum { + WELDER_CUT, SPLIT_CUT +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/HalfReturnTypeEnum.java b/business/src/main/java/com/fizz/business/constants/enums/HalfReturnTypeEnum.java new file mode 100644 index 0000000..66ef148 --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/HalfReturnTypeEnum.java @@ -0,0 +1,45 @@ +package com.fizz.business.constants.enums; + +import com.baomidou.mybatisplus.annotation.IEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * 回退类型枚举 + * + * @author chenhao + * @date 2023/04/24 + */ +@Getter +@AllArgsConstructor +public enum HalfReturnTypeEnum implements IEnum { + HEAD_COIL("头部卷"), + TAIL_COIL("尾部卷") + ; + + private final String desc; + + private static final Map MAP = new HashMap<>(5); + + static { + for (HalfReturnTypeEnum e : HalfReturnTypeEnum.values()) { + MAP.put(e.getValue(), e); + } + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static HalfReturnTypeEnum getByValue(String value) { + return MAP.get(value); + } + + @JsonValue + @Override + public String getValue() { + return this.name(); + } +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/IOperateMat.java b/business/src/main/java/com/fizz/business/constants/enums/IOperateMat.java new file mode 100644 index 0000000..d335a44 --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/IOperateMat.java @@ -0,0 +1,15 @@ +package com.fizz.business.constants.enums; + + +import com.fizz.business.form.OperateMatForm; + +/** + * 钢卷操作 + * + * @author chenhao + * @date 2023/8/29 + */ +public interface IOperateMat { + + void operate(T form); +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/L1OperateMatEnum.java b/business/src/main/java/com/fizz/business/constants/enums/L1OperateMatEnum.java new file mode 100644 index 0000000..e577577 --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/L1OperateMatEnum.java @@ -0,0 +1,131 @@ +package com.fizz.business.constants.enums; + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.annotation.IEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fizz.business.form.ChangePlanStatusForm; +import com.fizz.business.form.L1OperateMatForm; +import com.fizz.business.service.client.PdiPlanClient; +import com.fizz.business.service.client.RedisCacheManager; +import com.fizz.business.service.impl.BeanFactory; +import com.fizz.business.utils.MatmapUtil; +import com.fizz.business.utils.WebSocketUtil; +import com.fizz.business.vo.PdiPlanVO; +import com.google.common.collect.Lists; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +/** + * 钢卷操作 + * + * @author chenhao + * @date 2023/04/24 + */ +@Getter +@AllArgsConstructor +public enum L1OperateMatEnum implements IEnum, IOperateMat { + ONLINE("上线") { + @Override + public void operate(L1OperateMatForm form) { + ONLINE.syncPlanStatus(form.getPlanId()); + MatmapUtil.setMatmap(form.getPorIdx(), form.getEntryMatId(), form.getPlanId(), form.getPlanNo()); + // 钢卷上线时, 缓存工艺规程 +// BeanFactory.getBean(RedisCacheManager.class).setCoilSetup(form.getPlanId()); + WebSocketUtil.sendSignalMsg(form); + WebSocketUtil.sendMatmapMsg(); + } + }, + UNLOAD("卸卷") { + @Override + public void operate(L1OperateMatForm form) { + // 卷取机卸卷,清除matmap + MatmapUtil.clearMatmap(form.getTrIdx()); + // 移除mergeHead + BeanFactory.getBean(RedisCacheManager.class).removeMergeHead(); + WebSocketUtil.sendSignalMsg(form); + WebSocketUtil.sendMatmapMsg(); + } + }, + + PRODUCING("生产中") { + @Override + public void operate(L1OperateMatForm form) { + PRODUCING.syncPlanStatus(form.getPlanId()); + // 钢卷上线时, 缓存工艺规程 +// BeanFactory.getBean(RedisCacheManager.class).setCoilSetup(form.getPlanId()); + WebSocketUtil.sendSignalMsg(form); + } + }, + PRODUCT("生产完成") { + @Override + public void operate(L1OperateMatForm form) { + PRODUCT.syncPlanStatus(form.getPlanId()); + // 删除工艺规程 + BeanFactory.getBean(RedisCacheManager.class).delCoilSetup(form.getEntryMatId()); + WebSocketUtil.sendSignalMsg(form); + } + }, + PAY_OVER("甩尾") { + @Override + public void operate(L1OperateMatForm form) { + ArrayList status = Lists.newArrayList(PlanStatusEnum.PRODUCING.name(), PlanStatusEnum.PRODUCT.name()); + PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class); + PdiPlanVO plan = planClient.detail(form.getPlanId()); + Assert.notNull(plan, "计划[{}]不存在", plan.getId()); + if (!planClient.isVirtualPlan(plan.getId())) { + Assert.isTrue(status.contains(plan.getStatus()), "当前状态[{}]不支持甩尾", plan.getStatus()); + } + MatmapUtil.clearMatmap(form.getPorIdx()); + WebSocketUtil.sendSignalMsg(form); + WebSocketUtil.sendMatmapMsg(); + } + }, + ; + + private final String desc; + + private static final Map MAP = new HashMap<>(16); + + static { + for (L1OperateMatEnum e : L1OperateMatEnum.values()) { + MAP.put(e.getValue(), e); + } + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static L1OperateMatEnum getByValue(String value) { + return MAP.get(value); + } + + @JsonValue + @Override + public String getValue() { + return this.name(); + } + + + /** + * 同步计划状态 + * + * @param planId 计划id + */ + private void syncPlanStatus(Long planId) { + PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class); + if (planClient.isVirtualPlan(planId)) { + RedisCacheManager redisCacheManager = BeanFactory.getBean(RedisCacheManager.class); + PdiPlanVO virtualPlan = redisCacheManager.getVirtualPlan(planId); + virtualPlan.setStatus(this.name()); + redisCacheManager.putVirtualPlan(virtualPlan); + return; + } + planClient.changeStatus(ChangePlanStatusForm.builder() + .operation(this.name()) + .id(planId) + .build()); + } +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/LimitItemCode.java b/business/src/main/java/com/fizz/business/constants/enums/LimitItemCode.java new file mode 100644 index 0000000..7312104 --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/LimitItemCode.java @@ -0,0 +1,11 @@ +package com.fizz.business.constants.enums; + +/** + * 参数配置code + * + * @author chenhao + * @date 2023/05/18 + */ +public enum LimitItemCode { + track_ca1_alarm, track_ca_defect, track_ca1_measure, track_ca1_point +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/MqOperateEnum.java b/business/src/main/java/com/fizz/business/constants/enums/MqOperateEnum.java new file mode 100644 index 0000000..0de22f7 --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/MqOperateEnum.java @@ -0,0 +1,39 @@ +package com.fizz.business.constants.enums; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * websocket type + * + * @author chenhao + * @date 2023/04/24 + */ +@Getter +@AllArgsConstructor +public enum MqOperateEnum { + ADD, UPDATE, DELETE; + + private static final Map MAP = new HashMap<>(8); + + static { + for (MqOperateEnum e : MqOperateEnum.values()) { + MAP.put(e.getValue(), e); + } + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static MqOperateEnum getByValue(String value) { + return MAP.get(value); + } + + @JsonValue + public String getValue() { + return this.name(); + } +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/PlanStatusEnum.java b/business/src/main/java/com/fizz/business/constants/enums/PlanStatusEnum.java index 185a60d..e59ace9 100644 --- a/business/src/main/java/com/fizz/business/constants/enums/PlanStatusEnum.java +++ b/business/src/main/java/com/fizz/business/constants/enums/PlanStatusEnum.java @@ -1,32 +1,59 @@ package com.fizz.business.constants.enums; - -import com.fasterxml.jackson.annotation.JsonFormat; +import com.baomidou.mybatisplus.annotation.IEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.HashMap; +import java.util.Map; + +/** + * 计划状态枚举 + * + * @author chenhao + * @date 2023/04/24 + */ @Getter @AllArgsConstructor -public enum PlanStatusEnum { - - UNKNOWN("UNKNOWN","未知状态"), - NEW("NEW","新计划"), - READY("READY","准备好"), - ONLINE("ONLINE","上线"), - PRODUCING("PRODUCING","生产中"), - PRODUCT("PRODUCT","生产完成"); - +public enum PlanStatusEnum implements IEnum { + INVALID("0","无效"), + UNCONFIRMED("1","待确认"), + NEW( "2","新计划"), + READY("3","准备好"), + ONLINE("4","上线"), + PRODUCING("5","生产中"), + PRODUCT("6","生产完成"), + BLOCK("7","封闭"), + REFUSE("8","拒绝"), + DELETED("9","已删除"), + ; private final String status; - private final String name; + private final String desc; - // 根据状态码获取对应的枚举 - public static PlanStatusEnum fromStatus(String status) { - for (PlanStatusEnum planStatus : PlanStatusEnum.values()) { - if (planStatus.getStatus().equals(status)) { - return planStatus; - } + private static final Map STATUS_MAP = new HashMap<>(16); + + static { + for (PlanStatusEnum e : PlanStatusEnum.values()) { + STATUS_MAP.put(e.getValue(), e); } - return UNKNOWN; + } + + // 添加这个方法来解决 fromStatus 调用问题 + public static PlanStatusEnum fromStatus(String status) { + return STATUS_MAP.get(status); + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static PlanStatusEnum getByValue(String value) { + return STATUS_MAP.get(value); + } + + @JsonValue + @Override + public String getValue() { + return this.name(); } } diff --git a/business/src/main/java/com/fizz/business/constants/enums/PlanTypeEnum.java b/business/src/main/java/com/fizz/business/constants/enums/PlanTypeEnum.java new file mode 100644 index 0000000..195579a --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/PlanTypeEnum.java @@ -0,0 +1,46 @@ +package com.fizz.business.constants.enums; + +import com.baomidou.mybatisplus.annotation.IEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * 计划类型枚举 + * + * @author chenhao + * @date 2023/04/24 + */ +@Getter +@AllArgsConstructor +public enum PlanTypeEnum implements IEnum { + PLAN_MAT("计划卷"), + TEMP_MAT("临时卷"), + BLOCK_MAT("封闭卷") + ; + + private final String desc; + + private static final Map MAP = new HashMap<>(5); + + static { + for (PlanTypeEnum e : PlanTypeEnum.values()) { + MAP.put(e.getValue(), e); + } + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static PlanTypeEnum getByValue(String value) { + return MAP.get(value); + } + + @JsonValue + @Override + public String getValue() { + return this.name(); + } +} diff --git a/business/src/main/java/com/fizz/business/constants/enums/WebMatOperateEnum.java b/business/src/main/java/com/fizz/business/constants/enums/WebMatOperateEnum.java deleted file mode 100644 index 8c40b56..0000000 --- a/business/src/main/java/com/fizz/business/constants/enums/WebMatOperateEnum.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.fizz.business.constants.enums; - -import com.baomidou.mybatisplus.annotation.IEnum; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonValue; -import com.fizz.business.form.ChangePlanStatusForm; -import com.fizz.business.form.WebOperateMatForm; -import com.fizz.business.service.client.PdiPlanClient; -import com.fizz.business.service.impl.BeanFactory; -import com.fizz.business.utils.WebSocketUtil; -import com.fizz.business.vo.CrmPdiPlanVO; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; - -import java.util.HashMap; -import java.util.Map; - - -@Getter -@Slf4j -@AllArgsConstructor -public enum WebMatOperateEnum implements IEnum { - ONLINE("上线") { - @Override - public void operate(WebOperateMatForm form) { - - ONLINE.syncPlanStatus(form.getId(), form.getEntryMatId()); - } - }, - READY("回退") { - @Override - public void operate(WebOperateMatForm form) { - READY.syncPlanStatus(form.getId(), form.getEntryMatId()); - } - }, - - PRODUCT("生产完成") { - @Override - public void operate(WebOperateMatForm form) { - super.operate(form); - } - }, - ; - - private final String desc; - - private static final Map MAP = new HashMap<>(16); - - static { - for (WebMatOperateEnum e : WebMatOperateEnum.values()) { - MAP.put(e.getValue(), e); - } - } - - @JsonCreator(mode = JsonCreator.Mode.DELEGATING) - public static WebMatOperateEnum getByValue(String value) { - return MAP.get(value); - } - - @JsonValue - @Override - public String getValue() { - return this.name(); - } - - public void operate(WebOperateMatForm form) { - PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class); - planClient.changeStatus(ChangePlanStatusForm.builder() - .operation(this.name()) - .id(form.getId()) - .coilId(form.getEntryMatId()) - .build()); - } - - /** - * 同步计划状态 - * - * @param planId 计划id - */ - private void syncPlanStatus(Long planId, String coilid) { - PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class); - - planClient.changeStatus(ChangePlanStatusForm.builder() - .operation(this.name()) - .id(planId) - .coilId(coilid) - .build()); - - } -} diff --git a/business/src/main/java/com/fizz/business/constants/enums/WebOperateMatEnum.java b/business/src/main/java/com/fizz/business/constants/enums/WebOperateMatEnum.java new file mode 100644 index 0000000..6f13671 --- /dev/null +++ b/business/src/main/java/com/fizz/business/constants/enums/WebOperateMatEnum.java @@ -0,0 +1,336 @@ +package com.fizz.business.constants.enums; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.IEnum; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fizz.business.domain.HalfReturn; +import com.fizz.business.domain.Segment; +import com.fizz.business.dto.CoilHeadDTO; +import com.fizz.business.dto.ExitCoilInfoDTO; +import com.fizz.business.dto.MatmapDTO; +import com.fizz.business.form.ChangePlanStatusForm; +import com.fizz.business.form.WebOperateMatForm; +import com.fizz.business.mapper.HalfReturnMapper; +import com.fizz.business.mapper.SegmentMapper; +import com.fizz.business.service.PdoExCoilService; +import com.fizz.business.service.TrackService; +import com.fizz.business.service.client.PdiPlanClient; +import com.fizz.business.service.client.RedisCacheManager; +import com.fizz.business.service.impl.BeanFactory; +import com.fizz.business.utils.ErrorDataException; +import com.fizz.business.utils.MatmapUtil; +import com.fizz.business.utils.WebSocketUtil; +import com.fizz.business.vo.PdiPlanVO; +import com.google.common.collect.Lists; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.util.*; + +/** + * 钢卷操作 + * + * @author chenhao + * @date 2023/04/24 + */ +@Getter +@Slf4j +@AllArgsConstructor +public enum WebOperateMatEnum implements IEnum, IOperateMat { + ONLINE("上线") { + @Override + public void operate(WebOperateMatForm form) { + Assert.notNull(form.getPorIdx(), "开卷机编号不能为空"); + // 页面手动上卷时,如果开卷机有卷 + // 需要判断:正常卷不允许上卷;虚拟卷则需要手动更新matmap,segment + PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class); + MatmapDTO porCoil = MatmapUtil.getMatmap(form.getPorIdx()); + if (MatmapUtil.already(porCoil)) { + boolean virtualPlan = planClient.isVirtualPlan(porCoil.getPlanId()); + if (!virtualPlan) { + throw new ErrorDataException(ExceptionCodeEnum.ERROR, "当前开卷机已有正在运行的钢卷,不支持上卷"); + } + ONLINE.syncPlanStatus(form.getPlanId()); + ONLINE.replaceVirtualPlan(form, porCoil); + WebSocketUtil.sendSignalMsg(form, true); + // 如果开卷机和焊机的钢卷相同,则将计划状态变更为生产中 + MatmapDTO welderCoil = MatmapUtil.getMatmap(DeviceEnum.WELDER.getIdx()); + if (MatmapUtil.already(welderCoil) && Objects.equals(form.getEntryMatId(), welderCoil.getMatId())) { + form.setOperation(PRODUCING); + BeanFactory.getBean(TrackService.class).webOperateMat(form); + } + } else { + ONLINE.syncPlanStatus(form.getPlanId()); + MatmapUtil.setMatmap(form.getPorIdx(), form.getEntryMatId(), form.getPlanId(), form.getPlanNo()); + WebSocketUtil.sendSignalMsg(form); + } + // 钢卷上线时, 缓存工艺规程 +// BeanFactory.getBean(RedisCacheManager.class).setCoilSetup(form.getPlanId()); + WebSocketUtil.sendMatmapMsg(); + } + }, + UNLOAD("卸卷") { + @Override + public void operate(WebOperateMatForm form) { + // 开卷机卸卷,变更计划状态为READY,清除matmap + if (Objects.nonNull(form.getPorIdx())) { + UNLOAD.syncPlanStatus(form.getPlanId()); + MatmapUtil.clearMatmap(form.getPorIdx()); + // 删除工艺规程 + BeanFactory.getBean(RedisCacheManager.class).delCoilSetup(form.getEntryMatId()); + WebSocketUtil.sendSignalMsg(form); + WebSocketUtil.sendMatmapMsg(); + } + // 卷取机卸卷,清除matmap + else if (Objects.nonNull(form.getTrIdx())) { + MatmapUtil.clearMatmap(form.getTrIdx()); + // 移除mergeHead + BeanFactory.getBean(RedisCacheManager.class).removeMergeHead(); + WebSocketUtil.sendSignalMsg(form); + WebSocketUtil.sendMatmapMsg(); + } else { + throw new ErrorDataException(ExceptionCodeEnum.DATA_NOT_FOUND, "卸卷开卷机或卷取机编号不能为空"); + } + } + }, + + ALL_RETURN("整卷回退") { + @Override + public void operate(WebOperateMatForm form) { + ALL_RETURN.doReturn(form); + } + }, + HALF_RETURN("半卷回退") { + @Override + public void operate(WebOperateMatForm form) { + HALF_RETURN.doReturn(form); + } + }, + PRODUCING("生产中") { + @Override + public void operate(WebOperateMatForm form) { + PRODUCING.syncPlanStatus(form.getPlanId()); + WebSocketUtil.sendSignalMsg(form); + } + }, + PRODUCT("生产完成") { + @Override + public void operate(WebOperateMatForm form) { + PRODUCT.syncPlanStatus(form.getPlanId()); + if (Objects.isNull(form.getCoilLength()) || form.getCoilLength() <= 0) { + form.setCoilLength(9999d); + } + PdoExCoilService pdoExCoilService = BeanFactory.getBean(PdoExCoilService.class); + MatmapDTO matmapDTO = new MatmapDTO(); + matmapDTO.setMatId(form.getEntryMatId()); + matmapDTO.setPlanId(form.getPlanId()); + ExitCoilInfoDTO exitCoil = pdoExCoilService.genExitCoilInfo(matmapDTO, ExitCutTypeEnum.WELDER_CUT); + pdoExCoilService.saveExCoil(exitCoil); + // 2023.9.26 手动完成的计划产出不上报给L3,由操作工手动登记产出 +// SendMqUtil.sendCoilOutputMsg(pdoExCoilDTO); + + // 删除工艺规程 + BeanFactory.getBean(RedisCacheManager.class).delCoilSetup(form.getEntryMatId()); + WebSocketUtil.sendSignalMsg(form); + } + }, + BLOCK("卸卷并封闭") { + @Override + public void operate(WebOperateMatForm form) { + BLOCK.syncPlanStatus(form.getPlanId()); + MatmapUtil.clearMatmap(form.getPorIdx()); + // 删除工艺规程 + BeanFactory.getBean(RedisCacheManager.class).delCoilSetup(form.getEntryMatId()); + WebSocketUtil.sendSignalMsg(form); + WebSocketUtil.sendMatmapMsg(); + } + }, + PAY_OVER("甩尾") { + @Override + public void operate(WebOperateMatForm form) { + ArrayList status = Lists.newArrayList(PlanStatusEnum.ONLINE.name()); + PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class); + PdiPlanVO plan = planClient.detail(form.getPlanId()); + if (Objects.nonNull(plan) && !planClient.isVirtualPlan(plan.getId())) { + Assert.isTrue(!status.contains(plan.getStatus()), "当前状态[{}]不支持甩尾", plan.getStatus()); + } + MatmapUtil.clearMatmap(form.getPorIdx()); + WebSocketUtil.sendSignalMsg(form); + WebSocketUtil.sendMatmapMsg(); + } + }, + ; + + private final String desc; + + private static final Map MAP = new HashMap<>(16); + + static { + for (WebOperateMatEnum e : WebOperateMatEnum.values()) { + MAP.put(e.getValue(), e); + } + } + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public static WebOperateMatEnum getByValue(String value) { + return MAP.get(value); + } + + @JsonValue + @Override + public String getValue() { + return this.name(); + } + + /** + * 同步计划状态 + * + * @param planId 计划id + */ + private void syncPlanStatus(Long planId) { + PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class); + if (planClient.isVirtualPlan(planId)) { + RedisCacheManager redisCacheManager = BeanFactory.getBean(RedisCacheManager.class); + PdiPlanVO virtualPlan = redisCacheManager.getVirtualPlan(planId); + virtualPlan.setStatus(this.name()); + redisCacheManager.putVirtualPlan(virtualPlan); + return; + } + planClient.changeStatus(ChangePlanStatusForm.builder() + .operation(this.name()) + .id(planId) + .build()); + } + + /** + * 通过计划的halfReturnType字段判断当前卷是回退的头部卷还是尾部卷 + * 1. 头部卷: entryMatId=A01 + * 2. 尾部卷: entryMatId=A01-2, returnMatId=A01。(由于计划号+钢卷号唯一,所以回退的尾部卷生成新计划时,将entryMatId设置为A01-2,真实的原料卷号保存在returnMatId中) + * 半卷回退上报产出 + * 1. 头部卷产出时,原料卷号:A01, 产出卷号: A01-1, 分卷标识: true, 尾卷标识: false + * 2. 尾部卷产出时:原料卷号:A01,产出卷号: A01-2, 分卷标识: false, 尾卷标识: true + * + * @param form + */ + private void doReturn(WebOperateMatForm form) { + if (!Lists.newArrayList(HALF_RETURN, ALL_RETURN).contains(form.getOperation())) + return; + + PdiPlanClient planClient = BeanFactory.getBean(PdiPlanClient.class); + PdiPlanVO plan = planClient.detail(form.getPlanId()); + + String entryMatId = form.getEntryMatId(); + String returnMatId = form.getReturnMatId(); + if (StrUtil.isBlank(returnMatId)) { + returnMatId = BeanFactory.getBean(TrackService.class).getHalfReturnMatId(form.getPlanId(), entryMatId).getReturnMatId(); + } + if (Objects.equals(form.getOperation(), HALF_RETURN)) { + HalfReturnMapper returnMapper = BeanFactory.getBean(HalfReturnMapper.class); + // 第一次回退,需要将头部卷与尾部卷都记录到回退表中 + if (!Objects.equals(plan.getReturnType(), HALF_RETURN.name())) { + String headCoilId = form.getEntryMatId() + "-1"; + int lastIndex = returnMatId.lastIndexOf("-"); + if (lastIndex != -1 && lastIndex < returnMatId.length() - 1) { + String numberStr = returnMatId.substring(lastIndex + 1); + int number = Integer.parseInt(numberStr) - 1; + headCoilId = returnMatId.substring(0, lastIndex + 1) + number; + } + // 记录回退头部卷信息 + HalfReturn headCoil = new HalfReturn(); + headCoil.setEntryMatId(entryMatId); + headCoil.setExitMatId(headCoilId); + headCoil.setPlanNo(plan.getPlanNo()); + headCoil.setExitMatWeight(plan.getEntryWeight() - form.getReturnWeight()); + headCoil.setReturnMatWeight(0d); + headCoil.setReturnType(HALF_RETURN.name()); + headCoil.setReturnRemark(form.getReturnRemark()); + headCoil.setReturnMatTime(LocalDateTime.now()); + + returnMapper.insert(headCoil); + } else { + entryMatId = plan.getReturnMatId(); + } + + // 记录回退尾卷信息 + HalfReturn tailCoil = new HalfReturn(); + tailCoil.setEntryMatId(entryMatId); + tailCoil.setExitMatId(returnMatId); + tailCoil.setPlanNo(plan.getPlanNo()); + tailCoil.setExitMatWeight(0d); + tailCoil.setReturnMatWeight(form.getReturnWeight()); + tailCoil.setReturnType(HALF_RETURN.name()); + tailCoil.setReturnRemark(form.getReturnRemark()); + tailCoil.setReturnMatTime(LocalDateTime.now()); + + returnMapper.insert(tailCoil); + } else { + // 整卷回退删除已有产出 + BeanFactory.getBean(PdoExCoilService.class).deleteExistPdo(form.getPlanId()); + } + + planClient.changeStatus(ChangePlanStatusForm.builder() + .operation(this.name()) + .id(form.getPlanId()) + .returnMatId(returnMatId) + .returnWeight(form.getReturnWeight()) + .build()); + // 更新matmap,matId置空 + MatmapUtil.clearMatmap(form.getPorIdx()); + WebSocketUtil.sendSignalMsg(form); + WebSocketUtil.sendMatmapMsg(); + } + + private void replaceVirtualPlan(WebOperateMatForm form, MatmapDTO porCoil) { + + // 更新matmap + List matmapList = MatmapUtil.getMatmapList(); + matmapList.forEach(matmap -> { + if (Objects.equals(matmap.getMatId(), porCoil.getMatId())) { + MatmapUtil.setMatmap(matmap.getPosIdx(), form.getEntryMatId(), form.getPlanId(), form.getPlanNo()); + } + }); + RedisCacheManager redisCacheManager = BeanFactory.getBean(RedisCacheManager.class); + // 更新headList + List headList = redisCacheManager.getHeadList(); + headList.forEach(head -> { + if (Objects.equals(head.getMatId(), porCoil.getMatId())) { + head.setMatId(form.getEntryMatId()); + head.setPlanNo(form.getPlanNo()); + head.setPlanId(form.getPlanId()); + head.setPorIdx(form.getPorIdx()); + } + }); + redisCacheManager.setHeadList(headList); + // 更新prevHead + CoilHeadDTO prevHead = redisCacheManager.getPrevHead(); + if (Objects.nonNull(prevHead) && Objects.equals(prevHead.getMatId(), porCoil.getMatId())) { + prevHead.setMatId(form.getEntryMatId()); + prevHead.setPlanNo(form.getPlanNo()); + prevHead.setPlanId(form.getPlanId()); + prevHead.setPorIdx(form.getPorIdx()); + redisCacheManager.setPrevHead(prevHead); + } + // 更新mergeHead + CoilHeadDTO mergeHead = redisCacheManager.getMergeHead(); + if (Objects.nonNull(mergeHead) && Objects.equals(mergeHead.getMatId(), porCoil.getMatId())) { + mergeHead.setMatId(form.getEntryMatId()); + mergeHead.setPlanNo(form.getPlanNo()); + mergeHead.setPlanId(form.getPlanId()); + prevHead.setPorIdx(form.getPorIdx()); + redisCacheManager.setMergeHead(mergeHead); + } + // 更新segment + SegmentMapper segmentMapper = BeanFactory.getBean(SegmentMapper.class); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Segment::getEntryMatId, porCoil.getMatId()); + updateWrapper.eq(Segment::getPlanId, porCoil.getPlanId()); + updateWrapper.set(Segment::getEntryMatId, form.getEntryMatId()); + updateWrapper.set(Segment::getPlanId, form.getPlanId()); + segmentMapper.update(new Segment(), updateWrapper); + } +} diff --git a/business/src/main/java/com/fizz/business/controller/CrmPdiPlanController.java b/business/src/main/java/com/fizz/business/controller/CrmPdiPlanController.java index f52025d..3e521cd 100644 --- a/business/src/main/java/com/fizz/business/controller/CrmPdiPlanController.java +++ b/business/src/main/java/com/fizz/business/controller/CrmPdiPlanController.java @@ -23,41 +23,6 @@ public class CrmPdiPlanController { @Resource private CrmPdiPlanService crmPdiPlanService; - @GetMapping("/get/{coilid}") - @Operation(summary ="通过钢卷号或者状态查询计划") - public R getByCoilId(@PathVariable String coilid) { - return R.ok(crmPdiPlanService.getByCoilIdAndOperId(coilid)); - } - - @GetMapping("/getOnlineCoil") - @Operation(summary ="通过钢卷号或者状态查询计划") - public R getByCoilId() { - return R.ok(crmPdiPlanService.getOnlineCoil()); - } - - - @GetMapping("/getCoilInfoAndSetupList") - @Operation(summary ="通过钢卷号获取钢卷信息和设定值列表") - public R getCoilInfoAndSetupList(@RequestParam String coilid) { - return R.ok(crmPdiPlanService.getCoilInfoAndSetupList(coilid)); - } - - @PostMapping("/save/coilInfo") - @Operation(summary ="保存钢卷信息") - public R editCoilInfo(@RequestBody CrmPdiPlanForm coilid) { - - return R.ok(crmPdiPlanService.editCoilInfo(coilid)); - - } - - @PostMapping("/calc") - @Operation(summary ="计算设定值") - public R editCoilInfo(@RequestBody CalcPdiPlanForm coilid) { - - return R.ok(crmPdiPlanService.calcSetup(coilid)); - } - - @PostMapping("/add") @Operation(summary ="新增计划") public R add(@RequestBody CrmPdiPlan crmPdiPlan) { diff --git a/business/src/main/java/com/fizz/business/controller/TrackController.java b/business/src/main/java/com/fizz/business/controller/TrackController.java index 96b7201..e79a57b 100644 --- a/business/src/main/java/com/fizz/business/controller/TrackController.java +++ b/business/src/main/java/com/fizz/business/controller/TrackController.java @@ -1,17 +1,21 @@ package com.fizz.business.controller; +import com.fizz.business.constants.enums.DeviceEnum; +import com.fizz.business.dto.CoilPositionDTO; +import com.fizz.business.form.AdjustPosForm; import com.fizz.business.form.WebOperateMatForm; -import com.fizz.business.mq.RabbitMQ.RabbitQueueListener; import com.fizz.business.service.TrackService; +import com.fizz.business.vo.CoilMeasureVO; +import com.fizz.business.vo.HalfReturnInfoVO; +import com.fizz.business.vo.ReturnInfoVO; import com.ruoyi.common.core.domain.R; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import javax.validation.Valid; -import java.util.List; /** * @author baomidou @@ -21,28 +25,44 @@ import java.util.List; @RequestMapping("/track") @Tag(name = "过程跟踪") public class TrackController { - - @Resource + @Autowired TrackService trackService; - @PostMapping("/manual/operate/mat") - @Operation(summary = "页面手动操作钢卷 上线,回退") + @PutMapping("/manual/operate/mat") + @Operation(description = "页面手动操作钢卷") public R manualOperateMat(@RequestBody @Valid WebOperateMatForm form) { - trackService.operateMatWeb(form); + trackService.webOperateMat(form); return R.ok(); } - @PostMapping("/manual/tr/unload") - @Operation(summary = "页面卷取机手动卸卷登记产出") - public R manualtrUnload(@RequestBody @Valid WebOperateMatForm form) { - trackService.trUnload(form); + @PutMapping("/position") + @Operation(description = "页面手动调整钢卷位置") + public R adjustPosition(@RequestBody @Valid AdjustPosForm form) { + + trackService.adjustPosition(form); return R.ok(); } - @GetMapping("/measure/list") - @Operation(summary = "获取测量数据list") - public R> measureList() { - return R.ok(RabbitQueueListener.measureList); + @GetMapping("/return/info") + @Operation(description = "获取回退数据") + public R getReturnInfo(@RequestParam("posIdx") int posIdx) { + + return R.ok(trackService.getReturnInfo(posIdx)); + } + + @GetMapping("/half/return/mat/id") + @Operation(description = "获取半卷回退卷号") + public R getHalfReturnMatId(@RequestParam("planId") Long planId, + @RequestParam("entryMatId") String entryMatId) { + + return R.ok(trackService.getHalfReturnMatId(planId, entryMatId)); + } + + @GetMapping("/coil/position") + @Operation(description = "获取跟踪带钢位置") + public R getCoilPosition() { + + return R.ok(trackService.getCoilPosition()); } } diff --git a/business/src/main/java/com/fizz/business/domain/DeviceDefine.java b/business/src/main/java/com/fizz/business/domain/DeviceDefine.java new file mode 100644 index 0000000..f3d247f --- /dev/null +++ b/business/src/main/java/com/fizz/business/domain/DeviceDefine.java @@ -0,0 +1,55 @@ +package com.fizz.business.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 机组定义表 + *

+ * + * @author baomidou + * @since 2023-05-17 + */ +@Getter +@Setter +@TableName("cpg_device_define") +@Schema(title = "CpgDeviceDefine对象", description = "机组定义表") +public class DeviceDefine implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Schema(description = "位置编号") + private Integer posIdx; + + @Schema(description = "区域代码") + private String positionArea; + + @Schema(description = "位置代码英文") + private String positionNameEn; + + @Schema(description = "位置代码中文") + private String positionNameCn; + + @Schema(description = "设备开始位置") + private Double positionLengthStart; + + @Schema(description = "设备结束位置") + private Double positionLengthEnd; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "修改时间") + private LocalDateTime updateTime; +} diff --git a/business/src/main/java/com/fizz/business/domain/HalfReturn.java b/business/src/main/java/com/fizz/business/domain/HalfReturn.java new file mode 100644 index 0000000..a916670 --- /dev/null +++ b/business/src/main/java/com/fizz/business/domain/HalfReturn.java @@ -0,0 +1,80 @@ +package com.fizz.business.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 半卷整卷回退表 + *

+ * + * @author baomidou + * @since 2023-05-17 + */ +@Getter +@Setter +@TableName("track_ca1_half_return") +@Schema(title = "TrackCa1HalfReturn对象", description = "半卷整卷回退表") +public class HalfReturn implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "主键id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Schema(description = "来料卷号") + private String entryMatId; + + @Schema(description = "工艺规程") + private String setupVersion; + + @Schema(description = "钢种") + private String steelGrade; + + @Schema(description = "计划号") + private String planNo; + + @Schema(description = "钢卷产品代码") + private String prodCode; + + @Schema(description = "成品钢卷号") + private String exitMatId; + + @Schema(description = "成品卷重") + private Double exitMatWeight; + + @Schema(description = "回退卷重") + private Double returnMatWeight; + + @Schema(description = "回退时间") + private LocalDateTime returnMatTime; + + @Schema(description = "回退类型:ALL_RETURN-整卷回退, HALF_RETURN-半卷回退") + private String returnType; + + @Schema(description = "回退备注") + private String returnRemark; + + @Schema(description = "0-未删除 时间戳:已删除") + private Long delFlag; + + @Schema(description = "操作人") + private String operator; + + @Schema(description = "操作人id") + private String operatorId; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "修改时间") + private LocalDateTime updateTime; +} diff --git a/business/src/main/java/com/fizz/business/domain/PdoExcoil.java b/business/src/main/java/com/fizz/business/domain/PdoExcoil.java new file mode 100644 index 0000000..514523e --- /dev/null +++ b/business/src/main/java/com/fizz/business/domain/PdoExcoil.java @@ -0,0 +1,130 @@ +package com.fizz.business.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * cs机组产出实绩表 + *

+ * + * @author baomidou + * @since 2023-05-17 + */ +@Getter +@Setter +@TableName("cpg_pdo_excoil") +@Schema(title = "cpgPdoExcoil对象", description = "镀锌机组产出实绩表") +public class PdoExcoil implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "主键id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Schema(description = "成品卷") + private String exitMatId; + + @Schema(description = "来料卷") + private String entryMatId; + + @Schema(description = "分切数") + private Integer subId; + + @Schema(description = "开始位置") + private Double startPosition; + + @Schema(description = "结束位置") + private Double endPosition; + + @Schema(description = "计划id") + private Long planId; + + @Schema(description = "计划号") + private String planNo; + + @Schema(description = "产品类型") + private String prodCode; + + @Schema(description = "班号") + private String groupNo; + + @Schema(description = "组号") + private String shiftNo; + + @Schema(description = "状态") + private String status; + + @Schema(description = "钢种") + private String steelGrade; + + @Schema(description = "来料厚度") + private Double entryThick; + + @Schema(description = "来料宽带") + private Double entryWidth; + + @Schema(description = "来料长度") + private Double entryLength; + + @Schema(description = "来料重量") + private Double entryWeight; + + @Schema(description = "实际来料重量,CP/ZR/CA需要修改") + private Double actualEntryWeight; + + @Schema(description = "上表面镀锌") + private Double weightTop; + + @Schema(description = "下表面镀锌") + private Double weightBottom; + + @Schema(description = "成品长度") + private Double exitLength; + + @Schema(description = "成品带涂料重量") + private Double exitNetWeight; + + @Schema(description = "理论重量") + private Double theoryWeight; + + @Schema(description = "实际重量") + private Double actualWeight; + + @Schema(description = "成品外径") + private Double exitOuterDiameter; + + @Schema(description = "成品厚度") + private Double exitThickness; + + @Schema(description = "成品宽度") + private Double exitWidth; + + private String customer; + + @Schema(description = "上线时间") + private LocalDateTime onlineTime; + + @Schema(description = "开始时间") + private LocalDateTime startTime; + + @Schema(description = "结束时间") + private LocalDateTime endTime; + + @Schema(description = "0-未删除 时间戳:已删除") + private Long delFlag; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "修改时间") + private LocalDateTime updateTime; +} diff --git a/business/src/main/java/com/fizz/business/domain/PdoStripvalue.java b/business/src/main/java/com/fizz/business/domain/PdoStripvalue.java new file mode 100644 index 0000000..acb630a --- /dev/null +++ b/business/src/main/java/com/fizz/business/domain/PdoStripvalue.java @@ -0,0 +1,559 @@ +package com.fizz.business.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 剪切带钢段平均值 + *

+ * + * @author baomidou + * @since 2023-05-17 + */ +@Getter +@Setter +@TableName("cpg_pdo_stripvalue") +@Schema(title = "cpgPdoStripvalue对象", description = "剪切带钢段平均值") +public class PdoStripvalue implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private String exitMatId; + + private Integer val1num; + + private Integer val2num; + + private Integer val3num; + + private Integer val4num; + + private Integer val5num; + + private Integer val6num; + + private Integer val7num; + + private Integer val8num; + + private Integer val9num; + + private Integer val10num; + + private Double val1max; + + private Double val1min; + + private Double val1avg; + + private Integer val1cnt; + + private Integer val1std; + + private Double val2max; + + private Double val2min; + + private Double val2avg; + + private Integer val2cnt; + + private Integer val2std; + + private Double val3max; + + private Double val3min; + + private Double val3avg; + + private Integer val3cnt; + + private Integer val3std; + + private Double val4max; + + private Double val4min; + + private Double val4avg; + + private Integer val4cnt; + + private Integer val4std; + + private Double val5max; + + private Double val5min; + + private Double val5avg; + + private Integer val5cnt; + + private Integer val5std; + + private Double val6max; + + private Double val6min; + + private Double val6avg; + + private Integer val6cnt; + + private Integer val6std; + + private Double val7max; + + private Double val7min; + + private Double val7avg; + + private Integer val7cnt; + + private Integer val7std; + + private Double val8max; + + private Double val8min; + + private Double val8avg; + + private Integer val8cnt; + + private Integer val8std; + + private Double val9max; + + private Double val9min; + + private Double val9avg; + + private Integer val9cnt; + + private Integer val9std; + + private Double val10max; + + private Double val10min; + + private Double val10avg; + + private Integer val10cnt; + + private Integer val10std; + + private Double val11max; + + private Double val11min; + + private Double val11avg; + + private Integer val11cnt; + + private Integer val11std; + + private Double val12max; + + private Double val12min; + + private Double val12avg; + + private Integer val12cnt; + + private Integer val12std; + + private Double val13max; + + private Double val13min; + + private Double val13avg; + + private Integer val13cnt; + + private Integer val13std; + + private Double val14max; + + private Double val14min; + + private Double val14avg; + + private Integer val14cnt; + + private Integer val14std; + + private Double val15max; + + private Double val15min; + + private Double val15avg; + + private Integer val15cnt; + + private Integer val15std; + + private Double val16max; + + private Double val16min; + + private Double val16avg; + + private Integer val16cnt; + + private Integer val16std; + + private Double val17max; + + private Double val17min; + + private Double val17avg; + + private Integer val17cnt; + + private Integer val17std; + + private Double val18max; + + private Double val18min; + + private Double val18avg; + + private Integer val18cnt; + + private Integer val18std; + + private Double val19max; + + private Double val19min; + + private Double val19avg; + + private Integer val19cnt; + + private Integer val19std; + + private Double val20max; + + private Double val20min; + + private Double val20avg; + + private Integer val20cnt; + + private Integer val20std; + + private Double val21max; + + private Double val21min; + + private Double val21avg; + + private Integer val21cnt; + + private Integer val21std; + + private Double val22max; + + private Double val22min; + + private Double val22avg; + + private Integer val22cnt; + + private Integer val22std; + + private Double val23max; + + private Double val23min; + + private Double val23avg; + + private Integer val23cnt; + + private Integer val23std; + + private Double val24max; + + private Double val24min; + + private Double val24avg; + + private Integer val24cnt; + + private Integer val24std; + + private Double val25max; + + private Double val25min; + + private Double val25avg; + + private Integer val25cnt; + + private Integer val25std; + + private Double val26max; + + private Double val26min; + + private Double val26avg; + + private Integer val26cnt; + + private Integer val26std; + + private Double val27max; + + private Double val27min; + + private Double val27avg; + + private Integer val27cnt; + + private Integer val27std; + + private Double val28max; + + private Double val28min; + + private Double val28avg; + + private Integer val28cnt; + + private Integer val28std; + + private Double val29max; + + private Double val29min; + + private Double val29avg; + + private Integer val29cnt; + + private Integer val29std; + + private Double val30max; + + private Double val30min; + + private Double val30avg; + + private Integer val30cnt; + + private Integer val30std; + + private Double val31max; + + private Double val31min; + + private Double val31avg; + + private Integer val31cnt; + + private Integer val31std; + + private Double val32max; + + private Double val32min; + + private Double val32avg; + + private Integer val32cnt; + + private Integer val32std; + + private Double val33max; + + private Double val33min; + + private Double val33avg; + + private Integer val33cnt; + + private Integer val33std; + + private Double val34max; + + private Double val34min; + + private Double val34avg; + + private Integer val34cnt; + + private Integer val34std; + + private Double val35max; + + private Double val35min; + + private Double val35avg; + + private Integer val35cnt; + + private Integer val35std; + + private Double val36max; + + private Double val36min; + + private Double val36avg; + + private Integer val36cnt; + + private Integer val36std; + + private Double val37max; + + private Double val37min; + + private Double val37avg; + + private Integer val37cnt; + + private Integer val37std; + + private Double val38max; + + private Double val38min; + + private Double val38avg; + + private Integer val38cnt; + + private Integer val38std; + + private Double val39max; + + private Double val39min; + + private Double val39avg; + + private Integer val39cnt; + + private Integer val39std; + + private Double val40max; + + private Double val40min; + + private Double val40avg; + + private Integer val40cnt; + + private Integer val40std; + + private Double val41max; + + private Double val41min; + + private Double val41avg; + + private Integer val41cnt; + + private Integer val41std; + + private Double val42max; + + private Double val42min; + + private Double val42avg; + + private Integer val42cnt; + + private Integer val42std; + + private Double val43max; + + private Double val43min; + + private Double val43avg; + + private Integer val43cnt; + + private Integer val43std; + + private Double val44max; + + private Double val44min; + + private Double val44avg; + + private Integer val44cnt; + + private Integer val44std; + + private Double val45max; + + private Double val45min; + + private Double val45avg; + + private Integer val45cnt; + + private Integer val45std; + + private Double val46max; + + private Double val46min; + + private Double val46avg; + + private Integer val46cnt; + + private Integer val46std; + + private Double val47max; + + private Double val47min; + + private Double val47avg; + + private Integer val47cnt; + + private Integer val47std; + + private Double val48max; + + private Double val48min; + + private Double val48avg; + + private Integer val48cnt; + + private Integer val48std; + + private Double val49max; + + private Double val49min; + + private Double val49avg; + + private Integer val49cnt; + + private Integer val49std; + + private Double val50max; + + private Double val50min; + + private Double val50avg; + + private Integer val50cnt; + + private Integer val50std; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "修改时间") + private LocalDateTime updateTime; +} diff --git a/business/src/main/java/com/fizz/business/domain/ProMatmap.java b/business/src/main/java/com/fizz/business/domain/ProMatmap.java index 1c9f7a0..df53d52 100644 --- a/business/src/main/java/com/fizz/business/domain/ProMatmap.java +++ b/business/src/main/java/com/fizz/business/domain/ProMatmap.java @@ -1,37 +1,41 @@ package com.fizz.business.domain; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.io.Serializable; import java.time.LocalDateTime; @Data -public class ProMatmap { +public class ProMatmap implements Serializable { - @TableField("areaid") - private Integer areaid; + private static final long serialVersionUID = 1L; - @TableField("groupid") - private Integer groupid; + @TableId(value = "pos_idx", type = IdType.NONE) + private Integer posIdx; - @TableField("pos") - private Integer pos; + private String matId; - @TableField("full_place_name") - private String fullPlaceName; + @Schema(description = "设备英文名") + private String positionNameEn; - @TableField("matid") - private String matid; + @Schema(description = "设备中文名") + private String positionNameCn; - @TableField("display_name") - private String displayName; + @Schema(description = "计划id") + private Long planId; - @TableId("l1mapidx") - private Integer l1mapidx; + @Schema(description = "计划号") + private String planNo; - @TableField("updtime") - private LocalDateTime updtime; + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "修改时间") + private LocalDateTime updateTime; } diff --git a/business/src/main/java/com/fizz/business/domain/Segment.java b/business/src/main/java/com/fizz/business/domain/Segment.java new file mode 100644 index 0000000..8472511 --- /dev/null +++ b/business/src/main/java/com/fizz/business/domain/Segment.java @@ -0,0 +1,477 @@ +package com.fizz.business.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 各机张力,电流等架跟踪表 + *

+ * + * @author baomidou + * @since 2023-05-17 + */ +@Getter +@Setter +@TableName("cpg_segment") +@Schema(title = "CpgSegment对象", description = "各机张力,电流等架跟踪表") +public class Segment implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Schema(description = "卷号") + private String entryMatId; + + @Schema(description = "分段id") + private Integer segNo; + + @Schema(description = "计划id") + private Long planId; + + @Schema(description = "计划号") + private String planNo; + + @Schema(description = "开始位置") + private Double startPosition; + + @Schema(description = "结束位置") + private Double endPosition; + + @Schema(description = "长度") + private Double segLength; + + private Integer val1num; + + private Integer val2num; + + private Integer val3num; + + private Integer val4num; + + private Integer val5num; + + private Integer val6num; + + private Integer val7num; + + private Integer val8num; + + private Integer val9num; + + private Integer val10num; + + private Double val1max; + + private Double val1min; + + private Double val1avg; + + private Integer val1cnt; + + private Double val2max; + + private Double val2min; + + private Double val2avg; + + private Integer val2cnt; + + private Double val3max; + + private Double val3min; + + private Double val3avg; + + private Integer val3cnt; + + private Double val4max; + + private Double val4min; + + private Double val4avg; + + private Integer val4cnt; + + private Double val5max; + + private Double val5min; + + private Double val5avg; + + private Integer val5cnt; + + private Double val6max; + + private Double val6min; + + private Double val6avg; + + private Integer val6cnt; + + private Double val7max; + + private Double val7min; + + private Double val7avg; + + private Integer val7cnt; + + private Double val8max; + + private Double val8min; + + private Double val8avg; + + private Integer val8cnt; + + private Double val9max; + + private Double val9min; + + private Double val9avg; + + private Integer val9cnt; + + private Double val10max; + + private Double val10min; + + private Double val10avg; + + private Integer val10cnt; + + private Double val11max; + + private Double val11min; + + private Double val11avg; + + private Integer val11cnt; + + private Double val12max; + + private Double val12min; + + private Double val12avg; + + private Integer val12cnt; + + private Double val13max; + + private Double val13min; + + private Double val13avg; + + private Integer val13cnt; + + private Double val14max; + + private Double val14min; + + private Double val14avg; + + private Integer val14cnt; + + private Double val15max; + + private Double val15min; + + private Double val15avg; + + private Integer val15cnt; + + private Double val16max; + + private Double val16min; + + private Double val16avg; + + private Integer val16cnt; + + private Double val17max; + + private Double val17min; + + private Double val17avg; + + private Integer val17cnt; + + private Double val18max; + + private Double val18min; + + private Double val18avg; + + private Integer val18cnt; + + private Double val19max; + + private Double val19min; + + private Double val19avg; + + private Integer val19cnt; + + private Double val20max; + + private Double val20min; + + private Double val20avg; + + private Integer val20cnt; + + private Double val21max; + + private Double val21min; + + private Double val21avg; + + private Integer val21cnt; + + private Double val22max; + + private Double val22min; + + private Double val22avg; + + private Integer val22cnt; + + private Double val23max; + + private Double val23min; + + private Double val23avg; + + private Integer val23cnt; + + private Double val24max; + + private Double val24min; + + private Double val24avg; + + private Integer val24cnt; + + private Double val25max; + + private Double val25min; + + private Double val25avg; + + private Integer val25cnt; + + private Double val26max; + + private Double val26min; + + private Double val26avg; + + private Integer val26cnt; + + private Double val27max; + + private Double val27min; + + private Double val27avg; + + private Integer val27cnt; + + private Double val28max; + + private Double val28min; + + private Double val28avg; + + private Integer val28cnt; + + private Double val29max; + + private Double val29min; + + private Double val29avg; + + private Integer val29cnt; + + private Double val30max; + + private Double val30min; + + private Double val30avg; + + private Integer val30cnt; + + private Double val31max; + + private Double val31min; + + private Double val31avg; + + private Integer val31cnt; + + private Double val32max; + + private Double val32min; + + private Double val32avg; + + private Integer val32cnt; + + private Double val33max; + + private Double val33min; + + private Double val33avg; + + private Integer val33cnt; + + private Double val34max; + + private Double val34min; + + private Double val34avg; + + private Integer val34cnt; + + private Double val35max; + + private Double val35min; + + private Double val35avg; + + private Integer val35cnt; + + private Double val36max; + + private Double val36min; + + private Double val36avg; + + private Integer val36cnt; + + private Double val37max; + + private Double val37min; + + private Double val37avg; + + private Integer val37cnt; + + private Double val38max; + + private Double val38min; + + private Double val38avg; + + private Integer val38cnt; + + private Double val39max; + + private Double val39min; + + private Double val39avg; + + private Integer val39cnt; + + private Double val40max; + + private Double val40min; + + private Double val40avg; + + private Integer val40cnt; + + private Double val41max; + + private Double val41min; + + private Double val41avg; + + private Integer val41cnt; + + private Double val42max; + + private Double val42min; + + private Double val42avg; + + private Integer val42cnt; + + private Double val43max; + + private Double val43min; + + private Double val43avg; + + private Integer val43cnt; + + private Double val44max; + + private Double val44min; + + private Double val44avg; + + private Integer val44cnt; + + private Double val45max; + + private Double val45min; + + private Double val45avg; + + private Integer val45cnt; + + private Double val46max; + + private Double val46min; + + private Double val46avg; + + private Integer val46cnt; + + private Double val47max; + + private Double val47min; + + private Double val47avg; + + private Integer val47cnt; + + private Double val48max; + + private Double val48min; + + private Double val48avg; + + private Integer val48cnt; + + private Double val49max; + + private Double val49min; + + private Double val49avg; + + private Integer val49cnt; + + private Double val50max; + + private Double val50min; + + private Double val50avg; + + private Integer val50cnt; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; +} diff --git a/business/src/main/java/com/fizz/business/domain/SegmentTotal.java b/business/src/main/java/com/fizz/business/domain/SegmentTotal.java new file mode 100644 index 0000000..87ac806 --- /dev/null +++ b/business/src/main/java/com/fizz/business/domain/SegmentTotal.java @@ -0,0 +1,357 @@ +package com.fizz.business.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 各机张力,电流等架跟踪表 + *

+ * + * @author baomidou + * @since 2023-10-26 + */ +@Getter +@Setter +@TableName("cpg_segment_total") +@Schema(title = "CpgSegmentTotal对象", description = "各机张力,电流等架跟踪表") +public class SegmentTotal implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Schema(description = "卷号") + private String entryMatId; + + @Schema(description = "分段id") + private Integer segNo; + + @Schema(description = "计划id") + private Long planId; + + @Schema(description = "计划号") + private String planNo; + + @Schema(description = "开始位置") + private Double startPosition; + + @Schema(description = "结束位置") + private Double endPosition; + + @Schema(description = "长度") + private Double segLength; + + private Double tval1avg; + + private Double tval2avg; + + private Double tval3avg; + + private Double tval4avg; + + private Double tval5avg; + + private Double tval6avg; + + private Double tval7avg; + + private Double tval8avg; + + private Double tval9avg; + + private Double tval10avg; + + private Double tval11avg; + + private Double tval12avg; + + private Double tval13avg; + + private Double tval14avg; + + private Double tval15avg; + + private Double tval16avg; + + private Double tval17avg; + + private Double tval18avg; + + private Double tval19avg; + + private Double tval20avg; + + private Double tval21avg; + + private Double tval22avg; + + private Double tval23avg; + + private Double tval24avg; + + private Double tval25avg; + + private Double tval26avg; + + private Double tval27avg; + + private Double tval28avg; + + private Double tval29avg; + + private Double tval30avg; + + private Double tval31avg; + + private Double tval32avg; + + private Double tval33avg; + + private Double tval34avg; + + private Double tval35avg; + + private Double tval36avg; + + private Double tval37avg; + + private Double tval38avg; + + private Double tval39avg; + + private Double tval40avg; + + private Double tval41avg; + + private Double tval42avg; + + private Double tval43avg; + + private Double tval44avg; + + private Double tval45avg; + + private Double tval46avg; + + private Double tval47avg; + + private Double tval48avg; + + private Double tval49avg; + + private Double tval50avg; + + private Double tval51avg; + + private Double tval52avg; + + private Double tval53avg; + + private Double tval54avg; + + private Double tval55avg; + + private Double tval56avg; + + private Double tval57avg; + + private Double tval58avg; + + private Double tval59avg; + + private Double tval60avg; + + private Double tval61avg; + + private Double tval62avg; + + private Double tval63avg; + + private Double tval64avg; + + private Double tval65avg; + + private Double tval66avg; + + private Double tval67avg; + + private Double tval68avg; + + private Double tval69avg; + + private Double tval70avg; + + private Double tval71avg; + + private Double tval72avg; + + private Double tval73avg; + + private Double tval74avg; + + private Double tval75avg; + + private Double tval76avg; + + private Double tval77avg; + + private Double tval78avg; + + private Double tval79avg; + + private Double tval80avg; + + private Double tval81avg; + + private Double tval82avg; + + private Double tval83avg; + + private Double tval84avg; + + private Double tval85avg; + + private Double tval86avg; + + private Double tval87avg; + + private Double tval88avg; + + private Double tval89avg; + + private Double tval90avg; + + private Double tval91avg; + + private Double tval92avg; + + private Double tval93avg; + + private Double tval94avg; + + private Double tval95avg; + + private Double tval96avg; + + private Double tval97avg; + + private Double tval98avg; + + private Double tval99avg; + + private Double tval100avg; + + private Double tval101avg; + + private Double tval102avg; + + private Double tval103avg; + + private Double tval104avg; + + private Double tval105avg; + + private Double tval106avg; + + private Double tval107avg; + + private Double tval108avg; + + private Double tval109avg; + + private Double tval110avg; + + private Double tval111avg; + + private Double tval112avg; + + private Double tval113avg; + + private Double tval114avg; + + private Double tval115avg; + + private Double tval116avg; + + private Double tval117avg; + + private Double tval118avg; + + private Double tval119avg; + + private Double tval120avg; + + private Double tval121avg; + + private Double tval122avg; + + private Double tval123avg; + + private Double tval124avg; + + private Double tval125avg; + + private Double tval126avg; + + private Double tval127avg; + + private Double tval128avg; + + private Double tval129avg; + + private Double tval130avg; + + private Double tval131avg; + + private Double tval132avg; + + private Double tval133avg; + + private Double tval134avg; + + private Double tval135avg; + + private Double tval136avg; + + private Double tval137avg; + + private Double tval138avg; + + private Double tval139avg; + + private Double tval140avg; + + private Double tval141avg; + + private Double tval142avg; + + private Double tval143avg; + + private Double tval144avg; + + private Double tval145avg; + + private Double tval146avg; + + private Double tval147avg; + + private Double tval148avg; + + private Double tval149avg; + + private Double tval150avg; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; +} diff --git a/business/src/main/java/com/fizz/business/dto/CoilHeadDTO.java b/business/src/main/java/com/fizz/business/dto/CoilHeadDTO.java new file mode 100644 index 0000000..7edb79f --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/CoilHeadDTO.java @@ -0,0 +1,19 @@ +package com.fizz.business.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class CoilHeadDTO implements Serializable { + + private boolean first; + private String matId; + private String planNo; + private Long planId; + private double pos; + private int posIdx; + private int porIdx; +} diff --git a/business/src/main/java/com/fizz/business/dto/CoilMeasureVO.java b/business/src/main/java/com/fizz/business/dto/CoilMeasureVO.java new file mode 100644 index 0000000..0ae1603 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/CoilMeasureVO.java @@ -0,0 +1,32 @@ +package com.fizz.business.dto; + +import cn.hutool.core.lang.Pair; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class CoilMeasureVO implements Serializable { + + @Schema(description = "参数名") + private String valueName; + + @Schema(description = "设定值") + private String definedValue; + + @Schema(description = "最大值") + private String maxValue; + + @Schema(description = "最小值") + private String minValue; + + private List> data; +} diff --git a/business/src/main/java/com/fizz/business/dto/CoilMergeEvent.java b/business/src/main/java/com/fizz/business/dto/CoilMergeEvent.java new file mode 100644 index 0000000..de335d0 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/CoilMergeEvent.java @@ -0,0 +1,22 @@ +package com.fizz.business.dto; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +/** + * @author chenhao + * @date 2023/7/26 + */ +@Getter +@Setter +@Builder +public class CoilMergeEvent { + private String mainMatId; + private String mainPlanNo; + private Long mainPlanId; + private String matId; + private String planNo; + private Long planId; + private double coilLength; +} diff --git a/business/src/main/java/com/fizz/business/dto/CoilPositionDTO.java b/business/src/main/java/com/fizz/business/dto/CoilPositionDTO.java new file mode 100644 index 0000000..c50cf97 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/CoilPositionDTO.java @@ -0,0 +1,39 @@ +package com.fizz.business.dto; + +import lombok.*; + +import java.io.Serializable; +import java.util.List; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CoilPositionDTO implements Serializable { + + private List coilStripLocationList; + private double entryLoopLen; + private double exitLoopLen; + private double entryLoopPer; // 入口活套套量百分比 + private double exitLoopLPer; // 出口活套套量百分比 + private Integer porId; + private Integer trId; + private Double entrySpeed; // 入口段速度 + private Double technologySpeed; // 工艺段速度 + private Double exitSpeed; // 出口段速度 + private List matMapList; + + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CoilStripLocation { + private String matId; + private String planNo; + private Long planId; + private double stripLocation; + private Integer porId; + } +} diff --git a/business/src/main/java/com/fizz/business/dto/EventVO.java b/business/src/main/java/com/fizz/business/dto/EventVO.java new file mode 100644 index 0000000..4b12a7c --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/EventVO.java @@ -0,0 +1,18 @@ +package com.fizz.business.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class EventVO implements Serializable { + + @Schema(description = "时间") + private String time; + @Schema(description = "事件描述") + private String eventDesc; + + @Schema(description = "错误信息") + private String errorMsg; +} diff --git a/business/src/main/java/com/fizz/business/dto/ExitCoilInfoDTO.java b/business/src/main/java/com/fizz/business/dto/ExitCoilInfoDTO.java new file mode 100644 index 0000000..9c58acd --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/ExitCoilInfoDTO.java @@ -0,0 +1,23 @@ +package com.fizz.business.dto; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +@Builder +public class ExitCoilInfoDTO implements Serializable { + + private Long planId; + private double startPos; + private double endPos; + private double exitCutLength; + private String entryMatId; + private String exitMatId; + private boolean separateFlag; + private boolean lastFlag; + private int subNum; +} diff --git a/business/src/main/java/com/fizz/business/dto/GroupVO.java b/business/src/main/java/com/fizz/business/dto/GroupVO.java new file mode 100644 index 0000000..7d78ce6 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/GroupVO.java @@ -0,0 +1,17 @@ +package com.fizz.business.dto; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class GroupVO { + @Schema(description = "时间") + private String time; + @Schema(description = "班组") + private String groupNo; + @Schema(description = "当班电单耗") + private String electricityUnit; + @Schema(description = "当班产量") + private String yield; +} diff --git a/business/src/main/java/com/fizz/business/dto/L1CoilExitCutDTO.java b/business/src/main/java/com/fizz/business/dto/L1CoilExitCutDTO.java new file mode 100644 index 0000000..868e4d1 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/L1CoilExitCutDTO.java @@ -0,0 +1,26 @@ +package com.fizz.business.dto; + +import lombok.*; + +import java.io.Serializable; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class L1CoilExitCutDTO implements Serializable { + + // 出口剪切位置(卷取机编号) + private Integer exitCutPosition; + + // 出口剪切计数 + private Integer exitCutCounter; + // 出口剪切类型 + private Integer exitCutType; + + // 卷取直径 + private double coilDiameter; + // 剪切时,在线卷取实际长度 + private double exitCutLength; +} diff --git a/business/src/main/java/com/fizz/business/dto/L1CoilHeadCutDTO.java b/business/src/main/java/com/fizz/business/dto/L1CoilHeadCutDTO.java new file mode 100644 index 0000000..6881f27 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/L1CoilHeadCutDTO.java @@ -0,0 +1,22 @@ +package com.fizz.business.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class L1CoilHeadCutDTO implements Serializable { + + // 剪切位置(开卷机编号) + private Integer headCutPosition; + + // 剪切信号 + private Integer headCutCounter; + // 剪切类型 + private Integer headCutType; + + // 剪切总长 + private double headCutLength; +} diff --git a/business/src/main/java/com/fizz/business/dto/L1CoilLineMeasureDTO.java b/business/src/main/java/com/fizz/business/dto/L1CoilLineMeasureDTO.java new file mode 100644 index 0000000..a209e46 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/L1CoilLineMeasureDTO.java @@ -0,0 +1,239 @@ +package com.fizz.business.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class L1CoilLineMeasureDTO implements Serializable { + + // 工作开卷机 + private Integer workPor; + // 工作卷取机 + private Integer workTr; + + // 最近一次过焊缝长度 + private double stripLocation; + // 入口活套百分比 + private double entryLoopPercent; + // 入口活套长度 + private double entryLoopLength; + // 出口活套百分比 + private double exitLoopPercent; + // 出口活套长度 + private double exitLoopLength; + // 卷取长度 + private double coilLength; + // 入口段速度 + private double inSpeed; + // 工艺段速度 + private double unitSpeed; + // 出口段速度 + private double outSpeed; + // 带钢在线卷重[KG] + private double onlineWt; + + private double val1; + private double val2; + private double val3; + private double val4; + private double val5; + private double val6; + private double val7; + private double val8; + private double val9; + private double val10; + private double val11; + private double val12; + private double val13; + private double val14; + private double val15; + private double val16; + private double val17; + private double val18; + private double val19; + private double val20; + private double val21; + private double val22; + private double val23; + private double val24; + private double val25; + private double val26; + private double val27; + private double val28; + private double val29; + private double val30; + private double val31; + private double val32; + private double val33; + private double val34; + private double val35; + private double val36; + private double val37; + private double val38; + private double val39; + private double val40; + private double val41; + private double val42; + private double val43; + private double val44; + private double val45; + private double val46; + private double val47; + private double val48; + private double val49; + private double val50; + + private double tval1; + private double tval2; + private double tval3; + private double tval4; + private double tval5; + private double tval6; + private double tval7; + private double tval8; + private double tval9; + private double tval10; + private double tval11; + private double tval12; + private double tval13; + private double tval14; + private double tval15; + private double tval16; + private double tval17; + private double tval18; + private double tval19; + private double tval20; + private double tval21; + private double tval22; + private double tval23; + private double tval24; + private double tval25; + private double tval26; + private double tval27; + private double tval28; + private double tval29; + private double tval30; + private double tval31; + private double tval32; + private double tval33; + private double tval34; + private double tval35; + private double tval36; + private double tval37; + private double tval38; + private double tval39; + private double tval40; + private double tval41; + private double tval42; + private double tval43; + private double tval44; + private double tval45; + private double tval46; + private double tval47; + private double tval48; + private double tval49; + private double tval50; + private double tval51; + private double tval52; + private double tval53; + private double tval54; + private double tval55; + private double tval56; + private double tval57; + private double tval58; + private double tval59; + private double tval60; + private double tval61; + private double tval62; + private double tval63; + private double tval64; + private double tval65; + private double tval66; + private double tval67; + private double tval68; + private double tval69; + private double tval70; + private double tval71; + private double tval72; + private double tval73; + private double tval74; + private double tval75; + private double tval76; + private double tval77; + private double tval78; + private double tval79; + private double tval80; + private double tval81; + private double tval82; + private double tval83; + private double tval84; + private double tval85; + private double tval86; + private double tval87; + private double tval88; + private double tval89; + private double tval90; + private double tval91; + private double tval92; + private double tval93; + private double tval94; + private double tval95; + private double tval96; + private double tval97; + private double tval98; + private double tval99; + private double tval100; + private double tval101; + private double tval102; + private double tval103; + private double tval104; + private double tval105; + private double tval106; + private double tval107; + private double tval108; + private double tval109; + private double tval110; + private double tval111; + private double tval112; + private double tval113; + private double tval114; + private double tval115; + private double tval116; + private double tval117; + private double tval118; + private double tval119; + private double tval120; + private double tval121; + private double tval122; + private double tval123; + private double tval124; + private double tval125; + private double tval126; + private double tval127; + private double tval128; + private double tval129; + private double tval130; + private double tval131; + private double tval132; + private double tval133; + private double tval134; + private double tval135; + private double tval136; + private double tval137; + private double tval138; + private double tval139; + private double tval140; + private double tval141; + private double tval142; + private double tval143; + private double tval144; + private double tval145; + private double tval146; + private double tval147; + private double tval148; + private double tval149; + private double tval150; +} diff --git a/business/src/main/java/com/fizz/business/dto/L1CoilOperateDTO.java b/business/src/main/java/com/fizz/business/dto/L1CoilOperateDTO.java new file mode 100644 index 0000000..87ed76e --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/L1CoilOperateDTO.java @@ -0,0 +1,26 @@ +package com.fizz.business.dto; + + +import lombok.*; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class L1CoilOperateDTO { + + // 开卷机上卷位置 + private Integer porOnlinePosition; + // 开卷机甩尾位置 + private Integer porPayOverPosition; + // 卷取机卸卷位置 + private Integer trUnloadPosition; + + // 开卷机上卷计数器 + private Integer porOnlineCounter; + // 开卷机甩尾计数器 + private Integer porPayOverCounter; + // 卷取机卸卷计数器 + private Integer trUnloadCounter; +} \ No newline at end of file diff --git a/business/src/main/java/com/fizz/business/dto/L1CoilPointDataDTO.java b/business/src/main/java/com/fizz/business/dto/L1CoilPointDataDTO.java new file mode 100644 index 0000000..14240bd --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/L1CoilPointDataDTO.java @@ -0,0 +1,266 @@ +package com.fizz.business.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class L1CoilPointDataDTO implements Serializable { + + //============================出口剪切============================ + // 出口剪切位置(卷取机编号) + private Integer exitCutPosition; + // 出口剪切计数 + private Integer exitCutCounter; + // 出口剪切类型 + private Integer exitCutType; + // 卷取直径 + private double coilDiameter; + // 剪切时,在线卷取实际长度 + private double exitCutLength; + + //============================上卷、甩尾、卸卷============================ + // 开卷机上卷位置 + private Integer porOnlinePosition; + // 开卷机甩尾位置 + private Integer porPayOverPosition; + // 卷取机卸卷位置 + private Integer trUnloadPosition; + // 开卷机上卷计数器 + private Integer porOnlineCounter; + // 开卷机甩尾计数器 + private Integer porPayOverCounter; + // 卷取机卸卷计数器 + private Integer trUnloadCounter; + + //============================焊缝跟踪============================ + // 工作开卷机 + private Integer workPor; + // 工作卷取机 + private Integer workTr; + + // 最近一次过焊缝长度 + private double stripLocation; + // 入口活套百分比 + private double entryLoopPercent; + // 入口活套长度 + private double entryLoopLength; + // 出口活套百分比 + private double exitLoopPercent; + // 出口活套长度 + private double exitLoopLength; + // 卷取长度 + private double coilLength; + // 入口段速度 + private double inSpeed; + // 工艺段速度 + private double unitSpeed; + // 出口段速度 + private double outSpeed; + // 带钢在线卷重[KG] + private double onlineWt; + + private double val1; + private double val2; + private double val3; + private double val4; + private double val5; + private double val6; + private double val7; + private double val8; + private double val9; + private double val10; + private double val11; + private double val12; + private double val13; + private double val14; + private double val15; + private double val16; + private double val17; + private double val18; + private double val19; + private double val20; + private double val21; + private double val22; + private double val23; + private double val24; + private double val25; + private double val26; + private double val27; + private double val28; + private double val29; + private double val30; + private double val31; + private double val32; + private double val33; + private double val34; + private double val35; + private double val36; + private double val37; + private double val38; + private double val39; + private double val40; + private double val41; + private double val42; + private double val43; + private double val44; + private double val45; + private double val46; + private double val47; + private double val48; + private double val49; + private double val50; + + private double tval1; + private double tval2; + private double tval3; + private double tval4; + private double tval5; + private double tval6; + private double tval7; + private double tval8; + private double tval9; + private double tval10; + private double tval11; + private double tval12; + private double tval13; + private double tval14; + private double tval15; + private double tval16; + private double tval17; + private double tval18; + private double tval19; + private double tval20; + private double tval21; + private double tval22; + private double tval23; + private double tval24; + private double tval25; + private double tval26; + private double tval27; + private double tval28; + private double tval29; + private double tval30; + private double tval31; + private double tval32; + private double tval33; + private double tval34; + private double tval35; + private double tval36; + private double tval37; + private double tval38; + private double tval39; + private double tval40; + private double tval41; + private double tval42; + private double tval43; + private double tval44; + private double tval45; + private double tval46; + private double tval47; + private double tval48; + private double tval49; + private double tval50; + private double tval51; + private double tval52; + private double tval53; + private double tval54; + private double tval55; + private double tval56; + private double tval57; + private double tval58; + private double tval59; + private double tval60; + private double tval61; + private double tval62; + private double tval63; + private double tval64; + private double tval65; + private double tval66; + private double tval67; + private double tval68; + private double tval69; + private double tval70; + private double tval71; + private double tval72; + private double tval73; + private double tval74; + private double tval75; + private double tval76; + private double tval77; + private double tval78; + private double tval79; + private double tval80; + private double tval81; + private double tval82; + private double tval83; + private double tval84; + private double tval85; + private double tval86; + private double tval87; + private double tval88; + private double tval89; + private double tval90; + private double tval91; + private double tval92; + private double tval93; + private double tval94; + private double tval95; + private double tval96; + private double tval97; + private double tval98; + private double tval99; + private double tval100; + private double tval101; + private double tval102; + private double tval103; + private double tval104; + private double tval105; + private double tval106; + private double tval107; + private double tval108; + private double tval109; + private double tval110; + private double tval111; + private double tval112; + private double tval113; + private double tval114; + private double tval115; + private double tval116; + private double tval117; + private double tval118; + private double tval119; + private double tval120; + private double tval121; + private double tval122; + private double tval123; + private double tval124; + private double tval125; + private double tval126; + private double tval127; + private double tval128; + private double tval129; + private double tval130; + private double tval131; + private double tval132; + private double tval133; + private double tval134; + private double tval135; + private double tval136; + private double tval137; + private double tval138; + private double tval139; + private double tval140; + private double tval141; + private double tval142; + private double tval143; + private double tval144; + private double tval145; + private double tval146; + private double tval147; + private double tval148; + private double tval149; + private double tval150; +} diff --git a/business/src/main/java/com/fizz/business/dto/L3CoilDefectDTO.java b/business/src/main/java/com/fizz/business/dto/L3CoilDefectDTO.java new file mode 100644 index 0000000..59bdd90 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/L3CoilDefectDTO.java @@ -0,0 +1,27 @@ +package com.fizz.business.dto; + +import lombok.*; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class L3CoilDefectDTO implements Serializable { + + private Long defectId; + private String defectCode; + private String defectName; + private String defectDesc; + private String planNo; + private String matNo; + private String matSubNo; + private String workUnitCode; + private String workProcessCode; + private String operate; + private LocalDateTime doTime; + private String doUser; +} diff --git a/business/src/main/java/com/fizz/business/dto/LimitData.java b/business/src/main/java/com/fizz/business/dto/LimitData.java new file mode 100644 index 0000000..95810d1 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/LimitData.java @@ -0,0 +1,17 @@ +package com.fizz.business.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class LimitData implements Serializable { + private Double upper; + private Double lower; +} diff --git a/business/src/main/java/com/fizz/business/dto/MatmapDTO.java b/business/src/main/java/com/fizz/business/dto/MatmapDTO.java new file mode 100644 index 0000000..592d454 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/MatmapDTO.java @@ -0,0 +1,17 @@ +package com.fizz.business.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class MatmapDTO implements Serializable { + private String matId; + private String planNo; + private Long planId; + private String positionNameCn; + private String positionNameEn; + private int posIdx; +} diff --git a/business/src/main/java/com/fizz/business/dto/PdiPlanSubDTO.java b/business/src/main/java/com/fizz/business/dto/PdiPlanSubDTO.java new file mode 100644 index 0000000..ed72cc9 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/PdiPlanSubDTO.java @@ -0,0 +1,60 @@ +package com.fizz.business.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +/** + * 子计划数据 + * + * @author chenhao + * @date 2023/7/26 + */ +@Getter +@Setter +public class PdiPlanSubDTO implements Serializable { + + @Schema(description = "成品卷") + private String exitMatId; + + @Schema(description = "来料卷") + private String entryMatId; + + @Schema(description = "原料卷号") + private String originMatId; + + @Schema(description = "开始位置") + private Double startPosition; + + @Schema(description = "结束位置") + private Double endPosition; + + @Schema(description = "产品类型") + private String prodCode; + + @Schema(description = "钢种") + private String steelGrade; + + @Schema(description = "来料厚度") + private Double entryThick; + + @Schema(description = "来料宽度") + private Double entryWidth; + + @Schema(description = "来料长度") + private Double entryLength; + + @Schema(description = "来料重量") + private Double entryWeight; + + @Schema(description = "成品长度") + private Double exitLength; + + @Schema(description = "理论重量") + private Double theoryWeight; + + @Schema(description = "实际重量") + private Double actualWeight; +} diff --git a/business/src/main/java/com/fizz/business/dto/PdoExCoilDTO.java b/business/src/main/java/com/fizz/business/dto/PdoExCoilDTO.java new file mode 100644 index 0000000..c8646b3 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/PdoExCoilDTO.java @@ -0,0 +1,51 @@ +package com.fizz.business.dto; + +import com.fizz.business.domain.PdoExcoil; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +/** + * 产出数据 + * + * @author chenhao + * @date 2023/7/26 + */ +@Getter +@Setter +public class PdoExCoilDTO extends PdoExcoil implements Serializable { + + @Schema(description = "机组号") + private String unitCode; + @Schema(description = "工序号") + private String processCode; + @Schema(description = "是否尾卷") + private boolean lastFlag; + @Schema(description = "是否分卷") + private boolean separateFlag; + @Schema(description = "是否并卷") + private boolean mergeFlag; + @Schema(description = "并卷数") + private int mergeNum; + @Schema(description = "计划来源:L3-L3计划,MANUAL-人工") + private String planOrigin; + @Schema(description = "并卷数据") + private List subCoilList; + @Schema(description = "子计划数据") + private List subPlanList; + + @Schema(description = "是否实验卷") + private String isExperiment; + + @Schema(description = "实验种类") + private String experimentType; + + @Schema(description = "工艺规程id") + private Long setupId; + + @Schema(description = "工艺规程名称") + private String setupName; +} diff --git a/business/src/main/java/com/fizz/business/dto/PdoExCoilSubDTO.java b/business/src/main/java/com/fizz/business/dto/PdoExCoilSubDTO.java new file mode 100644 index 0000000..41f661b --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/PdoExCoilSubDTO.java @@ -0,0 +1,74 @@ +package com.fizz.business.dto; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 并卷数据 + * + * @author chenhao + * @date 2023/7/26 + */ +@Getter +@Setter +public class PdoExCoilSubDTO implements Serializable { + + @Schema(description = "成品卷") + private String exitMatId; + + @Schema(description = "来料卷") + private String entryMatId; + + @Schema(description = "开始位置") + private Double startPosition; + + @Schema(description = "结束位置") + private Double endPosition; + + @Schema(description = "计划id") + private Long planId; + + @Schema(description = "计划号") + private String planNo; + + @Schema(description = "产品类型") + private String prodCode; + + @Schema(description = "钢种") + private String steelGrade; + + @Schema(description = "来料厚度") + private Double entryThick; + + @Schema(description = "来料宽带") + private Double entryWidth; + + @Schema(description = "来料长度") + private Double entryLength; + + @Schema(description = "来料重量") + private Double entryWeight; + + @Schema(description = "成品长度") + private Double exitLength; + + @Schema(description = "理论重量") + private Double theoryWeight; + + @Schema(description = "实际重量") + private Double actualWeight; + + @Schema(description = "上线时间") + private LocalDateTime onlineTime; + + @Schema(description = "开始时间") + private LocalDateTime startTime; + + @Schema(description = "结束时间") + private LocalDateTime endTime; +} diff --git a/business/src/main/java/com/fizz/business/dto/PointConfigDTO.java b/business/src/main/java/com/fizz/business/dto/PointConfigDTO.java new file mode 100644 index 0000000..0f08dbd --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/PointConfigDTO.java @@ -0,0 +1,30 @@ +package com.fizz.business.dto; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +/** + * 点位参数配置 + * + * @author chenhao + * @date 2023/05/18 + */ +@Getter +@Setter +public class PointConfigDTO implements Serializable { + + private String point; + + private String param; + + private String desc; + + @JSONField(name = "device_name") + private String deviceName; + + @JSONField(name = "show_type") + private String showType; +} diff --git a/business/src/main/java/com/fizz/business/dto/PointEvent.java b/business/src/main/java/com/fizz/business/dto/PointEvent.java new file mode 100644 index 0000000..7876fbf --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/PointEvent.java @@ -0,0 +1,19 @@ +package com.fizz.business.dto; + +import lombok.Data; + +import java.util.Map; + +@Data +public class PointEvent { + + private Map data; + + private Long gatewayTime; + + private String pushId; + + private Long sourceMsgTime; + + private String deviceId; +} diff --git a/business/src/main/java/com/fizz/business/dto/RequestInfo.java b/business/src/main/java/com/fizz/business/dto/RequestInfo.java new file mode 100644 index 0000000..6a25c8b --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/RequestInfo.java @@ -0,0 +1,20 @@ +package com.fizz.business.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 请求信息 + * @author chenhao + * @date 2023/04/19 + */ +@Data +public class RequestInfo implements Serializable { + private String ip; + private String url; + private String httpMethod; + private String classMethod; + private Object requestParams; +} + diff --git a/business/src/main/java/com/fizz/business/dto/SegValue.java b/business/src/main/java/com/fizz/business/dto/SegValue.java new file mode 100644 index 0000000..3a67098 --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/SegValue.java @@ -0,0 +1,17 @@ +package com.fizz.business.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class SegValue implements Serializable { + private double max; + private double min; + private double avg; + private double std; + private int cnt; + private double sum; +} diff --git a/business/src/main/java/com/fizz/business/dto/SegmentDTO.java b/business/src/main/java/com/fizz/business/dto/SegmentDTO.java new file mode 100644 index 0000000..9145afe --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/SegmentDTO.java @@ -0,0 +1,26 @@ +package com.fizz.business.dto; + +import lombok.Data; + +import java.util.Map; + +@Data +public class SegmentDTO { + + private boolean first; + private Long planId; + private String planNo; + private String coilID; + private String enCoilID; + private String exCoilID; + //MATID_Type matId; + private int segNo; + private double segLen; + private double startPos;//位于带钢的起始位置 + private double endPos; + private double headPos;//位于全线的位置 + private double tailPos; + private int headPosNum; + private int tailPosNum; + private Map segValMap; +} diff --git a/business/src/main/java/com/fizz/business/dto/WsCoilMeasureDTO.java b/business/src/main/java/com/fizz/business/dto/WsCoilMeasureDTO.java new file mode 100644 index 0000000..53f059d --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/WsCoilMeasureDTO.java @@ -0,0 +1,33 @@ +package com.fizz.business.dto; + +import lombok.*; + +import java.io.Serializable; +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class WsCoilMeasureDTO implements Serializable { + + private String partName; + private String matId; + private String devName; + private String devDesc; + private List data; + + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ValueDTO { + private String point; + private String valueName; + private String value; + // 0-APP\WEB都显示;1-WEB显示;2-APP显示 + private String showType; + private boolean needAlarm; + } +} diff --git a/business/src/main/java/com/fizz/business/dto/WsSignalMsgDTO.java b/business/src/main/java/com/fizz/business/dto/WsSignalMsgDTO.java new file mode 100644 index 0000000..65000ed --- /dev/null +++ b/business/src/main/java/com/fizz/business/dto/WsSignalMsgDTO.java @@ -0,0 +1,23 @@ +package com.fizz.business.dto; + +import com.fizz.business.form.OperateMatForm; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +/** + * @author chenhao + * @date 2023/8/29 + */ +@Getter +@Setter +public class WsSignalMsgDTO extends OperateMatForm { + + @Schema(description = "ONLINE-钢卷上线,UNLOAD-手动卸卷,ALL_RETURN-整卷回退,HALF_RETURN-半卷回退,BLOCK-卸卷并封闭,THROW_TAIL-甩尾") + private String operation; + + @Schema(description = "1-页面手动操作") + private int autoFlag; + @Schema(description = "虚拟卷标识") + private boolean virtualPlanFlag; +} diff --git a/business/src/main/java/com/fizz/business/form/AddDefectForm.java b/business/src/main/java/com/fizz/business/form/AddDefectForm.java new file mode 100644 index 0000000..0314be5 --- /dev/null +++ b/business/src/main/java/com/fizz/business/form/AddDefectForm.java @@ -0,0 +1,42 @@ +package com.fizz.business.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +@Getter +@Setter +public class AddDefectForm implements Serializable { + @NotNull(message = "计划id不能为空") + @Schema(description = "计划id") + private Long planId; + @NotBlank(message = "计划号不能为空") + @Schema(description = "计划号") + private String planNo; + @NotBlank(message = "钢卷号不能为空") + @Schema(description = "钢卷号") + private String entryMatId; + + @Valid + @Schema(description = "缺陷列表") + private List defectList; + + @Getter + @Setter + public static class DefectInfo { + @NotBlank(message = "缺陷代码不能为空") + @Schema(description = "缺陷代码") + private String defectCode; + @NotBlank(message = "缺陷名称不能为空") + @Schema(description = "缺陷名称") + private String defectName; + @Schema(description = "缺陷描述") + private String defectDesc; + } +} diff --git a/business/src/main/java/com/fizz/business/form/AdjustPosForm.java b/business/src/main/java/com/fizz/business/form/AdjustPosForm.java new file mode 100644 index 0000000..3a55754 --- /dev/null +++ b/business/src/main/java/com/fizz/business/form/AdjustPosForm.java @@ -0,0 +1,26 @@ +package com.fizz.business.form; + +import com.fizz.business.constants.enums.DeviceEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 位置调整form + * + * @author chenhao + * @date 2023/04/27 + */ +@Getter +@Setter +public class AdjustPosForm implements Serializable { + @NotNull(message = "目标位置不存在") + @Schema(description = "目标位置") + private DeviceEnum targetPos; + @NotNull(message = "当前位置不存在") + @Schema(description = "当前位置") + private DeviceEnum currentPos; +} diff --git a/business/src/main/java/com/fizz/business/form/CalcPdiPlanForm.java b/business/src/main/java/com/fizz/business/form/CalcPdiPlanForm.java index b1d2a07..0163bb7 100644 --- a/business/src/main/java/com/fizz/business/form/CalcPdiPlanForm.java +++ b/business/src/main/java/com/fizz/business/form/CalcPdiPlanForm.java @@ -3,42 +3,114 @@ package com.fizz.business.form; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.List; @Data public class CalcPdiPlanForm { - @Schema(description = "多火轧制次数") - private Integer operid; + private Long id; // 主键ID - @Schema(description = "轧制模式 1轧制力 2延伸率") - private Integer operMode; - - @Schema(description = "钢种") - private String grade; - - @Schema(description = "卷ID") - private String coilid; - - @Schema(description = "热轧卷ID") - private String hotCoilid; - - @Schema(description = "道次数") - private Integer passno; - - @Schema(description = "入口宽度") - private Double entryWidth; - - @Schema(description = "退火厚度") - private Double annealThick; - - @Schema(description = "入口厚度") - private Double entryThick; - - @Schema(description = "出口厚度") - private Double exitThick; - - @Schema(description = "设定值列表") - List lists; + private Integer seqid; // 主键ID + private String coilid; // 钢卷号 + private Integer picklingCount; // 酸洗次数 + private Integer dummyCoilFlag; // 虚卷标识 + private Integer seqno; // 顺序号 + private Integer status; // 状态 + private String planid; // 计划ID + private String planType; // 计划类型 + private BigDecimal yieldPoint; // 屈服点 + private BigDecimal entryWeight; // 入口重量(t) + private BigDecimal entryThick; // 入口厚度(mm) + private BigDecimal entryWidth; // 入口宽度(mm) + private BigDecimal entryLength; // 入口长度(mm) + private BigDecimal entryOuterDiameter; // 入口外径(mm) + private BigDecimal entryInnerDiameter; // 入口内径(mm) + private BigDecimal exitInnerDiameter; // 出口内径(mm) + private String steelGrade; // 钢种 + private String exitCoilid; // 出口卷号 + private Integer tlvFlag; // 张力平整标识 + private String orderNo; // 订单号 + private String custommerCode; // 客户代码 + private BigDecimal orderThick; // 订单厚度(mm) + private BigDecimal orderWidth; // 订单宽度(mm) + private BigDecimal orderLenLow; // 订单长度下限(mm) + private BigDecimal orderLenUp; // 订单长度上限(mm) + private BigDecimal orderWt; // 订单重量(t) + private BigDecimal orderWtLow; // 订单重量下限(t) + private BigDecimal orderWtUp; // 订单重量上限(t) + private BigDecimal orderMetCoatTop; // 订单镀层上 + private BigDecimal orderMetCoatBot; // 订单镀层下 + private String finalUse; // 最终用途 + private String hotCoilCode; // 热卷代码 + private BigDecimal exitLengthTar; // 出口目标长度(mm) + private BigDecimal exitLengthTolMax; // 出口长度公差最大值(mm) + private BigDecimal exitLengthTolMin; // 出口长度公差最小值(mm) + private BigDecimal exitThickTar; // 出口目标厚度(mm) + private BigDecimal exitThickTolMax; // 出口厚度公差最大值(mm) + private BigDecimal exitThickTolMin; // 出口厚度公差最小值(mm) + private BigDecimal exitWidthTar; // 出口目标宽度(mm) + private BigDecimal exitWidthTolMax; // 出口宽度公差最大值(mm) + private BigDecimal exitWidthTolMin; // 出口宽度公差最小值(mm) + private String nextWholeBacklogCode; // 下道全流程积压代码 + private String prevWholeBacklogCode; // 上道全流程积压代码 + private String exitWtMode; // 出口重量模式 + private Integer splitNum; // 分卷数量 + private BigDecimal exitWeight1; // 出口重量1 + private BigDecimal exitWeight2; // 出口重量2 + private BigDecimal exitWeight3; // 出口重量3 + private BigDecimal exitWeight4; // 出口重量4 + private BigDecimal exitWeight5; // 出口重量5 + private BigDecimal exitWeight6; // 出口重量6 + private String headSampleMode; // 头部取样模式 + private String headSamplePosition; // 头部取样位置 + private BigDecimal headSampleLength; // 头部取样长度(mm) + private String headSamplePlace; // 头部取样地点 + private Integer headSampleNum; // 头部取样数量 + private String tailSampleMode; // 尾部取样模式 + private String tailSamplePosition; // 尾部取样位置 + private BigDecimal tailSampleLength; // 尾部取样长度(mm) + private String tailSamplePlace; // 尾部取样地点 + private Integer tailSampleNum; // 尾部取样数量 + private LocalDateTime timestamp; // 时间戳 + private LocalDateTime onlineDate; // 上线时间 + private LocalDateTime startDate; // 开始时间 + private LocalDateTime endDate; // 结束时间 + private LocalDateTime furInDate; // 进炉时间 + private LocalDateTime furOutDate; // 出炉时间 + private LocalDateTime createTime; // 创建时间 + private LocalDateTime updateTime; // 更新时间 + private String surfaceVice; // 副面 + private String weldCode; // 焊缝代码 + private Integer spmFlag; // SPM标识 + private BigDecimal spmElongation; // SPM延伸率(%) + private BigDecimal spmRollforce; // SPM轧制力 + private String spmProcessType; // SPM工艺类型 + private String spmControlMode; // SPM控制模式 + private BigDecimal spmBendingForce; // SPM弯曲力 + private BigDecimal spmCrimpingRollMesh; // SPM咬入辊目 + private BigDecimal spmBillyRollMesh; // SPM精轧辊目 + private Integer trimFlag; // 切边标识 + private String tlvMode; // 张力平整模式 + private BigDecimal tlvElongation; // 张力平整延伸率(%) + private Integer chromating; // 钝化标识 + private String coatingCode; // 镀层代码 + private Integer oilingFlag; // 涂油标识 + private String oilingType; // 涂油类型 + private BigDecimal oilingTop; // 涂油上 + private BigDecimal oilingBottom; // 涂油下 + private String heatCycle; // 热循环 + private String coatingSelection; // 镀层选择 + private String coatingType; // 镀层类型 + private String chemTreatMode; // 化学处理模式 + private BigDecimal aimWeightTop; // 目标重量上 + private BigDecimal aimWeightBottom; // 目标重量下 + private BigDecimal maxTolWeightTop; // 最大公差重量上 + private BigDecimal maxTolWeightBottom; // 最大公差重量下 + private BigDecimal headendGaugeLength; // 头端测厚长度(mm) + private BigDecimal tailendGaugeLength; // 尾端测厚长度(mm) + private String origin; // 产地 + private String originCoilid; // 原卷号 } diff --git a/business/src/main/java/com/fizz/business/form/ChangePlanStatusForm.java b/business/src/main/java/com/fizz/business/form/ChangePlanStatusForm.java index 928334f..68776f0 100644 --- a/business/src/main/java/com/fizz/business/form/ChangePlanStatusForm.java +++ b/business/src/main/java/com/fizz/business/form/ChangePlanStatusForm.java @@ -1,5 +1,6 @@ package com.fizz.business.form; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -20,16 +21,13 @@ import java.io.Serializable; public class ChangePlanStatusForm implements Serializable { @NotNull(message = "状态变更类型不能为空") - @Schema(description="ONLINE-钢卷上线,UNLOAD-手动卸卷,PRODUCT-生产完成") + @Schema(description = "ONLINE-钢卷上线,UNLOAD-手动卸卷,ALL_RETURN-整卷回退,PRODUCING-生产中,HALF_RETURN-半卷回退,PRODUCT-生产完成,BLOCK-卸卷并封闭") private String operation; - @NotNull(message = "计划id不能为空") - @Schema(description="主键id") + @Schema(description = "计划id集合") private Long id; - - @NotNull(message = "钢卷号不能为空") - @Schema(description="钢卷号") - private String coilId; - - + @Schema(description = "半卷回退新卷号") + private String returnMatId; + @Schema(description = "回退重量") + private Double returnWeight; } diff --git a/business/src/main/java/com/fizz/business/form/ConfirmAlarmForm.java b/business/src/main/java/com/fizz/business/form/ConfirmAlarmForm.java new file mode 100644 index 0000000..84d3b3d --- /dev/null +++ b/business/src/main/java/com/fizz/business/form/ConfirmAlarmForm.java @@ -0,0 +1,24 @@ +package com.fizz.business.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@Getter +@Setter +public class ConfirmAlarmForm implements Serializable { + + @NotNull(message = "报警id不能为空") + @Schema(description = "报警id") + private Long id; + + @NotNull(message = "状态不能为空") + @Schema(description = "状态") + private String status; + + @Schema(description = "备注") + private String alarmRemark; +} diff --git a/business/src/main/java/com/fizz/business/form/CrmPdiPlanForm.java b/business/src/main/java/com/fizz/business/form/CrmPdiPlanForm.java index cdca8c3..6df6fcd 100644 --- a/business/src/main/java/com/fizz/business/form/CrmPdiPlanForm.java +++ b/business/src/main/java/com/fizz/business/form/CrmPdiPlanForm.java @@ -4,121 +4,115 @@ import com.fizz.business.vo.ModSetupResultVO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.List; @Data public class CrmPdiPlanForm { - @Schema(description = "序列号") - private Integer seqid; + private Long id; // 主键ID - @Schema(description = "多火轧制次数") - private Integer operid; - - @Schema(description = "轧制模式 1轧制力 2延伸率") - private Integer operMode; - - @Schema(description = "卷ID") - private String coilid; - - @Schema(description = "热轧卷ID") - private String hotCoilid; - - @Schema(description = "道次数") - private Integer passno; - - @Schema(description = "退火厚度") - private Double annealThick; - - @Schema(description = "入口厚度") - private Double entryThick; - - @Schema(description = "入口宽度") - private Double entryWidth; - - @Schema(description = "入口重量") - private Double entryWeight; - - @Schema(description = "入口长度") - private Double entryLength; - - @Schema(description = "入口内径") - private Integer entryInnerDiameter; - - @Schema(description = "入口外径") - private Integer entryOuterDiameter; - - @Schema(description = "出口卷号") - private String exitCoilid; - - @Schema(description = "下工序代码 1冷硬卷 2退火卷 3其他 ") - private String nextUnit; - - @Schema(description = "分割数量") - private Integer splitNum; - - @Schema(description = "切割模式") - private Integer cutMode; - - @Schema(description = "出口重量1") - private Double exitValue1; - - @Schema(description = "出口重量2") - private Double exitValue2; - - @Schema(description = "出口重量3") - private Double exitValue3; - - @Schema(description = "出口重量4") - private Double exitValue4; - - @Schema(description = "出口重量5") - private Double exitValue5; - - @Schema(description = "出口重量6") - private Double exitValue6; - - @Schema(description = "出口重量") - private Double exitWeight; - - @Schema(description = "出口长度") - private Double exitLength; - - @Schema(description = "出口厚度") - private Double exitThick; - - @Schema(description = "出口宽度") - private Double exitWidth; - - @Schema(description = "钢种") - private String grade; - - @Schema(description = "屈服强度") - private Integer yieldStrength; - - @Schema(description = "抗拉强度") - private Integer tensileStrength; - - @Schema(description = "状态 NEW READY ONLINE PRODUCING PRODUCT") - private String status; - - @Schema(description = "计划号") - private String planNo; - - @Schema(description = "压下率") - private Double reductionRate; - - @Schema(description = "热卷温度") - private Double hotCoilTemp; - - @Schema(description = "厚度正偏差") - private Double entryThickMaxtol; - - @Schema(description = "厚度正偏差") - private Double entryThickMintol; - - @Schema(description = "设定值列表") - List lists; + private Integer seqid; // 主键ID + private String coilid; // 钢卷号 + private Integer picklingCount; // 酸洗次数 + private Integer dummyCoilFlag; // 虚卷标识 + private Integer seqno; // 顺序号 + private Integer status; // 状态 + private String planid; // 计划ID + private String planType; // 计划类型 + private BigDecimal yieldPoint; // 屈服点 + private BigDecimal entryWeight; // 入口重量(t) + private BigDecimal entryThick; // 入口厚度(mm) + private BigDecimal entryWidth; // 入口宽度(mm) + private BigDecimal entryLength; // 入口长度(mm) + private BigDecimal entryOuterDiameter; // 入口外径(mm) + private BigDecimal entryInnerDiameter; // 入口内径(mm) + private BigDecimal exitInnerDiameter; // 出口内径(mm) + private String steelGrade; // 钢种 + private String exitCoilid; // 出口卷号 + private Integer tlvFlag; // 张力平整标识 + private String orderNo; // 订单号 + private String custommerCode; // 客户代码 + private BigDecimal orderThick; // 订单厚度(mm) + private BigDecimal orderWidth; // 订单宽度(mm) + private BigDecimal orderLenLow; // 订单长度下限(mm) + private BigDecimal orderLenUp; // 订单长度上限(mm) + private BigDecimal orderWt; // 订单重量(t) + private BigDecimal orderWtLow; // 订单重量下限(t) + private BigDecimal orderWtUp; // 订单重量上限(t) + private BigDecimal orderMetCoatTop; // 订单镀层上 + private BigDecimal orderMetCoatBot; // 订单镀层下 + private String finalUse; // 最终用途 + private String hotCoilCode; // 热卷代码 + private BigDecimal exitLengthTar; // 出口目标长度(mm) + private BigDecimal exitLengthTolMax; // 出口长度公差最大值(mm) + private BigDecimal exitLengthTolMin; // 出口长度公差最小值(mm) + private BigDecimal exitThickTar; // 出口目标厚度(mm) + private BigDecimal exitThickTolMax; // 出口厚度公差最大值(mm) + private BigDecimal exitThickTolMin; // 出口厚度公差最小值(mm) + private BigDecimal exitWidthTar; // 出口目标宽度(mm) + private BigDecimal exitWidthTolMax; // 出口宽度公差最大值(mm) + private BigDecimal exitWidthTolMin; // 出口宽度公差最小值(mm) + private String nextWholeBacklogCode; // 下道全流程积压代码 + private String prevWholeBacklogCode; // 上道全流程积压代码 + private String exitWtMode; // 出口重量模式 + private Integer splitNum; // 分卷数量 + private BigDecimal exitWeight1; // 出口重量1 + private BigDecimal exitWeight2; // 出口重量2 + private BigDecimal exitWeight3; // 出口重量3 + private BigDecimal exitWeight4; // 出口重量4 + private BigDecimal exitWeight5; // 出口重量5 + private BigDecimal exitWeight6; // 出口重量6 + private String headSampleMode; // 头部取样模式 + private String headSamplePosition; // 头部取样位置 + private BigDecimal headSampleLength; // 头部取样长度(mm) + private String headSamplePlace; // 头部取样地点 + private Integer headSampleNum; // 头部取样数量 + private String tailSampleMode; // 尾部取样模式 + private String tailSamplePosition; // 尾部取样位置 + private BigDecimal tailSampleLength; // 尾部取样长度(mm) + private String tailSamplePlace; // 尾部取样地点 + private Integer tailSampleNum; // 尾部取样数量 + private LocalDateTime timestamp; // 时间戳 + private LocalDateTime onlineDate; // 上线时间 + private LocalDateTime startDate; // 开始时间 + private LocalDateTime endDate; // 结束时间 + private LocalDateTime furInDate; // 进炉时间 + private LocalDateTime furOutDate; // 出炉时间 + private LocalDateTime createTime; // 创建时间 + private LocalDateTime updateTime; // 更新时间 + private String surfaceVice; // 副面 + private String weldCode; // 焊缝代码 + private Integer spmFlag; // SPM标识 + private BigDecimal spmElongation; // SPM延伸率(%) + private BigDecimal spmRollforce; // SPM轧制力 + private String spmProcessType; // SPM工艺类型 + private String spmControlMode; // SPM控制模式 + private BigDecimal spmBendingForce; // SPM弯曲力 + private BigDecimal spmCrimpingRollMesh; // SPM咬入辊目 + private BigDecimal spmBillyRollMesh; // SPM精轧辊目 + private Integer trimFlag; // 切边标识 + private String tlvMode; // 张力平整模式 + private BigDecimal tlvElongation; // 张力平整延伸率(%) + private Integer chromating; // 钝化标识 + private String coatingCode; // 镀层代码 + private Integer oilingFlag; // 涂油标识 + private String oilingType; // 涂油类型 + private BigDecimal oilingTop; // 涂油上 + private BigDecimal oilingBottom; // 涂油下 + private String heatCycle; // 热循环 + private String coatingSelection; // 镀层选择 + private String coatingType; // 镀层类型 + private String chemTreatMode; // 化学处理模式 + private BigDecimal aimWeightTop; // 目标重量上 + private BigDecimal aimWeightBottom; // 目标重量下 + private BigDecimal maxTolWeightTop; // 最大公差重量上 + private BigDecimal maxTolWeightBottom; // 最大公差重量下 + private BigDecimal headendGaugeLength; // 头端测厚长度(mm) + private BigDecimal tailendGaugeLength; // 尾端测厚长度(mm) + private String origin; // 产地 + private String originCoilid; // 原卷号 } diff --git a/business/src/main/java/com/fizz/business/form/L1OperateMatForm.java b/business/src/main/java/com/fizz/business/form/L1OperateMatForm.java new file mode 100644 index 0000000..56981f1 --- /dev/null +++ b/business/src/main/java/com/fizz/business/form/L1OperateMatForm.java @@ -0,0 +1,32 @@ +package com.fizz.business.form; + + +import com.fizz.business.constants.enums.L1OperateMatEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 状态变更form + * + * @author chenhao + * @date 2023/04/27 + */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class L1OperateMatForm extends OperateMatForm implements Serializable { + + @NotNull(message = "操作不存在") + @Schema(description = "ONLINE-钢卷上线,UNLOAD-手动卸卷,ALL_RETURN-整卷回退,HALF_RETURN-半卷回退,BLOCK-卸卷并封闭,THROW_TAIL-甩尾") + private L1OperateMatEnum operation; + + @Builder + public L1OperateMatForm(Integer porIdx, Integer trIdx, Long planId, String entryMatId, String planNo, L1OperateMatEnum operation) { + super(porIdx, trIdx, planId, entryMatId, planNo); + this.operation = operation; + } +} diff --git a/business/src/main/java/com/fizz/business/form/OperateMatForm.java b/business/src/main/java/com/fizz/business/form/OperateMatForm.java new file mode 100644 index 0000000..9f31ade --- /dev/null +++ b/business/src/main/java/com/fizz/business/form/OperateMatForm.java @@ -0,0 +1,42 @@ +package com.fizz.business.form; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 状态变更form + * + * @author chenhao + * @date 2023/04/27 + */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class OperateMatForm implements Serializable { + + @Schema(description = "开卷机编号") + private Integer porIdx; + + @Schema(description = "卷取机编号") + private Integer trIdx; + + @NotNull(message = "计划id不能为空") + @Schema(description = "计划id") + private Long planId; + + @NotBlank(message = "钢卷号不能为空") + @Schema(description = "钢卷号") + private String entryMatId; + + @Schema(description = "计划号") + private String planNo; +} diff --git a/business/src/main/java/com/fizz/business/form/PageForm.java b/business/src/main/java/com/fizz/business/form/PageForm.java new file mode 100644 index 0000000..1460813 --- /dev/null +++ b/business/src/main/java/com/fizz/business/form/PageForm.java @@ -0,0 +1,12 @@ +package com.fizz.business.form; + + +import lombok.Data; + +@Data +public class PageForm { + + private long size = 10L; + private long current = 1L; + +} diff --git a/business/src/main/java/com/fizz/business/form/QueryAlarmForm.java b/business/src/main/java/com/fizz/business/form/QueryAlarmForm.java new file mode 100644 index 0000000..6f77bc9 --- /dev/null +++ b/business/src/main/java/com/fizz/business/form/QueryAlarmForm.java @@ -0,0 +1,38 @@ +package com.fizz.business.form; + + +import com.fizz.business.constants.enums.AlarmStatusEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +/** + * @author chenhao + * @date 2023/04/26 + */ +@Getter +@Setter +public class QueryAlarmForm extends PageForm implements Serializable { + + @Schema(description = "钢卷号") + private String matId; + + @Schema(description = "状态,INIT-初始化,UNCONFIRMED-报警未确认,CONFIRM-报警已确认") + private List statuses; + + @Schema(description = "报警类型 1:持续5min的报警 2:立即报警") + private String alarmType; + + @Schema(description = "开始日期,yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @Schema(description = "结束日期,yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; +} diff --git a/business/src/main/java/com/fizz/business/form/QueryEventForm.java b/business/src/main/java/com/fizz/business/form/QueryEventForm.java new file mode 100644 index 0000000..0297b56 --- /dev/null +++ b/business/src/main/java/com/fizz/business/form/QueryEventForm.java @@ -0,0 +1,30 @@ +package com.fizz.business.form; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author chenhao + * @date 2023/04/26 + */ +@Getter +@Setter +public class QueryEventForm extends PageForm implements Serializable { + + @Schema(description = "开始日期,yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @Schema(description = "结束日期,yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + @Schema(description = "入口卷号") + private String entryMatId; +} diff --git a/business/src/main/java/com/fizz/business/form/QueryTargetForm.java b/business/src/main/java/com/fizz/business/form/QueryTargetForm.java new file mode 100644 index 0000000..0b73861 --- /dev/null +++ b/business/src/main/java/com/fizz/business/form/QueryTargetForm.java @@ -0,0 +1,34 @@ +package com.fizz.business.form; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author chenhao + * @date 2023/04/26 + */ +@Getter +@Setter +@Builder +public class QueryTargetForm implements Serializable { + + @Schema(description = "开始日期,yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate start; + + @Schema(description = "结束日期,yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate end; + + private String unitCode; + private String groupNo; + private String shiftNo; + private String type; +} diff --git a/business/src/main/java/com/fizz/business/form/UpdateDefectForm.java b/business/src/main/java/com/fizz/business/form/UpdateDefectForm.java new file mode 100644 index 0000000..7bc6bd6 --- /dev/null +++ b/business/src/main/java/com/fizz/business/form/UpdateDefectForm.java @@ -0,0 +1,23 @@ +package com.fizz.business.form; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class UpdateDefectForm implements Serializable { + @Schema(description = "缺陷起点") + private Double defectStartPos; + @Schema(description = "持续长度") + private Double defectLength; + @Schema(description = "缺陷code") + private String defectCode; + @Schema(description = "缺陷名称") + private String defectName; + @Schema(description = "缺陷描述") + private String defectDesc; +} diff --git a/business/src/main/java/com/fizz/business/form/WebOperateMatForm.java b/business/src/main/java/com/fizz/business/form/WebOperateMatForm.java index d60835f..053ffe6 100644 --- a/business/src/main/java/com/fizz/business/form/WebOperateMatForm.java +++ b/business/src/main/java/com/fizz/business/form/WebOperateMatForm.java @@ -1,10 +1,10 @@ package com.fizz.business.form; -import com.fizz.business.constants.enums.WebMatOperateEnum; + +import com.fizz.business.constants.enums.WebOperateMatEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.io.Serializable; @@ -16,27 +16,31 @@ import java.io.Serializable; */ @Getter @Setter -@Builder @NoArgsConstructor @AllArgsConstructor -public class WebOperateMatForm implements Serializable { +public class WebOperateMatForm extends OperateMatForm implements Serializable { @NotNull(message = "操作不存在") - @Schema(description = "ONLINE-钢卷上线,NEW-回退,PRODUCT-生成完成") - private WebMatOperateEnum operation; + @Schema(description = "ONLINE-钢卷上线,UNLOAD-手动卸卷,ALL_RETURN-整卷回退,HALF_RETURN-半卷回退,BLOCK-卸卷并封闭,THROW_TAIL-甩尾") + private WebOperateMatEnum operation; - @NotNull(message = "主键id不能为空") - @Schema(description = "主键id") - private Long id; + @Schema(description = "回退卷号") + private String returnMatId; - @NotBlank(message = "钢卷号不能为空") - @Schema(description = "钢卷号") - private String entryMatId; + @Schema(description = "回退重量") + private Double returnWeight; - @Schema(description = "计划号") - private String planNo; + @Schema(description = "回退备注") + private String returnRemark; - @Schema(description = "重量") - private Double weight; + @Schema(description = "产出钢卷长度") + private Double coilLength; + @Builder + public WebOperateMatForm(Integer porIdx, Integer trIdx, Long planId, String entryMatId, String planNo, WebOperateMatEnum operation, Double returnWeight, String returnRemark) { + super(porIdx, trIdx, planId, entryMatId, planNo); + this.operation = operation; + this.returnWeight = returnWeight; + this.returnRemark = returnRemark; + } } diff --git a/business/src/main/java/com/fizz/business/mapper/DeviceDefineMapper.java b/business/src/main/java/com/fizz/business/mapper/DeviceDefineMapper.java new file mode 100644 index 0000000..2325304 --- /dev/null +++ b/business/src/main/java/com/fizz/business/mapper/DeviceDefineMapper.java @@ -0,0 +1,16 @@ +package com.fizz.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.fizz.business.domain.DeviceDefine; + +/** + *

+ * 机组定义表 Mapper 接口 + *

+ * + * @author baomidou + * @since 2023-05-17 + */ +public interface DeviceDefineMapper extends BaseMapper { + +} diff --git a/business/src/main/java/com/fizz/business/mapper/HalfReturnMapper.java b/business/src/main/java/com/fizz/business/mapper/HalfReturnMapper.java new file mode 100644 index 0000000..28a3f05 --- /dev/null +++ b/business/src/main/java/com/fizz/business/mapper/HalfReturnMapper.java @@ -0,0 +1,16 @@ +package com.fizz.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.fizz.business.domain.HalfReturn; + +/** + *

+ * 半卷整卷回退表 Mapper 接口 + *

+ * + * @author baomidou + * @since 2023-05-17 + */ +public interface HalfReturnMapper extends BaseMapper { + +} diff --git a/business/src/main/java/com/fizz/business/mapper/PdoExcoilMapper.java b/business/src/main/java/com/fizz/business/mapper/PdoExcoilMapper.java new file mode 100644 index 0000000..79623d3 --- /dev/null +++ b/business/src/main/java/com/fizz/business/mapper/PdoExcoilMapper.java @@ -0,0 +1,18 @@ +package com.fizz.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.fizz.business.domain.PdoExcoil; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * cs机组产出实绩表 Mapper 接口 + *

+ * + * @author baomidou + * @since 2023-05-17 + */ +@Mapper +public interface PdoExcoilMapper extends BaseMapper { + +} diff --git a/business/src/main/java/com/fizz/business/mapper/PdoStripvalueMapper.java b/business/src/main/java/com/fizz/business/mapper/PdoStripvalueMapper.java new file mode 100644 index 0000000..d3ca1c9 --- /dev/null +++ b/business/src/main/java/com/fizz/business/mapper/PdoStripvalueMapper.java @@ -0,0 +1,18 @@ +package com.fizz.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.fizz.business.domain.PdoStripvalue; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 剪切带钢段平均值 Mapper 接口 + *

+ * + * @author baomidou + * @since 2023-05-17 + */ +@Mapper +public interface PdoStripvalueMapper extends BaseMapper { + +} diff --git a/business/src/main/java/com/fizz/business/mapper/ProMatmapMapper.java b/business/src/main/java/com/fizz/business/mapper/ProMatmapMapper.java index e008ab9..831da09 100644 --- a/business/src/main/java/com/fizz/business/mapper/ProMatmapMapper.java +++ b/business/src/main/java/com/fizz/business/mapper/ProMatmapMapper.java @@ -3,10 +3,18 @@ package com.fizz.business.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.fizz.business.domain.ProMatmap; +import com.fizz.business.dto.MatmapDTO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +@Mapper public interface ProMatmapMapper extends BaseMapper { int updateMatidByDisplayName(String matid); + void flushMatmap(@Param("list") List list); + } \ No newline at end of file diff --git a/business/src/main/java/com/fizz/business/mapper/SegmentMapper.java b/business/src/main/java/com/fizz/business/mapper/SegmentMapper.java new file mode 100644 index 0000000..fafee0e --- /dev/null +++ b/business/src/main/java/com/fizz/business/mapper/SegmentMapper.java @@ -0,0 +1,23 @@ +package com.fizz.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.fizz.business.domain.PdoStripvalue; +import com.fizz.business.domain.Segment; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 各机张力,电流等架跟踪表 Mapper 接口 + *

+ * + * @author baomidou + * @since 2023-05-17 + */ +@Mapper +public interface SegmentMapper extends BaseMapper { + + PdoStripvalue getStripValue(@Param("entryMatId") String entryMatId, @Param("startPos") double startPos, @Param("endPos") double endPos); + + Segment getLatestRecord(); +} diff --git a/business/src/main/java/com/fizz/business/mapper/SegmentTotalMapper.java b/business/src/main/java/com/fizz/business/mapper/SegmentTotalMapper.java new file mode 100644 index 0000000..cc74d2c --- /dev/null +++ b/business/src/main/java/com/fizz/business/mapper/SegmentTotalMapper.java @@ -0,0 +1,18 @@ +package com.fizz.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.fizz.business.domain.SegmentTotal; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 各机张力,电流等架跟踪表 Mapper 接口 + *

+ * + * @author baomidou + * @since 2023-10-26 + */ +@Mapper +public interface SegmentTotalMapper extends BaseMapper { + SegmentTotal getLatestRecord(); +} diff --git a/business/src/main/java/com/fizz/business/scheduled/LineMeasureSchedule.java b/business/src/main/java/com/fizz/business/scheduled/LineMeasureSchedule.java index 454c960..82a23bc 100644 --- a/business/src/main/java/com/fizz/business/scheduled/LineMeasureSchedule.java +++ b/business/src/main/java/com/fizz/business/scheduled/LineMeasureSchedule.java @@ -1,17 +1,12 @@ package com.fizz.business.scheduled; -import cn.hutool.json.JSONUtil; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; -import jdk.nashorn.internal.runtime.Debug; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.Map; @Slf4j //@Component @@ -20,7 +15,7 @@ public class LineMeasureSchedule extends BaseSchedule{ @Resource MiloService miloService; - @Scheduled(fixedDelay = 200) +// @Scheduled(fixedDelay = 200) public void L1L2LineMeasure() { try { ReadWriteEntity node = miloService.readFromOpcUa("ns=2;s=通道 2.LockStautsRead.lockStauts1"); diff --git a/business/src/main/java/com/fizz/business/service/CrmPdiPlanService.java b/business/src/main/java/com/fizz/business/service/CrmPdiPlanService.java index 69d7244..682c903 100644 --- a/business/src/main/java/com/fizz/business/service/CrmPdiPlanService.java +++ b/business/src/main/java/com/fizz/business/service/CrmPdiPlanService.java @@ -14,7 +14,6 @@ import java.util.List; public interface CrmPdiPlanService extends IService { public CrmPdiPlanVO getByCoilIdAndOperId(String coilid); - public PdiPlanSetupInfoVO getCoilInfoAndSetupList(String coilid); public boolean addCrmPdiPlan(CrmPdiPlan crmPdiPlan); @@ -24,11 +23,5 @@ public interface CrmPdiPlanService extends IService { public List listAll(PlanQueryForm form); - void updateCrmPdiPlanById(ChangePlanStatusForm form); - String editCoilInfo(CrmPdiPlanForm coilid); - - String calcSetup(CalcPdiPlanForm coilid); - - CrmPdiPlan getOnlineCoil(); } diff --git a/business/src/main/java/com/fizz/business/service/PdoExCoilService.java b/business/src/main/java/com/fizz/business/service/PdoExCoilService.java new file mode 100644 index 0000000..c95ce35 --- /dev/null +++ b/business/src/main/java/com/fizz/business/service/PdoExCoilService.java @@ -0,0 +1,20 @@ +package com.fizz.business.service; + + +import com.fizz.business.constants.enums.ExitCutTypeEnum; +import com.fizz.business.dto.PdoExCoilDTO; +import com.fizz.business.dto.ExitCoilInfoDTO; +import com.fizz.business.dto.MatmapDTO; + +/** + * @author chenhao + * @date 2023/05/30 + */ +public interface PdoExCoilService { + + PdoExCoilDTO saveExCoil(ExitCoilInfoDTO exitCoil); + + ExitCoilInfoDTO genExitCoilInfo(MatmapDTO trMatmap, ExitCutTypeEnum cutType); + + void deleteExistPdo(Long planId); +} diff --git a/business/src/main/java/com/fizz/business/service/PdoStripValueService.java b/business/src/main/java/com/fizz/business/service/PdoStripValueService.java new file mode 100644 index 0000000..483b720 --- /dev/null +++ b/business/src/main/java/com/fizz/business/service/PdoStripValueService.java @@ -0,0 +1,13 @@ +package com.fizz.business.service; + + +import com.fizz.business.dto.ExitCoilInfoDTO; + +/** + * @author chenhao + * @date 2023/05/30 + */ +public interface PdoStripValueService { + + void treatStripValues(ExitCoilInfoDTO pdoExCoil); +} diff --git a/business/src/main/java/com/fizz/business/service/ProMatmapService.java b/business/src/main/java/com/fizz/business/service/ProMatmapService.java index dff7b27..3370045 100644 --- a/business/src/main/java/com/fizz/business/service/ProMatmapService.java +++ b/business/src/main/java/com/fizz/business/service/ProMatmapService.java @@ -6,5 +6,7 @@ import com.fizz.business.domain.ProMatmap; public interface ProMatmapService extends IService { void updateMatid(String matid); + void flushMatmap(); + // 你可以添加自定义的业务方法 } \ No newline at end of file diff --git a/business/src/main/java/com/fizz/business/service/TrackService.java b/business/src/main/java/com/fizz/business/service/TrackService.java index e3c560a..391f111 100644 --- a/business/src/main/java/com/fizz/business/service/TrackService.java +++ b/business/src/main/java/com/fizz/business/service/TrackService.java @@ -1,15 +1,33 @@ package com.fizz.business.service; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.fizz.business.constants.enums.DeviceEnum; +import com.fizz.business.dto.CoilPositionDTO; +import com.fizz.business.form.AdjustPosForm; +import com.fizz.business.form.L1OperateMatForm; +import com.fizz.business.form.QueryEventForm; import com.fizz.business.form.WebOperateMatForm; +import com.fizz.business.vo.CoilMeasureVO; +import com.fizz.business.vo.ReturnInfoVO; +import com.fizz.business.vo.HalfReturnInfoVO; /** * @author chenhao * @date 2023/05/17 */ public interface TrackService { + void webOperateMat(WebOperateMatForm form); - void operateMatWeb(WebOperateMatForm form); + void l1OperateMat(L1OperateMatForm form); + + ReturnInfoVO getReturnInfo(int posIdx); + + HalfReturnInfoVO getHalfReturnMatId(Long planId, String entryMatId); + + + CoilPositionDTO getCoilPosition(); + + void adjustPosition(AdjustPosForm form); - void trUnload(WebOperateMatForm form); } diff --git a/business/src/main/java/com/fizz/business/service/client/LocalCacheManager.java b/business/src/main/java/com/fizz/business/service/client/LocalCacheManager.java new file mode 100644 index 0000000..313eddd --- /dev/null +++ b/business/src/main/java/com/fizz/business/service/client/LocalCacheManager.java @@ -0,0 +1,57 @@ +package com.fizz.business.service.client; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.Pair; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.fizz.business.constants.enums.LimitItemCode; +import com.fizz.business.domain.DeviceDefine; +import com.fizz.business.dto.PointConfigDTO; +import com.fizz.business.mapper.DeviceDefineMapper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.DependsOn; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +/** + * 本地缓存管理 + * + * @author chenhao + * @date 2023/05/15 + */ +@Component +public class LocalCacheManager { + + private static DeviceDefineMapper deviceDefineMapper; + + @Autowired + public void setDeviceDefineMapper(DeviceDefineMapper deviceDefineMapper) { + LocalCacheManager.deviceDefineMapper = deviceDefineMapper; + } + + public static LinkedHashMap DEVICE_DEFINE_MAP = Maps.newLinkedHashMap(); + + @PostConstruct + public static void init() { + DEVICE_DEFINE_MAP = getDeviceDefine(); + } + + + + + + public static LinkedHashMap getDeviceDefine() { + List list = deviceDefineMapper.selectList(new LambdaQueryWrapper().orderByAsc(DeviceDefine::getPosIdx)); + return list.stream().collect(Collectors.toMap(DeviceDefine::getPositionNameEn, it -> it, (k1, k2) -> k1, LinkedHashMap::new)); + } + + +} diff --git a/business/src/main/java/com/fizz/business/service/client/PdiPlanClient.java b/business/src/main/java/com/fizz/business/service/client/PdiPlanClient.java index 75f3122..fa7a767 100644 --- a/business/src/main/java/com/fizz/business/service/client/PdiPlanClient.java +++ b/business/src/main/java/com/fizz/business/service/client/PdiPlanClient.java @@ -1,13 +1,27 @@ package com.fizz.business.service.client; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.JavaType; +import com.fizz.business.constants.enums.PlanStatusEnum; +import com.fizz.business.constants.enums.PlanTypeEnum; import com.fizz.business.form.ChangePlanStatusForm; import com.fizz.business.service.CrmPdiPlanService; import com.fizz.business.vo.CrmPdiPlanVO; +import com.fizz.business.vo.PdiPlanVO; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.Collections; import java.util.List; +import java.util.Objects; +import java.util.Optional; /** * 计划执行接口 @@ -19,26 +33,47 @@ import java.util.List; @Component public class PdiPlanClient { - @Resource - CrmPdiPlanService crmPdiPlanService; + @Autowired + RedisCacheManager redisCacheManager; + + @Value("${plan-execute.url:}") + private String url; + @Value("${plan-execute.timeout:30000}") + private int timeout; + private final String queryTrackPlanList = "/plan/track/plan-mat/list"; + private final String queryTrackPlanFirst = "/plan/track/plan-mat/first"; + private final String queryList = "/plan/list"; + private final String changeStatus = "/plan/track/status/change"; + + public List queryList(PlanTypeEnum type, PlanStatusEnum status) { - public List queryTrackPlanList() { return null; } - public CrmPdiPlanVO queryTrackPlanFirst() { + public List queryTrackPlanList() { return null; } - public CrmPdiPlanVO detail(Long planId) { + public PdiPlanVO queryTrackPlanFirst() { + return null; + } + + public PdiPlanVO detail(Long planId) { return null; } public void changeStatus(ChangePlanStatusForm form) { - - crmPdiPlanService.updateCrmPdiPlanById(form); + if (isVirtualPlan(form.getId())) { + return; + } } + public boolean isVirtualPlan(long planId) { + // 2020-01-01 00:00:00-->1577808000000 + return planId > 1577808000000L; + } + + } diff --git a/business/src/main/java/com/fizz/business/service/client/RedisCacheManager.java b/business/src/main/java/com/fizz/business/service/client/RedisCacheManager.java new file mode 100644 index 0000000..79af708 --- /dev/null +++ b/business/src/main/java/com/fizz/business/service/client/RedisCacheManager.java @@ -0,0 +1,361 @@ +package com.fizz.business.service.client; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.fizz.business.dto.*; +import com.fizz.business.service.impl.BeanFactory; +import com.fizz.business.utils.CoilMeasUtil; +import com.fizz.business.utils.MatmapUtil; +import com.fizz.business.utils.RedisUtil; +import com.fizz.business.vo.PdiPlanVO; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.stream.Collectors; + +import static com.fizz.business.constants.CommonConstants.Redis.*; + + +/** + * redis缓存管理 + * + * @author chenhao + * @date 2023/05/15 + */ +@Slf4j +@Component +public class RedisCacheManager { + @Autowired + RedisTemplate segmentRedisTemplate; + + @Autowired + RedisTemplate matmapRedisTemplate; + + @Autowired + RedisTemplate headRedisTemplate; + + @Autowired + RedisTemplate coilPosRedisTemplate; + + @Autowired + RedisTemplate jsonObjectRedisTemplate; + + public double getStripLocation() { + return Optional.ofNullable((Double) RedisUtil.getValue(COIL_STRIP_LOCATION_KEY)).orElse(0d); + } + + public void setStripLocation(double value) { + RedisUtil.setValue(COIL_STRIP_LOCATION_KEY, value); + } + + public Integer getPrevPorIdx() { + return Optional.ofNullable((Integer) RedisUtil.getValue(COIL_POR_IDX_KEY)).orElse(0); + } + + public void setPrevPorIdx(Integer value) { + RedisUtil.setValue(COIL_POR_IDX_KEY, value); + } + + public CoilPositionDTO getCoilPosition() { + + return Optional.ofNullable(coilPosRedisTemplate.opsForValue().get(COIL_POSITION_KEY)).orElse(new CoilPositionDTO()); + } + + public void setCoilPosition(CoilPositionDTO coilPos) { + coilPosRedisTemplate.opsForValue().set(COIL_POSITION_KEY, coilPos); + } + + public int getSegNum() { + return Optional.ofNullable((Integer) RedisUtil.getValue(COIL_SEG_NUM_KEY)).orElse(1); + } + + public void setSegNum(int value) { + RedisUtil.setValue(COIL_SEG_NUM_KEY, value); + } + + public void incSegNum() { + RedisUtil.increment(COIL_SEG_NUM_KEY); + } + + public void resetSegNum() { + RedisUtil.setValue(COIL_SEG_NUM_KEY, 1); + } + + public double getHeadCutLength(int porIdx) { + return Optional.ofNullable((Double) RedisUtil.getValue(COIL_HEAD_CUT_LEN_KEY + porIdx)).orElse(0d); + } + + public void setHeadCutLength(int porIdx, double value) { + RedisUtil.setValue(COIL_HEAD_CUT_LEN_KEY + porIdx, value); + } + + public List getSegmentList() { + return segmentRedisTemplate.opsForList().range(COIL_SEG_LIST_KEY, 0, -1); + } + + public void setSegmentList(List segmentList) { + segmentRedisTemplate.delete(COIL_SEG_LIST_KEY); + if (CollUtil.isNotEmpty(segmentList)) { + segmentRedisTemplate.opsForList().rightPushAll(COIL_SEG_LIST_KEY, segmentList); + } + } + + public void addSegment(SegmentDTO segment) { + List segmentList = this.getSegmentList(); + if (segmentList.isEmpty()) { + segmentRedisTemplate.opsForList().rightPush(COIL_SEG_LIST_KEY, segment); + log.info("create new segment, coilId=[{}], segNo={}, startPos={}, endPos={}, segLen={}", + segment.getCoilID(), segment.getSegNo(), segment.getStartPos(), segment.getEndPos(), segment.getSegLen()); + } else { + Map exists = segmentList.stream().collect(Collectors.toMap(s -> s.getCoilID() + "-" + s.getSegNo() + "-" + s.getPlanId(), s -> s.getCoilID() + s.getSegNo() + s.getPlanId(), (k1, k2) -> k1)); + String key = segment.getCoilID() + "-" + segment.getSegNo() + "-" + segment.getPlanId(); + if (!exists.containsKey(key)) { + segmentRedisTemplate.opsForList().rightPush(COIL_SEG_LIST_KEY, segment); + log.info("create new segment, coilId=[{}], segNo={}, startPos={}, endPos={}, segLen={}", + segment.getCoilID(), segment.getSegNo(), segment.getStartPos(), segment.getEndPos(), segment.getSegLen()); + } + } + } + + public SegmentDTO getSegment(long index) { + return segmentRedisTemplate.opsForList().index(COIL_SEG_LIST_KEY, index); + } + + public long getSegmentListSize() { + return Optional.ofNullable(segmentRedisTemplate.opsForList().size(COIL_SEG_LIST_KEY)).orElse(0L); + } + + public void setMatmapList(List matmaps) { + matmapRedisTemplate.delete(COIL_MATMAP_LIST_KEY); + if (CollUtil.isNotEmpty(matmaps)) { + matmapRedisTemplate.opsForList().rightPushAll(COIL_MATMAP_LIST_KEY, matmaps); + } + } + + public List getMatmapList() { + return matmapRedisTemplate.opsForList().range(COIL_MATMAP_LIST_KEY, 0, -1); + } + + public void setMatmap(int index, MatmapDTO matmap) { + matmapRedisTemplate.opsForList().set(COIL_MATMAP_LIST_KEY, index, matmap); + } + + public MatmapDTO getMatmap(int index) { + return matmapRedisTemplate.opsForList().index(COIL_MATMAP_LIST_KEY, index); + } + + public List getHeadList() { + return Optional.ofNullable(headRedisTemplate.opsForList().range(COIL_HEAD_LIST_KEY, 0, -1)).orElse(Collections.emptyList()); + } + + public void setHeadList(List headList) { + headRedisTemplate.delete(COIL_HEAD_LIST_KEY); + if (CollUtil.isNotEmpty(headList)) { + headRedisTemplate.opsForList().rightPushAll(COIL_HEAD_LIST_KEY, headList); + } + } + + public void addHead(CoilHeadDTO head) { + List headList = getHeadList(); + if (CollUtil.isNotEmpty(headList)) { + Map exists = headList.stream().collect(Collectors.toMap(CoilHeadDTO::getMatId, h -> h, (k1, k2) -> k1)); + if (!exists.containsKey(head.getMatId())) { + headRedisTemplate.opsForList().rightPush(COIL_HEAD_LIST_KEY, head); + log.info("add coil head: {}", JSON.toJSONString(head)); + } + } else { + headRedisTemplate.opsForList().rightPush(COIL_HEAD_LIST_KEY, head); + log.info("add coil head: {}", JSON.toJSONString(head)); + } + } + + public void updateMergeHead(CoilHeadDTO head) { + headRedisTemplate.opsForValue().set(COIL_MERGE_HEAD_KEY, head); + } + + public void removeHead(String matId) { + List headList = getHeadList(); + if (CollUtil.isEmpty(headList)) { + return; + } + // 倒序处理 + ListIterator iterator = headList.listIterator(headList.size()); + while (iterator.hasPrevious()) { + CoilHeadDTO exists = iterator.previous(); + if (Objects.equals(matId, exists.getMatId())) { + iterator.remove(); + } + } + setHeadList(headList); + } + + public void setMergeHead(CoilHeadDTO head) { + headRedisTemplate.opsForValue().set(COIL_MERGE_HEAD_KEY, head); + log.info("add merge head: {}", JSON.toJSONString(head)); + } + + public CoilHeadDTO getMergeHead() { + return headRedisTemplate.opsForValue().get(COIL_MERGE_HEAD_KEY); + } + + public void removeMergeHead() { + CoilHeadDTO head = this.getMergeHead(); + if (Objects.nonNull(head)) { + headRedisTemplate.delete(COIL_MERGE_HEAD_KEY); + log.info("remove merge head: {}", JSON.toJSONString(head)); + } + } + + public void setPrevAndMergeHead(CoilHeadDTO head, Integer workTr) { + this.setPrevHead(head); + // 卷取机上有卷时才设置mergeHead + Integer trIdx = CoilMeasUtil.getTrIdx(workTr); + if (Objects.nonNull(trIdx) && MatmapUtil.already(MatmapUtil.getMatmap(trIdx))) { + this.setMergeHead(head); + } + } + + public void setPrevHead(CoilHeadDTO head) { + headRedisTemplate.opsForValue().set(COIL_PREV_HEAD_KEY, head); + log.info("add prev head: {}", JSON.toJSONString(head)); + } + + public CoilHeadDTO getPrevHead() { + return headRedisTemplate.opsForValue().get(COIL_PREV_HEAD_KEY); + } + + private void removePrevHead() { + headRedisTemplate.delete(COIL_PREV_HEAD_KEY); + } + + public double getMergeEndPos() { + return Optional.ofNullable((Double) RedisUtil.getValue(COIL_MERGE_END_POS_KEY)).orElse(0d); + } + + public void setMergeEndPos(double value) { + RedisUtil.setValue(COIL_MERGE_END_POS_KEY, value); + } + + public double getLastEndPos() { + return Optional.ofNullable((Double) RedisUtil.getValue(EXIT_CUT_LAST_END_POS_KEY)).orElse(0d); + } + + public void setLastEndPos(double value) { + RedisUtil.setValue(EXIT_CUT_LAST_END_POS_KEY, value); + } + + public double getDefectStartPos(int posIdx) { + Double value; + if (CoilMeasUtil.getPorIdxList().contains(posIdx)) { + value = RedisUtil.getValue(HEAD_DEFECT_START_POS); + } else { + value = RedisUtil.getValue(TAIL_DEFECT_START_POS); + } + return Optional.ofNullable(value).orElse(0d); + } + + public void setHeadDefectStartPos(Double value) { + RedisUtil.setValue(HEAD_DEFECT_START_POS, value); + } + + public void setTailDefectStartPos(Double value) { + RedisUtil.setValue(TAIL_DEFECT_START_POS, value); + } + + + + public void delCoilSetup(String matId) { + RedisUtil.delete(Lists.newArrayList(COIL_SETUP_KEY + matId)); + } + + private boolean isValidSignal(Integer counter, String redisKey) { + if (counter == null) return false; + Integer cnt = RedisUtil.getValue(redisKey); + // 第一次信号不处理 + if (Objects.isNull(cnt)) { + // 更新缓存计数器 + RedisUtil.setValue(redisKey, counter); + return false; + } + if (!Objects.equals(cnt, counter)) { + // 更新缓存计数器 + RedisUtil.setValue(redisKey, counter); + return true; + } + return false; + } + + public boolean isExitCut(Integer exitCutCounter) { + return isValidSignal(exitCutCounter, COUNTER_EXIT_CUT_KEY); + } + + public boolean isHeadCut(Integer headCutCounter) { + return isValidSignal(headCutCounter, COUNTER_HEAD_CUT_KEY); + } + + public boolean isPorOnline(Integer porOnlineCounter) { + return isValidSignal(porOnlineCounter, COUNTER_POR_ONLINE_KEY); + } + + public boolean isPorPayOver(Integer porPayOverCounter) { + return isValidSignal(porPayOverCounter, COUNTER_POR_PAY_OVER_KEY); + } + + public boolean isTrUnload(Integer trUnloadCounter) { + return isValidSignal(trUnloadCounter, COUNTER_TR_UNLOAD_KEY); + } + + public void setPointAlarm(String point, String type, double value) { + String key = ALARM_KEY_PREFIX + point + "-" + type; + RedisUtil.setValue(key, value, 5 * 1000); + } + + public boolean hasPointAlarm(String point, String type) { + String key = ALARM_KEY_PREFIX + point + "-" + type; + return RedisUtil.getValue(key) != null; + } + + /** + * 获取虚拟计划 + * + * @param planId 计划ID + * @return 虚拟计划 + */ + public PdiPlanVO getVirtualPlan(Long planId) { + Object value = jsonObjectRedisTemplate.opsForHash().get(VIRTUAL_PLAN_KEY, planId.toString()); + return BeanUtil.toBean(value, PdiPlanVO.class); + } + + public void deleteExpireVirtualPlan() { + Set keys = jsonObjectRedisTemplate.opsForHash().keys(VIRTUAL_PLAN_KEY); + if (CollUtil.isEmpty(keys)) return; + + long curr = DateUtil.yesterday().getTime(); + String[] expireKeys = keys.stream().map(Object::toString).filter(string -> Long.parseLong(string) < curr).toArray(String[]::new); + if (expireKeys.length > 0) { + jsonObjectRedisTemplate.opsForHash().delete(VIRTUAL_PLAN_KEY, expireKeys); + } + } + + /** + * 缓存新增虚拟计划 + * + * @param plan 虚拟计划 + */ + public void putVirtualPlan(PdiPlanVO plan) { + JSONObject value = JSONUtil.parseObj(plan); + String planId = plan.getId().toString(); + jsonObjectRedisTemplate.opsForHash().put(VIRTUAL_PLAN_KEY, planId, value); + } +} diff --git a/business/src/main/java/com/fizz/business/service/hanle/EntryMovementHandler.java b/business/src/main/java/com/fizz/business/service/hanle/EntryMovementHandler.java index 6503e95..1eb32a3 100644 --- a/business/src/main/java/com/fizz/business/service/hanle/EntryMovementHandler.java +++ b/business/src/main/java/com/fizz/business/service/hanle/EntryMovementHandler.java @@ -1,10 +1,13 @@ package com.fizz.business.service.hanle; +import com.fizz.business.anno.OpcMessageHandlerType; +import com.fizz.business.constants.enums.OpcMessageType; import com.fizz.business.domain.msg.EntryMovementMessage; import com.fizz.business.service.OpcMessageHandler; import org.springframework.stereotype.Component; @Component +@OpcMessageHandlerType(OpcMessageType.ENTRY_MOVEMENT) public class EntryMovementHandler implements OpcMessageHandler { @Override diff --git a/business/src/main/java/com/fizz/business/service/hanle/ExitCutHandler.java b/business/src/main/java/com/fizz/business/service/hanle/ExitCutHandler.java index 566c62a..da6e508 100644 --- a/business/src/main/java/com/fizz/business/service/hanle/ExitCutHandler.java +++ b/business/src/main/java/com/fizz/business/service/hanle/ExitCutHandler.java @@ -1,10 +1,13 @@ package com.fizz.business.service.hanle; +import com.fizz.business.anno.OpcMessageHandlerType; +import com.fizz.business.constants.enums.OpcMessageType; import com.fizz.business.domain.msg.ExitCutMessage; import com.fizz.business.service.OpcMessageHandler; import org.springframework.stereotype.Component; @Component +@OpcMessageHandlerType(OpcMessageType.EXIT_CUT) public class ExitCutHandler implements OpcMessageHandler { @Override diff --git a/business/src/main/java/com/fizz/business/service/hanle/ExitMeasureHandler.java b/business/src/main/java/com/fizz/business/service/hanle/ExitMeasureHandler.java index 3ec8ce4..d6265e0 100644 --- a/business/src/main/java/com/fizz/business/service/hanle/ExitMeasureHandler.java +++ b/business/src/main/java/com/fizz/business/service/hanle/ExitMeasureHandler.java @@ -1,10 +1,13 @@ package com.fizz.business.service.hanle; +import com.fizz.business.anno.OpcMessageHandlerType; +import com.fizz.business.constants.enums.OpcMessageType; import com.fizz.business.domain.msg.ExitMeasureMessage; import com.fizz.business.service.OpcMessageHandler; import org.springframework.stereotype.Component; @Component +@OpcMessageHandlerType(OpcMessageType.EXIT_MEASURE) public class ExitMeasureHandler implements OpcMessageHandler { @Override diff --git a/business/src/main/java/com/fizz/business/service/hanle/ExitMovementHandler.java b/business/src/main/java/com/fizz/business/service/hanle/ExitMovementHandler.java index 2e05a3a..f541bc1 100644 --- a/business/src/main/java/com/fizz/business/service/hanle/ExitMovementHandler.java +++ b/business/src/main/java/com/fizz/business/service/hanle/ExitMovementHandler.java @@ -1,10 +1,13 @@ package com.fizz.business.service.hanle; +import com.fizz.business.anno.OpcMessageHandlerType; +import com.fizz.business.constants.enums.OpcMessageType; import com.fizz.business.domain.msg.ExitMovementMessage; import com.fizz.business.service.OpcMessageHandler; import org.springframework.stereotype.Component; @Component +@OpcMessageHandlerType(OpcMessageType.EXIT_MOVEMENT) public class ExitMovementHandler implements OpcMessageHandler { @Override diff --git a/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java index fb6d745..e6b6a59 100644 --- a/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java +++ b/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java @@ -70,18 +70,6 @@ public class CrmPdiPlanServiceImpl extends ServiceImpl setup = modSetupResultService.getSetupByCoilid(coilid); - setupInfoVO.setLists(setup); - - return setupInfoVO; - } - /** * 添加新记录 * @@ -126,113 +114,5 @@ public class CrmPdiPlanServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(CrmPdiPlan::getCoilid, coilid.getCoilid()); - - CrmPdiPlan one = this.baseMapper.selectOne(queryWrapper); - - if (one == null) { - - CrmPdiPlan bean = BeanUtil.toBean(coilid, CrmPdiPlan.class); - - bean.setStatus("NEW"); - bean.setSeqid(bean.getSeqid() + 1); - - this.baseMapper.insert(bean); - - - } else { - - BeanUtil.copyProperties(coilid, one); - one.setStatus("NEW"); - - this.baseMapper.updateById(one); - - } - - - CalcPdiPlanForm calcPdiPlanForm = new CalcPdiPlanForm(); - - List calcForms = BeanUtil.copyToList(coilid.getLists(), ModSetupResultCalcForm.class); - - calcPdiPlanForm.setGrade(coilid.getGrade()); - calcPdiPlanForm.setOperid(coilid.getOperid()); - calcPdiPlanForm.setCoilid(coilid.getCoilid()); - calcPdiPlanForm.setHotCoilid(coilid.getHotCoilid()); - calcPdiPlanForm.setAnnealThick(coilid.getAnnealThick()); - calcPdiPlanForm.setEntryWidth(coilid.getEntryWidth()); - calcPdiPlanForm.setExitThick(coilid.getExitThick()); - calcPdiPlanForm.setPassno(coilid.getPassno()); - calcPdiPlanForm.setEntryThick(coilid.getEntryThick()); - calcPdiPlanForm.setOperMode(coilid.getOperMode()); - calcPdiPlanForm.setLists(calcForms); - - return modSetupResultService.calcSetup(calcPdiPlanForm); - } - - @Override - public String calcSetup(CalcPdiPlanForm coilid) { - - return modSetupResultService.calcSetup(coilid); - - } - - @Override - public CrmPdiPlan getOnlineCoil() { - - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(ProMatmap::getL1mapidx,0); - - ProMatmap one = proMatmapService.getOne(queryWrapper); - - if (one == null){ - - return new CrmPdiPlan(); - - } - - CrmPdiPlan byCoilId = getByCoilId(one.getMatid()); - - - return byCoilId; - } } diff --git a/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java new file mode 100644 index 0000000..51d521f --- /dev/null +++ b/business/src/main/java/com/fizz/business/service/impl/PdoExCoilServiceImpl.java @@ -0,0 +1,186 @@ +package com.fizz.business.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.fizz.business.constants.enums.ExitCutTypeEnum; +import com.fizz.business.domain.PdoExcoil; +import com.fizz.business.dto.ExitCoilInfoDTO; +import com.fizz.business.dto.MatmapDTO; +import com.fizz.business.dto.PdoExCoilDTO; +import com.fizz.business.mapper.PdoExcoilMapper; +import com.fizz.business.service.PdoExCoilService; +import com.fizz.business.service.PdoStripValueService; +import com.fizz.business.service.client.PdiPlanClient; +import com.fizz.business.utils.CalcUtil; +import com.fizz.business.vo.PdiPlanVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Objects; + +import static com.fizz.business.constants.enums.ExitCutTypeEnum.SPLIT_CUT; +import static com.fizz.business.constants.enums.ExitCutTypeEnum.WELDER_CUT; +import static com.fizz.business.constants.enums.HalfReturnTypeEnum.HEAD_COIL; +import static com.fizz.business.constants.enums.HalfReturnTypeEnum.TAIL_COIL; + + +/** + * @author chenhao + * @date 2023/05/30 + */ +@Slf4j +@Service +public class PdoExCoilServiceImpl implements PdoExCoilService { + + @Autowired + private PdoExcoilMapper pdoExcoilMapper; + @Autowired + private PdiPlanClient pdiPlanClient; + @Autowired + private PdoStripValueService pdoStripValueService; + + + @Override + @Transactional + public PdoExCoilDTO saveExCoil(ExitCoilInfoDTO exitCoil) { + + PdoExCoilDTO pdoExCoilDTO = new PdoExCoilDTO(); + PdiPlanVO plan = pdiPlanClient.detail(exitCoil.getPlanId()); + + double aimWeightTop = 1; + double aimWeightBottom = 1; + + pdoExCoilDTO.setPlanOrigin(plan.getOrigin()); + pdoExCoilDTO.setUnitCode(plan.getL3UnitCode()); + pdoExCoilDTO.setProcessCode(plan.getProcessCode()); + pdoExCoilDTO.setExitMatId(exitCoil.getExitMatId()); + pdoExCoilDTO.setEntryMatId(exitCoil.getEntryMatId()); + pdoExCoilDTO.setSubId(exitCoil.getSubNum()); + pdoExCoilDTO.setStartPosition(exitCoil.getStartPos()); + pdoExCoilDTO.setEndPosition(exitCoil.getEndPos()); + pdoExCoilDTO.setPlanId(plan.getId()); + pdoExCoilDTO.setPlanNo(plan.getPlanNo()); + pdoExCoilDTO.setProdCode(plan.getProdCode()); + pdoExCoilDTO.setSteelGrade(plan.getSteelGrade()); + + pdoExCoilDTO.setEntryThick(plan.getEntryThickness()); + pdoExCoilDTO.setEntryWidth(plan.getEntryWidth()); + pdoExCoilDTO.setEntryLength(plan.getEntryLength()); + pdoExCoilDTO.setEntryWeight(plan.getEntryWeight()); + pdoExCoilDTO.setActualEntryWeight(plan.getActualEntryWeight()); + pdoExCoilDTO.setWeightTop(aimWeightTop); + pdoExCoilDTO.setWeightBottom(aimWeightBottom); + pdoExCoilDTO.setExitLength(exitCoil.getExitCutLength()); + double exitWeight = CalcUtil.calcCoilWeight(exitCoil.getExitCutLength(), plan.getTargetThickness(), plan.getTargetWidth()); + pdoExCoilDTO.setExitNetWeight(exitWeight); + pdoExCoilDTO.setActualWeight(exitWeight); + pdoExCoilDTO.setTheoryWeight(exitWeight); + double exitOuterDiameter = CalcUtil.calcOuterDiameter(exitWeight, plan.getTargetWidth(), plan.getEntryInnerDiameter()); + pdoExCoilDTO.setExitOuterDiameter(exitOuterDiameter); + pdoExCoilDTO.setExitThickness(plan.getTargetThickness()); + pdoExCoilDTO.setExitWidth(plan.getTargetWidth()); + pdoExCoilDTO.setLastFlag(exitCoil.isLastFlag()); + pdoExCoilDTO.setSeparateFlag(exitCoil.isSeparateFlag()); + // 计划有子卷需要记录,通知L3 + if (CollUtil.isNotEmpty(plan.getSubPlanList())) { + pdoExCoilDTO.setSubPlanList(plan.getSubPlanList()); + } + pdoExCoilDTO.setOnlineTime(plan.getOnlineTime()); + pdoExCoilDTO.setStartTime(plan.getProducingTime()); + LocalDateTime now = LocalDateTime.now(); + pdoExCoilDTO.setEndTime(now); + + // 获取班组信息 + pdoExCoilDTO.setGroupNo("1"); + pdoExCoilDTO.setShiftNo("A"); + pdoExCoilDTO.setStatus("UNWEIGHT"); + + log.info("save pdo exit coil:{}", JSONUtil.toJsonStr(pdoExCoilDTO)); + // 虚拟卷不记录产出 + if (pdiPlanClient.isVirtualPlan(exitCoil.getPlanId())) { + return pdoExCoilDTO; + } + // 产出实际入库 + pdoExcoilMapper.insert(pdoExCoilDTO); + // 打包segment + pdoStripValueService.treatStripValues(exitCoil); + return pdoExCoilDTO; + } + + /** + * 通过计划的halfReturnType字段判断当前卷是回退的头部卷还是尾部卷 + * 1. 头部卷: entryMatId=A01 + * 2. 尾部卷: entryMatId=A01-2, returnMatId=A01。(由于计划号+钢卷号唯一,所以回退的尾部卷生成新计划时,将entryMatId设置为A01-2,真实的原料卷号保存在returnMatId中) + * 半卷回退上报产出 + * 1. 头部卷产出时,原料卷号:A01, 产出卷号: A01-1, 分卷标识: true, 尾卷标识: false + * 2. 尾部卷产出时:原料卷号:A01,产出卷号: A01-2 + * @param trMatmap + * @param cutType + * @return ExitCoilInfoDTO + */ + @Override + public ExitCoilInfoDTO genExitCoilInfo(MatmapDTO trMatmap, ExitCutTypeEnum cutType) { + String trCoilId = trMatmap.getMatId(); + //准备的成品子卷号 + //考虑依据数据库记录分卷,避免因为平台重启导致分卷丢失或错误 + Long subNum = pdoExcoilMapper.selectCount(new LambdaQueryWrapper() + .eq(PdoExcoil::getEntryMatId, trCoilId) + .eq(PdoExcoil::getPlanNo, trMatmap.getPlanNo()) + .ne(PdoExcoil::getSubId, 0)); + + PdiPlanVO plan = pdiPlanClient.detail(trMatmap.getPlanId()); + boolean halfReturnHeadCoil = Objects.equals(plan.getHalfReturnType(), HEAD_COIL.name()); + boolean halfReturnTailCoil = Objects.equals(plan.getHalfReturnType(), TAIL_COIL.name()); + + String entryMatId = trCoilId; + String exitMatId = entryMatId; + boolean separateFlag = false; + boolean lastFlag = Objects.equals(cutType, WELDER_CUT); + + // 头部卷产出时,原料卷号:A01, 产出卷号: A01-1, 分卷标识: true, 尾卷标识: false + if (halfReturnHeadCoil) { + entryMatId = plan.getReturnMatId(); + // 如果是第一次回退,头部卷产出卷号需要手动拼接“-1” + // 多次回退时,头部卷产出卷号和入口卷号一致 + if (Objects.equals(plan.getEntryMatId(), plan.getReturnMatId())) { + exitMatId = entryMatId + "-1"; + } + separateFlag = true; + lastFlag = false; + } + // 尾部卷产出时:原料卷号:A01(保存在计划的returnMatId),产出卷号: A01-2 + if (halfReturnTailCoil) { + entryMatId = plan.getReturnMatId(); + exitMatId = plan.getEntryMatId(); + separateFlag = true; + } + + // 分卷处理 + if (subNum != 0 || Objects.equals(cutType, SPLIT_CUT)) { + subNum = subNum + 1; + separateFlag = true; + exitMatId = exitMatId + "-" + subNum; + } + + ExitCoilInfoDTO exitCoil = ExitCoilInfoDTO.builder() + .planId(plan.getId()) + .entryMatId(entryMatId) + .exitMatId(exitMatId) + .separateFlag(separateFlag) + .lastFlag(lastFlag) + .subNum(Integer.parseInt(subNum.toString())) + .build(); + log.info("I: generate exit cut coil info:{}", JSON.toJSONString(exitCoil)); + return exitCoil; + } + + @Override + public void deleteExistPdo(Long planId) { + pdoExcoilMapper.delete(new LambdaQueryWrapper().eq(PdoExcoil::getPlanId, planId)); + } +} diff --git a/business/src/main/java/com/fizz/business/service/impl/PdoStripValueServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/PdoStripValueServiceImpl.java new file mode 100644 index 0000000..2cb8bb4 --- /dev/null +++ b/business/src/main/java/com/fizz/business/service/impl/PdoStripValueServiceImpl.java @@ -0,0 +1,42 @@ +package com.fizz.business.service.impl; + +import com.alibaba.fastjson.JSON; +import com.fizz.business.domain.PdoStripvalue; +import com.fizz.business.dto.ExitCoilInfoDTO; +import com.fizz.business.mapper.PdoStripvalueMapper; +import com.fizz.business.mapper.SegmentMapper; +import com.fizz.business.service.PdoStripValueService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +/** + * @author chenhao + * @date 2023/05/30 + */ +@Slf4j +@Service +public class PdoStripValueServiceImpl implements PdoStripValueService { + + @Autowired + PdoStripvalueMapper pdoStripvalueMapper; + @Autowired + SegmentMapper segmentMapper; + + /** + * 打包segment + * @param pdoExCoil + */ + @Override + public void treatStripValues(ExitCoilInfoDTO pdoExCoil) { + PdoStripvalue stripvalue = segmentMapper.getStripValue(pdoExCoil.getEntryMatId(), pdoExCoil.getStartPos(), pdoExCoil.getEndPos()); + if (Objects.isNull(stripvalue)) { + log.warn("W: strip value is null, {}", JSON.toJSONString(pdoExCoil)); + return; + } + stripvalue.setExitMatId(pdoExCoil.getExitMatId()); + pdoStripvalueMapper.insert(stripvalue); + } +} diff --git a/business/src/main/java/com/fizz/business/service/impl/ProMatmapServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/ProMatmapServiceImpl.java index 7aa9929..b9bb95b 100644 --- a/business/src/main/java/com/fizz/business/service/impl/ProMatmapServiceImpl.java +++ b/business/src/main/java/com/fizz/business/service/impl/ProMatmapServiceImpl.java @@ -1,12 +1,16 @@ package com.fizz.business.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fizz.business.domain.ProMatmap; +import com.fizz.business.dto.MatmapDTO; import com.fizz.business.mapper.ProMatmapMapper; import com.fizz.business.service.ProMatmapService; +import com.fizz.business.utils.MatmapUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; @Service public class ProMatmapServiceImpl extends ServiceImpl implements ProMatmapService { @@ -20,4 +24,16 @@ public class ProMatmapServiceImpl extends ServiceImpl list = MatmapUtil.getMatmapList(); + if (CollUtil.isEmpty(list)) return; + proMatmapMapper.flushMatmap(list); + } + + } \ No newline at end of file diff --git a/business/src/main/java/com/fizz/business/service/impl/TrackServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/TrackServiceImpl.java index 49dd6a3..9cdd0f5 100644 --- a/business/src/main/java/com/fizz/business/service/impl/TrackServiceImpl.java +++ b/business/src/main/java/com/fizz/business/service/impl/TrackServiceImpl.java @@ -1,23 +1,41 @@ package com.fizz.business.service.impl; -import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSON; -import com.fizz.business.domain.CrmPdiPlan; -import com.fizz.business.domain.CrmPdoExcoil; -import com.fizz.business.domain.ProMatmap; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.fizz.business.constants.enums.DeviceEnum; +import com.fizz.business.constants.enums.PlanStatusEnum; +import com.fizz.business.constants.enums.WebOperateMatEnum; +import com.fizz.business.domain.DeviceDefine; +import com.fizz.business.domain.HalfReturn; +import com.fizz.business.dto.CoilHeadDTO; +import com.fizz.business.dto.CoilPositionDTO; +import com.fizz.business.dto.MatmapDTO; +import com.fizz.business.form.AdjustPosForm; +import com.fizz.business.form.L1OperateMatForm; import com.fizz.business.form.WebOperateMatForm; -import com.fizz.business.mapper.CrmPdiPlanMapper; -import com.fizz.business.service.CrmPdoExcoilService; -import com.fizz.business.service.ProMatmapService; +import com.fizz.business.mapper.HalfReturnMapper; +import com.fizz.business.mapper.SegmentMapper; import com.fizz.business.service.TrackService; +import com.fizz.business.service.client.LocalCacheManager; +import com.fizz.business.service.client.PdiPlanClient; +import com.fizz.business.service.client.RedisCacheManager; import com.fizz.business.utils.CalcUtil; -import com.fizz.business.vo.Plan2PdoVO; -import com.ruoyi.common.utils.StringUtils; +import com.fizz.business.utils.CoilMeasUtil; +import com.fizz.business.utils.MatmapUtil; +import com.fizz.business.utils.WebSocketUtil; +import com.fizz.business.vo.HalfReturnInfoVO; +import com.fizz.business.vo.PdiPlanVO; +import com.fizz.business.vo.ReturnInfoVO; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +import static com.fizz.business.constants.enums.WebOperateMatEnum.*; /** @@ -28,63 +46,221 @@ import java.time.LocalDateTime; @Service public class TrackServiceImpl implements TrackService { - @Resource - CrmPdiPlanMapper crmPdiPlanMapper; - - @Resource - ProMatmapService proMatmapService; - - @Resource - CrmPdoExcoilService crmPdoExcoilService; + @Autowired + RedisCacheManager redisCacheManager; + @Autowired + SegmentMapper segmentMapper; + @Autowired + PdiPlanClient pdiPlanClient; @Override - public void operateMatWeb(WebOperateMatForm form) { + public void webOperateMat(WebOperateMatForm form) { - log.info("unitCode:{}, hand operate mat by Web: {}", form.getPlanNo(), JSON.toJSONString(form)); + log.info("web operate mat: {}", JSON.toJSONString(form)); form.getOperation().operate(form); - } @Override - public void trUnload(WebOperateMatForm form) { - if (StringUtils.compare(form.getOperation().getValue(),"PRODUCT") != 0) { + public void l1OperateMat(L1OperateMatForm form) { + + log.info("l1 operate mat: {}", JSON.toJSONString(form)); + form.getOperation().operate(form); + } + + @Override + public ReturnInfoVO getReturnInfo(int posIdx) { + MatmapDTO matmap = MatmapUtil.getMatmap(posIdx); + if (MatmapUtil.notReady(matmap)) { + } + + PdiPlanVO planVO = pdiPlanClient.detail(matmap.getPlanId()); + String returnType = null; + double returnWt = 0; + if (Objects.equals(planVO.getStatus(), PlanStatusEnum.PRODUCING.name())) { + double coiledLength = redisCacheManager.getStripLocation(); + double calcCoilWeight = CalcUtil.calcCoilWeight(coiledLength, planVO.getEntryThickness(), planVO.getEntryWidth()); + returnWt = planVO.getEntryWeight() - calcCoilWeight; + returnType = HALF_RETURN.name(); + } else if (Objects.equals(planVO.getStatus(), PlanStatusEnum.ONLINE.name())) { + returnWt = planVO.getEntryWeight(); + returnType = ALL_RETURN.name(); + } else { + log.error("invalid plan status[{}], planId={}", planVO.getStatus(), planVO.getId()); + } + + return ReturnInfoVO.builder() + .returnWeight(NumberUtil.round(returnWt, 3).doubleValue()) + .returnType(returnType) + .entryMatId(planVO.getEntryMatId()) + .planId(planVO.getId()) + .planNo(planVO.getPlanNo()) + .build(); + } + + /** + * 获取半卷回退的钢卷号 + * + * @param entryMatId + * @return + */ + @Override + public HalfReturnInfoVO getHalfReturnMatId(Long planId, String entryMatId) { + PdiPlanVO plan = pdiPlanClient.detail(planId); + + String returnMatId = entryMatId; + HalfReturnMapper returnMapper = BeanFactory.getBean(HalfReturnMapper.class); + // 多次回退 + if (Objects.equals(plan.getReturnType(), HALF_RETURN.name())) { + entryMatId = plan.getReturnMatId(); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(HalfReturn::getEntryMatId, entryMatId); + queryWrapper.eq(HalfReturn::getPlanNo, plan.getPlanNo()); + queryWrapper.eq(HalfReturn::getReturnType, HALF_RETURN.name()); + queryWrapper.orderByDesc(HalfReturn::getId); + queryWrapper.last("limit 1"); + HalfReturn halfReturn = returnMapper.selectOne(queryWrapper); + + if (Objects.nonNull(halfReturn)) { + String exitMatId = halfReturn.getExitMatId(); + int lastIndex = exitMatId.lastIndexOf("-"); + if (lastIndex != -1 && lastIndex < exitMatId.length() - 1) { + String numberStr = exitMatId.substring(lastIndex + 1); + int number = Integer.parseInt(numberStr) + 1; + returnMatId = exitMatId.substring(0, lastIndex + 1) + number; + } + } + } + // 第一次回退,需要将头部卷与尾部卷都记录到回退表中 + else { + returnMatId = entryMatId + "-2"; + } + + return HalfReturnInfoVO.builder().returnMatId(returnMatId).build(); + } + + /** + * 调整钢卷位置 + * 更新matmap + * 更新焊缝位置 + * + * @param form + */ + @Override + public void adjustPosition(AdjustPosForm form) { + DeviceDefine targetDevice = LocalCacheManager.DEVICE_DEFINE_MAP.get(form.getTargetPos().name()); + Assert.notNull(targetDevice, "目标位置设备不存在"); + + DeviceDefine currentDevice = LocalCacheManager.DEVICE_DEFINE_MAP.get(form.getCurrentPos().name()); + Assert.notNull(currentDevice, "当前位置设备不存在"); + + // 更新matmap + refreshMatmap(targetDevice, currentDevice, form); + WebSocketUtil.sendMatmapMsg(); + } + + private boolean pass(Integer startPos, Integer endPos, Integer currPos) { + // 跳过2#开卷机 + if (Objects.equals(startPos, DeviceEnum.POR1.getIdx()) + && Objects.equals(currPos, DeviceEnum.POR2.getIdx())) { + return true; + } + // 不修改开卷机的卷号 + if (CoilMeasUtil.getPorIdxList().contains(endPos)) { + return true; + } + // 多个卷取机需要跳过1#卷取机 + if (Objects.equals(endPos, DeviceEnum.TR2.getIdx()) + && Objects.equals(currPos, DeviceEnum.TR1.getIdx())) { + return true; + } + return false; + } + + private void refreshMatmap(DeviceDefine targetDevice, DeviceDefine currDevice, AdjustPosForm form) { + Integer targetPosIdx = targetDevice.getPosIdx(); + Integer currPosIdx = currDevice.getPosIdx(); + MatmapDTO target = MatmapUtil.getMatmap(targetPosIdx); + MatmapDTO curr = MatmapUtil.getMatmap(currPosIdx); + if (Objects.equals(curr.getMatId(), target.getMatId())) { return; } - this.operateMatWeb(form); - CrmPdiPlan pdiPlan = crmPdiPlanMapper.selectById(form.getId()); - pdiPlan.setEndDate(LocalDateTime.now()); + if (targetPosIdx < currPosIdx) { + // 目标位置小于当前位置,回退 + // 设置目标位置->当前位置的matmap + for (int idx = targetPosIdx; idx <= currPosIdx; idx++) { + if (pass(targetPosIdx, currPosIdx, idx)) continue; + MatmapUtil.setMatmap(idx, curr.getMatId(), curr.getPlanId(), curr.getPlanNo()); + } - pdiPlan.setStatus("PRODUCT"); - crmPdiPlanMapper.updateById(pdiPlan); + // 从卷取机回退需要移除prevHead,并创建currHead +// if (CoilMeasUtil.getTrIdxList().contains(currPosIdx)) { +// CoilHeadDTO head = new CoilHeadDTO(); +// head.setMatId(form.getMatId()); +// head.setPlanNo(form.getPlanNo()); +// head.setPlanId(form.getPlanId()); +// head.setPosIdx(targetPosIdx); +// redisCacheManager.removePrevAndMergeHead(); +// // 设置当前带头长度为焊缝距离 +// head.setPos(redisCacheManager.getStripLocation()); +// redisCacheManager.addHead(head); +// log.info("add curr head: {}", JSON.toJSONString(head)); +// } + } else if (targetPosIdx > currPosIdx) { + // 目标位置大于当前位置,前进 + // 设置当前位置->目标位置的matmap + for (int idx = currPosIdx; idx <= targetPosIdx; idx++) { + if (pass(currPosIdx, targetPosIdx, idx)) continue; + MatmapUtil.setMatmap(idx, curr.getMatId(), curr.getPlanId(), curr.getPlanNo()); + } - Plan2PdoVO bean = BeanUtil.toBean(pdiPlan, Plan2PdoVO.class); - - CrmPdoExcoil excoil = BeanUtil.toBean(bean, CrmPdoExcoil.class); - - CrmPdoExcoil operId = crmPdoExcoilService.getByExcoilIdAndOperId(excoil.getExitCoilid(), excoil.getOperid()); - - if (operId == null){ - double calcCoilWeight = CalcUtil.calcCoilWeight(excoil.getExitLength(), excoil.getEntryThick(), excoil.getEntryWidth()); - excoil.setEncoilid(bean.getCoilid()); - excoil.setExitCoilid(bean.getCoilid()); - excoil.setCalcExitWeight(calcCoilWeight); - excoil.setMeasExitWeight(calcCoilWeight); - excoil.setHeadpos(0d); - excoil.setTailpos(excoil.getExitLength()); - excoil.setSubid(1); - excoil.setOuterDiameter(Double.valueOf(bean.getEntryOuterDiameter())); - excoil.setStatus("PRODUCT"); - excoil.setOnlineDate(pdiPlan.getOnlineTime()); - excoil.setStartDate(pdiPlan.getStartDate()); - excoil.setEndDate(pdiPlan.getEndDate()); - - crmPdoExcoilService.addCrmPdoExcoil(excoil); - - proMatmapService.updateMatid(""); + // 从开卷机前进 + // 移动到卷取机-->创建prevHead + // 移动到中间-->创建currHead + // 计划状态变更为PRODUCING + if (CoilMeasUtil.getPorIdxList().contains(currPosIdx)) { + CoilHeadDTO head = new CoilHeadDTO(); + head.setMatId(curr.getMatId()); + head.setPlanNo(curr.getPlanNo()); + head.setPlanId(curr.getPlanId()); + head.setPosIdx(targetPosIdx); + head.setPorIdx(currPosIdx); + // 移动到卷取机需要创建prevHead + if (CoilMeasUtil.getTrIdxList().contains(targetPosIdx)) { + head.setPos(888); + redisCacheManager.setPrevHead(head); + } + // 移动到中间时需要创建currHead + else { + // 设置当前带头长度为焊缝距离 + head.setPos(redisCacheManager.getStripLocation()); + redisCacheManager.removeHead(target.getMatId()); + redisCacheManager.addHead(head); + } + // 判断当前计划状态,如果是ONLINE,需要变更为PRODUCING + PdiPlanVO plan = pdiPlanClient.detail(curr.getPlanId()); + if (Objects.equals(plan.getStatus(), ONLINE.name())) { + webOperateMat(WebOperateMatForm.builder() + .operation(WebOperateMatEnum.PRODUCING) + .entryMatId(curr.getMatId()) + .planId(curr.getPlanId()) + .planNo(curr.getPlanNo()) + .build()); + } + } } + } + + @Override + public CoilPositionDTO getCoilPosition() { + CoilPositionDTO position = redisCacheManager.getCoilPosition(); + List matmapList = redisCacheManager.getMatmapList(); + position.setMatMapList(matmapList); + + return position; } diff --git a/business/src/main/java/com/fizz/business/utils/CalcUtil.java b/business/src/main/java/com/fizz/business/utils/CalcUtil.java index 81599c1..f705f47 100644 --- a/business/src/main/java/com/fizz/business/utils/CalcUtil.java +++ b/business/src/main/java/com/fizz/business/utils/CalcUtil.java @@ -1,8 +1,9 @@ package com.fizz.business.utils; - import cn.hutool.core.util.NumberUtil; -import com.fizz.business.constants.CommonConstants; + +import static com.fizz.business.constants.CommonConstants.RO; + /** * @author chenhao @@ -19,7 +20,7 @@ public class CalcUtil { * @return 长度[m] */ public static double calcCoilLength(double weight, double thick, double width) { - double v = weight / (thick * width * CommonConstants.RO) * 1000 * 1000; + double v = weight / (thick * width * RO) * 1000 * 1000; return NumberUtil.round(v, 0).doubleValue(); } @@ -32,7 +33,7 @@ public class CalcUtil { * @return 重量[T] */ public static double calcCoilWeight(double length, double thick, double width) { - double v = thick * width * length * CommonConstants.RO / (1000 * 1000); + double v = thick * width * length * RO / (1000 * 1000); return NumberUtil.round(v, 3).doubleValue(); } @@ -46,8 +47,21 @@ public class CalcUtil { */ public static double calcOuterDiameter(double weight, double width, double innerDiameter) { double innerRadius = (innerDiameter / 1000) / 2; - double v = 2 * Math.sqrt(((weight * 1000) / (width * CommonConstants.RO) + Math.PI * Math.pow(innerRadius, 2)) / Math.PI) * 1000; + double v = 2 * Math.sqrt(((weight * 1000) / (width * RO) + Math.PI * Math.pow(innerRadius, 2)) / Math.PI) * 1000; return NumberUtil.round(v, 0).doubleValue(); } + public static void main(String[] args) { + // 6882.0m + double length = CalcUtil.calcCoilLength(15, 0.27, 1027); + System.out.println(length); + + // 15.0T + double weight = CalcUtil.calcCoilWeight(6882, 0.27, 1027); + System.out.println(weight); + + // 1620.0mm + double diameter1 = CalcUtil.calcOuterDiameter(15, 1027, 508); + System.out.println(diameter1); + } } diff --git a/business/src/main/java/com/fizz/business/utils/CoilMeasUtil.java b/business/src/main/java/com/fizz/business/utils/CoilMeasUtil.java new file mode 100644 index 0000000..b626e35 --- /dev/null +++ b/business/src/main/java/com/fizz/business/utils/CoilMeasUtil.java @@ -0,0 +1,239 @@ +package com.fizz.business.utils; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSON; +import com.fizz.business.constants.enums.DeviceEnum; +import com.fizz.business.domain.DeviceDefine; +import com.fizz.business.dto.*; +import com.fizz.business.service.client.RedisCacheManager; +import com.fizz.business.service.impl.BeanFactory; +import com.google.common.collect.Lists; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.stream.Collectors; + +import static com.fizz.business.constants.CommonConstants.CoilMeasure.BEFORE_TR_IDX; +import static com.fizz.business.service.client.LocalCacheManager.DEVICE_DEFINE_MAP; + + +/** + * @author chenhao + * @date 2023/05/25 + */ +@Slf4j +@Component +public class CoilMeasUtil { + + public static Integer getPorIdx(Integer porCode) { + if (Objects.isNull(porCode)) { + return null; + } + + Integer porIdx = null; + if (porCode == 1) { + porIdx = DeviceEnum.POR1.getIdx(); + } else if (porCode == 2) { + porIdx = DeviceEnum.POR2.getIdx(); + } else { + log.warn("W: invalid working POR, porCode={}", porCode); + } + return porIdx; + } + + public static Integer getAnotherPorIdx(Integer porCode) { + if (Objects.isNull(porCode)) { + return null; + } + + Integer porIdx = null; + if (porCode == 1) { + porIdx = DeviceEnum.POR2.getIdx(); + } else if (porCode == 2) { + porIdx = DeviceEnum.POR1.getIdx(); + } else { + log.warn("W: invalid working POR, porCode={}", porCode); + } + return porIdx; + } + + public static Integer getTrIdx(Integer trCode) { + if (Objects.isNull(trCode)) { + return null; + } + + Integer trIdx = null; + if (trCode == 1) { + trIdx = DeviceEnum.TR1.getIdx(); + } else if (trCode == 2) { + trIdx = DeviceEnum.TR2.getIdx(); + } else { + log.warn("W: invalid working TR, trCode={}", trCode); + } + return trIdx; + } + + public static List getPorIdxList() { + return Lists.newArrayList(DeviceEnum.POR1.getIdx(), DeviceEnum.POR2.getIdx()); + } + + public static List getTrIdxList() { + return Lists.newArrayList(DeviceEnum.TR1.getIdx(), DeviceEnum.TR2.getIdx()); + } + + /** + * 获取卷取机前一个设备idx + * + * @return + */ + public static int getBeforeTrIdx() { + return BEFORE_TR_IDX.getIdx(); + } + + public static double initStripLocation(double stripLocation) { + if (stripLocation < 0) { + stripLocation = 0; + } else if (stripLocation > 25000) { + stripLocation = 25000; + } + return stripLocation; + } + + public static DeviceDefine matchDevice(double posLen, double entryLoopLen, double exitLoopLen) { + DeviceDefine mCEL = DEVICE_DEFINE_MAP.get(DeviceEnum.CEL.name()); // 入口活套 + DeviceDefine mCXL = DEVICE_DEFINE_MAP.get(DeviceEnum.CXL.name()); // 出口活套 + for (DeviceDefine device : DEVICE_DEFINE_MAP.values()) { + Double start = device.getPositionLengthStart(); + Double end = device.getPositionLengthEnd(); + // 入口活套之后的设备,需要加上entryLoopLen + if (device.getPosIdx() >= mCEL.getPosIdx()) { +// start = NumberUtil.add(start, entryLoopLen); + end = NumberUtil.add(end, entryLoopLen); + } + // 出口活套之后的设备,还需要加上exitLoopLen + if (device.getPosIdx() >= mCXL.getPosIdx()) { +// start = NumberUtil.add(start, exitLoopLen); + end = NumberUtil.add(end, exitLoopLen); + } + if (posLen >= start && posLen < end) { + return device; + } + } + + return null; + } + + public static CoilPositionDTO buildCoilPos(L1CoilLineMeasureDTO measureDTO, List headList) { + List coilStripLocationList = Lists.newArrayList(); + Integer workPor = measureDTO.getWorkPor(); + Integer workTr = measureDTO.getWorkTr(); + + CoilHeadDTO prevHead = BeanFactory.getBean(RedisCacheManager.class).getPrevHead(); + if (Objects.nonNull(prevHead)) { + coilStripLocationList.add( + CoilPositionDTO.CoilStripLocation.builder() + .matId(prevHead.getMatId()) + .planId(prevHead.getPlanId()) + .planNo(prevHead.getPlanNo()) + .porId(prevHead.getPorIdx()) + .stripLocation(99999).build()); + } + headList.forEach(head -> coilStripLocationList.add( + CoilPositionDTO.CoilStripLocation.builder() + .matId(head.getMatId()) + .planId(head.getPlanId()) + .planNo(head.getPlanNo()) + .porId(head.getPorIdx()) + .stripLocation(head.getPos()).build())); + + // 两个开卷机时,需要设置另一个未运行的开卷机上的钢卷数据 + Integer anotherPorIdx = getAnotherPorIdx(workPor); + if (Objects.nonNull(anotherPorIdx)) { + MatmapDTO matmap = MatmapUtil.getMatmap(anotherPorIdx); + coilStripLocationList.add( + CoilPositionDTO.CoilStripLocation.builder() + .matId(matmap.getMatId()) + .planId(matmap.getPlanId()) + .planNo(matmap.getPlanNo()) + .porId(anotherPorIdx) + .stripLocation(0).build()); + } + + // 当前开卷机与焊机的卷号不同时,需要设置当前开卷机上的钢卷数据(这种情况只出现在只有一个开卷机运行的时候) + Integer porIdx = CoilMeasUtil.getPorIdx(workPor); + MatmapDTO welderCoil = MatmapUtil.getMatmap(DeviceEnum.WELDER.getIdx()); + if (Objects.nonNull(porIdx) && MatmapUtil.already(welderCoil)) { + MatmapDTO porCoil = MatmapUtil.getMatmap(porIdx); + if (!Objects.equals(welderCoil.getMatId(), porCoil.getMatId())) { + coilStripLocationList.add( + CoilPositionDTO.CoilStripLocation.builder() + .matId(porCoil.getMatId()) + .planId(porCoil.getPlanId()) + .planNo(porCoil.getPlanNo()) + .porId(porIdx) + .stripLocation(0).build()); + } + } + + return CoilPositionDTO.builder() + .coilStripLocationList(coilStripLocationList) + .entryLoopLen(measureDTO.getEntryLoopLength()) + .exitLoopLen(measureDTO.getExitLoopLength()) + .entryLoopPer(measureDTO.getEntryLoopPercent()) + .exitLoopLPer(measureDTO.getExitLoopPercent()) + .entrySpeed(measureDTO.getInSpeed()) + .technologySpeed(measureDTO.getUnitSpeed()) + .exitSpeed(measureDTO.getOutSpeed()) + .porId(CoilMeasUtil.getPorIdx(workPor)) + .trId(CoilMeasUtil.getTrIdx(workTr)) + .build(); + } + + public static double getPorSpeed(L1CoilLineMeasureDTO measureDTO) { + return measureDTO.getUnitSpeed(); + } + +// public static List getParamKey(String deviceName) { +// List list = DEVICE_PARAM_MAP.get(deviceName); +// if (CollUtil.isEmpty(list)) { +// return Collections.emptyList(); +// } +// return list.stream().map(PointConfigDTO::getParam).collect(Collectors.toList()); +// } +// +// public static String getParamKey(String deviceName, String paramDesc) { +// List list = DEVICE_PARAM_MAP.get(deviceName); +// if (CollUtil.isEmpty(list)) { +// return null; +// } +// List keys = list.stream() +// .filter(p -> paramDesc.equals(p.getDesc())) +// .map(PointConfigDTO::getParam) +// .collect(Collectors.toList()); +// if (CollUtil.isEmpty(keys)) { +// return null; +// } +// return keys.get(0); +// } + +// public static List getParamDesc(String deviceName) { +// List list = DEVICE_PARAM_MAP.get(deviceName); +// if (CollUtil.isEmpty(list)) { +// return Collections.emptyList(); +// } +// return list.stream().map(PointConfigDTO::getDesc).collect(Collectors.toList()); +// } +// +// public static LinkedHashMap getParamMap(String deviceName) { +// List list = DEVICE_PARAM_MAP.get(deviceName); +// if (CollUtil.isEmpty(list)) { +// return Maps.newLinkedHashMap(); +// } +// +// return list.stream().collect(Collectors.toMap(PointConfigDTO::getParam, PointConfigDTO::getDesc, (k1, k2) -> k1, LinkedHashMap::new)); +// } + +} diff --git a/business/src/main/java/com/fizz/business/utils/DateSplitUtil.java b/business/src/main/java/com/fizz/business/utils/DateSplitUtil.java new file mode 100644 index 0000000..0f86e10 --- /dev/null +++ b/business/src/main/java/com/fizz/business/utils/DateSplitUtil.java @@ -0,0 +1,194 @@ +package com.fizz.business.utils; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * @author chenhao + * @date 2023/8/22 + */ +public class DateSplitUtil { + public enum IntervalType { + DAY, + HOUR, + MINUTE, + SECOND, + ; + } + + /** + * 时间切割 + * @param startTime 被切割的开始时间 + * @param endTime 被切割的结束时间 + * @param intervalType + * @param interval >0 + * @return + */ + public static List splitDate(LocalDateTime startTime, LocalDateTime endTime, IntervalType intervalType, int interval) { + if (interval < 0) { + return Collections.emptyList(); + } + if (startTime.isAfter(endTime)) { + return Collections.emptyList(); + } + + if (intervalType == IntervalType.DAY) { + return splitByDay(startTime, endTime, interval); + } + if (intervalType == IntervalType.HOUR) { + return splitByHour(startTime, endTime, interval); + } + if (intervalType == IntervalType.MINUTE) { + return splitByMinute(startTime, endTime, interval); + } + if (intervalType == IntervalType.SECOND) { + return splitBySecond(startTime, endTime, interval); + } + return Collections.emptyList(); + } + + /** + * 按照小时切割时间区间 + */ + public static List splitByHour(LocalDateTime startTime, LocalDateTime endTime, int intervalHours) { + if (startTime.isAfter(endTime)) { + return Collections.emptyList(); + } + + List dateSplits = new ArrayList<>(256); + + DateSplit param = new DateSplit(); + do { + LocalDateTime tempEndTime = startTime.plusHours(intervalHours); + if (tempEndTime.isAfter(endTime)) { + tempEndTime = endTime; + } + param.setStartTime(startTime); + param.setEndTime(tempEndTime); + + dateSplits.add(new DateSplit(param.getStartTime(), param.getEndTime())); + + startTime = tempEndTime; + } while (!startTime.isEqual(endTime)); + return dateSplits; + } + + /** + * 按照秒切割时间区间 + */ + public static List splitBySecond(LocalDateTime startTime, LocalDateTime endTime, int intervalSeconds) { + if (startTime.isAfter(endTime)) { + return Collections.emptyList(); + } + + List dateSplits = new ArrayList<>(256); + + DateSplit param = new DateSplit(); + do { + LocalDateTime tempEndTime = startTime.plusSeconds(intervalSeconds); + if (tempEndTime.isAfter(endTime)) { + tempEndTime = endTime; + } + param.setStartTime(startTime); + param.setEndTime(tempEndTime); + + dateSplits.add(new DateSplit(param.getStartTime(), param.getEndTime())); + + startTime = tempEndTime; + } while (!startTime.isEqual(endTime)); + return dateSplits; + } + + /** + * 按照天切割时间区间 + */ + public static List splitByDay(LocalDateTime startTime, LocalDateTime endTime, int intervalDays) { + if (startTime.isAfter(endTime)) { + return Collections.emptyList(); + } + + List dateSplits = new ArrayList<>(256); + + DateSplit param = new DateSplit(); + do { + LocalDateTime tempEndTime = startTime.plusDays(intervalDays); + if (tempEndTime.isAfter(endTime)) { + tempEndTime = endTime; + } + param.setStartTime(startTime); + param.setEndTime(tempEndTime); + + dateSplits.add(new DateSplit(param.getStartTime(), param.getEndTime())); + + startTime = tempEndTime; + } while (!startTime.isEqual(endTime)); + return dateSplits; + } + + /** + * 按照分钟切割时间区间 + * + * @param startTime + * @param endTime + * @param intervalMinutes + * @return + */ + public static List splitByMinute(LocalDateTime startTime, LocalDateTime endTime, int intervalMinutes) { + if (startTime.isAfter(endTime)) { + return Collections.emptyList(); + } + + List dateSplits = new ArrayList<>(256); + + DateSplit param = new DateSplit(); + do { + LocalDateTime tempEndTime = startTime.plusMinutes(intervalMinutes); + if (tempEndTime.isAfter(endTime)) { + tempEndTime = endTime; + } + param.setStartTime(startTime); + param.setEndTime(tempEndTime); + + dateSplits.add(new DateSplit(param.getStartTime(), param.getEndTime())); + + startTime = tempEndTime; + } while (!startTime.isEqual(endTime)); + return dateSplits; + } + + public static long toMillSeconds(LocalDateTime dateTime) { + return dateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli(); + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class DateSplit { + private LocalDateTime startTime; + private LocalDateTime endTime; + } + + public static void main(String[] args) { + LocalDateTime a = LocalDateTime.of(2023, 6, 30, 12, 0); + LocalDateTime b = LocalDateTime.of(2023, 7, 1, 11, 44); + System.out.println(splitDate(a, b, IntervalType.DAY, 1)); + System.out.println(splitDate(a, b, IntervalType.HOUR, 1)); + System.out.println(splitDate(a, b, IntervalType.MINUTE, 15)); + System.out.println(splitDate(a, b, IntervalType.SECOND, 90)); + List dateSplits = splitDate(a, b, IntervalType.MINUTE, 15); + dateSplits.forEach(d -> { + long start = toMillSeconds(d.getStartTime()); + long end= toMillSeconds(d.getEndTime()); + System.out.println(start + "-" + end); + }); + + System.out.println(LocalDateTime.now().plusHours(-24)); + } +} diff --git a/business/src/main/java/com/fizz/business/utils/ErrorDataException.java b/business/src/main/java/com/fizz/business/utils/ErrorDataException.java new file mode 100644 index 0000000..d47e83c --- /dev/null +++ b/business/src/main/java/com/fizz/business/utils/ErrorDataException.java @@ -0,0 +1,108 @@ +package com.fizz.business.utils; + +import com.fizz.business.constants.enums.ExceptionCodeEnum; +import org.springframework.stereotype.Component; + +/** + * Global business exception class for error data handling + */ + +@Component +public class ErrorDataException extends RuntimeException { + private final ExceptionCodeEnum codeEnum; + private Object errorData; + + // ================ Basic Constructors ================ + + public ErrorDataException() { + super(ExceptionCodeEnum.ERROR.getMessage()); + this.codeEnum = ExceptionCodeEnum.ERROR; + } + + public ErrorDataException(String message) { + super(message); + this.codeEnum = ExceptionCodeEnum.ERROR; + } + + public ErrorDataException(Throwable cause) { + super(ExceptionCodeEnum.ERROR.getMessage(), cause); + this.codeEnum = ExceptionCodeEnum.ERROR; + } + + public ErrorDataException(String message, Throwable cause) { + super(message, cause); + this.codeEnum = ExceptionCodeEnum.ERROR; + } + + // ================ Full Feature Constructors ================ + + public ErrorDataException(ExceptionCodeEnum codeEnum) { + super(codeEnum.getMessage()); + this.codeEnum = codeEnum; + } + + public ErrorDataException(ExceptionCodeEnum codeEnum, String extendMessage) { + super(combineMessage(codeEnum, extendMessage)); + this.codeEnum = codeEnum; + } + + public ErrorDataException(ExceptionCodeEnum codeEnum, Throwable cause) { + super(codeEnum.getMessage(), cause); + this.codeEnum = codeEnum; + } + + public ErrorDataException(ExceptionCodeEnum codeEnum, String extendMessage, Throwable cause) { + super(combineMessage(codeEnum, extendMessage), cause); + this.codeEnum = codeEnum; + } + + // ================ With Error Data Constructors ================ + + public ErrorDataException(ExceptionCodeEnum codeEnum, Object errorData) { + super(codeEnum.getMessage()); + this.codeEnum = codeEnum; + this.errorData = errorData; + } + + public ErrorDataException(ExceptionCodeEnum codeEnum, String extendMessage, Object errorData) { + super(combineMessage(codeEnum, extendMessage)); + this.codeEnum = codeEnum; + this.errorData = errorData; + } + + public ErrorDataException(ExceptionCodeEnum codeEnum, Throwable cause, Object errorData) { + super(codeEnum.getMessage(), cause); + this.codeEnum = codeEnum; + this.errorData = errorData; + } + + public ErrorDataException(ExceptionCodeEnum codeEnum, String extendMessage, Throwable cause, Object errorData) { + super(combineMessage(codeEnum, extendMessage), cause); + this.codeEnum = codeEnum; + this.errorData = errorData; + } + + // ================ Helper Methods ================ + + private static String combineMessage(ExceptionCodeEnum codeEnum, String extendMessage) { + return String.format("%s: %s", codeEnum.getMessage(), extendMessage); + } + + // ================ Getters ================ + + public ExceptionCodeEnum getCodeEnum() { + return codeEnum; + } + + public Object getErrorData() { + return errorData; + } + + // ================ Override Methods ================ + + @Override + public String toString() { + return String.format("ErrorDataException{code=%s, message='%s', errorData=%s}", + codeEnum.getCode(), getMessage(), errorData); + } +} diff --git a/business/src/main/java/com/fizz/business/utils/MatmapUtil.java b/business/src/main/java/com/fizz/business/utils/MatmapUtil.java new file mode 100644 index 0000000..762df56 --- /dev/null +++ b/business/src/main/java/com/fizz/business/utils/MatmapUtil.java @@ -0,0 +1,131 @@ +package com.fizz.business.utils; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.fizz.business.domain.ProMatmap; +import com.fizz.business.dto.MatmapDTO; +import com.fizz.business.mapper.ProMatmapMapper; +import com.fizz.business.service.client.RedisCacheManager; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * matmap数据操作封装 + * + * @author chenhao + * @date 2023/05/25 + */ +@Slf4j +@Component +public class MatmapUtil { + + private static ProMatmapMapper romtbMatmapMapper; + private static RedisCacheManager redisCacheManager; + + @Autowired + public void setRomtbMatmapMapper(ProMatmapMapper romtbMatmapMapper) { + MatmapUtil.romtbMatmapMapper = romtbMatmapMapper; + } + + @Autowired + public void setRedisCacheManage(RedisCacheManager redisCacheManager) { + MatmapUtil.redisCacheManager = redisCacheManager; + } + + @PostConstruct + public static void init() { + redisCacheManager.setMatmapList(getRomtbMatmap()); + log.info("#################load matmap from db#################"); + } + + private static List getRomtbMatmap() { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.orderByAsc(ProMatmap::getPosIdx); + List list = romtbMatmapMapper.selectList(queryWrapper); + return list.stream().map(m -> BeanUtil.toBean(m, MatmapDTO.class)).collect(Collectors.toList()); + } + + public static boolean notReady(MatmapDTO matmap) { + return Objects.isNull(matmap) || StrUtil.isBlank(matmap.getMatId()); + } + + public static boolean already(MatmapDTO matmap) { + return Objects.nonNull(matmap) && StrUtil.isNotBlank(matmap.getMatId()); + } + + public static void setMatId(int index, String matId) { + MatmapDTO matmap = getMatmap(index); + if (ObjectUtil.isNull(matmap)) { + return; + } + matmap.setPosIdx(index); + matmap.setMatId(matId); + redisCacheManager.setMatmap(index, matmap); + } + + public static String getMatId(int index) { + MatmapDTO matmap = getMatmap(index); + if (MatmapUtil.notReady(matmap)) return null; + return matmap.getMatId(); + } + + public static void clearMatmap(int index) { + MatmapDTO matmap = getMatmap(index); + if (ObjectUtil.isNull(matmap)) { + return; + } + matmap.setMatId(null); + matmap.setPlanId(null); + matmap.setPlanNo(null); + redisCacheManager.setMatmap(index, matmap); + } + + public static void setMatmap(int index, String matId, Long planId, String planNo) { + MatmapDTO matmap = getMatmap(index); + if (ObjectUtil.isNull(matmap)) { + return; + } + matmap.setPosIdx(index); + matmap.setMatId(matId); + matmap.setPlanId(planId); + matmap.setPlanNo(planNo); + redisCacheManager.setMatmap(index, matmap); + } + + public static MatmapDTO getMatmap(int index) { + MatmapDTO matmap = redisCacheManager.getMatmap(index); + if (Objects.isNull(matmap)) { + init(); + } + return redisCacheManager.getMatmap(index); + } + + public static List getMatmapList() { + List matmapList = redisCacheManager.getMatmapList(); + if (CollUtil.isEmpty(matmapList)) { + init(); + } + return redisCacheManager.getMatmapList(); + } + + public static void clearMatmapByMatId(String matId) { + List matmapList = getMatmapList(); + for (MatmapDTO matmap : matmapList) { + if (Objects.nonNull(matmap) && Objects.equals(matmap.getMatId(), matId)) { + matmap.setMatId(null); + matmap.setPlanId(null); + matmap.setPlanNo(null); + } + } + redisCacheManager.setMatmapList(matmapList); + } +} diff --git a/business/src/main/java/com/fizz/business/utils/NumberUtil.java b/business/src/main/java/com/fizz/business/utils/NumberUtil.java new file mode 100644 index 0000000..db47abb --- /dev/null +++ b/business/src/main/java/com/fizz/business/utils/NumberUtil.java @@ -0,0 +1,118 @@ +package com.fizz.business.utils; + +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.List; +import java.util.stream.Collectors; + + +@Component +public class NumberUtil { + + public static double add(double number1, double number2) { + BigDecimal bignum1 = new BigDecimal(String.valueOf(number1)); + BigDecimal bignum2 = new BigDecimal(String.valueOf(number2)); + BigDecimal bignum3 = bignum1.add(bignum2); + double result = bignum3.doubleValue(); + return result; + } + + public static BigDecimal add(BigDecimal number1, BigDecimal number2) { + BigDecimal result = number1.add(number2); + return result; + } + + public static double subtract(double number1, double number2) { + BigDecimal bignum1 = new BigDecimal(String.valueOf(number1)); + BigDecimal bignum2 = new BigDecimal(String.valueOf(number2)); + BigDecimal bignum3 = bignum1.subtract(bignum2); + double result = bignum3.doubleValue(); + return result; + } + + public static BigDecimal subtract(BigDecimal number1, BigDecimal number2) { + BigDecimal result = number1.subtract(number2); + return result; + } + + public static double multiply(double number1, double number2) { + BigDecimal bignum1 = new BigDecimal(String.valueOf(number1)); + BigDecimal bignum2 = new BigDecimal(String.valueOf(number2)); + BigDecimal bignum3 = bignum1.multiply(bignum2); + double result = bignum3.doubleValue(); + return result; + } + + public static BigDecimal multiply(BigDecimal number1, BigDecimal number2) { + BigDecimal result = number1.multiply(number2); + return result; + } + + public static double divide(double number1, double number2, int scale) { + BigDecimal bignum1 = new BigDecimal(String.valueOf(number1)); + BigDecimal bignum2 = new BigDecimal(String.valueOf(number2)); + if (number2 == 0.0) { + return 0.0; + } else { + double result = bignum1.divide(bignum2, scale, 4).doubleValue(); + return result; + } + } + + public static BigDecimal divide(BigDecimal number1, BigDecimal number2, int scale) { + if (number2.compareTo(BigDecimal.ZERO) == 0) { + return new BigDecimal("0"); + } else { + BigDecimal result = number1.divide(number2, scale, 4); + return result; + } + } + + public static double divideRate(double number1, double number2, int scale) { + BigDecimal bignum1 = new BigDecimal(String.valueOf(number1)); + BigDecimal bignum2 = new BigDecimal(String.valueOf(number2)); + if (number2 == 0.0) { + return 0.0; + } else { + double result = formatDouble(bignum1.divide(bignum2, scale, 4).doubleValue() * 100.0, 2); + return result; + } + } + + public static BigDecimal divideRate(BigDecimal number1, BigDecimal number2, int scale) { + if (number2.compareTo(BigDecimal.ZERO) == 0) { + return new BigDecimal("0"); + } else { + BigDecimal result = number1.divide(number2, scale, 4).multiply(new BigDecimal("100")); + return result; + } + } + + public static double formatDouble(double number, int scale) { + BigDecimal bigDecimal = new BigDecimal(String.valueOf(number)); + return bigDecimal.setScale(scale, 4).doubleValue(); + } + + public static BigDecimal formatBigDecimal(BigDecimal number, int scale) { + return number.setScale(scale, 4); + } + + public static BigDecimal doubleTransferBigDecimal(double number) { + BigDecimal bigDecimal = new BigDecimal(String.valueOf(number)); + return bigDecimal; + } + + public static double BigDecimalTransferDouble(BigDecimal number) { + double result = number.doubleValue(); + return result; + } + + public static double divideForList(List list) { + Double resultAvg = (Double)list.stream().collect(Collectors.averagingDouble((item) -> { + return item; + })); + return resultAvg; + } + +} diff --git a/business/src/main/java/com/fizz/business/utils/PageUtil.java b/business/src/main/java/com/fizz/business/utils/PageUtil.java new file mode 100644 index 0000000..c401a5d --- /dev/null +++ b/business/src/main/java/com/fizz/business/utils/PageUtil.java @@ -0,0 +1,16 @@ +package com.fizz.business.utils; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fizz.business.form.PageForm; + +/** + * @author chenhao + * @date 2023/04/28 + */ +public class PageUtil { + + public static Page getPageParam(PageForm pageParam){ + return new Page<>(pageParam.getCurrent(),pageParam.getSize()); + } + +} diff --git a/business/src/main/java/com/fizz/business/utils/RedisUtil.java b/business/src/main/java/com/fizz/business/utils/RedisUtil.java new file mode 100644 index 0000000..c94d50e --- /dev/null +++ b/business/src/main/java/com/fizz/business/utils/RedisUtil.java @@ -0,0 +1,225 @@ +package com.fizz.business.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + + +@Component +public class RedisUtil { + + private static RedisTemplate redis; + + + + @Autowired + public void setRedisTemplate(RedisTemplate redisTemplate) { + redis = redisTemplate; + } + + // ============================== Common ============================== + + /** + * 删除多个key + */ + public static Long delete(Collection keys) { + return redis.delete(keys); + } + + /** + * 根据pattern获取匹配的keys + */ + public static Set keys(K pattern) { + return redis.keys(pattern); + } + + // ============================== String ============================== + + /** + * 设置键值对 + */ + public static void setValue(K key, V value) { + redis.opsForValue().set(key, value); + } + + /** + * 设置键值对并设置过期时间(毫秒) + */ + public static void setValue(K key, V value, long time) { + redis.opsForValue().set(key, value, time, TimeUnit.MILLISECONDS); + } + + /** + * 获取值 + */ + public static V getValue(K key) { + return (V) redis.opsForValue().get(key); + } + + /** + * 值递增 + */ + public static Long increment(K key) { + return redis.opsForValue().increment(key); + } + + /** + * 值递减 + */ + public static Long decrement(K key) { + return redis.opsForValue().decrement(key); + } + + // ============================== List ============================== + + /** + * 左推入单个元素 + */ + public static void leftPush(K key, V value) { + redis.opsForList().leftPush(key, value); + } + + /** + * 左推入多个元素 + */ + public static void leftPush(K key, List values) { + redis.opsForList().leftPushAll(key, values); + } + + /** + * 右推入单个元素 + */ + public static void rightPush(K key, V value) { + redis.opsForList().rightPush(key, value); + } + + /** + * 右推入多个元素 + */ + public static void rightPush(K key, List values) { + redis.opsForList().rightPushAll(key, values); + } + + /** + * 通过索引设置列表元素 + */ + public static void pushListByIndex(K key, V value, int index) { + redis.opsForList().set(key, (long) index, value); + } + + /** + * 获取列表范围(0到-1表示全部) + */ + public static List range(K key) { + return redis.opsForList().range(key, 0L, -1L); + } + + /** + * 移除列表元素 + */ + public static void remove(K key, long count, V value) { + redis.opsForList().remove(key, count, value); + } + + /** + * 获取列表长度 + */ + public static Long listSize(K key) { + return redis.opsForList().size(key); + } + + /** + * 通过索引获取列表元素 + */ + public static V getListByIndex(K key, Long index) { + return (V) redis.opsForList().index(key, index); + } + + // ============================== Set ============================== + + /** + * 向集合添加多个元素 + */ + public static void add(K key, List values) { + redis.opsForSet().add(key, values.toArray()); + } + + /** + * 向集合添加一个或多个元素 + */ + public static void add(K key, V... values) { + redis.opsForSet().add(key, values); + } + + /** + * 获取集合所有成员 + */ + public static Set members(K key) { + return redis.opsForSet().members(key); + } + + /** + * 移除集合中的多个元素 + */ + public static void remove(K key, List values) { + redis.opsForSet().remove(key, values.toArray()); + } + + /** + * 移除集合中的一个或多个元素 + */ + public static void remove(K key, V... values) { + redis.opsForSet().remove(key, values); + } + + /** + * 返回两个集合的差集 + */ + public static Set difference(K key1, K key2) { + return redis.opsForSet().difference(key1, key2); + } + + /** + * 随机获取集合中的一个元素 + */ + public static V randomMember(K key) { + return (V) redis.opsForSet().randomMember(key); + } + + /** + * 随机弹出集合中的一个元素 + */ + public static V pop(K key) { + return (V) redis.opsForSet().pop(key); + } + + // ============================== Hash ============================== + + /** + * 设置整个Hash + */ + public static void putAll(K key, Map map) { + redis.opsForHash().putAll(key, map); + } + + /** + * 设置Hash中的单个字段 + */ + public static void put(K key, K hashKey, V value) { + redis.opsForHash().put(key, hashKey, value); + } + + /** + * 获取Hash中的字段值 + */ + public static V get(K key, K hashKey) { + return (V) redis.opsForHash().get(key, hashKey); + } + +} diff --git a/business/src/main/java/com/fizz/business/utils/ReturnInfoVO.java b/business/src/main/java/com/fizz/business/utils/ReturnInfoVO.java new file mode 100644 index 0000000..b9ac80d --- /dev/null +++ b/business/src/main/java/com/fizz/business/utils/ReturnInfoVO.java @@ -0,0 +1,33 @@ +package com.fizz.business.utils; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +/** + * 回退信息 + * + * @author chenhao + * @date 2023/7/27 + */ +@Getter +@Setter +@Builder +public class ReturnInfoVO { + + @Schema(description = "钢卷号") + private String entryMatId; + + @Schema(description = "计划ID") + private Long planId; + + @Schema(description = "计划号") + private String planNo; + + @Schema(description = "回退类型,ALL_RETURN-整卷回退;HALF_RETURN-半卷回退") + private String returnType; + + @Schema(description = "回退重量") + private double returnWeight; +} diff --git a/business/src/main/java/com/fizz/business/utils/WebSocketUtil.java b/business/src/main/java/com/fizz/business/utils/WebSocketUtil.java index a60b169..17559da 100644 --- a/business/src/main/java/com/fizz/business/utils/WebSocketUtil.java +++ b/business/src/main/java/com/fizz/business/utils/WebSocketUtil.java @@ -1,19 +1,28 @@ package com.fizz.business.utils; -import com.alibaba.druid.support.json.JSONUtils; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.fizz.business.constants.CommonConstants; import com.fizz.business.constants.enums.WsTypeEnum; +import com.fizz.business.dto.CoilPositionDTO; +import com.fizz.business.dto.L1CoilLineMeasureDTO; +import com.fizz.business.dto.MatmapDTO; +import com.fizz.business.dto.WsSignalMsgDTO; +import com.fizz.business.form.L1OperateMatForm; +import com.fizz.business.form.WebOperateMatForm; import com.fizz.business.service.client.TrackWsHandler; -import com.fizz.business.vo.CrmPdiPlanVO; +import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; -import javax.annotation.Resource; import java.io.IOException; +import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; @Slf4j @@ -28,7 +37,7 @@ public class WebSocketUtil { } public static void sendMessage(WsTypeEnum type, String text) { - Map clients = trackWsHandler.getClients().getOrDefault(type.name(), new ConcurrentHashMap<>()); + Map clients = trackWsHandler.getClients().getOrDefault(type.name(), Maps.newConcurrentMap()); TextMessage message = new TextMessage(text); clients.values().forEach(s -> { try { @@ -40,9 +49,39 @@ public class WebSocketUtil { }); } - public static void sendMatmapMsg(CrmPdiPlanVO crmPdiPlanVO) { - sendMessage(WsTypeEnum.valueOf(WsTypeEnum.track_matmap.getValue()), JSONUtils.toJSONString(crmPdiPlanVO)); + public static void sendSignalMsg(WebOperateMatForm form) { + sendSignalMsg(form, false); } + public static void sendSignalMsg(WebOperateMatForm form, boolean virtualPlanFlag) { + WsSignalMsgDTO msg = new WsSignalMsgDTO(); + BeanUtil.copyProperties(form, msg, "operation"); + msg.setOperation(form.getOperation().name()); + msg.setAutoFlag(CommonConstants.OPERATE_FROM_WEB); + msg.setVirtualPlanFlag(virtualPlanFlag); + sendMessage(WsTypeEnum.track_signal, JSON.toJSONString(msg)); + } + + public static void sendSignalMsg(L1OperateMatForm form) { + WsSignalMsgDTO msg = new WsSignalMsgDTO(); + BeanUtil.copyProperties(form, msg, "operation"); + msg.setOperation(form.getOperation().name()); + sendMessage(WsTypeEnum.track_signal, JSON.toJSONString(msg)); + } + public static void sendPositionMsg(CoilPositionDTO positionDTO) { + sendMessage(WsTypeEnum.track_position, JSONUtil.toJsonStr(positionDTO)); + } + + public static void sendMeasureMsg(L1CoilLineMeasureDTO measureDTO) { + + + sendMessage(WsTypeEnum.track_measure, JSONUtil.toJsonStr(measureDTO)); + } + + public static void sendMatmapMsg() { + List list = MatmapUtil.getMatmapList(); + if (CollUtil.isEmpty(list)) return; + sendMessage(WsTypeEnum.track_matmap, JSONUtil.toJsonStr(list)); + } } diff --git a/business/src/main/java/com/fizz/business/vo/CoilMeasureVO.java b/business/src/main/java/com/fizz/business/vo/CoilMeasureVO.java new file mode 100644 index 0000000..ddd6f5b --- /dev/null +++ b/business/src/main/java/com/fizz/business/vo/CoilMeasureVO.java @@ -0,0 +1,33 @@ +package com.fizz.business.vo; + + +import cn.hutool.core.lang.Pair; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class CoilMeasureVO implements Serializable { + + @Schema(description = "参数名") + private String valueName; + + @Schema(description = "设定值") + private String definedValue; + + @Schema(description = "最大值") + private String maxValue; + + @Schema(description = "最小值") + private String minValue; + + private List> data; +} diff --git a/business/src/main/java/com/fizz/business/vo/CoilPositionVO.java b/business/src/main/java/com/fizz/business/vo/CoilPositionVO.java new file mode 100644 index 0000000..ae56942 --- /dev/null +++ b/business/src/main/java/com/fizz/business/vo/CoilPositionVO.java @@ -0,0 +1,21 @@ +package com.fizz.business.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class CoilPositionVO implements Serializable { + + @Schema(description = "当前钢卷号") + private String currMatId; + @Schema(description = "当前钢卷焊缝位置") + private Double currStripLocation; + + @Schema(description = "上一个钢卷号") + private String prevMatId; +} diff --git a/business/src/main/java/com/fizz/business/vo/CrmPdiPlanVO.java b/business/src/main/java/com/fizz/business/vo/CrmPdiPlanVO.java index 6cb03f5..6c68b6e 100644 --- a/business/src/main/java/com/fizz/business/vo/CrmPdiPlanVO.java +++ b/business/src/main/java/com/fizz/business/vo/CrmPdiPlanVO.java @@ -4,140 +4,113 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; import java.time.LocalDateTime; @Data public class CrmPdiPlanVO { - @Schema(description = "id") - private Long id; + private Long id; // 主键ID - @Schema(description = "序列号") - private Integer seqid; - - @Schema(description = "多火轧制次数") - private Integer operid; - - @Schema(description = "轧制模式 1轧制力 2延伸率") - private Integer operMode; - - @Schema(description = "卷ID") - private String coilid; - - @Schema(description = "热轧卷ID") - private String hotCoilid; - - @Schema(description = "道次数") - private Integer passno; - - @Schema(description = "退火厚度") - private Integer annealThick; - - @Schema(description = "入口厚度") - private Double entryThick; - - @Schema(description = "入口宽度") - private Double entryWidth; - - @Schema(description = "入口重量") - private Double entryWeight; - - @Schema(description = "入口长度") - private Double entryLength; - - @Schema(description = "入口内径") - private Integer entryInnerDiameter; - - @Schema(description = "入口外径") - private Integer entryOuterDiameter; - - @Schema(description = "出口卷号") - private String exitCoilid; - - @Schema(description = "下工序代码 1冷硬卷 2退火卷 3其他 ") - private String nextUnit; - - @Schema(description = "分割数量") - private Integer splitNum; - - @Schema(description = "切割模式") - private Integer cutMode; - - @Schema(description = "出口重量1") - private Double exitValue1; - - @Schema(description = "出口重量2") - private Double exitValue2; - - @Schema(description = "出口重量3") - private Double exitValue3; - - @Schema(description = "出口重量4") - private Double exitValue4; - - @Schema(description = "出口重量5") - private Double exitValue5; - - @Schema(description = "出口重量6") - private Double exitValue6; - - @Schema(description = "出口重量") - private Double exitWeight; - - @Schema(description = "出口长度") - private Double exitLength; - - @Schema(description = "出口厚度") - private Double exitThick; - - @Schema(description = "出口宽度") - private Double exitWidth; - - @Schema(description = "钢种") - private String grade; - - @Schema(description = "屈服强度") - private Integer yieldStrength; - - @Schema(description = "抗拉强度") - private Integer tensileStrength; - - @Schema(description = "状态 NEW READY ONLINE PRODUCING PRODUCT") - private String status; - - @Schema(description = "计划号") - private String planNo; - - @Schema(description = "压下率") - private Double reductionRate; - - @Schema(description = "热卷温度") - private Double hotCoilTemp; - - @Schema(description = "厚度正偏差") - private Double entryThickMaxtol; - - @Schema(description = "厚度正偏差") - private Double entryThickMintol; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Schema(description = "计划日期") - private LocalDateTime createTime; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Schema(description = "记录日期") - private LocalDateTime insdate; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Schema(description = "上线时间") - private LocalDateTime onlineTime; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Schema(description = "开始日期") - private LocalDateTime startDate; - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Schema(description = "结束日期") - private LocalDateTime endDate; + private Integer seqid; // 主键ID + private String coilid; // 钢卷号 + private Integer picklingCount; // 酸洗次数 + private Integer dummyCoilFlag; // 虚卷标识 + private Integer seqno; // 顺序号 + private Integer status; // 状态 + private String planid; // 计划ID + private String planType; // 计划类型 + private BigDecimal yieldPoint; // 屈服点 + private BigDecimal entryWeight; // 入口重量(t) + private BigDecimal entryThick; // 入口厚度(mm) + private BigDecimal entryWidth; // 入口宽度(mm) + private BigDecimal entryLength; // 入口长度(mm) + private BigDecimal entryOuterDiameter; // 入口外径(mm) + private BigDecimal entryInnerDiameter; // 入口内径(mm) + private BigDecimal exitInnerDiameter; // 出口内径(mm) + private String steelGrade; // 钢种 + private String exitCoilid; // 出口卷号 + private Integer tlvFlag; // 张力平整标识 + private String orderNo; // 订单号 + private String custommerCode; // 客户代码 + private BigDecimal orderThick; // 订单厚度(mm) + private BigDecimal orderWidth; // 订单宽度(mm) + private BigDecimal orderLenLow; // 订单长度下限(mm) + private BigDecimal orderLenUp; // 订单长度上限(mm) + private BigDecimal orderWt; // 订单重量(t) + private BigDecimal orderWtLow; // 订单重量下限(t) + private BigDecimal orderWtUp; // 订单重量上限(t) + private BigDecimal orderMetCoatTop; // 订单镀层上 + private BigDecimal orderMetCoatBot; // 订单镀层下 + private String finalUse; // 最终用途 + private String hotCoilCode; // 热卷代码 + private BigDecimal exitLengthTar; // 出口目标长度(mm) + private BigDecimal exitLengthTolMax; // 出口长度公差最大值(mm) + private BigDecimal exitLengthTolMin; // 出口长度公差最小值(mm) + private BigDecimal exitThickTar; // 出口目标厚度(mm) + private BigDecimal exitThickTolMax; // 出口厚度公差最大值(mm) + private BigDecimal exitThickTolMin; // 出口厚度公差最小值(mm) + private BigDecimal exitWidthTar; // 出口目标宽度(mm) + private BigDecimal exitWidthTolMax; // 出口宽度公差最大值(mm) + private BigDecimal exitWidthTolMin; // 出口宽度公差最小值(mm) + private String nextWholeBacklogCode; // 下道全流程积压代码 + private String prevWholeBacklogCode; // 上道全流程积压代码 + private String exitWtMode; // 出口重量模式 + private Integer splitNum; // 分卷数量 + private BigDecimal exitWeight1; // 出口重量1 + private BigDecimal exitWeight2; // 出口重量2 + private BigDecimal exitWeight3; // 出口重量3 + private BigDecimal exitWeight4; // 出口重量4 + private BigDecimal exitWeight5; // 出口重量5 + private BigDecimal exitWeight6; // 出口重量6 + private String headSampleMode; // 头部取样模式 + private String headSamplePosition; // 头部取样位置 + private BigDecimal headSampleLength; // 头部取样长度(mm) + private String headSamplePlace; // 头部取样地点 + private Integer headSampleNum; // 头部取样数量 + private String tailSampleMode; // 尾部取样模式 + private String tailSamplePosition; // 尾部取样位置 + private BigDecimal tailSampleLength; // 尾部取样长度(mm) + private String tailSamplePlace; // 尾部取样地点 + private Integer tailSampleNum; // 尾部取样数量 + private LocalDateTime timestamp; // 时间戳 + private LocalDateTime onlineDate; // 上线时间 + private LocalDateTime startDate; // 开始时间 + private LocalDateTime endDate; // 结束时间 + private LocalDateTime furInDate; // 进炉时间 + private LocalDateTime furOutDate; // 出炉时间 + private LocalDateTime createTime; // 创建时间 + private LocalDateTime updateTime; // 更新时间 + private String surfaceVice; // 副面 + private String weldCode; // 焊缝代码 + private Integer spmFlag; // SPM标识 + private BigDecimal spmElongation; // SPM延伸率(%) + private BigDecimal spmRollforce; // SPM轧制力 + private String spmProcessType; // SPM工艺类型 + private String spmControlMode; // SPM控制模式 + private BigDecimal spmBendingForce; // SPM弯曲力 + private BigDecimal spmCrimpingRollMesh; // SPM咬入辊目 + private BigDecimal spmBillyRollMesh; // SPM精轧辊目 + private Integer trimFlag; // 切边标识 + private String tlvMode; // 张力平整模式 + private BigDecimal tlvElongation; // 张力平整延伸率(%) + private Integer chromating; // 钝化标识 + private String coatingCode; // 镀层代码 + private Integer oilingFlag; // 涂油标识 + private String oilingType; // 涂油类型 + private BigDecimal oilingTop; // 涂油上 + private BigDecimal oilingBottom; // 涂油下 + private String heatCycle; // 热循环 + private String coatingSelection; // 镀层选择 + private String coatingType; // 镀层类型 + private String chemTreatMode; // 化学处理模式 + private BigDecimal aimWeightTop; // 目标重量上 + private BigDecimal aimWeightBottom; // 目标重量下 + private BigDecimal maxTolWeightTop; // 最大公差重量上 + private BigDecimal maxTolWeightBottom; // 最大公差重量下 + private BigDecimal headendGaugeLength; // 头端测厚长度(mm) + private BigDecimal tailendGaugeLength; // 尾端测厚长度(mm) + private String origin; // 产地 + private String originCoilid; // 原卷号 } diff --git a/business/src/main/java/com/fizz/business/vo/EventVO.java b/business/src/main/java/com/fizz/business/vo/EventVO.java new file mode 100644 index 0000000..759f48c --- /dev/null +++ b/business/src/main/java/com/fizz/business/vo/EventVO.java @@ -0,0 +1,19 @@ +package com.fizz.business.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class EventVO implements Serializable { + + @Schema(description = "时间") + private String time; + @Schema(description = "事件描述") + private String eventDesc; + + @Schema(description = "错误信息") + private String errorMsg; +} diff --git a/business/src/main/java/com/fizz/business/vo/GroupVO.java b/business/src/main/java/com/fizz/business/vo/GroupVO.java new file mode 100644 index 0000000..515b8a6 --- /dev/null +++ b/business/src/main/java/com/fizz/business/vo/GroupVO.java @@ -0,0 +1,17 @@ +package com.fizz.business.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class GroupVO { + @Schema(description = "时间") + private String time; + @Schema(description = "班组") + private String groupNo; + @Schema(description = "当班电单耗") + private String electricityUnit; + @Schema(description = "当班产量") + private String yield; +} diff --git a/business/src/main/java/com/fizz/business/vo/HalfReturnInfoVO.java b/business/src/main/java/com/fizz/business/vo/HalfReturnInfoVO.java new file mode 100644 index 0000000..9b34132 --- /dev/null +++ b/business/src/main/java/com/fizz/business/vo/HalfReturnInfoVO.java @@ -0,0 +1,21 @@ +package com.fizz.business.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +/** + * 回退信息 + * + * @author chenhao + * @date 2023/7/27 + */ +@Getter +@Setter +@Builder +public class HalfReturnInfoVO { + + @Schema(description = "半卷回退钢卷号") + private String returnMatId; +} diff --git a/business/src/main/java/com/fizz/business/vo/PdiPlanVO.java b/business/src/main/java/com/fizz/business/vo/PdiPlanVO.java new file mode 100644 index 0000000..a46de98 --- /dev/null +++ b/business/src/main/java/com/fizz/business/vo/PdiPlanVO.java @@ -0,0 +1,160 @@ +package com.fizz.business.vo; + +import com.fizz.business.dto.PdiPlanSubDTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class PdiPlanVO implements Serializable { + + @Schema(description = "主键") + private Long id; + + @Schema(description = "计划号") + private String planNo; + + @Schema(description = "计划卷顺序") + private Integer planMatSeq; + + @Schema(description = "L3下发的机组代码") + private String l3UnitCode; + + @Schema(description = "机组号") + private String unitCode; + + @Schema(description = "工序代码") + private String processCode; + + @Schema(description = "合同号") + private String orderNo; + + @Schema(description = "产品号") + private String prodCode; + + @Schema(description = "钢种") + private String steelGrade; + + @Schema(description = "工艺规程id") + private Long setupId; + + @Schema(description = "工艺规程名称") + private String setupName; + + @Schema(description = "工艺规程版本号") + private String setupVersion; + + @Schema(description = "原料卷号") + private String originMatId; + + @Schema(description = "来料卷号") + private String entryMatId; + + @Schema(description = "半卷回退子卷号") + private String returnMatId; + + @Schema(description = "来料卷厂家") + private String entryMatFactory; + + @Schema(description = "来料宽度") + private Double entryWidth; + + @Schema(description = "来料厚度") + private Double entryThickness; + + @Schema(description = "来料长度") + private Double entryLength; + + @Schema(description = "来料重量") + private Double entryWeight; + + @Schema(description = "实际来料重量,CP/ZR/CA需要修改") + private Double actualEntryWeight; + + @Schema(description = "投料重量,半卷回退时更新") + private Double feedWeight; + + @Schema(description = "来料外径") + private Double entryOuterDiameter; + + @Schema(description = "来料内径") + private Double entryInnerDiameter; + + @Schema(description = "目标宽度") + private Double targetWidth; + + @Schema(description = "目标宽度下限") + private Double targetWidthMin; + + @Schema(description = "目标宽度上限") + private Double targetWidthMax; + + @Schema(description = "目标厚度") + private Double targetThickness; + + @Schema(description = "目标厚度上限") + private Double targetThicknessMax; + + @Schema(description = "目标厚度下限") + private Double targetThicknessMin; + + @Schema(description = "切边量") + private Double trimAmount; + + @Schema(description = "涂镁方式, 1=冷涂,2=热涂") + private String coatFlag; + + @Schema(description = "刻痕方式,1=在线刻痕,2=离线刻痕,3=不刻痕") + private String nickFlag; + + @Schema(description = "来源,L3-L3计划,MANUAL-人工") + private String origin; + + @Schema(description = "类型,PLAN_MAT-计划卷、TEMP_MAT-临时卷、BLOCK_MAT-封闭卷") + private String type; + + @Schema(description = "INVALID-无效,UNCONFIRMED-待确认,NEW-新计划,READY-准备好,ONLINE-上线,PRODUCING-生产中,PRODUCT-生产完成,BLOCK-封闭,REFUSE-拒绝,DELETED-删除") + private String status; + + @Schema(description = "回退类型,ALL_RETURN-整卷回退,HALF_RETURN-整卷回退") + private String returnType; + + @Schema(description = "半卷回退类型,HEAD_COIL-头部卷,TAIL_COIL-尾部卷") + private String halfReturnType; + + @Schema(description = "排序字段") + private Long sort; + + @Schema(description = "拒绝原因") + private String refuseReason; + + @Schema(description = "计划确认时间") + private LocalDateTime confirmTime; + + @Schema(description = "计划上线时间") + private LocalDateTime onlineTime; + + @Schema(description = "计划生产时间") + private LocalDateTime producingTime; + + @Schema(description = "计划生产完成时间") + private LocalDateTime productTime; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + + @Schema(description = "更新时间") + private LocalDateTime updateTime; + + @Schema(description = "L2计划子卷") + private List subPlanList; + + @Schema(description = "是否实验卷") + private String isExperiment; + + @Schema(description = "实验类别") + private String experimentType; +} diff --git a/business/src/main/java/com/fizz/business/vo/ReturnInfoVO.java b/business/src/main/java/com/fizz/business/vo/ReturnInfoVO.java new file mode 100644 index 0000000..1840cc7 --- /dev/null +++ b/business/src/main/java/com/fizz/business/vo/ReturnInfoVO.java @@ -0,0 +1,33 @@ +package com.fizz.business.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +/** + * 回退信息 + * + * @author chenhao + * @date 2023/7/27 + */ +@Getter +@Setter +@Builder +public class ReturnInfoVO { + + @Schema(description = "钢卷号") + private String entryMatId; + + @Schema(description = "计划ID") + private Long planId; + + @Schema(description = "计划号") + private String planNo; + + @Schema(description = "回退类型,ALL_RETURN-整卷回退;HALF_RETURN-半卷回退") + private String returnType; + + @Schema(description = "回退重量") + private double returnWeight; +} diff --git a/business/src/main/resources/mapper/DeviceDefineMapper.xml b/business/src/main/resources/mapper/DeviceDefineMapper.xml new file mode 100644 index 0000000..a5ca5bb --- /dev/null +++ b/business/src/main/resources/mapper/DeviceDefineMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/business/src/main/resources/mapper/HalfReturnMapper.xml b/business/src/main/resources/mapper/HalfReturnMapper.xml new file mode 100644 index 0000000..349c3b2 --- /dev/null +++ b/business/src/main/resources/mapper/HalfReturnMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/business/src/main/resources/mapper/PdoExcoilMapper.xml b/business/src/main/resources/mapper/PdoExcoilMapper.xml new file mode 100644 index 0000000..c898848 --- /dev/null +++ b/business/src/main/resources/mapper/PdoExcoilMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/business/src/main/resources/mapper/PdoExcoilSubMapper.xml b/business/src/main/resources/mapper/PdoExcoilSubMapper.xml new file mode 100644 index 0000000..f1edd13 --- /dev/null +++ b/business/src/main/resources/mapper/PdoExcoilSubMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/business/src/main/resources/mapper/PdoStripvalueMapper.xml b/business/src/main/resources/mapper/PdoStripvalueMapper.xml new file mode 100644 index 0000000..fde7887 --- /dev/null +++ b/business/src/main/resources/mapper/PdoStripvalueMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/business/src/main/resources/mapper/ProMatmapMapper.xml b/business/src/main/resources/mapper/ProMatmapMapper.xml index 48756fc..1237932 100644 --- a/business/src/main/resources/mapper/ProMatmapMapper.xml +++ b/business/src/main/resources/mapper/ProMatmapMapper.xml @@ -4,12 +4,17 @@ - - - UPDATE pro_matmap - SET matid = #{matid} - WHERE display_name = 'MILL' + + + insert into track_ca1_romtb_matmap ( + pos_idx, mat_id, plan_no, plan_id + ) + values + + (#{item.posIdx}, #{item.matId}, #{item.planNo}, #{item.planId}) + + on duplicate key update + mat_id = VALUES(mat_id),plan_no = VALUES(plan_no),plan_id = VALUES(plan_id) - \ No newline at end of file diff --git a/business/src/main/resources/mapper/SegmentMapper.xml b/business/src/main/resources/mapper/SegmentMapper.xml new file mode 100644 index 0000000..ced5338 --- /dev/null +++ b/business/src/main/resources/mapper/SegmentMapper.xml @@ -0,0 +1,64 @@ + + + + + + + + diff --git a/business/src/main/resources/mapper/SegmentTotalMapper.xml b/business/src/main/resources/mapper/SegmentTotalMapper.xml new file mode 100644 index 0000000..3c92be4 --- /dev/null +++ b/business/src/main/resources/mapper/SegmentTotalMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java index 3f4f485..9d9ddac 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java @@ -7,6 +7,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** @@ -18,6 +20,9 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; @EnableCaching public class RedisConfig extends CachingConfigurerSupport { + + private static final Jackson2JsonRedisSerializer VALUE_SERIALIZER = new Jackson2JsonRedisSerializer<>(Object.class); + private static final RedisSerializer SERIALIZER = new StringRedisSerializer(); @Bean @SuppressWarnings(value = { "unchecked", "rawtypes" }) public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) @@ -39,6 +44,16 @@ public class RedisConfig extends CachingConfigurerSupport return template; } + public static RedisTemplate fetchRedisTemplate(RedisTemplate redisTemplate, RedisConnectionFactory redisConnectionFactory) { + redisTemplate.setKeySerializer(SERIALIZER); + redisTemplate.setHashKeySerializer(SERIALIZER); + redisTemplate.setValueSerializer(VALUE_SERIALIZER); + redisTemplate.setHashValueSerializer(VALUE_SERIALIZER); + redisTemplate.setConnectionFactory(redisConnectionFactory); + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + @Bean public DefaultRedisScript limitScript() {