wang
2024-04-10 daed20c553f77fc48695f8523cd57bc56fb5a0fd
Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

# Conflicts:
# UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
39个文件已修改
2 文件已重命名
169个文件已添加
44个文件已删除
11465 ■■■■ 已修改文件
CacheGlassModule/src/main/java/com/mes/MesApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/controller/TidyUpGlassModuleController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/BigStorageCage.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/BigStorageCageDetails.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/DownStorageCage.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/DownStorageCagedetails.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/DownWorkstation.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/OrderTest.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/UpPattenUsage.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/UpWorkstation.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/mapper/HangzhouMesMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/mapper/OrderTestMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/mapper/PpMapper.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/CacheGlassService/LogicService.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/IOrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/ModuleB.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/MqMessage.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/RabbitMQUtils.java 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/RabbitMQUtils33.java 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/hangzhoumes/hangzhoumesService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/impl/OrderServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/pp/PpService.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/pp/SelectdppService.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/MesApplication.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/common/PlcTools/S7control.java 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/controller/LoadGlassController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/controller/OrderTestController.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/controller/userInfo/SysMenuController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/BigStorageCage.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/DownStorageCage.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/DownStorageCagedetails.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/DownWorkstation.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/OrderTest.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/Tempering.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/device/InitUtil.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/device/PLCAutoMes.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/device/PlcBitInfo.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/device/PlcBitObject.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/device/PlcParameterInfo.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/entity/device/PlcParameterObject.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/mapper/LoadGlassMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/mapper/OrderTestMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/service/IOrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/service/LoadGlassService.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/java/com/mes/service/impl/OrderServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LoadGlassModule/src/main/resources/JsonFile/PlcAlbania.json 414 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/JsonFile/PlcAlbania.json 414 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/MesApplication.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/common/PlcTools/S7control.java 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/controller/OrderTestController.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/controller/TemperingController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/BigStorageCage.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/BigStorageCageDetails.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/DownStorageCage.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/DownStorageCagedetails.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/DownWorkstation.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/EdgStorageCage.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/EdgStorageCageDetails.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/OrderTest.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/device/InitUtil.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/device/PLCAutoMes.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/device/PlcBitInfo.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/device/PlcBitObject.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/device/PlcParameterInfo.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/entity/device/PlcParameterObject.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/mapper/OrderTestMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/mapper/TemperingMapper.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/service/IOrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/service/ModuleA.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/service/ModuleB.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/service/TemperingOverService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/service/TemperingService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/service/impl/OrderServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/target/classes/application.yml 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package-lock.json 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/layout/MainErpView.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/router/index.js 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/stores/userInfo.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/webSocket.js 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/HomeView.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/LoginView.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseStorage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/returns.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/TL/Temperedlayout/Temperedlayout.vue 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue 280 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachineracktwo.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/vite.config.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/controller/DownWorkstationController.java 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/entity/DownStorageCageDetails.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/mapper/DownWorkstationMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/mapper/GlassInfoMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/mapper/SelectInfo.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/DownGlassCacheLogic.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/DownWorkstationService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/GlassInfoService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/Plchome.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/tools/WebSocketServer.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/pom.xml 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/pom.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/InterceptorConfig.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/MyCorsConfig.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/MybatisPlusConfig.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/RedisTemplateConfig.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/SessionConfig.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Swagger2Config.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/GlobalExceptionHandler.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/ServiceException.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/handler/MyMetaObjectHandler.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/interceptor/JwtInterceptor.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/ExportToWord.java 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java 421 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/TokenTools.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/MD5.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResponseUtil.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/Result.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResultCodeEnum.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/resources/banner.txt 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/pom.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/config/TokenWebSecurityConfig.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/SecurityUser.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/User.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenAuthFilter.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenLoginFilter.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/DefaultPasswordEncoder.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenLogoutHandler.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenManager.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/UnauthEntryPoint.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/gateway/pom.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/gateway/src/main/java/com/mes/GateWayApplication.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/gateway/src/main/resources/application.yml 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/pom.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/CacheGlassModuleApplication.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/S7object.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageDetailsController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/entity/TaskCache.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/temperingglass/controller/GlassInfoController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/temperingglass/entity/GlassInfo.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/temperingglass/mapper/GlassInfoMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/temperingglass/service/GlassInfoService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/temperingglass/service/impl/GlassInfoServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/pom.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/CacheVerticalClassModuleApplication.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/uppattenusage/controller/GlassInfoController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/uppattenusage/entity/GlassInfo.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/uppattenusage/mapper/GlassInfoMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/uppattenusage/service/GlassInfoService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/uppattenusage/service/impl/GlassInfoServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/pom.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/entity/UpPattenUsage.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/mapper/UpPattenUsageMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/upworkstation/controller/UpWorkstationController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/upworkstation/entity/UpWorkstation.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/upworkstation/mapper/UpWorkstationMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/upworkstation/service/UpWorkstationService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/upworkstation/service/impl/UpWorkstationServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/pom.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/TemperingGlassModuleApplication.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/UnLoadGlassApplication.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassTaskMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassTaskService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationTaskController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationTaskService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationTaskServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/uppattenusage/controller/GlassInfoController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/uppattenusage/entity/GlassInfo.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/uppattenusage/mapper/GlassInfoMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/uppattenusage/service/GlassInfoService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/GlassInfoServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/pom.xml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/pom.xml 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/readMe.md 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/MesApplication.java
@@ -1,7 +1,7 @@
package com.mes;
import com.mes.common.PlcTools.S7object;
import com.mes.mapper.SelectInfo;
import com.mes.mapper.PpMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
CacheGlassModule/src/main/java/com/mes/controller/TidyUpGlassModuleController.java
@@ -1,6 +1,6 @@
package com.mes.controller;
import com.mes.mapper.SelectInfo;
import com.mes.mapper.PpMapper;
import java.util.List;
import java.util.Map;
@@ -9,7 +9,7 @@
import org.springframework.web.bind.annotation.*;
import com.mes.common.Result;
import com.mes.entity.Tempered;
import com.mes.service.pp.SelectdppService;
import com.mes.service.pp.PpService;
import com.mes.service.hangzhoumes.*;
@RestController
@@ -17,45 +17,53 @@
// TidyUpGlassModule 理片模块
public class TidyUpGlassModuleController {
    @Autowired
    private SelectInfo SelectInfo;
    @Autowired
    private SelectdppService SelectppService;
    private PpService ppService;
    @Autowired
    private hangzhoumesService hangzhoumesService;
    private HangzhoumesService hangzhoumesService;
    @GetMapping("/SelectTerritoryInfo") // 查询钢化版图信息-根据 工程号
    @ResponseBody
    public Result SelectTerritoryInfo(@RequestParam(name = "ProcessId", required = false) String ProcessId) {
        List<Tempered> h = SelectppService.SelectTemperedTerritory(ProcessId);
        System.out.println(h.size()+":"+ProcessId);
        List<Tempered> h = ppService.selectTemperedTerritory(ProcessId);
        return Result.seccess(h);
    }
    @GetMapping("/CutTerritory") // 查询切割版图信息-根据 工程号
    @ResponseBody
    public Result CutTerritory(String ProcessId) {
        List<Map> h = SelectppService.SelectCutTerritory(ProcessId);
        System.out.println(h.size());
        List<Map> h = ppService.selectCutTerritory(ProcessId);
        return Result.seccess(h);
    }
    @GetMapping("/SelectCutTerritory") // 识别显示  当前版图
    @GetMapping("/CurrentCutTerritory") // 识别显示  当前版图
    @ResponseBody
    public Result SelectCutTerritory(String ProcessId) {
        List<Map> h = SelectppService.SelectCutTerritory("P24032508");
        System.out.println(h.size());
    public Result CurrentCutTerritory() {
        List<Map> h = ppService.selectCutTerritory();
        return Result.seccess(h);
    }
    @GetMapping("/SelectCutTerritory") // 识别显示  特定版图
    @ResponseBody
    public Result SelectCutTerritory(String TerritoryId) {
        List<Map> h = ppService.selectCutTerritory(TerritoryId);
        return Result.seccess(h);
    }
    @GetMapping("/IdentControls") //   识别操作:   破损/拿走     参数(ID,功能[0:破损,1:拿走])
    @ResponseBody
    public Result Ident(@RequestParam(name = "IdentId", required = false) String ProcessId,@RequestParam(name = "ControlsId", required = false) String ControlsId) {
        List<Map> h = ppService.selectCutTerritory("P24032508");
        return Result.seccess(h);
    }
    @GetMapping("/SelectCageInfo") // 查询笼内信息 
    @ResponseBody
    public Result SelectCageInfo(String ProcessId) {
        List<Map> h = SelectppService.SelectCutTerritory("P24032508");
        System.out.println(h.size());
        List<Map> h = hangzhoumesService.SelectCageInfo();
        return Result.seccess(h);
    }
@@ -64,7 +72,6 @@
    @ResponseBody
    public Result SelectEdgTask(String ProcessId) {
        List<Map> EdgTasks = hangzhoumesService.SelectEdgInfo("1");
        System.out.println(EdgTasks.size());
        return Result.seccess(EdgTasks);
    }
CacheGlassModule/src/main/java/com/mes/entity/BigStorageCage.java
File was deleted
CacheGlassModule/src/main/java/com/mes/entity/BigStorageCageDetails.java
File was deleted
CacheGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java
File was deleted
CacheGlassModule/src/main/java/com/mes/entity/DownStorageCage.java
File was deleted
CacheGlassModule/src/main/java/com/mes/entity/DownStorageCagedetails.java
File was deleted
CacheGlassModule/src/main/java/com/mes/entity/DownWorkstation.java
File was deleted
CacheGlassModule/src/main/java/com/mes/entity/OrderTest.java
File was deleted
CacheGlassModule/src/main/java/com/mes/entity/UpPattenUsage.java
File was deleted
CacheGlassModule/src/main/java/com/mes/entity/UpWorkstation.java
File was deleted
CacheGlassModule/src/main/java/com/mes/mapper/HangzhouMesMapper.java
File was renamed from CacheGlassModule/src/main/java/com/mes/mapper/SelectInfo.java
@@ -1,5 +1,6 @@
package com.mes.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.mes.entity.EdgStorageCageDetails;
import com.mes.entity.GlassInfo;
import com.mes.entity.TaskCache;
@@ -10,64 +11,56 @@
import org.apache.ibatis.annotations.*;
@DS("hangzhoumes")
@Mapper
public interface SelectInfo {
public interface HangzhouMesMapper {
    // 玻璃信息 按ID查询
    @Select("select * from `glass_info` where id=#{id}")
    GlassInfo SelectGlassId(String id);
    // 钢化按工程查询
    @Select("select * from `v_optimize_heat_layout` where project_no=#{projeceid} ")
    List<Tempered> SelectTemperedTerritory(String projeceid);
    // 切割版图按工程查询
    @Select("select * from optimize_detail where project_no=#{projeceid} ")
    List<Map> SelectCutTerritory(String projeceid);
    GlassInfo selectGlassId(String id);
    // 查询磨边信息
    @Select("select * from task_cache where task_type='2' and task_stauts='2' and end_cell=#{EndCell}")
    List<Map> SelectEdgInfo(String EndCell);
    List<Map> selectEdgInfo(String EndCell);
    // 查询笼子内空闲
    @Select("select escd.* from edg_storage_cage as esc LEFT JOIN edg_storage_cage_details as escd on esc.slot=escd.slot where escd.slot is null order by escd.slot")
    List<EdgStorageCageDetails> SelectCacheLeisure();
    List<EdgStorageCageDetails> selectCacheLeisure();
    // 查询笼子内出片任务
    @Select("select escd.* from edg_storage_cage as esc LEFT JOIN edg_storage_cage_details as escd on esc.slot=escd.slot WHERE escd.slot IS NOT NULL order by escd.tempering_layout_id,escd.tempering_feed_sequence")
    List<EdgStorageCageDetails> SelectCacheOut();
    List<EdgStorageCageDetails> selectCacheOut();
    // 查询笼子内信息
    @Select("select escd.* from edg_storage_cage as esc LEFT JOIN edg_storage_cage_details as escd on esc.slot=escd.slot order by esc.slot")
    List<EdgStorageCageDetails> SelectCachInfo();
    @Select("select esc.*,escd.id as detailsID,escd.device_id as details_device_id,escd.glass_id,escd.sequence,escd.flow_card_id,escd.glass_type,escd.width,escd.height,escd.thickness,escd.edg_width,escd.edg_height,escd.tempering_layout_id,escd.tempering_feed_sequence,escd.pattern_sequence,escd.state,escd.gap from edg_storage_cage as esc LEFT JOIN edg_storage_cage_details as escd on esc.slot=escd.slot order by esc.slot")
    List<Map> selectCachInfo();
    // 查询可进此片玻璃的栅格号
    @Select("select escd.* from edg_storage_cage as esc LEFT JOIN edg_storage_cage_details as escd on esc.slot=escd.slot where escd.slot is not null escd.tempering_layout_id=#{tempering_layout_id} and escd.tempering_feed_sequence<#{tempering_feed_sequence} and esc.remain_width-#{width}>0 order by escd.tempering_feed_sequence")
    List<EdgStorageCageDetails> SelectIsExistIntoCache(Integer tempering_layout_id, Integer tempering_feed_sequence,
            double width);
    List<EdgStorageCageDetails> selectIsExistIntoCache(Integer tempering_layout_id, Integer tempering_feed_sequence,double width);
    // 查询可进此片玻璃的栅格号
    @Select("select escd.* from edg_storage_cage as esc LEFT JOIN edg_storage_cage_details as escd on esc.slot=escd.slot where escd.slot is not null escd.tempering_layout_id<#{tempering_layout_id} and esc.remain_width-#{width}>0 order by escd.tempering_layout_id desc,escd.tempering_feed_sequence")
    List<EdgStorageCageDetails> SelectIsExistIntoCache(Integer tempering_layout_id, double width);
    List<EdgStorageCageDetails> selectIsExistIntoCache(Integer tempering_layout_id, double width);
    // 查询全部任务
    @Select("select * from task_cache")
    List<TaskCache> SelectCacheInfoAll();
    List<TaskCache> selectCacheInfoAll();
    // 查询进片任务
    @Select("select * from task_cache where task_type='1' and task_stauts='0'")
    List<TaskCache> SelectInputCacheInfo();
    List<TaskCache> selectInputCacheInfo();
    // 查询出片任务
    @Select("select * from task_cache where task_type='2' and task_stauts='0'")
    List<TaskCache> SelectOutCacheInfo();
    List<TaskCache> selectOutCacheInfo();
    // 查询  A09  或 A10 最新的一片 出片任务
    @Select("select * from task_cache where task_type='2' and task_stauts='2' and end_cell=#{EndCell} limit 1")
    GlassInfo SelectLastOutCacheInfo(String EndCell);
    GlassInfo selectLastOutCacheInfo(String EndCell);
    // 修改笼子内信息
    @Update("update")
    Integer UpdateCache(@Param("id") Integer id, @Param("order_id") String order_id);
    Integer updateCache(@Param("id") Integer id, @Param("order_id") String order_id);
    // 添加理片任务
    @Insert("INSERT into task_cache VALUES(#{id},#{start},#{end},#{type},0)")
CacheGlassModule/src/main/java/com/mes/mapper/OrderTestMapper.java
File was deleted
CacheGlassModule/src/main/java/com/mes/mapper/PpMapper.java
New file
@@ -0,0 +1,39 @@
package com.mes.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.mes.entity.EdgStorageCageDetails;
import com.mes.entity.GlassInfo;
import com.mes.entity.TaskCache;
import com.mes.entity.Tempered;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.*;
@DS("pp")
@Mapper
public interface PpMapper {
    // 钢化按工程查询
    @Select("select * from `v_optimize_heat_layout` where project_no=#{projeceid} ")
    List<Tempered> selectTemperedTerritory(String projeceid);
    // 切割版图 按工程,版图编号查询
    @Select("select * from optimize_detail where project_no=#{projeceid} ")
    List<Map> selectCutTerritory(String projeceid,String TerritoryId);
    // 切割版图 按工程查询
    @Select("select * from optimize_detail where project_no=#{projeceid} ")
    List<Map> selectCutTerritory(String projeceid);
    //
    // @Insert("INSERT `order`(order_id)VALUES(#{order_id})")
    // Integer insert(Order order);
    //
    // @Delete("delete from `order` where id=#{id}")
    // Integer deleteById(@Param("id") Integer id);
    //
    // @Update("update `order` set order_id=#{order_id} where id=#{id}")
    // Integer update(@Param("id") Integer id,@Param("order_id") String order_id);
}
CacheGlassModule/src/main/java/com/mes/service/CacheGlassService/LogicService.java
File was renamed from CacheGlassModule/src/main/java/com/mes/service/CacheGlassService/Logic.java
@@ -11,13 +11,14 @@
import com.mes.entity.TaskCache;
import com.mes.entity.device.PLCAutoMes;
import com.mes.entity.device.PlcParameterObject;
import com.mes.mapper.SelectInfo;
import com.mes.mapper.HangzhouMesMapper;
import com.mes.mapper.PpMapper;
@Service
public class Logic {
public class LogicService {
    @Autowired
    private SelectInfo selectInfo;
    private HangzhouMesMapper hangzhouMesMapper;
    //识别逻辑    不交互
    public void identify(String Number){
        //查询任务
@@ -50,25 +51,25 @@
    //理片 进
    public boolean processInto(String Number){
        //查询消息队列里的玻璃
        GlassInfo GlassInfo=selectInfo.SelectGlassId(Number);
        GlassInfo GlassInfo=hangzhouMesMapper.selectGlassId(Number);
        PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
        if(GlassInfo!=null){//存在此玻璃编号  
            //同钢化版图内的栅格号
            List<EdgStorageCageDetails> list=selectInfo.SelectIsExistIntoCache(GlassInfo.getTemperinglayoutid(),GlassInfo.getTemperingfeedsequence(),GlassInfo.getWidth());
            List<EdgStorageCageDetails> list=hangzhouMesMapper.selectIsExistIntoCache(GlassInfo.getTemperinglayoutid(),GlassInfo.getTemperingfeedsequence(),GlassInfo.getWidth());
            //空栅格号
            if (list.size()==0) {
                list=selectInfo.SelectCacheLeisure();
                list=hangzhouMesMapper.selectCacheLeisure();
            }
            //小于此玻璃钢化版图序号的栅格号
            if(list.size()==0){
                list=selectInfo.SelectIsExistIntoCache(GlassInfo.getTemperinglayoutid(),GlassInfo.getWidth());
                list=hangzhouMesMapper.selectIsExistIntoCache(GlassInfo.getTemperinglayoutid(),GlassInfo.getWidth());
            }
            if(list.size()>0){
                //存在空格  
                //1.生成任务:  起始位置0   结束位置this.slot  任务类型 1   (进片任务)
                //2.回复 1进片
                EdgStorageCageDetails item=list.get(0);
                selectInfo.insertCacheTask(GlassInfo.getId()+"","0",item.getSlot()+"","1");
                hangzhouMesMapper.insertCacheTask(GlassInfo.getId()+"","0",item.getSlot()+"","1");
                S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),(short) 1);
                return true;
            }
@@ -85,19 +86,19 @@
        String A09=S7control.getinstance().ReadWord("DB14.56", 1).get(0)+"";
        String A10=S7control.getinstance().ReadWord("DB14.58", 1).get(0)+"";
        PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
        List<EdgStorageCageDetails> list=selectInfo.SelectCacheOut();
        List<EdgStorageCageDetails> list=hangzhouMesMapper.selectCacheOut();
        boolean isOut=true;//其他情况条件 如:后续设备故障禁止理片出片 等
        if (list.size()>0&&isOut) {
            EdgStorageCageDetails item=list.get(0);
            if(A09=="0"&&A10=="1"){
                //出到  A09
                selectInfo.insertCacheTask(item.getGlassid()+"","0","09","2");
                hangzhouMesMapper.insertCacheTask(item.getGlassid()+"","0","09","2");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "1");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
                return true;
            }else if(A09=="1"&&A10=="0"){
                //出到  A10
                selectInfo.insertCacheTask(item.getGlassid()+"","0","10","2");
                hangzhouMesMapper.insertCacheTask(item.getGlassid()+"","0","10","2");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "2");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
                return true;
@@ -106,15 +107,15 @@
                String endcell="09";
                String SendEndcell="1";
                boolean If_=false;
                GlassInfo glassInfo09= selectInfo.SelectLastOutCacheInfo("09");
                GlassInfo glassInfo10= selectInfo.SelectLastOutCacheInfo("10");
                GlassInfo glassInfo09= hangzhouMesMapper.selectLastOutCacheInfo("09");
                GlassInfo glassInfo10= hangzhouMesMapper.selectLastOutCacheInfo("10");
                if(glassInfo10!=null&&glassInfo10.getWidth()==item.getWidth()&&glassInfo10.getHeight()==item.getHeight()){
                    endcell="10";
                    SendEndcell="2";
                }else if(glassInfo10!=null&&If_){
                    //其他条件
                }
                selectInfo.insertCacheTask(item.getGlassid()+"","0",endcell,"2");
                hangzhouMesMapper.insertCacheTask(item.getGlassid()+"","0",endcell,"2");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell);
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
                return true;
@@ -127,7 +128,7 @@
    //磨边   不交互  理片和磨边机自己交互
    public void processMb(String Number){
        //查询任务
        GlassInfo GlassInfo=selectInfo.SelectGlassId(Number);
        GlassInfo GlassInfo=hangzhouMesMapper.selectGlassId(Number);
        PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
        if(GlassInfo!=null){
            //发送任务   ID   长 宽 厚 倒角 工艺功能等
@@ -144,7 +145,7 @@
    //查询消息队列里此玻璃ID的数据   
    public boolean SelectMessageId(String Number){
        //查询是否存在
        GlassInfo GlassInfo=selectInfo.SelectGlassId(Number);
        GlassInfo GlassInfo=hangzhouMesMapper.selectGlassId(Number);
        if(GlassInfo==null){
            return false;//返回 不存在
        }
@@ -153,7 +154,7 @@
    //删除消息队列里此玻璃ID的数据   
    public boolean DeleteMessageId(String Number){
        //查询是否存在
        GlassInfo GlassInfo=selectInfo.SelectGlassId(Number);
        GlassInfo GlassInfo=hangzhouMesMapper.selectGlassId(Number);
        if(GlassInfo==null){
            return false;//返回 不存在
        }
@@ -163,7 +164,7 @@
    //是否存在此编号玻璃 
    public boolean isExist(String Number){
        //查询是否存在
        GlassInfo GlassInfo=selectInfo.SelectGlassId(Number);
        GlassInfo GlassInfo=hangzhouMesMapper.selectGlassId(Number);
        if(GlassInfo==null){
            return false;//返回 不存在
        }
CacheGlassModule/src/main/java/com/mes/service/IOrderService.java
File was deleted
CacheGlassModule/src/main/java/com/mes/service/ModuleB.java
File was deleted
CacheGlassModule/src/main/java/com/mes/service/MqMessage.java
File was deleted
CacheGlassModule/src/main/java/com/mes/service/RabbitMQUtils.java
File was deleted
CacheGlassModule/src/main/java/com/mes/service/RabbitMQUtils33.java
File was deleted
CacheGlassModule/src/main/java/com/mes/service/hangzhoumes/hangzhoumesService.java
@@ -4,7 +4,8 @@
import com.mes.entity.EdgStorageCageDetails;
import com.mes.entity.GlassInfo;
import com.mes.entity.Tempered;
import com.mes.mapper.SelectInfo;
import com.mes.mapper.HangzhouMesMapper;
import com.mes.mapper.PpMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -12,30 +13,25 @@
import java.util.Map;
@Service
@DS("hangzhoumes")
public class hangzhoumesService {
public class HangzhoumesService {
    @Autowired
    private SelectInfo SelectInfo;
    private HangzhouMesMapper hangzhouMesMapper;
    //根据编号 查找玻璃小片信息
    public GlassInfo getUserInfo(String process_id){
        return SelectInfo.SelectGlassId(process_id);
        return hangzhouMesMapper.selectGlassId(process_id);
    }
    // //识别信息
    // public List<Map> SelectCutTerritory(String process_id){
    //     return SelectInfo.SelectCutTerritory(process_id);
    // }
    //理片缓存 笼内信息
    public List<EdgStorageCageDetails> SelectCageInfo(){
        return SelectInfo.SelectCachInfo();
    public List<Map> SelectCageInfo(){
        return hangzhouMesMapper.selectCachInfo();
    }
    //磨边小片信息
    public List<Map> SelectEdgInfo(String line){
        return SelectInfo.SelectEdgInfo(line);
        return hangzhouMesMapper.selectEdgInfo(line);
    }
    
}
CacheGlassModule/src/main/java/com/mes/service/impl/OrderServiceImpl.java
File was deleted
CacheGlassModule/src/main/java/com/mes/service/pp/PpService.java
New file
@@ -0,0 +1,51 @@
package com.mes.service.pp;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.mes.entity.GlassInfo;
import com.mes.entity.Tempered;
import com.mes.mapper.HangzhouMesMapper;
import com.mes.mapper.PpMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class PpService {
    @Autowired
    private PpMapper selectInfoMapper;
    @Autowired
    private HangzhouMesMapper hangzhouMesMapper;
    // public GlassInfo getUserInfo(String process_id){
    //     return hangzhouMesMapper.selectGlassId(process_id);
    // }
    public List<Tempered> selectTemperedTerritory(String process_id){
        return selectInfoMapper.selectTemperedTerritory(process_id);
    }
    //切割版图   当前识别版图
    public List<Map> selectCutTerritory(){
        //1.得到要显示的 工程ID 以及版图ID
        //2.在Hangzhoumes数据库里 得到目前已经  领取但未完成的 工程ID集合
        //3.拿工程集合去PP数据库里 得到对应的小片集合
        //4.拿对应的小片集合 与 缓存任务表进行对比 查找下一版图显示
        String process_id = "P24032204";
        String territory_id = "1";
        return selectInfoMapper.selectCutTerritory(process_id,territory_id);
    }
    //切割版图 根据工程号查询   所有版图小片数据
    public List<Map> selectCutTerritory(String process_id){
        return selectInfoMapper.selectCutTerritory(process_id);
    }
    //切割版图 根据工程号,版图编号查询   版图编号里所有小片数据
    public List<Map> selectCutTerritory(String process_id,String TerritoryId){
        return selectInfoMapper.selectCutTerritory(process_id,TerritoryId);
    }
}
CacheGlassModule/src/main/java/com/mes/service/pp/SelectdppService.java
File was deleted
LoadGlassModule/src/main/java/com/mes/MesApplication.java
@@ -1,6 +1,4 @@
package com.mes;
import com.mes.common.PlcTools.S7object;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
LoadGlassModule/src/main/java/com/mes/common/PlcTools/S7control.java
@@ -1,7 +1,9 @@
package com.mes.common.PlcTools;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;
import java.sql.Time;
import java.util.ArrayList;
import java.util.List;
@@ -9,15 +11,37 @@
import com.github.xingshuangs.iot.protocol.s7.service.MultiAddressWrite;
import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
import com.google.common.primitives.Bytes;
import org.apache.ibatis.jdbc.Null;
public class S7control {
    S7PLC s7PLC; // PLC通讯类实例
    public S7control(EPlcType plcType, String ip, int port, int rack, int slot) {
    private EPlcType plcType = EPlcType.S1500; // 西门子PLC类型
    private String ip = "192.168.10.1"; // plc ip地址
    private int port = 102; // plc 端口号
    private static volatile S7control instance = null;
    private S7control() {
        if (s7PLC == null)
            s7PLC = new S7PLC(plcType, ip, port,0,0);
    }
    }
    public S7control(EPlcType plcType,String ip,int port,int a,int b) {
        if (s7PLC == null)
            s7PLC = new S7PLC(plcType, ip, port,a,b);
    }
    // 单例模式 获取类的唯一实例
    public static S7control getinstance() {
        if (instance == null) {
            synchronized (S7control.class) {
                if (instance == null)
                    instance = new S7control();
            }
        }
        return instance;
    }
    /**
     * 关闭西门子s7通讯连接
     */
@@ -33,7 +57,7 @@
    public boolean CheckConnected() {
        return s7PLC.checkConnected();
    }
    /**
     * 按指定的地址 写入一个word
     * 
@@ -156,7 +180,7 @@
        }
    }
    private int getIndexFromAddress(String address) {
@@ -181,7 +205,6 @@
    public List<Short> ReadWord(String address, int count) {
        if (s7PLC == null)
            return null;
        List<String> addresslist = GetAddressList(address, count, 16);
        try {
            return s7PLC.readInt16(addresslist);
@@ -191,7 +214,13 @@
            return null;
        }
    }
    public byte[] Readbyte(String address, int count) {
        byte[] byt=new byte[count];
        int wordcount=((count%2==0)?count/2:count+1);
        List<Short> word=ReadWord(address,wordcount);
        return byt;
    }
    /**
     * 按指定的地址 读取byte结果集
     * 
@@ -269,6 +298,41 @@
}
    public List<String> readStringsandword(List<String> addressList) {
        if (s7PLC == null) {
            return null;
        }
        List<String> result = new ArrayList<>();
        for (String address : addressList) {
            try {
                if (address.contains("-")) {
                    address = address.substring(0, address.indexOf("-"));
                    byte[] bytes = s7PLC.readByte(address, 14);
                    if (bytes != null) {
                        String str = new String(bytes, StandardCharsets.UTF_8);
                        result.add(str);
                    }
                } else {
                    Short value = s7PLC.readInt16(address);
                    result.add(value.toString());
                }
            } catch (Exception e) {
                System.out.println("读取 " + address + " 失败:" + e.getMessage());
                result.add(null);
            }
        }
        return result;
    }
//不连续地址写入Word
    public void WriteWord(List<String> address, List<Short> datas) {
        if (s7PLC == null)
@@ -300,7 +364,7 @@
            glassidlist.add(Byte.valueOf(String.valueOf(iditem)));
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        WriteByte(addr, bytes);
        S7control.getinstance().WriteByte(addr, bytes);
    }
//读取不连续word
@@ -410,4 +474,11 @@
        }
        return addresslist;
    }
    public void writeString(String addr,String data) {
        s7PLC.writeString(addr,data);
    }
    public String readStrings(String addr) {
        return s7PLC.readString(addr);
    }
}
LoadGlassModule/src/main/java/com/mes/controller/LoadGlassController.java
New file
@@ -0,0 +1,55 @@
package com.mes.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.mes.common.Result;
import com.mes.entity.Tempering;
import com.mes.entity.UpWorkstation;
import com.mes.service.LoadGlassService;
import com.mes.service.TemperingOverService;
import com.mes.service.TemperingService;
@RestController
@RequestMapping("/LoadGlass")
// TidyUpGlassModule 钢化模块
public class LoadGlassController {
    @Autowired
    private LoadGlassService loadGlassService;
    @PostMapping("/SelectAll") //查询现在上片机的玻璃信息
    @ResponseBody
    public Result SelectGlassInfo() {
        List<UpWorkstation> glass = loadGlassService.selectAll();
        System.out.println(glass);
        return Result.seccess(glass);
    }
    @PostMapping("/insertGlass") //修改一条工位信息,接收实例类字段为宽高厚膜系数量工位id
    @ResponseBody
    public void insertGlassinfo(@RequestBody UpWorkstation upwork) {
        loadGlassService.insertGlass(upwork);
    }
    @PostMapping("/deleteGlass") //修改一条工位的玻璃信息,传输工位id将玻璃信息相关字段更改为null
    @ResponseBody
    public void SelectCutTerritory(int upworkid) {
        loadGlassService.deleteGlass(upworkid);
    }
    @PostMapping("/selectPriority") //开始上片任务
    @ResponseBody
    public void selectPriority() {
        boolean result = loadGlassService.isCanLoadGlass();
        if(result==true){
            loadGlassService.selectPriority();
        }
    }
}
LoadGlassModule/src/main/java/com/mes/controller/OrderTestController.java
File was deleted
LoadGlassModule/src/main/java/com/mes/controller/userInfo/SysMenuController.java
@@ -19,9 +19,7 @@
    private SysMenuService sysMenuService;
    @GetMapping
    public Result getMenu(){
        //MyChannelHandlerPool myChannelHandlerPool = new MyChannelHandlerPool();
        //myChannelHandlerPool.sendMsg("123");
        //MyChannelHandlerPool.channelGroup.writeAndFlush( new TextWebSocketFrame("123123"));
        //获取缓存
        return Result.seccess(sysMenuService.getMenu());
    }
LoadGlassModule/src/main/java/com/mes/entity/BigStorageCage.java
File was deleted
LoadGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java
File was deleted
LoadGlassModule/src/main/java/com/mes/entity/DownStorageCage.java
File was deleted
LoadGlassModule/src/main/java/com/mes/entity/DownStorageCagedetails.java
File was deleted
LoadGlassModule/src/main/java/com/mes/entity/DownWorkstation.java
File was deleted
LoadGlassModule/src/main/java/com/mes/entity/OrderTest.java
File was deleted
LoadGlassModule/src/main/java/com/mes/entity/Tempering.java
File was deleted
LoadGlassModule/src/main/java/com/mes/entity/device/InitUtil.java
New file
@@ -0,0 +1,124 @@
package com.mes.entity.device;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.mes.common.PlcTools.S7control;
public class InitUtil {
    //初始化word
    public static PlcParameterObject initword(String jsonFilePath) {
        try {
            FileReader fileReader = new FileReader(jsonFilePath);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuilder content = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line);
            }
            bufferedReader.close();
            fileReader.close();
            JSONObject jsonfileobj = new JSONObject(content.toString());
            JSONArray jsonArray = jsonfileobj.getJSONArray("parameteInfor");
            PlcParameterObject plcParameterObject = new PlcParameterObject();
            plcParameterObject.setPlcAddressBegin(jsonfileobj.getStr("plcAddressBegin"));//设置起始位地址
            plcParameterObject.setPlcAddressLength(Integer.valueOf(jsonfileobj.getStr("plcAddressLenght")));//设置地址长度
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject parameterObj = jsonArray.getJSONObject(i);
                PlcParameterInfo plcParameterInfo = new PlcParameterInfo(jsonfileobj.getStr("plcAddressBegin")); //参数实例
                String codeid = parameterObj.getStr("codeId");
                plcParameterInfo.setCodeId(codeid);
                plcParameterInfo.setAddressIndex(Integer.valueOf(parameterObj.getStr("addressIndex")));
                //plcParameterInfo.setRatio(Integer.valueOf(parameterObj.getStr("ratio")));
                plcParameterInfo.setAddressLength(Integer.valueOf(parameterObj.getStr("addressLenght")));
                plcParameterInfo.setUnit(parameterObj.getStr("unit"));
                plcParameterObject.addPlcParameter(plcParameterInfo);
            }
           // byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02};
           // byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
           // plcParameterObject.setPlcParameterList(getplcvlues);
            return plcParameterObject;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    //初始化bit
    public static PlcBitObject initbit(String jsonFilePath) {
        PlcBitObject plcBitObject = new PlcBitObject();
        try {
            FileReader fileReader = new FileReader(jsonFilePath);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuilder content = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line);
            }
            bufferedReader.close();
            fileReader.close();
            JSONObject jsonfileobj = new JSONObject(content.toString());
            JSONArray jsonArray = jsonfileobj.getJSONArray("parameteInfor");
            plcBitObject.setPlcAddressBegin(jsonfileobj.getStr("plcAddressBegin"));//设置起始位地址
            plcBitObject.setPlcAddressLength(Integer.valueOf(jsonfileobj.getStr("plcAddressLenght")));//设置地址长度
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject parameterObj = jsonArray.getJSONObject(i);
                PlcBitInfo plcBitInfo = new PlcBitInfo(jsonfileobj.getStr("plcAddressBegin")); //参数实例
                String codeid = parameterObj.getStr("codeId");
                plcBitInfo.setCodeId(codeid);
                plcBitInfo.setAddressIndex(Integer.valueOf(parameterObj.getStr("addressIndex")));
                plcBitObject.addPlcBit(plcBitInfo);
            }
            System.out.println("");
        } catch (IOException e) {
            e.printStackTrace();
        }
           //Boolean[] values1 = { false, true, true, true, false, false, true, false,
          //  false, true ,true };
   // List<Boolean> getplcvlues = new ArrayList<>(Arrays.asList(values1));
//        List<Boolean> getplcvlues = S7control.getinstance().ReadBits(plcBitObject.getPlcAddressBegin(), plcBitObject.getPlcAddressLength());
//        plcBitObject.setPlcBitList(getplcvlues);
        return plcBitObject;
    }
//
    public static void readAndUpdateBitValues(PlcBitObject plcBitObject) {
//        Boolean[] values1 = { false, true, true, true, false, false, true, false,
//          false, true ,true };
//         List<Boolean> getplcvlues = new ArrayList<>(Arrays.asList(values1));
        List<Boolean> getplcvlues = S7control.getinstance().ReadBits(plcBitObject.getPlcAddressBegin(), plcBitObject.getPlcAddressLength());
        plcBitObject.setPlcBitList(getplcvlues);
    }
    public static void readAndUpdateWordValues(PlcParameterObject plcParameterObject) {
        // byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02};
        byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
        plcParameterObject.setPlcParameterList(getplcvlues);
    }
}
LoadGlassModule/src/main/java/com/mes/entity/device/PLCAutoMes.java
New file
@@ -0,0 +1,95 @@
package com.mes.entity.device;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static com.mes.entity.device.InitUtil.readAndUpdateWordValues;
public class PLCAutoMes extends Thread {
    // // 用于存储应用程序的配置信息
    // private Configuration config;
    private static InitUtil initUtil;
    // public static PlcParameterObject PlcMesObject;
    // public static PlcParameterObject PlcReadObject;
    // public static PlcParameterObject PlcframeObject;
    // // 创建一个自定义的 S7 控制器消息处理器对象
    // MessageHandler customS7Control = new MessageHandler();
    // 单例实例
    private static PLCAutoMes instance;
    // private static String PlcMes = PLCAutoMes.class.getResource("/JsonFile/PlcMes.json").getPath();
    private static String PlcAlbania = PLCAutoMes.class.getResource("/JsonFile/PlcAlbania.json").getPath();
    // private static String PlcRead = PLCAutoMes.class.getResource("/JsonFile/PlcRead.json").getPath();
    // private static String Plcframe = PLCAutoMes.class.getResource("/JsonFile/Plcframe.json").getPath();
    // private static String PlcParameter = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcParameter.json").getPath();
    // private static String PlcSign = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcSign.json").getPath();
    // private static String PlcState = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcState.json").getPath();
    // private static String PlcAlarm = PLCAutoMes.class.getResource("/JsonFile/PlcAlarm.json").getPath();
    // private static String PlcTest = PLCAutoMes.class.getResource("/JsonFile/PlcTest.json").getPath();
    // 调用initword方法
    // public static PlcParameterObject plcParameterObject = initUtil.initword(PlcParameter);
    // public static PlcBitObject plcPlcTest = initUtil.initbit(PlcTest);
    // public static PlcBitObject  plcBitObject = initUtil.initbit(PlcSign);
    // public static PlcParameterObject  plcStateObject= initUtil.initword(PlcState);
    // public static PlcBitObject plcPlcAlarm = initUtil.initbit(PlcAlarm);
    public static PlcParameterObject PlcMesObject = InitUtil.initword(PlcAlbania);
    // public static PlcParameterObject PlcReadObject = initUtil.initword(PlcRead);
    // public static PlcParameterObject PlcframeObject = initUtil.initword(Plcframe);
    // 私有构造函数
    public PLCAutoMes() throws IOException {
        //config = new Configuration("config.properties");
        initUtil = new InitUtil();
    }
    // 获取单例实例
    public static synchronized PLCAutoMes getInstance() throws IOException {
        if (instance == null) {
            instance = new PLCAutoMes();
        }
        return instance;
    }
    @Override
    public void run() {
        while (this != null) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // System.out.println(jsonFilePath);
            //readAndUpdateWordValues(PlcReadObject);
            readAndUpdateWordValues(PlcMesObject);
            //readAndUpdateWordValues(PlcframeObject);
            // readAndUpdateWordValues(PlcframeObject);
            // readAndUpdateWordValues(plcStateObject);
            // int index = PlcMesObject.getPlcParameter("AddStart").getAddressIndex();
            // // System.out.println(index);
            // PlcMesObject.getPlcParameter("AddStart").getAddress(index);
            // // System.out.println(PlcMesObject.getPlcParameter("AddStart").getAddress(index));
            // List<String> addresses = new ArrayList<>();
            // addresses.add("FeedID");
            // addresses.add("AddStart");
            // // System.out.println(addresses);
            // // System.out.println(PlcMesObject.getPlcParameterValues(addresses));
            // List<String> addresses2 = new ArrayList<>();
            // addresses2.add("FeedID");
            // addresses2.add("FeedCarStatus");
            //System.out.println(PlcReadObject.getPlcParameterValues(addresses2));
        }
    }
}
LoadGlassModule/src/main/java/com/mes/entity/device/PlcBitInfo.java
New file
@@ -0,0 +1,77 @@
package com.mes.entity.device;
public  class PlcBitInfo {
        public PlcBitInfo(String startAddress) {
            this.startAddress = startAddress;
        }
        private String startAddress;
        // 参数标识
        private String codeId;
        // 参数名称
        private String name;
        // 读取 参数值
        private Boolean value;
        // 参数地址
        private int addressIndex;
        public String getCodeId() {
            return this.codeId;
        }
        public void setCodeId(String codeId) {
            this.codeId = codeId;
        }
        public String getName() {
            return this.name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Boolean getValue() {
            return this.value;
        }
        public void setValue(Boolean value) {
            this.value = value;
        }
        public int getAddressIndex() {
            return this.addressIndex;
        }
         /**
     * 获取地址
     *
     * @param index 索引地址
     */
        public String getAddress(int index) {
            String[] stringdatas = this.startAddress.trim().split("\\.");
            if (stringdatas.length < 2 )
                return null;
            int dbwindex = 0;
            int bitindex = 0;
             if (stringdatas.length == 3) {
                dbwindex = Integer.parseInt(stringdatas[1]);
                bitindex = Integer.parseInt(stringdatas[2]);
            } else
                return null;
              dbwindex+=index/8;
              bitindex+=index%8;
            return stringdatas[0]+"."+dbwindex+"."+bitindex;
        }
    public void setAddressIndex(int addressindex) {
            this.addressIndex = addressindex;
        }
    }
LoadGlassModule/src/main/java/com/mes/entity/device/PlcBitObject.java
New file
@@ -0,0 +1,142 @@
package com.mes.entity.device;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class PlcBitObject {
    // 该模块数据类型,数据起始位置
    private String plcAddressBegin;
    // 数据地址长度:第一参数到最后一个参数的长度
    private int plcAddressLength;
    private ArrayList<PlcBitInfo> plcBitList;
    /**
     * @return 数据区开始地址
     */
    public String getPlcAddressBegin() {
        return plcAddressBegin;
    }
    /**
     * @param plcAddressBegin 设置数据区开始地址
     */
    public void setPlcAddressBegin(String plcAddressBegin) {
        this.plcAddressBegin = plcAddressBegin;
    }
    /**
     * @return 数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public int getPlcAddressLength() {
        return plcAddressLength;
    }
    /**
     * @return 设置:数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public void setPlcAddressLength(int plcAddressLength) {
        this.plcAddressLength = plcAddressLength;
    }
    /**
     * @return 获取参数实例集合
     */
    public ArrayList<PlcBitInfo> getBitList() {
        return plcBitList;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeid 参数标识
     * @return 获取某个参数实例
     */
    public PlcBitInfo getPlcBit(String codeid) {
        if (plcBitList != null) {
            for (PlcBitInfo plcbitInfo : plcBitList) {
                if (plcbitInfo.getCodeId().equals(codeid))
                    return plcbitInfo;
            }
            return null;
        } else
            return null;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeid 参数标识
     * @return 获取某个参数实例
     */
    public List<Boolean> getPlcBitValues(List<String> codeids) {
        List<Boolean> arrayList = new ArrayList<>();
        if (plcBitList != null) {
            Map<String, Boolean> resultMap = new LinkedHashMap<>(); // 使用 LinkedHashMap 保留插入顺序
            for (PlcBitInfo plcBitInfo : plcBitList) {
                if (codeids.contains(plcBitInfo.getCodeId().toString())) {
                    resultMap.put(plcBitInfo.getCodeId().toString(), plcBitInfo.getValue());
                }
            }
            for (String codeId : codeids) { // 按照传入参数的顺序遍历
                Boolean value = resultMap.get(codeId);
                if (value != null) {
                    arrayList.add(value);
                } else {
                    arrayList.add(null); // 如果找不到对应的值,添加 null
                }
            }
        }
        return arrayList;
    }
    public List<String> getAddressListByCodeId(List<String> codeIdList) {
        List<String> addressList = new ArrayList<>();
        for (String codeId : codeIdList) {
            for (PlcBitInfo plcBitInfo : plcBitList) {
                if (plcBitInfo.getCodeId().equals(codeId)) {
                    int index = plcBitInfo.getAddressIndex();
                    String address = plcBitInfo.getAddress(index);
                    if (address != null) {
                        addressList.add(address);
                    }
                }
            }
        }
        return addressList;
    }
    /**
     * 添加参数实例
     *
     * @param param 参数实例
     */
    public void addPlcBit(PlcBitInfo param) {
        if (plcBitList != null)
            plcBitList.add(param);
        else {
            plcBitList = new ArrayList<PlcBitInfo>();
            plcBitList.add(param);
        }
    }
    /**
     * 根据PLC返回的数据 给参数实例赋值
     *
     * @param plcValueArray PLC读取回来的byte类型数据集合
     */
    public void setPlcBitList(List<Boolean> plcValueArray) {
        if (plcBitList != null) {
            for (PlcBitInfo plcbitInfo : plcBitList) {
                plcbitInfo.setValue(plcValueArray.get(plcbitInfo.getAddressIndex()));
            }
        }
    }
}
LoadGlassModule/src/main/java/com/mes/entity/device/PlcParameterInfo.java
New file
@@ -0,0 +1,128 @@
package com.mes.entity.device;
public  class PlcParameterInfo {
      public PlcParameterInfo(String startAddress) {
        this.startAddress = startAddress;
      }
        private String startAddress;
        // 参数标识
        private String codeId;
        // 参数名称
        private String name;
        // 读取 参数值
        private String value;
        // // 写入 参数值
        // private String writeValue;
        // 参数单位
        private String unit;
        // 参数值转换系数
        private int ratio;
        // 参数地址
        private int addressIndex;
        // 参数地址位长度
        private int addressLength;
        public String getCodeId() {
            return this.codeId;
        }
        public void setCodeId(String codeId) {
            this.codeId = codeId;
        }
        public String getName() {
            return this.name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getValue() {
            return this.value;
        }
        public void setValue(String value) {
            this.value = value;
        }
        // public String getWriteValue() {
        //     return this.writeValue;
        // }
        // public void setWriteValue(String writeValue) {
        //     this.writeValue = writeValue;
        // }
        public String getUnit() {
            return this.unit;
        }
        public void setUnit(String unit) {
            this.unit = unit;
        }
        public int getAddressIndex() {
            return this.addressIndex;
        }
        public void setAddressIndex(int addressindex) {
            this.addressIndex = addressindex;
        }
        public int getAddressLength() {
            return this.addressLength;
        }
        public void setAddressLength(int addresslength) {
            this.addressLength = addresslength;
        }
        public int getRatio() {
            return this.ratio;
        }
        public void setRatio(int ratio) {
            this.ratio = ratio;
        }
           /**
     * 获取地址
     *
     * @param index 索引地址
     */
    public String getAddress(int index) {
        String[] stringdatas = this.startAddress.trim().split("\\.");
        int addressLength=this.addressLength;
        if (addressLength < 2 ){
            return null;
        }
        if (addressLength == 2 ) {
            int wordindex = index;
            return stringdatas[0] + "." + wordindex;
        }
        if (addressLength == 14 ) {
            int wordindex = index;
            //int newIndex = wordindex + 13;
            return stringdatas[0] + "." + wordindex ;
        }
        return null;
    }
    public int getPlcAddress() {
        return addressIndex;
    }
    public String getAddress() {
       return getAddress(this.addressIndex);
    }
}
LoadGlassModule/src/main/java/com/mes/entity/device/PlcParameterObject.java
New file
@@ -0,0 +1,202 @@
package com.mes.entity.device;
import java.lang.reflect.Array;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class PlcParameterObject {
    // 该模块数据类型,数据起始位置
    private String plcAddressBegin;
    // 数据地址长度:第一参数到最后一个参数的长度
    private int plcAddressLength;
    private ArrayList<PlcParameterInfo> plcParameterList;
    /**
     * @return 数据区开始地址
     */
    public String getPlcAddressBegin() {
        return plcAddressBegin;
    }
    /**
     * @param plcAddressBegin 设置数据区开始地址
     */
    public void setPlcAddressBegin(String plcAddressBegin) {
        this.plcAddressBegin = plcAddressBegin;
    }
    /**
     * @return 数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public int getPlcAddressLength() {
        return plcAddressLength;
    }
    /**
     * @return 设置:数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public void setPlcAddressLength(int plcAddressLength) {
        this.plcAddressLength = plcAddressLength;
    }
    /**
     * @return 获取参数实例集合
     */
    public ArrayList<PlcParameterInfo> getPlcParameterList() {
        return plcParameterList;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeid 参数标识
     * @return 获取某个参数实例
     */
    public PlcParameterInfo getPlcParameter(String codeid) {
        if (plcParameterList != null) {
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                if (plcParameterInfo.getCodeId().equals(codeid))
                    return plcParameterInfo;
            }
            return null;
        } else
            return null;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeids 参数标识
     * @return 获取某个参数实例
     */
    public List<String> getPlcParameterValues(List<String> codeids) {
        List<String> arrayList = new ArrayList<>();
        if (plcParameterList != null) {
            Map<String, PlcParameterInfo> resultMap = new LinkedHashMap<>(); // 使用 LinkedHashMap 保留插入顺序
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                if (codeids.contains(plcParameterInfo.getCodeId())) {
                    resultMap.put(plcParameterInfo.getCodeId(), plcParameterInfo);
                }
            }
            for (String codeId : codeids) { // 按照传入参数的顺序遍历
                PlcParameterInfo plcParameterInfo = resultMap.get(codeId);
                if (plcParameterInfo != null) {
                    arrayList.add(plcParameterInfo.getValue());
                } else {
                    arrayList.add(null); // 如果找不到对应的值,添加 null
                }
            }
        }
        return arrayList;
    }
    public List<String> getAddressListByCodeId(List<String> codeIdList) {
        List<String> addressList = new ArrayList<>();
        for (String codeId : codeIdList) {
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                if (plcParameterInfo.getCodeId().equals(codeId)) {
                    int index = plcParameterInfo.getAddressIndex();
                    String address = plcParameterInfo.getAddress(index);
                    if (address != null) {
                        addressList.add(address);
                    }
                }
            }
        }
        return addressList;
    }
    /**
     * 添加参数实例
     *
     * @param param 参数实例
     */
    public void addPlcParameter(PlcParameterInfo param) {
        if (plcParameterList != null)
            plcParameterList.add(param);
        else {
            plcParameterList = new ArrayList<PlcParameterInfo>();
            plcParameterList.add(param);
        }
    }
    /**
     * 根据PLC返回的数据 给参数实例赋值
     *
     * @param plcValueArray PLC读取回来的byte类型数据集合
     */
    public void setPlcParameterList(byte[] plcValueArray) {
        if (plcParameterList != null) {
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                byte[] valueList = new byte[plcParameterInfo.getAddressLength()];
//                System.out.println(plcParameterInfo.getAddressLength());
                for (int i = 0; i < plcParameterInfo.getAddressLength(); i++) {
                    Array.setByte(valueList, i, plcValueArray[plcParameterInfo.getAddressIndex() + i]);
                }
                if (plcParameterInfo.getAddressLength()==2) {
                      plcParameterInfo.setValue(String.valueOf(byte2short(valueList)));
                }
                else if (plcParameterInfo.getAddressLength()==14) {
                    plcParameterInfo.setValue((byteToHexString(valueList)));
                }
                else
                {
                    String valuestr = new String(valueList);
                    plcParameterInfo.setValue(valuestr);
                }
            }
        }
    }
     /**
     * short类型转byte[]
     *
     * @param s short类型值
     */
    public static byte[] short2byte(short s){
        byte[] b = new byte[2];
        for(int i = 0; i < 2; i++){
            int offset = 16 - (i+1)*8; //因为byte占4个字节,所以要计算偏移量
            b[i] = (byte)((s >> offset)&0xff); //把16位分为2个8位进行分别存储
        }
        return b;
   }
     /**
     * byte[]类型转short
     *
     * @param b byte[]类型值
     */
   public static short byte2short(byte[] b){
       short l = 0;
       for (int i = 0; i < 2; i++) {
           l<<=8; //<<=和我们的 +=是一样的,意思就是 l = l << 8
           l |= (b[i] & 0xff); //和上面也是一样的  l = l | (b[i]&0xff)
       }
       return l;
   }
    public static String byteToHexString(byte[] bytes) {
        String str = new String(bytes, StandardCharsets.UTF_8);
        return str;
    }
}
LoadGlassModule/src/main/java/com/mes/mapper/LoadGlassMapper.java
@@ -1,18 +1,24 @@
package com.mes.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.entity.OrderTest;
import java.util.List;
import org.apache.ibatis.annotations.*;
import com.mes.entity.UpWorkstation;
@Mapper
public interface LoadGlassMapper extends BaseMapper<UpWorkstation> {
    //显示目前工位玻璃信息
    @Select("SELECT * FROM up_workstation")
    UpWorkstation SelectALL();
    List<UpWorkstation> selectALL();
    //删除工位的玻璃信息
    @Delete("DELETE FROM up_workstation where  workstation_id=#{id}")
    void DeleteALL(int id );
    @Update("UPDATE `hangzhoumes`.`up_workstation` SET   `pattern_width` =NULL, `pattern_heigth` = NULL, `pattern_thickness` = NULL, `films_id` = NULL, `number` = NULL WHERE `workstation_id`=#{id}")
    void deleteGlass(int id );
    //增加上片信息
    @Insert ("INSERT INTO up_workstation (pattern_width,pattern_heigth,pattern_thickness)value(#{patternwidth},#{patternheigth},#{patternthickness}where workstation_id=#{workstationid) ")
    void InsertALL(Double patternwidth,Double patternheigth,Double patternthickness,int workstationid);
    @Update ("UPDATE `hangzhoumes`.`up_workstation` SET   `pattern_width` = #{upwork.patternwidth}, `pattern_heigth` = #{upwork.patternheigth}, `pattern_thickness` =#{upwork.patternthickness}, `films_id` =#{upwork.filmsid}, `number` = #{upwork.number} WHERE `id` = #{upwork.workstationid}; ")
    void insertGlass(UpWorkstation upwork);
    //是否发起吸片
    @Select("SELECT * FROM up_workstation where  workstation_id=#{id}")
    UpWorkstation selectAdd(int id);
    //判断优先工位吸片
    @Select("select b.layout_sequence from up_workstation a left join up_patten_usage b on a.pattern_width=b.width and a.pattern_heigth=b.width and a.pattern_thickness=b.thickness where a.workstation_id=#{id}")
    int selectPriority(int id);
}
LoadGlassModule/src/main/java/com/mes/mapper/OrderTestMapper.java
File was deleted
LoadGlassModule/src/main/java/com/mes/service/IOrderService.java
File was deleted
LoadGlassModule/src/main/java/com/mes/service/LoadGlassService.java
@@ -1,40 +1,69 @@
package com.mes.service;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.springboot.component.PLCAutoMes;
import com.example.springboot.component.S7control;
import com.example.springboot.entity.device.PlcParameterObject;
import com.mes.entity.device.PLCAutoMes;
import com.mes.common.PlcTools.S7control;
import com.mes.entity.device.PlcParameterObject;
import com.google.common.primitives.Bytes;
import com.mes.entity.GlassInfo;
import com.mes.entity.UpWorkstation;
import com.mes.mapper.LoadGlassMapper;
import com.mes.mapper.TemperingMapper;
@Service
public class LoadGlassService {
    @Autowired
    private com.mes.common.PlcTools.S7control s7control;
    private LoadGlassMapper LoadGlassMapper;
    PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
    //显示工位上的玻璃信息
    public GlassInfo selectAll() {
        GlassInfo glassInfo = LoadGlassMapper.SelectALL();
    public List<UpWorkstation> selectAll() {
        List<UpWorkstation> glassInfo= LoadGlassMapper.selectALL();
        return glassInfo;
    }
    //增加人工输入的工位玻璃信息
    public void insertGlass(UpWorkstation upwork) {
        LoadGlassMapper.insertGlass(upwork.Getpatternwidth(),upwork.getPatternheigth(),upwork.getPatternthickness(),1);
    public void insertGlass(UpWorkstation upwork) {
        LoadGlassMapper.insertGlass(upwork.getPatternwidth(),upwork.getPatternheigth(),upwork.getPatternthickness(),upwork.getWorkstationid());
    }  
    //删除人工搬走的玻璃信息
    public void deleteGlass(String id) {
    public void deleteGlass(int id) {
        LoadGlassMapper.deleteGlass(id);
    }
    //判断是否可以吸片进行任务
    public boolean isCanLoadGlass() {
        boolean result=s7control.WriteWord("100.10", 1);
        return result;
        String loadstate=plcmes.getPlcParameter("吸片信号").getValue();
        if(loadstate.equals("1")) {
            return true;
        }else{
            return false;
        }
    }
    //判断优先吸片位置后发送出片任务
    public void selectPriority() {
        int loadid1=LoadGlassMapper.selectPriority(1);
        int loadid2=LoadGlassMapper.selectPriority(2);
        //判断一二号工位哪边的顺序更先
        if(loadid1>loadid2) {
            s7control.WriteWord("DB100.10", (short)2);
        }else if(loadid1==loadid2){
            //当两个工位上的玻璃数相同时,判断哪个工位上的玻璃数更少,优先清空一个架子
            int glassnum1=plcmes.getPlcParameter("玻璃数").getValue();
            int glassnum2=plcmes.getPlcParameter("玻璃数").getValue();
            if(glassnum1>glassnum2){
                s7control.WriteWord("DB100.10", (short)2);
            }else{
                s7control.WriteWord("DB100.10", (short)1);
            }
        }else{
            s7control.WriteWord("DB100.10", (short)1);
        }
    }
}
LoadGlassModule/src/main/java/com/mes/service/impl/OrderServiceImpl.java
File was deleted
LoadGlassModule/src/main/resources/JsonFile/PlcAlbania.json
New file
@@ -0,0 +1,414 @@
{
   "plcAddressBegin":"DB14.0",
   "plcAddressLenght":"208",
   "dataType":"word",
   "parameteInfor":[
      {
         "codeId": "PLCToMES",
         "addressIndex":"0",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"m/min"
      },
      {
          "codeId": "IDStatus1",
          "addressIndex":"2",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"m/min"
       },
       {
          "codeId": "IDStatus2",
          "addressIndex":"4",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"m/min"
       },
       {
          "codeId": "IDStatus3",
          "addressIndex":"6",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "IDStatus4",
          "addressIndex":"8",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "IDStatus5",
          "addressIndex":"10",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "IDStatus6",
          "addressIndex":"12",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "StautsID1",
          "addressIndex":"14",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "StautsID2",
          "addressIndex":"16",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "StautsID3",
          "addressIndex":"18",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "StautsID4",
          "addressIndex":"20",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "StautsID5",
          "addressIndex":"22",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "StautsID6",
          "addressIndex":"24",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "GaToMES",
          "addressIndex":"26",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "Height",
          "addressIndex":"28",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "width",
          "addressIndex":"30",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "ExportTOMES1",
          "addressIndex":"32",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "ExportToMES2",
          "addressIndex":"34",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       } ,
       {
          "codeId": "MESToPLC",
          "addressIndex":"36",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       } ,
       {
          "codeId": "MESID1",
          "addressIndex":"38",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       } ,
       {
          "codeId": "MESID2",
          "addressIndex":"54",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "MESID3",
          "addressIndex":"70",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "MESID4",
          "addressIndex":"86",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "MESID5",
          "addressIndex":"102",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "MESID6",
          "addressIndex":"118",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "MESToPLCStart1",
          "addressIndex":"134",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },{
         "codeId": "MESToPLCStart2",
         "addressIndex":"136",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStart3",
         "addressIndex":"138",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      }
      ,{
         "codeId": "MESToPLCStart4",
         "addressIndex":"140",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      }
      ,{
         "codeId": "MESToPLCStart5",
         "addressIndex":"142",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      }
      ,{
         "codeId": "MESToPLCStart6",
         "addressIndex":"144",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget1",
         "addressIndex":"146",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget2",
         "addressIndex":"148",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget3",
         "addressIndex":"150",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget4",
         "addressIndex":"152",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget5",
         "addressIndex":"154",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget6",
         "addressIndex":"156",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus1",
         "addressIndex":"158",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus2",
         "addressIndex":"160",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus3",
         "addressIndex":"162",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus4",
         "addressIndex":"164",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus5",
         "addressIndex":"166",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus6",
         "addressIndex":"168",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToGaStatus",
         "addressIndex":"170",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "A01Err",
         "addressIndex":"172",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "A02Err",
         "addressIndex":"174",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "B01Err",
         "addressIndex":"176",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C01Err",
         "addressIndex":"178",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C02Err",
         "addressIndex":"180",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "ErrSpace1",
         "addressIndex":"182",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "ErrSpace2",
         "addressIndex":"184",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "ErrSpace3",
         "addressIndex":"186",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "B01Position",
         "addressIndex":"188",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C01Position",
         "addressIndex":"190",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C02Position",
         "addressIndex":"192",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "DeviceState",
         "addressIndex":"194",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "AllFVRun",
         "addressIndex":"196",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "A01State",
         "addressIndex":"198",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "A02State",
         "addressIndex":"200",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "B01State",
         "addressIndex":"202",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C01State",
         "addressIndex":"204",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C02State",
         "addressIndex":"206",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      }
   ]
}
TemperingGlassModule/src/main/JsonFile/PlcAlbania.json
New file
@@ -0,0 +1,414 @@
{
   "plcAddressBegin":"DB14.0",
   "plcAddressLenght":"208",
   "dataType":"word",
   "parameteInfor":[
      {
         "codeId": "PLCToMES",
         "addressIndex":"0",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"m/min"
      },
      {
          "codeId": "IDStatus1",
          "addressIndex":"2",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"m/min"
       },
       {
          "codeId": "IDStatus2",
          "addressIndex":"4",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"m/min"
       },
       {
          "codeId": "IDStatus3",
          "addressIndex":"6",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "IDStatus4",
          "addressIndex":"8",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "IDStatus5",
          "addressIndex":"10",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "IDStatus6",
          "addressIndex":"12",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "StautsID1",
          "addressIndex":"14",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "StautsID2",
          "addressIndex":"16",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "StautsID3",
          "addressIndex":"18",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "StautsID4",
          "addressIndex":"20",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "StautsID5",
          "addressIndex":"22",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "StautsID6",
          "addressIndex":"24",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "GaToMES",
          "addressIndex":"26",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "Height",
          "addressIndex":"28",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "width",
          "addressIndex":"30",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "ExportTOMES1",
          "addressIndex":"32",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       }
       ,
       {
          "codeId": "ExportToMES2",
          "addressIndex":"34",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       } ,
       {
          "codeId": "MESToPLC",
          "addressIndex":"36",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       } ,
       {
          "codeId": "MESID1",
          "addressIndex":"38",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       } ,
       {
          "codeId": "MESID2",
          "addressIndex":"54",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "MESID3",
          "addressIndex":"70",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "MESID4",
          "addressIndex":"86",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "MESID5",
          "addressIndex":"102",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "MESID6",
          "addressIndex":"118",
          "addressLenght":"14",
          "ratio":"1",
          "unit":"mm/S"
       },
       {
          "codeId": "MESToPLCStart1",
          "addressIndex":"134",
          "addressLenght":"2",
          "ratio":"1",
          "unit":"mm/S"
       },{
         "codeId": "MESToPLCStart2",
         "addressIndex":"136",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStart3",
         "addressIndex":"138",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      }
      ,{
         "codeId": "MESToPLCStart4",
         "addressIndex":"140",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      }
      ,{
         "codeId": "MESToPLCStart5",
         "addressIndex":"142",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      }
      ,{
         "codeId": "MESToPLCStart6",
         "addressIndex":"144",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget1",
         "addressIndex":"146",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget2",
         "addressIndex":"148",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget3",
         "addressIndex":"150",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget4",
         "addressIndex":"152",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget5",
         "addressIndex":"154",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCTarget6",
         "addressIndex":"156",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus1",
         "addressIndex":"158",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus2",
         "addressIndex":"160",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus3",
         "addressIndex":"162",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus4",
         "addressIndex":"164",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus5",
         "addressIndex":"166",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToPLCStatus6",
         "addressIndex":"168",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "MESToGaStatus",
         "addressIndex":"170",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "A01Err",
         "addressIndex":"172",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "A02Err",
         "addressIndex":"174",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "B01Err",
         "addressIndex":"176",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C01Err",
         "addressIndex":"178",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C02Err",
         "addressIndex":"180",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "ErrSpace1",
         "addressIndex":"182",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "ErrSpace2",
         "addressIndex":"184",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "ErrSpace3",
         "addressIndex":"186",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "B01Position",
         "addressIndex":"188",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C01Position",
         "addressIndex":"190",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C02Position",
         "addressIndex":"192",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "DeviceState",
         "addressIndex":"194",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "AllFVRun",
         "addressIndex":"196",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "A01State",
         "addressIndex":"198",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "A02State",
         "addressIndex":"200",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "B01State",
         "addressIndex":"202",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C01State",
         "addressIndex":"204",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      },{
         "codeId": "C02State",
         "addressIndex":"206",
         "addressLenght":"2",
         "ratio":"1",
         "unit":"mm/S"
      }
   ]
}
TemperingGlassModule/src/main/java/com/mes/MesApplication.java
@@ -1,11 +1,8 @@
package com.mes;
import com.mes.common.PlcTools.S7object;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;
//springboot 启动入口
@SpringBootApplication
TemperingGlassModule/src/main/java/com/mes/common/PlcTools/S7control.java
@@ -1,7 +1,9 @@
package com.mes.common.PlcTools;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;
import java.sql.Time;
import java.util.ArrayList;
import java.util.List;
@@ -9,15 +11,37 @@
import com.github.xingshuangs.iot.protocol.s7.service.MultiAddressWrite;
import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
import com.google.common.primitives.Bytes;
import org.apache.ibatis.jdbc.Null;
public class S7control {
    S7PLC s7PLC; // PLC通讯类实例
    public S7control(EPlcType plcType, String ip, int port, int rack, int slot) {
    private EPlcType plcType = EPlcType.S1500; // 西门子PLC类型
    private String ip = "192.168.10.1"; // plc ip地址
    private int port = 102; // plc 端口号
    private static volatile S7control instance = null;
    private S7control() {
        if (s7PLC == null)
            s7PLC = new S7PLC(plcType, ip, port,0,0);
    }
    }
    public S7control(EPlcType plcType,String ip,int port,int a,int b) {
        if (s7PLC == null)
            s7PLC = new S7PLC(plcType, ip, port,a,b);
    }
    // 单例模式 获取类的唯一实例
    public static S7control getinstance() {
        if (instance == null) {
            synchronized (S7control.class) {
                if (instance == null)
                    instance = new S7control();
            }
        }
        return instance;
    }
    /**
     * 关闭西门子s7通讯连接
     */
@@ -33,7 +57,7 @@
    public boolean CheckConnected() {
        return s7PLC.checkConnected();
    }
    /**
     * 按指定的地址 写入一个word
     * 
@@ -156,7 +180,7 @@
        }
    }
    private int getIndexFromAddress(String address) {
@@ -181,7 +205,6 @@
    public List<Short> ReadWord(String address, int count) {
        if (s7PLC == null)
            return null;
        List<String> addresslist = GetAddressList(address, count, 16);
        try {
            return s7PLC.readInt16(addresslist);
@@ -191,7 +214,13 @@
            return null;
        }
    }
    public byte[] Readbyte(String address, int count) {
        byte[] byt=new byte[count];
        int wordcount=((count%2==0)?count/2:count+1);
        List<Short> word=ReadWord(address,wordcount);
        return byt;
    }
    /**
     * 按指定的地址 读取byte结果集
     * 
@@ -269,6 +298,41 @@
}
    public List<String> readStringsandword(List<String> addressList) {
        if (s7PLC == null) {
            return null;
        }
        List<String> result = new ArrayList<>();
        for (String address : addressList) {
            try {
                if (address.contains("-")) {
                    address = address.substring(0, address.indexOf("-"));
                    byte[] bytes = s7PLC.readByte(address, 14);
                    if (bytes != null) {
                        String str = new String(bytes, StandardCharsets.UTF_8);
                        result.add(str);
                    }
                } else {
                    Short value = s7PLC.readInt16(address);
                    result.add(value.toString());
                }
            } catch (Exception e) {
                System.out.println("读取 " + address + " 失败:" + e.getMessage());
                result.add(null);
            }
        }
        return result;
    }
//不连续地址写入Word
    public void WriteWord(List<String> address, List<Short> datas) {
        if (s7PLC == null)
@@ -300,7 +364,7 @@
            glassidlist.add(Byte.valueOf(String.valueOf(iditem)));
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        WriteByte(addr, bytes);
        S7control.getinstance().WriteByte(addr, bytes);
    }
//读取不连续word
@@ -410,4 +474,11 @@
        }
        return addresslist;
    }
    public void writeString(String addr,String data) {
        s7PLC.writeString(addr,data);
    }
    public String readStrings(String addr) {
        return s7PLC.readString(addr);
    }
}
TemperingGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java
@@ -16,7 +16,7 @@
    public void run(ApplicationArguments args) throws Exception {
        // TODO Auto-generated method stub
        //
        System.out.println("启动完成");
        System.out.println("启动完成Tempering");
 
 
    }
TemperingGlassModule/src/main/java/com/mes/controller/OrderTestController.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/controller/TemperingController.java
New file
@@ -0,0 +1,51 @@
package com.mes.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.mes.common.Result;
import com.mes.entity.Tempering;
import com.mes.service.TemperingOverService;
import com.mes.service.TemperingService;
@RestController
@RequestMapping("/Tempering")
// TidyUpGlassModule 钢化模块
public class TemperingController {
    @Autowired
    private TemperingService temperingService;
    @Autowired
    private TemperingOverService temperingOverService;
    @GetMapping("/SelectWaitingGlass") // 查询钢化等片中的版图信息,状态为1的为已到,状态为0的为等待中
    @ResponseBody
    public Result SelectWaitingGlass(@RequestParam(name = "ProcessId", required = false) String ProcessId) {
        List<Tempering> glass = temperingService.SelectWaitingGlass();
        System.out.println(glass);
        return Result.seccess(glass);
    }
    @GetMapping("/SelectIntoGlass") // 查询进炉中的钢化等片中的版图信息,状态全为1的为已到。
    @ResponseBody
    public Result SelectIntoGlass(String ProcessId) {
        List<Tempering> glass = temperingService.SelectIntoGlass();
        System.out.println(glass);
        return Result.seccess(glass);
    }
    @GetMapping("/SelectOutGlass") //钢化后显示出炉的版图信息
    @ResponseBody
    public Result SelectOutGlass(String ProcessId) {
        List<Tempering> glass = temperingOverService.SelectOutGlass();
        System.out.println(glass);
        return Result.seccess(glass);
    }
}
TemperingGlassModule/src/main/java/com/mes/entity/BigStorageCage.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/entity/BigStorageCageDetails.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/entity/DownStorageCage.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/entity/DownStorageCagedetails.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/entity/DownWorkstation.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/entity/EdgStorageCage.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/entity/EdgStorageCageDetails.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/entity/OrderTest.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/entity/device/InitUtil.java
New file
@@ -0,0 +1,124 @@
package com.mes.entity.device;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.mes.common.PlcTools.S7control;
public class InitUtil {
    //初始化word
    public static PlcParameterObject initword(String jsonFilePath) {
        try {
            FileReader fileReader = new FileReader(jsonFilePath);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuilder content = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line);
            }
            bufferedReader.close();
            fileReader.close();
            JSONObject jsonfileobj = new JSONObject(content.toString());
            JSONArray jsonArray = jsonfileobj.getJSONArray("parameteInfor");
            PlcParameterObject plcParameterObject = new PlcParameterObject();
            plcParameterObject.setPlcAddressBegin(jsonfileobj.getStr("plcAddressBegin"));//设置起始位地址
            plcParameterObject.setPlcAddressLength(Integer.valueOf(jsonfileobj.getStr("plcAddressLenght")));//设置地址长度
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject parameterObj = jsonArray.getJSONObject(i);
                PlcParameterInfo plcParameterInfo = new PlcParameterInfo(jsonfileobj.getStr("plcAddressBegin")); //参数实例
                String codeid = parameterObj.getStr("codeId");
                plcParameterInfo.setCodeId(codeid);
                plcParameterInfo.setAddressIndex(Integer.valueOf(parameterObj.getStr("addressIndex")));
                //plcParameterInfo.setRatio(Integer.valueOf(parameterObj.getStr("ratio")));
                plcParameterInfo.setAddressLength(Integer.valueOf(parameterObj.getStr("addressLenght")));
                plcParameterInfo.setUnit(parameterObj.getStr("unit"));
                plcParameterObject.addPlcParameter(plcParameterInfo);
            }
           // byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02};
           // byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
           // plcParameterObject.setPlcParameterList(getplcvlues);
            return plcParameterObject;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    //初始化bit
    public static PlcBitObject initbit(String jsonFilePath) {
        PlcBitObject plcBitObject = new PlcBitObject();
        try {
            FileReader fileReader = new FileReader(jsonFilePath);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuilder content = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line);
            }
            bufferedReader.close();
            fileReader.close();
            JSONObject jsonfileobj = new JSONObject(content.toString());
            JSONArray jsonArray = jsonfileobj.getJSONArray("parameteInfor");
            plcBitObject.setPlcAddressBegin(jsonfileobj.getStr("plcAddressBegin"));//设置起始位地址
            plcBitObject.setPlcAddressLength(Integer.valueOf(jsonfileobj.getStr("plcAddressLenght")));//设置地址长度
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject parameterObj = jsonArray.getJSONObject(i);
                PlcBitInfo plcBitInfo = new PlcBitInfo(jsonfileobj.getStr("plcAddressBegin")); //参数实例
                String codeid = parameterObj.getStr("codeId");
                plcBitInfo.setCodeId(codeid);
                plcBitInfo.setAddressIndex(Integer.valueOf(parameterObj.getStr("addressIndex")));
                plcBitObject.addPlcBit(plcBitInfo);
            }
            System.out.println("");
        } catch (IOException e) {
            e.printStackTrace();
        }
           //Boolean[] values1 = { false, true, true, true, false, false, true, false,
          //  false, true ,true };
   // List<Boolean> getplcvlues = new ArrayList<>(Arrays.asList(values1));
//        List<Boolean> getplcvlues = S7control.getinstance().ReadBits(plcBitObject.getPlcAddressBegin(), plcBitObject.getPlcAddressLength());
//        plcBitObject.setPlcBitList(getplcvlues);
        return plcBitObject;
    }
//
    public static void readAndUpdateBitValues(PlcBitObject plcBitObject) {
//        Boolean[] values1 = { false, true, true, true, false, false, true, false,
//          false, true ,true };
//         List<Boolean> getplcvlues = new ArrayList<>(Arrays.asList(values1));
        List<Boolean> getplcvlues = S7control.getinstance().ReadBits(plcBitObject.getPlcAddressBegin(), plcBitObject.getPlcAddressLength());
        plcBitObject.setPlcBitList(getplcvlues);
    }
    public static void readAndUpdateWordValues(PlcParameterObject plcParameterObject) {
        // byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02};
        byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
        plcParameterObject.setPlcParameterList(getplcvlues);
    }
}
TemperingGlassModule/src/main/java/com/mes/entity/device/PLCAutoMes.java
New file
@@ -0,0 +1,95 @@
package com.mes.entity.device;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static com.mes.entity.device.InitUtil.readAndUpdateWordValues;
public class PLCAutoMes extends Thread {
    // // 用于存储应用程序的配置信息
    // private Configuration config;
    private static InitUtil initUtil;
    // public static PlcParameterObject PlcMesObject;
    // public static PlcParameterObject PlcReadObject;
    // public static PlcParameterObject PlcframeObject;
    // // 创建一个自定义的 S7 控制器消息处理器对象
    // MessageHandler customS7Control = new MessageHandler();
    // 单例实例
    private static PLCAutoMes instance;
    // private static String PlcMes = PLCAutoMes.class.getResource("/JsonFile/PlcMes.json").getPath();
    private static String PlcAlbania = PLCAutoMes.class.getResource("/JsonFile/PlcAlbania.json").getPath();
    // private static String PlcRead = PLCAutoMes.class.getResource("/JsonFile/PlcRead.json").getPath();
    // private static String Plcframe = PLCAutoMes.class.getResource("/JsonFile/Plcframe.json").getPath();
    // private static String PlcParameter = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcParameter.json").getPath();
    // private static String PlcSign = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcSign.json").getPath();
    // private static String PlcState = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcState.json").getPath();
    // private static String PlcAlarm = PLCAutoMes.class.getResource("/JsonFile/PlcAlarm.json").getPath();
    // private static String PlcTest = PLCAutoMes.class.getResource("/JsonFile/PlcTest.json").getPath();
    // 调用initword方法
    // public static PlcParameterObject plcParameterObject = initUtil.initword(PlcParameter);
    // public static PlcBitObject plcPlcTest = initUtil.initbit(PlcTest);
    // public static PlcBitObject  plcBitObject = initUtil.initbit(PlcSign);
    // public static PlcParameterObject  plcStateObject= initUtil.initword(PlcState);
    // public static PlcBitObject plcPlcAlarm = initUtil.initbit(PlcAlarm);
    public static PlcParameterObject PlcMesObject = InitUtil.initword(PlcAlbania);
    // public static PlcParameterObject PlcReadObject = initUtil.initword(PlcRead);
    // public static PlcParameterObject PlcframeObject = initUtil.initword(Plcframe);
    // 私有构造函数
    public PLCAutoMes() throws IOException {
        //config = new Configuration("config.properties");
        initUtil = new InitUtil();
    }
    // 获取单例实例
    public static synchronized PLCAutoMes getInstance() throws IOException {
        if (instance == null) {
            instance = new PLCAutoMes();
        }
        return instance;
    }
    @Override
    public void run() {
        while (this != null) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // System.out.println(jsonFilePath);
            //readAndUpdateWordValues(PlcReadObject);
            readAndUpdateWordValues(PlcMesObject);
            //readAndUpdateWordValues(PlcframeObject);
            // readAndUpdateWordValues(PlcframeObject);
            // readAndUpdateWordValues(plcStateObject);
            // int index = PlcMesObject.getPlcParameter("AddStart").getAddressIndex();
            // // System.out.println(index);
            // PlcMesObject.getPlcParameter("AddStart").getAddress(index);
            // // System.out.println(PlcMesObject.getPlcParameter("AddStart").getAddress(index));
            // List<String> addresses = new ArrayList<>();
            // addresses.add("FeedID");
            // addresses.add("AddStart");
            // // System.out.println(addresses);
            // // System.out.println(PlcMesObject.getPlcParameterValues(addresses));
            // List<String> addresses2 = new ArrayList<>();
            // addresses2.add("FeedID");
            // addresses2.add("FeedCarStatus");
            //System.out.println(PlcReadObject.getPlcParameterValues(addresses2));
        }
    }
}
TemperingGlassModule/src/main/java/com/mes/entity/device/PlcBitInfo.java
New file
@@ -0,0 +1,77 @@
package com.mes.entity.device;
public  class PlcBitInfo {
        public PlcBitInfo(String startAddress) {
            this.startAddress = startAddress;
        }
        private String startAddress;
        // 参数标识
        private String codeId;
        // 参数名称
        private String name;
        // 读取 参数值
        private Boolean value;
        // 参数地址
        private int addressIndex;
        public String getCodeId() {
            return this.codeId;
        }
        public void setCodeId(String codeId) {
            this.codeId = codeId;
        }
        public String getName() {
            return this.name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Boolean getValue() {
            return this.value;
        }
        public void setValue(Boolean value) {
            this.value = value;
        }
        public int getAddressIndex() {
            return this.addressIndex;
        }
         /**
     * 获取地址
     *
     * @param index 索引地址
     */
        public String getAddress(int index) {
            String[] stringdatas = this.startAddress.trim().split("\\.");
            if (stringdatas.length < 2 )
                return null;
            int dbwindex = 0;
            int bitindex = 0;
             if (stringdatas.length == 3) {
                dbwindex = Integer.parseInt(stringdatas[1]);
                bitindex = Integer.parseInt(stringdatas[2]);
            } else
                return null;
              dbwindex+=index/8;
              bitindex+=index%8;
            return stringdatas[0]+"."+dbwindex+"."+bitindex;
        }
    public void setAddressIndex(int addressindex) {
            this.addressIndex = addressindex;
        }
    }
TemperingGlassModule/src/main/java/com/mes/entity/device/PlcBitObject.java
New file
@@ -0,0 +1,142 @@
package com.mes.entity.device;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class PlcBitObject {
    // 该模块数据类型,数据起始位置
    private String plcAddressBegin;
    // 数据地址长度:第一参数到最后一个参数的长度
    private int plcAddressLength;
    private ArrayList<PlcBitInfo> plcBitList;
    /**
     * @return 数据区开始地址
     */
    public String getPlcAddressBegin() {
        return plcAddressBegin;
    }
    /**
     * @param plcAddressBegin 设置数据区开始地址
     */
    public void setPlcAddressBegin(String plcAddressBegin) {
        this.plcAddressBegin = plcAddressBegin;
    }
    /**
     * @return 数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public int getPlcAddressLength() {
        return plcAddressLength;
    }
    /**
     * @return 设置:数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public void setPlcAddressLength(int plcAddressLength) {
        this.plcAddressLength = plcAddressLength;
    }
    /**
     * @return 获取参数实例集合
     */
    public ArrayList<PlcBitInfo> getBitList() {
        return plcBitList;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeid 参数标识
     * @return 获取某个参数实例
     */
    public PlcBitInfo getPlcBit(String codeid) {
        if (plcBitList != null) {
            for (PlcBitInfo plcbitInfo : plcBitList) {
                if (plcbitInfo.getCodeId().equals(codeid))
                    return plcbitInfo;
            }
            return null;
        } else
            return null;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeid 参数标识
     * @return 获取某个参数实例
     */
    public List<Boolean> getPlcBitValues(List<String> codeids) {
        List<Boolean> arrayList = new ArrayList<>();
        if (plcBitList != null) {
            Map<String, Boolean> resultMap = new LinkedHashMap<>(); // 使用 LinkedHashMap 保留插入顺序
            for (PlcBitInfo plcBitInfo : plcBitList) {
                if (codeids.contains(plcBitInfo.getCodeId().toString())) {
                    resultMap.put(plcBitInfo.getCodeId().toString(), plcBitInfo.getValue());
                }
            }
            for (String codeId : codeids) { // 按照传入参数的顺序遍历
                Boolean value = resultMap.get(codeId);
                if (value != null) {
                    arrayList.add(value);
                } else {
                    arrayList.add(null); // 如果找不到对应的值,添加 null
                }
            }
        }
        return arrayList;
    }
    public List<String> getAddressListByCodeId(List<String> codeIdList) {
        List<String> addressList = new ArrayList<>();
        for (String codeId : codeIdList) {
            for (PlcBitInfo plcBitInfo : plcBitList) {
                if (plcBitInfo.getCodeId().equals(codeId)) {
                    int index = plcBitInfo.getAddressIndex();
                    String address = plcBitInfo.getAddress(index);
                    if (address != null) {
                        addressList.add(address);
                    }
                }
            }
        }
        return addressList;
    }
    /**
     * 添加参数实例
     *
     * @param param 参数实例
     */
    public void addPlcBit(PlcBitInfo param) {
        if (plcBitList != null)
            plcBitList.add(param);
        else {
            plcBitList = new ArrayList<PlcBitInfo>();
            plcBitList.add(param);
        }
    }
    /**
     * 根据PLC返回的数据 给参数实例赋值
     *
     * @param plcValueArray PLC读取回来的byte类型数据集合
     */
    public void setPlcBitList(List<Boolean> plcValueArray) {
        if (plcBitList != null) {
            for (PlcBitInfo plcbitInfo : plcBitList) {
                plcbitInfo.setValue(plcValueArray.get(plcbitInfo.getAddressIndex()));
            }
        }
    }
}
TemperingGlassModule/src/main/java/com/mes/entity/device/PlcParameterInfo.java
New file
@@ -0,0 +1,128 @@
package com.mes.entity.device;
public  class PlcParameterInfo {
      public PlcParameterInfo(String startAddress) {
        this.startAddress = startAddress;
      }
        private String startAddress;
        // 参数标识
        private String codeId;
        // 参数名称
        private String name;
        // 读取 参数值
        private String value;
        // // 写入 参数值
        // private String writeValue;
        // 参数单位
        private String unit;
        // 参数值转换系数
        private int ratio;
        // 参数地址
        private int addressIndex;
        // 参数地址位长度
        private int addressLength;
        public String getCodeId() {
            return this.codeId;
        }
        public void setCodeId(String codeId) {
            this.codeId = codeId;
        }
        public String getName() {
            return this.name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getValue() {
            return this.value;
        }
        public void setValue(String value) {
            this.value = value;
        }
        // public String getWriteValue() {
        //     return this.writeValue;
        // }
        // public void setWriteValue(String writeValue) {
        //     this.writeValue = writeValue;
        // }
        public String getUnit() {
            return this.unit;
        }
        public void setUnit(String unit) {
            this.unit = unit;
        }
        public int getAddressIndex() {
            return this.addressIndex;
        }
        public void setAddressIndex(int addressindex) {
            this.addressIndex = addressindex;
        }
        public int getAddressLength() {
            return this.addressLength;
        }
        public void setAddressLength(int addresslength) {
            this.addressLength = addresslength;
        }
        public int getRatio() {
            return this.ratio;
        }
        public void setRatio(int ratio) {
            this.ratio = ratio;
        }
           /**
     * 获取地址
     *
     * @param index 索引地址
     */
    public String getAddress(int index) {
        String[] stringdatas = this.startAddress.trim().split("\\.");
        int addressLength=this.addressLength;
        if (addressLength < 2 ){
            return null;
        }
        if (addressLength == 2 ) {
            int wordindex = index;
            return stringdatas[0] + "." + wordindex;
        }
        if (addressLength == 14 ) {
            int wordindex = index;
            //int newIndex = wordindex + 13;
            return stringdatas[0] + "." + wordindex ;
        }
        return null;
    }
    public int getPlcAddress() {
        return addressIndex;
    }
    public String getAddress() {
       return getAddress(this.addressIndex);
    }
}
TemperingGlassModule/src/main/java/com/mes/entity/device/PlcParameterObject.java
New file
@@ -0,0 +1,202 @@
package com.mes.entity.device;
import java.lang.reflect.Array;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class PlcParameterObject {
    // 该模块数据类型,数据起始位置
    private String plcAddressBegin;
    // 数据地址长度:第一参数到最后一个参数的长度
    private int plcAddressLength;
    private ArrayList<PlcParameterInfo> plcParameterList;
    /**
     * @return 数据区开始地址
     */
    public String getPlcAddressBegin() {
        return plcAddressBegin;
    }
    /**
     * @param plcAddressBegin 设置数据区开始地址
     */
    public void setPlcAddressBegin(String plcAddressBegin) {
        this.plcAddressBegin = plcAddressBegin;
    }
    /**
     * @return 数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public int getPlcAddressLength() {
        return plcAddressLength;
    }
    /**
     * @return 设置:数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public void setPlcAddressLength(int plcAddressLength) {
        this.plcAddressLength = plcAddressLength;
    }
    /**
     * @return 获取参数实例集合
     */
    public ArrayList<PlcParameterInfo> getPlcParameterList() {
        return plcParameterList;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeid 参数标识
     * @return 获取某个参数实例
     */
    public PlcParameterInfo getPlcParameter(String codeid) {
        if (plcParameterList != null) {
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                if (plcParameterInfo.getCodeId().equals(codeid))
                    return plcParameterInfo;
            }
            return null;
        } else
            return null;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeids 参数标识
     * @return 获取某个参数实例
     */
    public List<String> getPlcParameterValues(List<String> codeids) {
        List<String> arrayList = new ArrayList<>();
        if (plcParameterList != null) {
            Map<String, PlcParameterInfo> resultMap = new LinkedHashMap<>(); // 使用 LinkedHashMap 保留插入顺序
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                if (codeids.contains(plcParameterInfo.getCodeId())) {
                    resultMap.put(plcParameterInfo.getCodeId(), plcParameterInfo);
                }
            }
            for (String codeId : codeids) { // 按照传入参数的顺序遍历
                PlcParameterInfo plcParameterInfo = resultMap.get(codeId);
                if (plcParameterInfo != null) {
                    arrayList.add(plcParameterInfo.getValue());
                } else {
                    arrayList.add(null); // 如果找不到对应的值,添加 null
                }
            }
        }
        return arrayList;
    }
    public List<String> getAddressListByCodeId(List<String> codeIdList) {
        List<String> addressList = new ArrayList<>();
        for (String codeId : codeIdList) {
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                if (plcParameterInfo.getCodeId().equals(codeId)) {
                    int index = plcParameterInfo.getAddressIndex();
                    String address = plcParameterInfo.getAddress(index);
                    if (address != null) {
                        addressList.add(address);
                    }
                }
            }
        }
        return addressList;
    }
    /**
     * 添加参数实例
     *
     * @param param 参数实例
     */
    public void addPlcParameter(PlcParameterInfo param) {
        if (plcParameterList != null)
            plcParameterList.add(param);
        else {
            plcParameterList = new ArrayList<PlcParameterInfo>();
            plcParameterList.add(param);
        }
    }
    /**
     * 根据PLC返回的数据 给参数实例赋值
     *
     * @param plcValueArray PLC读取回来的byte类型数据集合
     */
    public void setPlcParameterList(byte[] plcValueArray) {
        if (plcParameterList != null) {
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                byte[] valueList = new byte[plcParameterInfo.getAddressLength()];
//                System.out.println(plcParameterInfo.getAddressLength());
                for (int i = 0; i < plcParameterInfo.getAddressLength(); i++) {
                    Array.setByte(valueList, i, plcValueArray[plcParameterInfo.getAddressIndex() + i]);
                }
                if (plcParameterInfo.getAddressLength()==2) {
                      plcParameterInfo.setValue(String.valueOf(byte2short(valueList)));
                }
                else if (plcParameterInfo.getAddressLength()==14) {
                    plcParameterInfo.setValue((byteToHexString(valueList)));
                }
                else
                {
                    String valuestr = new String(valueList);
                    plcParameterInfo.setValue(valuestr);
                }
            }
        }
    }
     /**
     * short类型转byte[]
     *
     * @param s short类型值
     */
    public static byte[] short2byte(short s){
        byte[] b = new byte[2];
        for(int i = 0; i < 2; i++){
            int offset = 16 - (i+1)*8; //因为byte占4个字节,所以要计算偏移量
            b[i] = (byte)((s >> offset)&0xff); //把16位分为2个8位进行分别存储
        }
        return b;
   }
     /**
     * byte[]类型转short
     *
     * @param b byte[]类型值
     */
   public static short byte2short(byte[] b){
       short l = 0;
       for (int i = 0; i < 2; i++) {
           l<<=8; //<<=和我们的 +=是一样的,意思就是 l = l << 8
           l |= (b[i] & 0xff); //和上面也是一样的  l = l | (b[i]&0xff)
       }
       return l;
   }
    public static String byteToHexString(byte[] bytes) {
        String str = new String(bytes, StandardCharsets.UTF_8);
        return str;
    }
}
TemperingGlassModule/src/main/java/com/mes/mapper/OrderTestMapper.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/mapper/TemperingMapper.java
@@ -4,6 +4,8 @@
import com.mes.entity.GlassInfo;
import com.mes.entity.Tempering;
import java.util.List;
import org.apache.ibatis.annotations.*;
@Mapper
@@ -12,9 +14,20 @@
//查询该玻璃的尺寸和坐标
@Select("select *from glass_info where id=#{glassid};")
GlassInfo SelectOutGlass(String glassid);
@Select("select *from glass_info where id=#{glassid};")
GlassInfo SelectGlass(String glassid);
//是否可以发送进炉信号
@Select("select count(*) from glass_info where id=#{glassid};")
int SelectTempering(String glassid);
//查询等待中的钢化版图玻璃信息
@Select("select*from tempering_glass_info a left join (select flowcard_id,count(state)state from tempering_glass_info GROUP BY flowcard_id,state)b on a.flowcard_id=b.flowcard_id where b.state=2")
List<Tempering> SelectWaitingGlass();
//查询进炉中的钢化版图玻璃信息
@Select("select*from tempering_glass_info a left join (select flowcard_id,min(state)state1 from tempering_glass_info GROUP BY flowcard_id having state1=1)b on a.flowcard_id=b.flowcard_id where b.state1=1")
List<Tempering> SelectInGlass();
//查询钢化后的钢化版图信息
@Select("select*from tempering_glass_info a left join (select flowcard_id,min(state)state1 from tempering_glass_info GROUP BY flowcard_id having state1=2)b on a.flowcard_id=b.flowcard_id where b.state1=2")
List <Tempering> SelectOutGlass();
}
TemperingGlassModule/src/main/java/com/mes/service/IOrderService.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/service/ModuleA.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/service/ModuleB.java
File was deleted
TemperingGlassModule/src/main/java/com/mes/service/TemperingOverService.java
@@ -1,28 +1,36 @@
package com.mes.service;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.mes.entity.GlassInfo;
import com.mes.entity.userInfo.SysError;
import com.mes.common.PlcTools.S7control;
import com.mes.entity.Tempering;
import com.mes.entity.device.PLCAutoMes;
import com.mes.entity.device.PlcParameterObject;
import com.mes.mapper.TemperingMapper;
import com.mes.mapper.userInfo.SysErrorMapper;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
@DS("glass_info")
public class TemperingOverService {
    private final TemperingMapper temperingMapper;
private final TemperingMapper temperingMapper;
   //PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
    public TemperingOverService(TemperingMapper temperingMapper) {
        this.temperingMapper = temperingMapper;
    }
    //接收出炉信号和炉号
    public GlassInfo SelectOutGlass (String glassid) {
        GlassInfo GlassInfo = temperingMapper.SelectOutGlass(glassid);
        return GlassInfo;
    public String SelectOutSignal () {
        S7control.getinstance().WriteWord("出炉信号", (short)1);
        return "GlassInfo";
    }
    //发送确认收到
    //发送确认收到信号
    public void OverSignal () {
        S7control.getinstance().WriteWord("确认字", (short)1);
    }
    //显示钢化出炉后的版图信息
    public List <Tempering> SelectOutGlass () {
        return temperingMapper.SelectOutGlass();
    }
}
TemperingGlassModule/src/main/java/com/mes/service/TemperingService.java
@@ -1,12 +1,10 @@
package com.mes.service;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.mes.common.PlcTools.S7control;
import com.mes.entity.GlassInfo;
import com.mes.entity.userInfo.SysError;
import com.mes.entity.Tempering;
import com.mes.mapper.TemperingMapper;
import com.mes.mapper.userInfo.SysErrorMapper;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
@@ -21,7 +19,7 @@
    }
    //接收id返回坐标和数据
    public GlassInfo SelectOutGlass (String glassid) {
        GlassInfo GlassInfo = temperingMapper.SelectOutGlass(glassid);
        GlassInfo GlassInfo = temperingMapper.SelectGlass(glassid);
        return GlassInfo;
    }
    //发送坐标信息
@@ -38,15 +36,23 @@
        else {
            return 0;
        }
    }
    //发送进炉信号
    public void SendIntoGlass (short start) {
        s7control.WriteWord("DB100.10", start);
    }
    //接受完成字回复确认字
    public void SendIntoGlass () {
        s7control.WriteWord("DB100.10", (short)1);
    }
    //显示等待中的版图
    public List <Tempering> SelectWaitingGlass () {
        List<Tempering> WaitingGlass = temperingMapper.SelectWaitingGlass();
        return WaitingGlass;
    }
    //显示正在进炉的版图
    public List<Tempering> SelectIntoGlass () {
        List<Tempering> IntoGlass = temperingMapper.SelectInGlass();
        return IntoGlass;
    }
}
TemperingGlassModule/src/main/java/com/mes/service/impl/OrderServiceImpl.java
File was deleted
TemperingGlassModule/target/classes/application.yml
@@ -2,31 +2,17 @@
server:
  port: 8080
  servlet:
   context-path: /mesModuleTools
    context-path: /mesModuleTools
spring:
  datasource:
    dynamic:
      primary: user_info #设置默认的数据源或者数据源组,默认值即为master
      primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        user_info:
          url: jdbc:mysql://10.153.19.150:3306/erp_user_info?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        sd:
          url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        mm:
          url: jdbc:mysql://10.153.19.150:3306/mm?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        pp:
          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
        hangzhoumes:
          url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
UI-Project/package-lock.json
@@ -27,6 +27,7 @@
      "devDependencies": {
        "@types/sortablejs": "^1.15.7",
        "@vitejs/plugin-vue": "^4.3.4",
        "http-proxy-middleware": "^3.0.0",
        "vite": "^4.4.9"
      }
    },
@@ -533,6 +534,15 @@
      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz",
      "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA=="
    },
    "node_modules/@types/http-proxy": {
      "version": "1.17.14",
      "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.14.tgz",
      "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==",
      "dev": true,
      "dependencies": {
        "@types/node": "*"
      }
    },
    "node_modules/@types/lodash": {
      "version": "4.14.199",
      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz",
@@ -544,6 +554,15 @@
      "integrity": "sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==",
      "dependencies": {
        "@types/lodash": "*"
      }
    },
    "node_modules/@types/node": {
      "version": "20.12.5",
      "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.12.5.tgz",
      "integrity": "sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==",
      "dev": true,
      "dependencies": {
        "undici-types": "~5.26.4"
      }
    },
    "node_modules/@types/sortablejs": {
@@ -964,6 +983,23 @@
      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
      "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
    },
    "node_modules/debug": {
      "version": "4.3.4",
      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
      "dev": true,
      "dependencies": {
        "ms": "2.1.2"
      },
      "engines": {
        "node": ">=6.0"
      },
      "peerDependenciesMeta": {
        "supports-color": {
          "optional": true
        }
      }
    },
    "node_modules/delayed-stream": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -1049,6 +1085,12 @@
      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
    },
    "node_modules/eventemitter3": {
      "version": "4.0.7",
      "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz",
      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
      "dev": true
    },
    "node_modules/fill-range": {
      "version": "7.0.1",
      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -1124,6 +1166,37 @@
        "node": ">= 6"
      }
    },
    "node_modules/http-proxy": {
      "version": "1.18.1",
      "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz",
      "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
      "dev": true,
      "dependencies": {
        "eventemitter3": "^4.0.0",
        "follow-redirects": "^1.0.0",
        "requires-port": "^1.0.0"
      },
      "engines": {
        "node": ">=8.0.0"
      }
    },
    "node_modules/http-proxy-middleware": {
      "version": "3.0.0",
      "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz",
      "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==",
      "dev": true,
      "dependencies": {
        "@types/http-proxy": "^1.17.10",
        "debug": "^4.3.4",
        "http-proxy": "^1.18.1",
        "is-glob": "^4.0.1",
        "is-plain-obj": "^3.0.0",
        "micromatch": "^4.0.5"
      },
      "engines": {
        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
      }
    },
    "node_modules/is-binary-path": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -1160,6 +1233,15 @@
      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
      "engines": {
        "node": ">=0.12.0"
      }
    },
    "node_modules/is-plain-obj": {
      "version": "3.0.0",
      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
      "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
      "dev": true,
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/local-pkg": {
@@ -1220,6 +1302,19 @@
      "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
      "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
    },
    "node_modules/micromatch": {
      "version": "4.0.5",
      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz",
      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
      "dev": true,
      "dependencies": {
        "braces": "^3.0.2",
        "picomatch": "^2.3.1"
      },
      "engines": {
        "node": ">=8.6"
      }
    },
    "node_modules/mime-db": {
      "version": "1.52.0",
      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
@@ -1246,6 +1341,12 @@
      "engines": {
        "node": "*"
      }
    },
    "node_modules/ms": {
      "version": "2.1.2",
      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
      "dev": true
    },
    "node_modules/nanoid": {
      "version": "3.3.6",
@@ -1399,6 +1500,12 @@
        "node": ">=8.10.0"
      }
    },
    "node_modules/requires-port": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz",
      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
      "dev": true
    },
    "node_modules/rollup": {
      "version": "3.29.4",
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
@@ -1462,6 +1569,12 @@
      "engines": {
        "node": ">=8.0"
      }
    },
    "node_modules/undici-types": {
      "version": "5.26.5",
      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
      "dev": true
    },
    "node_modules/unplugin": {
      "version": "1.5.0",
@@ -1900,6 +2013,15 @@
      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz",
      "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA=="
    },
    "@types/http-proxy": {
      "version": "1.17.14",
      "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.14.tgz",
      "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==",
      "dev": true,
      "requires": {
        "@types/node": "*"
      }
    },
    "@types/lodash": {
      "version": "4.14.199",
      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz",
@@ -1911,6 +2033,15 @@
      "integrity": "sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==",
      "requires": {
        "@types/lodash": "*"
      }
    },
    "@types/node": {
      "version": "20.12.5",
      "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.12.5.tgz",
      "integrity": "sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==",
      "dev": true,
      "requires": {
        "undici-types": "~5.26.4"
      }
    },
    "@types/sortablejs": {
@@ -2215,6 +2346,15 @@
      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
      "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
    },
    "debug": {
      "version": "4.3.4",
      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
      "dev": true,
      "requires": {
        "ms": "2.1.2"
      }
    },
    "delayed-stream": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -2287,6 +2427,12 @@
      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
    },
    "eventemitter3": {
      "version": "4.0.7",
      "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz",
      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
      "dev": true
    },
    "fill-range": {
      "version": "7.0.1",
      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -2329,6 +2475,31 @@
        "is-glob": "^4.0.1"
      }
    },
    "http-proxy": {
      "version": "1.18.1",
      "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz",
      "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
      "dev": true,
      "requires": {
        "eventemitter3": "^4.0.0",
        "follow-redirects": "^1.0.0",
        "requires-port": "^1.0.0"
      }
    },
    "http-proxy-middleware": {
      "version": "3.0.0",
      "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz",
      "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==",
      "dev": true,
      "requires": {
        "@types/http-proxy": "^1.17.10",
        "debug": "^4.3.4",
        "http-proxy": "^1.18.1",
        "is-glob": "^4.0.1",
        "is-plain-obj": "^3.0.0",
        "micromatch": "^4.0.5"
      }
    },
    "is-binary-path": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -2354,6 +2525,12 @@
      "version": "7.0.0",
      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
    },
    "is-plain-obj": {
      "version": "3.0.0",
      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
      "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
      "dev": true
    },
    "local-pkg": {
      "version": "0.4.3",
@@ -2397,6 +2574,16 @@
      "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
      "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
    },
    "micromatch": {
      "version": "4.0.5",
      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz",
      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
      "dev": true,
      "requires": {
        "braces": "^3.0.2",
        "picomatch": "^2.3.1"
      }
    },
    "mime-db": {
      "version": "1.52.0",
      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
@@ -2414,6 +2601,12 @@
      "version": "2.30.1",
      "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
    },
    "ms": {
      "version": "2.1.2",
      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
      "dev": true
    },
    "nanoid": {
      "version": "3.3.6",
@@ -2491,6 +2684,12 @@
        "picomatch": "^2.2.1"
      }
    },
    "requires-port": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz",
      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
      "dev": true
    },
    "rollup": {
      "version": "3.29.4",
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
@@ -2536,6 +2735,12 @@
        "is-number": "^7.0.0"
      }
    },
    "undici-types": {
      "version": "5.26.5",
      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
      "dev": true
    },
    "unplugin": {
      "version": "1.5.0",
      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.0.tgz",
UI-Project/package.json
@@ -27,6 +27,7 @@
  "devDependencies": {
    "@types/sortablejs": "^1.15.7",
    "@vitejs/plugin-vue": "^4.3.4",
    "http-proxy-middleware": "^3.0.0",
    "vite": "^4.4.9"
  }
}
UI-Project/src/layout/MainErpView.vue
@@ -12,7 +12,7 @@
const router = useRouter()
const userStore = useUserInfoStore()
const user = userStore.user.userName
store.createWebSocket();
// store.createWebSocket();
function quit(){
  userStore.$patch({
    user:null
UI-Project/src/router/index.js
@@ -22,6 +22,18 @@
      children:[
        
        
        {
          path: 'Temperedlayout',
          name: 'Temperedlayout',
          component: () => import('../views/TL/Temperedlayout/Temperedlayout.vue'),
          children:[
            {
             path: 'selectLayout',
              name: 'selectLayout',
              component: () => import('../views/TL/Temperedlayout/SelectLayout.vue'),
            }
         ]
        },
      
        /*----------- 上片机 ----------------*/
      {
@@ -133,32 +145,6 @@
              component: () => import('../views/UnLoadGlass/Landingindicationtwo.vue')
            }
          ]
        },
        /*----------- 用户管理 ----------------*/
        {
        path: 'User',
        name: 'userlist',
        component: () => import('../views/User/userlist.vue'),
        children:[
          {
            path: '/User/userlist',
            name: 'userlist',
            component: () => import('../views/User/userlist.vue')
          },
        ]
        },
        /*----------- 权限管理 ----------------*/
        {
        path: 'Permissions',
        name: 'permissionslist',
        component: () => import('../views/Permissions/permissionslist.vue'),
        children:[
          {
            path: '/Permissions/permissionslist',
            name: 'permissionslist',
            component: () => import('../views/Permissions/permissionslist.vue')
          },
        ]
        },
        {
          path: '',
UI-Project/src/stores/userInfo.js
@@ -1,6 +1,6 @@
import {defineStore} from 'pinia'
import {ref} from "vue";
import {createWebSocket, global_callback1} from "@/utils/webSocket";
// import {createWebSocket, global_callback1} from "@/utils/webSocket";
export  default defineStore("userInfo",{
    state: () =>{
@@ -10,9 +10,9 @@
        }
    },
    actions:{
        createWebSocket(){
            createWebSocket(global_callback1)
        }
        // createWebSocket(){
        //     createWebSocket(global_callback1)
        // }
    },
    persist: true//数据持久化,防止刷新数据消失
UI-Project/src/utils/webSocket.js
File was deleted
UI-Project/src/views/HomeView.vue
@@ -1,8 +1,6 @@
<script setup>
import { useRouter, useRoute } from 'vue-router'
import { sendSock, createWebSocket, closeSock } from "@/utils/webSocket"
// function global_callback(msg) {
//   console.log("websocket的回调函数收到服务器信息:" + JSON.stringify(msg));
//   // console.log("收到服务器信息:" + msg);
UI-Project/src/views/LoginView.vue
@@ -6,7 +6,7 @@
import { Lock,Avatar } from '@element-plus/icons-vue'
import request from '@/utils/request'
import userInfo from '@/stores/userInfo'
import { sendSock, createWebSocket, closeSock,global_callback1 } from "@/utils/webSocket"
const store=userInfo()
let ruleFormRef  = ref<FormInstance>()
UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
@@ -66,7 +66,7 @@
      <div style="margin-left: 150px;font-size: 20px;">版图编号:1</div>
    </div>
    <div>
            <div id="boxa" style="width: 700px;height: 220px;margin-left: 300px;">
            <div id="boxa" style="width: 700px;height: 220px;margin-left: 260px;">
              <div style="margin-top: 85px;"> NG202405060798A01-1</div> 
            <div> 500×1500</div>
          </div>
UI-Project/src/views/Returns/returns.vue
@@ -233,7 +233,7 @@
      </div>
    </el-card>
      <div id="parent">
        <img src="../../assets/shangpianji .png" alt="" style="max-width: 20%;max-height: 20%;margin-top: 20px;margin-left: 510px;">
        <img src="../../assets/shangpianji .png" alt="" style="max-width: 20%;max-height: 20%;margin-top: 20px;margin-left: 130px;">
        <el-button style="margin-top: -830px;margin-left: -40px;"  size="mini" id="searchButton" @click="add = true">添加原片</el-button>
        <el-button style="margin-top: -10px;margin-left: -80px;"  size="mini" id="searchButton"  @click="adda = true">添加原片</el-button>
        <!-- <div id="overlay" v-show="state"></div> -->
@@ -404,7 +404,6 @@
}
#parent{
  position: relative;
  /* margin-left: 250px; */
}
#overlay{
  position: absolute;
UI-Project/src/views/TL/Temperedlayout/Temperedlayout.vue
New file
@@ -0,0 +1,212 @@
<!--  物料资料  -->
<script setup>
import { ref } from "vue";
import { ArrowLeftBold, ArrowRight, Search } from "@element-plus/icons-vue";
import request from "@/utils/request";
import deepClone from "@/utils/deepClone";
import { ElMessage } from "element-plus";
import { useRouter } from "vue-router";
const router = useRouter()
let indexFlag = $ref(1)
function changeRouter(index) {
  indexFlag = index
}
</script>
<script>
export default {
  mounted() {
    //获取数据
    var data="ProcessId="+"P24032508";
    request.get("/TidyUpGlassModule/SelectTerritoryInfo?"+data).then((res) => {
      if (res.code == 200) {
        var StoveCount=0;
        var temperid;
        for(var i=0;i<res.data.length;i++){
          if (temperid != res.data[i].layoutid) {
            StoveCount++;
            temperid=res.data[i].layoutid;
          }
        }
        // console.log(res.data);
        this.CanvaDraws("mycanvas",res.data,StoveCount);
      } else {
        ElMessage.warning(res.msg)
        router.push("/login")
      }
    });
    request.get("/TidyUpGlassModule/CurrentCutTerritory").then((res) => {
      if (res.code == 200) {
        console.log(res.data);
      } else {
        ElMessage.warning(res.msg)
        router.push("/login")
      }
    });
  },
  methods: {
    //Canva(id,基础数据,页面长:实际长,显示行内版图数, )
    //基础数据:实际炉长,实际炉宽, 小片X轴, 小片y轴, 小片长, 小片宽,显示数据(尺寸,ID,流程卡号,版图号)
    CanvaDraws(id,Datas,StoveCount) {
        //var StoveCount=43;//炉数
        var ArrangementMode='linefeed';//排布方式:linefeed(换行) /Wholeline  整行
        var RowMaxCount=4;//每行最多显示的图数
        var StoveWidth=3000; //实际炉宽 2850
        var StoveLength=5500;//实际炉长 5000
        var StoveColor='#CFC8C5';//炉子背景颜色
        var StoveIntervalX=30; //页面每一炉之间的间距X  px
        var StoveIntervalY=50; //页面每一炉之间的间距Y  px
        var HtmlWidth=1800;   //页面横向
        //var actualWidth=12000;//页面横向所对应的实际长度
        var actualWidth=StoveWidth*RowMaxCount;//页面横向所对应的实际长度
        var Bli = actualWidth / (HtmlWidth-StoveIntervalX*RowMaxCount);//比例:实际长度mm/页面长度px
        var StoveCross=StoveWidth/Bli;   //页面炉子横向 像素
        var StoveVertical=StoveLength/Bli;//页面炉子纵向 像素
        var Font1=(StoveCross*0.05);
        var Font2=(StoveCross*0.028);
        // var TerritoryWidth=dataTempered.loadwidth; //实际版图宽
        //   var TerritoryLength=dataTempered.loadlength;//实际版图长
        //   var TerritoryColor='#0DB637';//版图背景颜色
        //   var TerritoryCross=TerritoryWidth/Bli;   //页面版图横向 像素
        //   var TerritoryVertical=TerritoryLength/Bli;//页面版图纵向 像素
        console.log(Font1);
        var canva = this.$refs[id];
        var content = canva.getContext('2d');
        canva.width = HtmlWidth;
        canva.height = StoveCount%RowMaxCount==0?((StoveVertical+StoveIntervalY)*(StoveCount/RowMaxCount)):((StoveVertical+StoveIntervalY)*(StoveCount/RowMaxCount+1));
        //console.log(StoveCount%RowMaxCount==0?((StoveVertical+StoveIntervalY)*(StoveCount/RowMaxCount)):((StoveVertical+StoveIntervalY)*(StoveCount/RowMaxCount+1)) );
        var temperid;//初始版图
        var Xlayout = 0; //炉子X轴起点
        var Ylayout = StoveIntervalY; //炉子Y轴起点
        var layoutCount = 0;//版图数
        var row=0;
        for (var i = 0; i < Datas.length; i++) {
          var dataTempered = Datas[i];
          var TerritoryWidth=dataTempered.loadwidth; //实际版图宽
          var TerritoryLength=dataTempered.loadlength;//实际版图长
          var TerritoryColor='#0DB637';//版图背景颜色
          var TerritoryCross=TerritoryWidth/Bli;   //页面版图横向 像素
          var TerritoryVertical=TerritoryLength/Bli;//页面版图纵向 像素
          if (temperid != dataTempered.layoutid) {
            //画版图  更改基础倍数
            if(layoutCount>0){
              Xlayout += StoveCross + StoveIntervalX;
              if (layoutCount %RowMaxCount== 0) {
                //换行
                Ylayout += StoveVertical+StoveIntervalY;
                Xlayout=0;
                row++;
              }
            }
            temperid=dataTempered.layoutid;
            layoutCount++;
            content.font ='bold '+Font1+'px Arial' ; //文字样式:加粗 16像素 字体Arial
            content.fillStyle = '#000000'; //字体颜色
            content.textAlign = 'center'; //文字居中
            content.fillText((dataTempered.layoutid), (StoveCross / 2+ Xlayout), 50/2+(StoveVertical+50)*row+10);
            //炉子
            content.fillStyle = StoveColor;
            content.fillRect(Xlayout, Ylayout, StoveCross, StoveVertical);
            //版图
            content.fillStyle = TerritoryColor;
            content.fillRect(Xlayout, Ylayout, TerritoryCross, TerritoryVertical);
          }
          var Rx = dataTempered.xaxis / Bli + Xlayout;
          var Ry = dataTempered.yaxis / Bli + Ylayout;
          var Rwidth = dataTempered.width / Bli;
          var Rheight = dataTempered.height / Bli;
          var Xwidth;
          var Xheight;
          content.fillStyle = '#5CADFE';
          if (dataTempered.rotateangle != 0) {
            Xwidth = Rwidth;
            Xheight = Rheight;
          } else {
            Xwidth = Rheight;
            Xheight = Rwidth;
          }
          content.fillRect(Rx, Ry, Xwidth, Xheight);
          content.font = 'bold '+Font2+'px Arial' ; //文字样式:加粗 16像素 字体Arial
          content.fillStyle = '#000000'; //字体颜色
          content.textAlign = 'center'; //文字居中
          content.fillText(('版图:'+dataTempered.layoutid+'-'+dataTempered.sort), (Xwidth / 2) + Rx, (Xheight) / 2 + Ry-Font2);
          content.fillText((dataTempered.width + '  *  ' + dataTempered.height), (Xwidth / 2) + Rx, (Xheight) / 2 + Ry); //fillText里面的可填写的值(文本内容, x坐标, y坐标, 文本最大宽度)
          content.fillText((dataTempered.processid), (Xwidth / 2) + Rx, (Xheight) / 2 + Ry+Font2);
          //content.rotate(30*Math.PI/180);
          content.stroke();
        }
    }
  }
}
</script>
<template>
  <div ref="content">
    <canvas ref="mycanvas"></canvas>
  </div>
</template>
<style scoped>
#main {
  width: 100%;
  height: 100%;
}
#div-title {
  height: 5%;
  width: 100%;
}
#searchButton {
  margin-top: -5px;
  margin-left: 1rem;
}
#searchButton1 {
  /* margin-left: 10rem; */
}
/*main-body样式*/
#main-body {
  width: 99%;
  height: 92%;
  margin-top: 1%;
}
#select {
  margin-left: 0.5rem;
}
:deep(.indexTag .el-breadcrumb__inner) {
  color: #5CADFE !important;
}
</style>
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -1,38 +1,166 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {reactive,  onMounted} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
const dialogFormVisiblea = ref(false)
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import Landingindication from "./Landingindication.vue";
// import Landingindicationtwo from "./Landingindicationtwo.vue";
import Landingindicationtwo from "./Landingindicationtwo.vue";
import unloadrequest from "@/utils/unloadrequest";
const dialogFormVisiblea = ref(false)
const tableData = [
  {
    id: '1',
    long: '1005',
    wide: '183.6',
    thick: '1991',
    state: '未启用',
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    state: '未启用'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    state: '未启用'
  },
]
const dialogFormVisiblea2 = ref(false)
const tableData = reactive([]);
// 数据
const loading = ref(false);
// 弹框显示控制
const dialogFormVisible = ref(false);
// 表单数据
const workstationId = ref('');
const flowCardId = ref('');
const flowCardOptions = ref([]);
// 方法
const handleSelectionChange = () => {
  // 处理表格行选择事件
};
const handleBindRack = (row) => {
  workstationId.value = row.workstationId; // 假设rackNumber是架号字段的属性名
  // 发起接口请求获取流程卡号
    fetchFlowCardId();
  dialogFormVisiblea.value = true; // 打开绑定架子对话框
};
//获取流程卡号
const fetchFlowCardId = async () => {
  try {
    const response = await unloadrequest.get('/api/downWorkstation/getflowCardId');
    console.log(response)
    if (response.code === 200) {
      flowCardOptions.value = response.data.map(item => ({ flowcard_id: item.flowcard_id }));
    } else {
      ElMessage.error(response.msg);
    }
  } catch (error) {
    console.error(error);
  }
};
//确认
const handleConfirm = async () => {
  try {
    const response = await unloadrequest.post('/api/downWorkstation/updateFlowCardId', {
      workstationId: workstationId.value,
      flowCardId: flowCardId.value
    });
    console.log(response)
    if (response.code == 200) {
      // 绑定成功,处理逻辑
      console.log('绑定成功');
      ElMessage.success(response.message);
      dialogFormVisiblea.value = false;
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.msg);
    }
  } catch (error) {
    // 处理错误
    console.error(error);
  }
};
const handleBindRack2 = (row) => {
  workstationId.value = row.workstationId; // 假设rackNumber是架号字段的属性名
  dialogFormVisiblea2.value = true; // 打开绑定架子对话框
};
//清除内容
const handleclear = async () => {
    try {
        const response = await unloadrequest.post('/api/downWorkstation/clear', {
            workstationId: workstationId.value,
        });
        console.log(response);
        if (response.code === 200) {
            // 清除成功的逻辑
            console.log('清除成功');
            ElMessage.success(response.message);
            dialogFormVisiblea2.value = false;
        } else if (response.code === 400) {
            // 清除失败的逻辑
            console.log('清除失败');
            console.log(response.message); // 打印服务器返回的错误信息
            ElMessage.error(response.message);
            dialogFormVisiblea2.value = false;
        }
    } catch (error) {
        // console.log(error);
         ElMessage.error("清除失败");
            dialogFormVisiblea2.value = false;
    }
};
// 发送获取表格数据的请求
const fetchTableData = async () => {
  try {
    // 发送获取表格数据的请求,并等待响应
    const response = await unloadrequest.get('/api/downWorkstation/getone');
    // 检查响应状态
    if (response.code === 200) {
      // 更新表格数据
      console.log('成功获取表格数据:', response.data);
      tableData.splice(0, tableData.length, ...response.data);
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.msg);
    }
  } catch (error) {
    // 处理请求失败的情况
    ElMessage.error('获取表格数据失败,请重试');
  }
};
// initWebSocket();
onMounted(fetchTableData);
 setInterval(fetchTableData, 2000)
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
@@ -119,6 +247,10 @@
  ],
})
</script>
<template>
@@ -128,53 +260,87 @@
        <el-table height="100%" ref="table" 
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="下片位" min-width="80" />
          <el-table-column prop="long" align="center" label="架号" min-width="120" />
          <el-table-column prop="wide" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="wide" align="center" label="总数量" min-width="120" />
          <el-table-column prop="wide" align="center" label="已落架数量" min-width="120" />
          <el-table-column prop="state" align="center" label="启用状态" min-width="120" />
          <el-table-column prop="workstationId" align="center" label="下片位" min-width="80" />
          <el-table-column prop="workstationId" align="center" label="架号" min-width="120" />
          <el-table-column prop="flowCardId" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="totalquantity" align="center" label="总数量" min-width="120" />
          <el-table-column prop="racksnumber" align="center" label="已落架数量" min-width="120" />
          <el-table-column prop="work_state" align="center" label="状态" min-width="120" />
          <el-table-column prop="deviceId" align="center" label="设备号" min-width="120" />
          <el-table-column prop="enableState" align="center" label="启用状态" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
<<<<<<< HEAD
            <template #default>
              <el-button size="mini" type="text" plain v-show="state !== '已启用' " @click="dialogFormVisiblea = true">绑定架子</el-button>
              <el-button size="mini" type="text" plain  @click="dialogForm">清空</el-button>
            </template>
=======
            <template #default="scope">
            <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '已启用' " @click="handleBindRack(scope.row)">绑定架子</el-button>
            <el-button size="mini" type="text" plain  @click="handleBindRack2(scope.row)">清空</el-button>
          </template>
>>>>>>> 96b63f125687d8ef610745fd9041da2cc77a24af
        </el-table-column>
        </el-table>
      </div>
    </el-card>
  </div>
  <div style="display: flex;">
  <div id="main-body">
      <Landingindication></Landingindication>
    </div>
  <!-- <div id="main-bodya">
    <Landingindicationtwo></Landingindicationtwo>
    </div> -->
    </div>
    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="30%" title="绑定架子" >
    <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form  label-width="100px" label-position="right">
              <el-form-item label="架号:" :required="true" style="width: 18vw">
                <el-input  autocomplete="off"/>
              </el-form-item>
              <el-form-item label="流程卡号:" :required="true" style="width: 18vw;">
                <el-input autocomplete="off" />
              </el-form-item>
        </el-form>
            </el-form>
          </div>
      <el-form  size="mini" label-width="150px">
        <el-form  label-width="100px" label-position="right">
          <el-form-item label="架号:" :required="true" style="width: 18vw">
            <el-input v-model="workstationId" autocomplete="off"/>
          </el-form-item>
          <el-form-item label="流程卡号:" :required="true" style="width: 18vw;">
          <el-select v-model="flowCardId" placeholder="请选择流程卡号">
            <el-option v-for="item in flowCardOptions" :key="item.flowcard_id" :label="item.flowcard_id" :value="item.flowcard_id" />
          </el-select>
        </el-form-item>
      </el-form>
      </el-form>
    </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="dialogFormVisiblea = false">
        <el-button type="primary" @click="handleConfirm">
          确认
        </el-button>
        <el-button @click="dialogFormVisiblea = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="dialogFormVisiblea2" top="21vh" width="30%" title="清除架子玻璃" >
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleclear">
          确认
        </el-button>
        <el-button @click="dialogFormVisiblea2 = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
    <!-- workstationId: '1',
    workstationId: '1005',
    flowCardId: '183.6',
    totalquantity: '1991',
    racksnumber:"1",
    work_state: '待识别', -->
  </div>
  <div style="display: flex;">
  <div id="main-body">
      <Landingindication></Landingindication>
    </div>
  <div id="main-bodya">
    <Landingindicationtwo></Landingindicationtwo>
    </div></div>
</template>
<style scoped>
@@ -199,6 +365,10 @@
}
#main-body{
  margin-top: -20px;
  margin-left: 450px;
  margin-left: 300px;
}
#main-bodya{
  margin-top: -10px;
  margin-left: 100px;
}
</style>
UI-Project/src/views/UnLoadGlass/loadmachineracktwo.vue
@@ -26,7 +26,21 @@
    state: '未启用'
  },
  {
    id: '2',
    id: '3',
    long: '105',
    wide: '183',
    thick: '191',
    state: '未启用'
  },
  {
    id: '4',
    long: '105',
    wide: '183',
    thick: '191',
    state: '未启用'
  },
  {
    id: '5',
    long: '105',
    wide: '183',
    thick: '191',
UI-Project/vite.config.js
@@ -16,25 +16,36 @@
    }
  }, 
  server: {
    port: 801,//端口号
    host: true,//ip地址 或 '0.0.0.0' 或 "loaclhost"
    open: false, //启动后是否自动打开浏览器
    https: false, // 是否开启 https
    port: 801,
    host: true,
    open: false,
    https: false,
    proxy: {
      '^/api': {
        target: 'localhost:8080/mesModuleTools', //目标源,目标服务器,真实请求地址
        changeOrigin: true, //支持跨域
        rewrite: (path) => path.replace(/^\/api/, "/mesModuleTools"), //重写真实路径,替换/api
      //   pathRewrite: {
      //     '^/api': ''
      // }
        // rewrite: (path) => path.replace(/^\/api/, "/mesModuleTools"), //重写真实路径,替换/api
      '/api': {
        target: 'http://localhost:8080/mesModuleTools',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '/mesModuleTools'),
      },
      '/api2': {
        target: 'localhost:8080/mesModuleTools',
        target: 'http://localhost:8081/mesModuleTools',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api2/, "mesModuleTools"),
        pathRewrite: {
          '^/api2': '',
        },
      },
    }
  }
})
    },
  },
  configureServer: ({ middlewares }) => {
    middlewares.use(
      '/mesModuleTools',
      createProxyMiddleware({
        target: 'ws://localhost:8081',
        ws: true,
        changeOrigin: true,
        pathRewrite: {
          '^/mesModuleTools': '',
        },
      })
    );
  },
});
UnLoadGlassModule/src/main/java/com/mes/controller/DownWorkstationController.java
@@ -4,13 +4,16 @@
import com.mes.service.DownWorkstationService;
import com.mes.service.GlassInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/downWorkstation")
@RequestMapping("/api/downWorkstation")
public class DownWorkstationController {
    @Autowired
@@ -19,8 +22,24 @@
    private GlassInfoService glassInfoService;
    @GetMapping("/getone")
    public List<DownWorkstation> getoneDownWorkstations() {
        return downWorkstationService.getoneDownWorkstations();
    public ResponseEntity<?> getOneDownWorkstations() {
        try {
            List<DownWorkstation> data = downWorkstationService.getoneDownWorkstations();
            // 构建符合预期格式的响应数据
            Map<String, Object> responseData = new HashMap<>();
            responseData.put("code", 200);
            responseData.put("msg", "成功");
            responseData.put("data", data);
            // 返回 ResponseEntity 对象,包含响应数据和状态码
            return ResponseEntity.ok(responseData);
        } catch (Exception e) {
            e.printStackTrace();
            // 如果出现异常,返回错误信息
            Map<String, Object> errorResponse = new HashMap<>();
            errorResponse.put("code", 500);
            errorResponse.put("msg", "服务器内部错误");
            return ResponseEntity.status(500).body(errorResponse);
        }
    }
    @GetMapping("/gettwo")
@@ -28,37 +47,79 @@
        return downWorkstationService.gettwoDownWorkstations();
    }
    @GetMapping("/getflowCardId")
    public List<Map<String, Object>> getflowCardId() {
        return downWorkstationService.getflowCardId();
    public ResponseEntity<Map<String, Object>> getflowCardId() {
        Map<String, Object> responseData = new HashMap<>();
        try {
            List<Map<String, Object>> data = downWorkstationService.getflowCardId();
            responseData.put("code", 200);
            responseData.put("msg", "成功");
            responseData.put("data", data);
            return ResponseEntity.ok(responseData);
        } catch (Exception e) {
            responseData.put("code", 500);
            responseData.put("msg", "失败");
            responseData.put("data", null);
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseData);
        }
    }
    @PostMapping("/updateFlowCardId")
    public String updateFlowCardId(@RequestBody Map<String, Object> requestData) {
    public ResponseEntity<Map<String, Object>> updateFlowCardId(@RequestBody Map<String, Object> requestData) {
        // 从 requestData 中获取传入的 flowCardId
        String flowCardId = (String) requestData.get("flowCardId");
        int workstationId = (int) requestData.get("workstationId");
        // 查询对应 flowCardId 的玻璃信息总数量
        int glassInfoCount = glassInfoService.getGlassInfoCountByFlowCardId(flowCardId);
        // 更新 down_workstation 表中的总数量
        glassInfoService.updateFlowCardIdAndCount(flowCardId, glassInfoCount);
        glassInfoService.updateFlowCardIdAndCount(flowCardId, glassInfoCount, workstationId);
        // 返回处理结果,比如成功或失败信息
        return "updated successfully";
        // 构建响应数据
        Map<String, Object> responseData = new HashMap<>();
        responseData.put("message", "updated successfully");
        responseData.put("code", 200);
        // 返回处理结果
        return ResponseEntity.ok(responseData);
    }
    @DeleteMapping("/clear/{workstationId}")
    public String clearWorkstationInfo(@PathVariable("workstationId") int workstationId) {
    @PostMapping("/clear")
    public ResponseEntity<Map<String, Object>> clearWorkstationInfo(@RequestBody Map<String, Object> requestData) {
        // 调用 DownWorkstationService 中的方法清除指定工位ID的信息
       downWorkstationService.clearFlowCardId(workstationId);
        // 返回处理结果,比如成功或失败信息
        return "cleared successfully";
        int workstationId = (int) requestData.get("workstationId");
        int totalWorkstations = downWorkstationService.getTotalQuantity(workstationId);
        int downWorkstations = downWorkstationService.getRacksNumber(workstationId);
        if (downWorkstations == totalWorkstations) {
            downWorkstationService.clearFlowCardId(workstationId);
            Map<String, Object> responseData = new HashMap<>();
            responseData.put("message", "cleared successfully");
            responseData.put("code", 200);
            // 返回处理结果
            return ResponseEntity.ok(responseData);
        }
        else {
            // 如果总数量和落架数量不一致,返回错误响应
            Map<String, Object> errorResponse = new HashMap<>();
            errorResponse.put("message", "Total workstations count does not match down workstations count.");
            errorResponse.put("code", 400);
            return ResponseEntity.badRequest().body(errorResponse);
        }
        // 构建响应数据
    }
}
UnLoadGlassModule/src/main/java/com/mes/entity/DownStorageCageDetails.java
@@ -44,6 +44,10 @@
    private String flowCardId;
    /**
     * 膜系id
     */
    private int filmsid;
    /**
     * 玻璃类型
     */
    private int glassType;
UnLoadGlassModule/src/main/java/com/mes/mapper/DownWorkstationMapper.java
@@ -82,7 +82,15 @@
    @ResultType(Map.class)
    List<Map<String, Object>> getflowCardId();
    @Update("UPDATE down_workstation SET flow_card_id = NULL, total_quantity = NULL, racks_number = NULL WHERE workstation_id = #{workstationId}")
    @Update("UPDATE down_workstation SET flow_card_id = NULL, total_quantity = 0, racks_number = 0 WHERE workstation_id = #{workstationId}")
    void clearFlowCardInfoByWorkstationId(@Param("workstationId") int workstationId);
    // 获取总数量
    @Select("SELECT total_quantity FROM down_workstation WHERE workstation_id = #{workstationId}")
    int getTotalQuantity(@Param("workstationId") int workstationId);
    // 获取落架数量
    @Select("SELECT racks_number FROM down_workstation WHERE workstation_id = #{workstationId}")
    int getRacksNumber(@Param("workstationId") int workstationId);
}
UnLoadGlassModule/src/main/java/com/mes/mapper/GlassInfoMapper.java
@@ -8,11 +8,11 @@
@Mapper
public interface GlassInfoMapper {
    @Select("SELECT COUNT(*) FROM glass_info WHERE flow_card_id = #{flowCardId}")
    @Select("SELECT COUNT(*) FROM glass_info WHERE flowcard_id = #{flowCardId}")
    int getGlassInfoCountByFlowCardId(@Param("flowCardId") String flowCardId);
    @Update("UPDATE down_workstation SET  total_quantity = #{glassInfoCount} WHERE flow_card_id = #{flowCardId}")
    int updateFlowCardIdAndCount(@Param("flowCardId") String flowCardId, @Param("glassInfoCount") int glassInfoCount);
    @Update("UPDATE down_workstation SET  total_quantity = #{glassInfoCount},flow_card_id=#{flowCardId} WHERE workstation_id = #{workstationId}")
    int updateFlowCardIdAndCount(@Param("flowCardId") String flowCardId, @Param("glassInfoCount") int glassInfoCount,@Param("workstationId")int workstationId);
    // 这里可以添加其他 SQL 语句
}
UnLoadGlassModule/src/main/java/com/mes/mapper/SelectInfo.java
@@ -6,7 +6,6 @@
import org.apache.ibatis.annotations.*;
import java.util.List;
import java.util.Map;
@Mapper
public interface SelectInfo {
@@ -18,13 +17,13 @@
  //  @Select("select * from `v_optimize_heat_layout` where project_no=#{projeceid} ")
//    List<Tempered> SelectTemperedTerritory(String projeceid);
//
    // 切割版图按工程查询
    @Select("select * from optimize_detail where project_no=#{projeceid} ")
    List<Map> SelectCutTerritory(String projeceid);
    // 查询磨边信息
    @Select("select * from task_cache where task_type='2' and task_stauts='2' and end_cell=#{EndCell}")
    List<Map> SelectEdgInfo(String EndCell);
//    // 切割版图按工程查询
//    @Select("select * from optimize_detail where project_no=#{projeceid} ")
//    List<Map> SelectCutTerritory(String projeceid);
//
//    // 查询磨边信息
//    @Select("select * from task_cache where task_type='2' and task_stauts='2' and end_cell=#{EndCell}")
//    List<Map> SelectEdgInfo(String EndCell);
    // 查询笼子内空闲
    @Select("select escd.* from down_storage_cage as esc LEFT JOIN down_storage_cage_details as escd on esc.slot=escd.slot where escd.slot is null order by escd.slot")
@@ -59,7 +58,7 @@
    @Select("select * from down_glass_task where task_type='2' and task_stauts='0'")
    List<TaskCache> SelectOutCacheInfo();
    // 查询  A04  或 A15 最新的一片 出片任务
    // 查询  A06  或 A11 最新的一片 出片任务
    @Select("select * from down_glass_task where task_type='2' and task_stauts='2' and end_cell=#{EndCell} limit 1")
    GlassInfo SelectLastOutCacheInfo(String EndCell);
@@ -71,13 +70,5 @@
    @Insert("INSERT into down_glass_task VALUES(#{id},#{start},#{end},#{type},0,)")
    Integer insertCacheTask(String id, String start, String end, String type,double width,double height,Integer filmsId,double thickness,String flowCardId);
    //
    // @Insert("INSERT `order`(order_id)VALUES(#{order_id})")
    // Integer insert(Order order);
    //
    // @Delete("delete from `order` where id=#{id}")
    // Integer deleteById(@Param("id") Integer id);
    //
    // @Update("update `order` set order_id=#{order_id} where id=#{id}")
    // Integer update(@Param("id") Integer id,@Param("order_id") String order_id);
}
UnLoadGlassModule/src/main/java/com/mes/service/DownGlassCacheLogic.java
@@ -113,17 +113,18 @@
        boolean isOut=true;
        if (list.size()>0&&isOut) {
            DownStorageCageDetails item=list.get(0);
           //
            if(G06=="0"&&G11=="1"){
                //出到  G06
                selectInfo.insertCacheTask(item.getGlassId()+"","0","06","2",item.getWidth(),item.getHeight(),0,item.getThickness(),item.getFlowCardId());
                selectInfo.insertCacheTask(item.getGlassId()+"","0","06","2",item.getWidth(),item.getHeight(),item.getFilmsid(),item.getThickness(),item.getFlowCardId());
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "1");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
                return true;
            }else if(G06=="1"&&G11=="0"){
                //出到  G11
                selectInfo.insertCacheTask(item.getGlassId()+"","0","11","2",item.getWidth(),item.getHeight(),0,item.getThickness(),item.getFlowCardId());
                selectInfo.insertCacheTask(item.getGlassId()+"","0","11","2",item.getWidth(),item.getHeight(),item.getFilmsid(),item.getThickness(),item.getFlowCardId());
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "2");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
                return true;
@@ -132,16 +133,18 @@
                String endcell="06";
                String SendEndcell="1";
                boolean If_=false;
                GlassInfo glassInfo04= selectInfo.SelectLastOutCacheInfo("06");
                GlassInfo glassInfo05= selectInfo.SelectLastOutCacheInfo("11");
                if(glassInfo05!=null&&glassInfo05.getWidth()==item.getWidth()&&glassInfo05.getHeight()==item.getHeight()){
                GlassInfo glassInfo06= selectInfo.SelectLastOutCacheInfo("06");
                GlassInfo glassInfo11= selectInfo.SelectLastOutCacheInfo("11");
                GlassInfo glassInfo13= selectInfo.SelectLastOutCacheInfo("13");
                if(glassInfo06!=null&&glassInfo11.getWidth()==item.getWidth()&&glassInfo06.getHeight()==item.getHeight()){
                    endcell="11";
                    SendEndcell="2";
                }else if(glassInfo05!=null&&If_){
                    //其他条件
                }else if(item.getHeight()>=3440&&item.getWidth()>=1440){
                    //其他条件人工处理
                }
                selectInfo.insertCacheTask(item.getGlassId()+"","0",endcell,"2",item.getWidth(),item.getHeight(),0,item.getThickness(),item.getFlowCardId());
                selectInfo.insertCacheTask(item.getGlassId()+"","0",endcell,"2",item.getWidth(),item.getHeight(),item.getFilmsid(),item.getThickness(),item.getFlowCardId());
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell);
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
                return true;
UnLoadGlassModule/src/main/java/com/mes/service/DownWorkstationService.java
@@ -30,13 +30,27 @@
    }
    public int getTotalQuantity(int workstationId) {
        // 执行获取总数量的逻辑,可以是数据库查询或其他业务逻辑
        Integer totalQuantity = DownWorkstationMapper.getTotalQuantity(workstationId);
        return totalQuantity != null ? totalQuantity : 0;
    }
    public int getRacksNumber(int workstationId) {
        // 执行获取落架数量的逻辑,可以是数据库查询或其他业务逻辑
        Integer racksNumber = DownWorkstationMapper.getRacksNumber(workstationId);
        return racksNumber != null ? racksNumber : 0;
    }
    public void clearFlowCardId(int workstationId) {
        // 执行清除指定工位ID的流程卡信息的逻辑,可以是数据库操作或其他业务逻辑
        // 例如:
        // 判断如果落架数量等于总数量执行清除,否则不执行
        DownWorkstationMapper.clearFlowCardInfoByWorkstationId(workstationId);
    }
}
UnLoadGlassModule/src/main/java/com/mes/service/GlassInfoService.java
@@ -14,13 +14,13 @@
        return glassInfoMapper.getGlassInfoCountByFlowCardId(flowCardId);
    }
    public void updateFlowCardIdAndCount(String flowCardId, int glassInfoCount) {
    public void updateFlowCardIdAndCount(String flowCardId, int glassInfoCount,int workstationId) {
        // 调用 GlassInfoMapper 的 updateFlowCardIdAndCount 方法
        int rowsAffected = glassInfoMapper.updateFlowCardIdAndCount(flowCardId, glassInfoCount);
        int rowsAffected = glassInfoMapper.updateFlowCardIdAndCount(flowCardId, glassInfoCount,workstationId);
        if (rowsAffected > 0) {
            System.out.println("更新流程卡 ID 和数量成功");
            System.out.println("更新架子上流程卡 ID 和数量成功");
        } else {
            System.out.println("更新流程卡 ID 和数量失败");
            System.out.println("更新架子上流程卡 ID 和数量失败");
        }
    }
UnLoadGlassModule/src/main/java/com/mes/service/Plchome.java
@@ -1,13 +1,18 @@
package com.mes.service;
import cn.hutool.json.JSONObject;
import com.mes.tools.WebSocketServer;
import org.springframework.stereotype.Component;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.function.Supplier;
@Component
public class Plchome extends Thread {
    private int i = 1;
    private static final Logger log = LogManager.getLogger(Plchome.class);
    private final Supplier<DownGlassLogic> plcServiceSupplier;
    public Plchome() {
@@ -39,6 +44,17 @@
                Thread.currentThread().interrupt();
                e.printStackTrace();
            }
            JSONObject jsonObject = new JSONObject();
            // System.out.println(arraylist6);
            jsonObject.append("data", 1);
            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unloadglass");
            if (sendwServer != null) {
                for (WebSocketServer webserver : sendwServer) {
                    webserver.sendMessage(jsonObject.toString());
                    log.info("准备向 WebSocket 服务器发送消息: {}", jsonObject.toString());
                }}
        }
    }
}
UnLoadGlassModule/src/main/java/com/mes/tools/WebSocketServer.java
@@ -157,4 +157,8 @@
    public void clearMessages() {
        messages.clear();
    }
}
UnLoadGlassModule/src/main/resources/application.yml
@@ -10,7 +10,6 @@
      primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        hangzhoumes:
            url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
            username: root
UnLoadGlassModule/target/classes/application.yml
@@ -10,7 +10,6 @@
      primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        hangzhoumes:
            url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
            username: root
hangzhoumesParent/common/pom.xml
New file
@@ -0,0 +1,189 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>hangzhoumesParent</artifactId>
        <groupId>com.mes</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>common</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>servicebase</module>
<!--        <module>springsecurity</module>-->
    </modules>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--        mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.12</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <!--    导入mysql驱动    -->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>
        <!--代码生成工具-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.8</version>
        </dependency>
        <!--        数据库文档-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.60</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
        <!--  数据库设计文档生成工具-->
        <dependency>
            <groupId>cn.smallbun.screw</groupId>
            <artifactId>screw-core</artifactId>
            <version>1.0.5</version>
        </dependency>
        <!--        2.0~2.2    Knife4j 2.0.0 ~ 2.0.6-->
        <!--        <dependency>-->
        <!--            <groupId>com.github.xiaoymin</groupId>-->
        <!--            <artifactId>knife4j-spring-boot-starter</artifactId>-->
        <!--            <version>2.0.6</version>-->
        <!--        </dependency>-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>
        <!--jwt 项目生成token-->
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.10.3</version>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
        </dependency>
        <!--hutool java验证方法类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.xingshuangs</groupId>
            <artifactId>iot-communication</artifactId>
            <version>1.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    </dependencies>
</project>
hangzhoumesParent/common/servicebase/pom.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>common</artifactId>
        <groupId>com.mes</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>servicebase</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
</project>
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/InterceptorConfig.java
New file
@@ -0,0 +1,29 @@
package com.mes.common.config;
import com.mes.common.interceptor.JwtInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Resource
    private JwtInterceptor jwtInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(jwtInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns("/user/login",
                        "/user/register",
                        "/swagger-resources/**"
                        ,"/webjars/**"
                        ,"/v2/**"
                        ,"/swagger-ui.html/**"
                        ,"/swagger-ui.html#/**");
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/MyCorsConfig.java
New file
@@ -0,0 +1,25 @@
package com.mes.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * @Author : zhoush
 * @Date: 2024/3/25 14:13
 * @Description:
 */
@Configuration
public class MyCorsConfig {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**");
            }
        };
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/MybatisPlusConfig.java
New file
@@ -0,0 +1,61 @@
package com.mes.common.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import javax.sql.DataSource;
/**
 * @author zhoush
 * @Date 2024/1/26 13:44
 */
@MapperScan(basePackages = "com.mes.*.mapper")
@Configuration
public class MybatisPlusConfig {
    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
    @Resource
    private DataSourceProperties dataSourceProperties;
    @Bean(name = "dataSource")
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(dataSourceProperties.getUrl());
        dataSource.setDriverClassName(dataSourceProperties.getDriverClassName());
        dataSource.setUsername(dataSourceProperties.getUsername());
        dataSource.setPassword(dataSourceProperties.getPassword());
        return dataSource;
    }
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        return sqlSessionFactoryBean.getObject();
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/RedisTemplateConfig.java
New file
@@ -0,0 +1,39 @@
package com.mes.common.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
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 org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
 * @Author : zhoush
 * @Date: 2024/4/8 16:04
 * @Description:
 */
@Configuration
public class RedisTemplateConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/SessionConfig.java
New file
@@ -0,0 +1,20 @@
package com.mes.common.config;
import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.RedisSerializer;
/**
 * @Author : zhoush
 * @Date: 2024/4/1 13:16
 * @Description:spring session 使用 json 序列化机制
 */
@Configuration
public class SessionConfig {
    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
        return new GenericFastJsonRedisSerializer();
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Swagger2Config.java
New file
@@ -0,0 +1,93 @@
package com.mes.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.ArrayList;
import java.util.List;
/**
 * @author zhan_py
 * @Date 2024/1/26 16:11
 * Swagger2配置信息
 */
@Configuration
public class Swagger2Config {
    @Bean
    public Docket webApiConfig(){
        List<Parameter> pars = new ArrayList<>();
        ParameterBuilder tokenPar = new ParameterBuilder();
        tokenPar.name("userId")
                .description("用户token")
                //.defaultValue(JwtHelper.createToken(1L, "admin"))
                .defaultValue("1")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build();
        pars.add(tokenPar.build());
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")
                .apiInfo(webApiInfo())
                .select()
                //只显示api路径下的页面
                .apis(RequestHandlerSelectors.basePackage("com.mes"))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(pars);
    }
    @Bean
    public Docket adminApiConfig(){
        List<Parameter> pars = new ArrayList<>();
        ParameterBuilder tokenPar = new ParameterBuilder();
        tokenPar.name("adminId")
                .description("用户token")
                .defaultValue("1")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build();
        pars.add(tokenPar.build());
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("adminApi")
                .apiInfo(adminApiInfo())
                .select()
                //只显示admin路径下的页面
                .apis(RequestHandlerSelectors.basePackage("com.mes"))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(pars);
    }
    private ApiInfo webApiInfo(){
        return new ApiInfoBuilder()
                .title("网站-API文档")
                .description("本文档描述了mes网站微服务接口定义")
                .version("1.0")
                .contact(new Contact("zhan_py", "", ""))
                .build();
    }
    private ApiInfo adminApiInfo(){
        return new ApiInfoBuilder()
                .title("后台管理系统-API文档")
                .description("本文档描述了mes后台系统服务接口定义")
                .version("1.0")
                .contact(new Contact("zhan_py", "", ""))
                .build();
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/GlobalExceptionHandler.java
New file
@@ -0,0 +1,32 @@
package com.mes.common.exception;
import com.mes.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * @author zhoush
 * @Date 2024/1/26 15:31
 */
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    /**
     * 如果是serviceExcaption,则调用该方法
     */
    @ExceptionHandler(ServiceException.class)
    @ResponseBody
    public Result handle(ServiceException se) {
        return Result.error(se.getCode(), se.getMessage());
    }
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result<Object> error(Exception e) {
        e.printStackTrace();
        return Result.error();
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/ServiceException.java
New file
@@ -0,0 +1,14 @@
package com.mes.common.exception;
import com.mes.utils.ResultCodeEnum;
import lombok.Getter;
@Getter
public class ServiceException extends RuntimeException {
    private Integer code;
    public ServiceException(ResultCodeEnum resultCodeEnum, String msg) {
        super(msg);
        this.code = resultCodeEnum.getCode();
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/handler/MyMetaObjectHandler.java
New file
@@ -0,0 +1,22 @@
package com.mes.common.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        //属性名称,不是字段名称
        this.setFieldValByName("gmtCreate", new Date(), metaObject);
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/interceptor/JwtInterceptor.java
New file
@@ -0,0 +1,47 @@
package com.mes.common.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class JwtInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //return HandlerInterceptor.super.preHandle(request, response, handler);
        /*String token=request.getHeader("token");
        if(!(handler instanceof HandlerMethod)){
            return  true;
        }
        if(StrUtil.isBlank(token)){
            throw new ServiceException(Constants.Code_401,"无token,重新登陆");
        }
        String userId;
        try{
            userId = JWT.decode(token).getAudience().get(0);
        }catch (Exception e){
            throw new ServiceException(Constants.Code_500,"token格式错误");
        }
        UserDTO getUserDTO = cacheUtil.getCacheData(userId);
        if(getUserDTO != null && !getUserDTO.getToken().equals(token)){
            throw new ServiceException(Constants.Code_600,"用户在其他位置登陆");
        }
        String password=userService.getUserByID(userId).toLowerCase();
        //用户密码加签验证
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(password)).build();
        try {
            jwtVerifier.verify(token);
        } catch (JWTVerificationException e) {
            throw new ServiceException(Constants.Code_401,"token验证失败,请重新登陆");
        }*/
        return true;
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
New file
@@ -0,0 +1,85 @@
package com.mes.tools;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
/**
 * @author mybatis-plus
 */
public class CodeGet {
    public static void main(String[] args) {
        // 1、创建代码生成器
        AutoGenerator mpg = new AutoGenerator();
        // 2、全局配置
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("D:\\workspace\\hangzhoumesParent1\\");
        gc.setServiceName("%sService");    //去掉Service接口的首字母I
        gc.setAuthor("zhoush");
        gc.setOpen(false);
        mpg.setGlobalConfig(gc);
        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("beibo.123/");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);
        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.mes");
        pc.setModuleName("userinfo"); //模块名
        pc.setController("controller");
        pc.setService("service");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);
        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();
//        strategy.setInclude("activity_info", "activity_rule", "activity_sku", "coupon_info", "coupon_range",
//                "coupon_use");
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
        mpg.setStrategy(strategy);
        // 6、执行
        mpg.execute();
        System.out.println("执行完成");
    }
}
/*
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.0</version>
</dependency>
 */
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java
New file
@@ -0,0 +1,97 @@
package com.mes.tools;
/**
 * @Author : zhoush
 * @Date: 2024/3/26 9:01
 * @Description:
 */
import cn.smallbun.screw.core.Configuration;
import cn.smallbun.screw.core.engine.EngineConfig;
import cn.smallbun.screw.core.engine.EngineFileType;
import cn.smallbun.screw.core.engine.EngineTemplateType;
import cn.smallbun.screw.core.execute.DocumentationExecute;
import cn.smallbun.screw.core.process.ProcessConfig;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;
public class DatabaseDesignDocUtil {
    public static void main(String[] args) {
        documentGeneration();
    }
    /**
     * 文档生成
     */
    public static void documentGeneration() {
        //数据源
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
        hikariConfig.setJdbcUrl("jdbc:mysql://10.153.19.150:3306/hangzhoumes"+"?serverTimezone=GMT%2B8");
        hikariConfig.setUsername("root");
        hikariConfig.setPassword("beibo.123/");
        //设置可以获取tables remarks信息
        hikariConfig.addDataSourceProperty("useInformationSchema", "true");
        hikariConfig.setMinimumIdle(2);
        hikariConfig.setMaximumPoolSize(5);
        DataSource dataSource = new HikariDataSource(hikariConfig);
        //生成配置
        EngineConfig engineConfig = EngineConfig.builder()
                //生成文件路径
                .fileOutputDir("E:\\项目\\项目文档\\杭州利来1")
                //打开目录
                .openOutputDir(true)
                //文件类型
                .fileType(EngineFileType.WORD)
                //生成模板实现
                .produceType(EngineTemplateType.freemarker)
                //自定义文件名称
                .fileName("杭州利来数据库文档").build();
        //忽略表
        List<String> ignoreTableName = new ArrayList<>();
        ignoreTableName.add("test_user");
        ignoreTableName.add("test_group");
        //忽略表前缀
        ArrayList<String> ignorePrefix = new ArrayList<>();
        ignorePrefix.add("test_");
        //忽略表后缀
        ArrayList<String> ignoreSuffix = new ArrayList<>();
        ignoreSuffix.add("_test");
        ProcessConfig processConfig = ProcessConfig.builder()
                //指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置
                //根据名称指定表生成
                .designatedTableName(new ArrayList<>())
                //根据表前缀生成
                .designatedTablePrefix(new ArrayList<>())
                //根据表后缀生成
                .designatedTableSuffix(new ArrayList<>())
                //忽略表名
                .ignoreTableName(ignoreTableName)
                //忽略表前缀
                .ignoreTablePrefix(ignorePrefix)
                //忽略表后缀
                .ignoreTableSuffix(ignoreSuffix).build();
        //配置
        Configuration config = Configuration.builder()
                //版本
                .version("1.0.0")
                //描述
                .description("数据库设计文档生成")
                //数据源
                .dataSource(dataSource)
                //生成配置
                .engineConfig(engineConfig)
                //生成配置
                .produceConfig(processConfig)
                .build();
        //执行生成
        new DocumentationExecute(config).execute();
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/ExportToWord.java
New file
@@ -0,0 +1,313 @@
package com.mes.tools;
/**
 * @Author : zhoush
 * @Date: 2024/3/26 8:16
 * @Description:
 */
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * @Method: 数据库表结构word导出
 * @Description: 数据库表结构word导出
 **/
public class ExportToWord {
    //    private final String DRIVER = "com.mysql.jdbc.Driver";  //MySQL5.0
    private final String DRIVER = "com.mysql.cj.jdbc.Driver";
    private final String URL = "jdbc:mysql://10.153.19.150:3306/hangzhoumes"+"?serverTimezone=GMT%2B8";
    //数据库账号
    private final String USER_NAME = "root";
    //数据库密码
    private final String PASS_WORD = "beibo.123/";
    //对应数据库  此处是你本地对应的数据库名称
    private final String database = "hangzhoumes";
    //对应输出地址
    private final String reportPath = "E:\\项目\\项目文档\\杭州利来\\";
    // 启动方法
    public static void main(String[] args) {
        try {
            ExportToWord rd = new ExportToWord ();
            rd.report();
        }catch (Exception e){
            System.out.println("异常:自行处理或者联系我都阔以.");
            e.printStackTrace();
        }
    }
    Connection conn = null;
    PreparedStatement pst = null;
    ResultSet rs = null;
    // 获取查询数据
    public Map<String,List<TableColumn>> getData() throws Exception{
        System.out.println("数据生成中,请稍等...");
        Map<String,List<TableColumn>> map = new HashMap<>();
        List<Table> tables = getTables(database);
        for (Table table : tables) {
            List<TableColumn> columns = getColumns(database,table.getTableName());
            map.put(table.getTableName(),columns);
        }
        return map;
    }
    // 获取表字段信息
    public List<TableColumn>  getColumns(String database,String tableName) throws Exception{
        String sql = "select column_name,column_comment,column_type,is_nullable, column_key from information_schema.columns  where  table_schema=? and table_name=? ";// group by column_name
        ResultSet rs = getConn(database,tableName,sql);
        List<TableColumn> tableColumns = new ArrayList<>();
        while (rs.next()){
            TableColumn tc = new TableColumn();
            tc.setTableName(tableName);
            tc.setColumnName(rs.getString("column_name"));
            tc.setColumnType(rs.getString("column_type"));
            tc.setColumnKey(rs.getString("column_key"));
            tc.setIsNullable(rs.getString("is_nullable"));
            tc.setColumnComment(rs.getString("column_comment"));
            tableColumns.add(tc);
        }
        releaseConn();
        return tableColumns;
    }
    // 获取所有表
    public List<Table> getTables(String database) throws Exception{
        String  sql = "select table_name,table_comment from information_schema.tables where table_schema=?";
        ResultSet rs = getConn(database, "",sql);
        List<Table> tables = new ArrayList<>();
        while(rs.next()){
            Table table = new Table();
            table.setTableName(rs.getString( "table_name"));
            table.setTableCommont(rs.getString("table_comment"));
            tables.add(table);
        }
        releaseConn();
        return  tables;
    }
    // 连接数据库
    private ResultSet getConn(String dataBase,String tableName,String sql){
        try{
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL,USER_NAME,PASS_WORD);
            pst = conn.prepareStatement(sql);
            pst.setString(1,dataBase);
            if(!"".equals(tableName)){
                pst.setString(2,tableName);
            }
            rs = pst.executeQuery();
            return  rs;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    // 释放连接
    private void  releaseConn(){
        try{
            if(rs != null ){
                rs.close();
            }
            if(pst != null){
                pst.close();
            }
            if(conn != null){
                conn.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    // 导出数据
    public void report()  throws  Exception{
        Map<String, List<TableColumn>> data = this.getData();       // 表名:表体
        List<Table> tables = this.getTables(this.database);         // 表体(列名、类型、注释)
        Map<String,String> tableMap = new HashMap<>();              // 表名:中文名
        JSONObject json = new JSONObject((HashMap)data);
        for (Table table : tables) {
            tableMap.put(table.getTableName(),table.getTableCommont());
        }
        // 构建表格数据
        XWPFDocument document = new XWPFDocument();
        Integer i = 1;
        for (String tableName : data.keySet()) {
            XWPFParagraph paragraph = document.createParagraph();                // 创建标题对象
            XWPFRun run = paragraph.createRun();                                 // 创建文本对象
            run.setText((i+"、"+tableName+"    "+tableMap.get(tableName)));      // 标题名称
            run.setFontSize(14);                                                 // 字体大小
            run.setBold(true);                                                   // 字体加粗
            int j = 0;
            XWPFTable table = document.createTable(data.get(tableName).size()+1,5);
            // 第一行
            table.setCellMargins(50,400,50,400);
            table.getRow(j).getCell(0).setText("字段名称");
            table.getRow(j).getCell(1).setText("字段类型");
            table.getRow(j).getCell(2).setText("约束");
            table.getRow(j).getCell(3).setText("为空");
            table.getRow(j).getCell(4).setText("字段含义");
            j++;
            for (TableColumn tableColumn : data.get(tableName)) {
                table.getRow(j).getCell(0).setText(tableColumn.getColumnName());
                table.getRow(j).getCell(1).setText(tableColumn.getColumnType());
                table.getRow(j).getCell(2).setText(tableColumn.getColumnKey());
                table.getRow(j).getCell(3).setText(tableColumn.getIsNullable());
                table.getRow(j).getCell(4).setText(tableColumn.getColumnComment());
                j++;
            }
            i++;
        }
        // 文档输出
        FileOutputStream out = new FileOutputStream(reportPath + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString()+"_"+database +".docx");
        document.write(out);
        out.close();
        System.out.println("Word生成完成!!!");
    }
    // 表
    class Table{
        private String tableName;
        private String tableCommont;
        public String getTableName() {
            return tableName;
        }
        public void setTableName(String tableName) {
            this.tableName = tableName;
        }
        public String getTableCommont() {
            return tableCommont;
        }
        public void setTableCommont(String tableCommont) {
            this.tableCommont = tableCommont;
        }
    }
    // 表列信息
    class TableColumn{
        // 表名
        private String tableName;
        // 字段名
        private String columnName;
        // 字段类型
        private String columnType;
        // 字段注释
        private String columnComment;
        // 可否为空
        private String isNullable;
        // 约束
        private String columnKey;
        public String getTableName() {
            return tableName;
        }
        public void setTableName(String tableName) {
            this.tableName = tableName;
        }
        public String getColumnName() {
            return columnName;
        }
        public void setColumnName(String columnName) {
            this.columnName = columnName;
        }
        public String getColumnType() {
            return columnType;
        }
        public void setColumnType(String columnType) {
            this.columnType = columnType;
        }
        public String getColumnComment() {
            return columnComment;
        }
        public void setColumnComment(String columnComment) {
            this.columnComment = columnComment;
        }
        public String getIsNullable() {
            return isNullable;
        }
        public void setIsNullable(String isNullable) {
            this.isNullable = isNullable;
        }
        public String getColumnKey() {
            return columnKey;
        }
        public void setColumnKey(String columnKey) {
            this.columnKey = columnKey;
        }
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java
New file
@@ -0,0 +1,421 @@
package com.mes.tools;
import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
import com.github.xingshuangs.iot.protocol.s7.service.MultiAddressWrite;
import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
import com.google.common.primitives.Bytes;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
public class S7control {
    S7PLC s7PLC; // PLC通讯类实例
    public S7control(EPlcType plcType, String ip, int port, int rack, int slot) {
        if (s7PLC == null) {
            s7PLC = new S7PLC(plcType, ip, port, 0, 0);
        }
    }
    /**
     * 关闭西门子s7通讯连接
     */
    public void CloseS7client() {
        if (s7PLC == null) {
            s7PLC.close();
        }
        s7PLC.checkConnected();
    }
    /**
     * s7通讯连接状态
     */
    public boolean CheckConnected() {
        return s7PLC.checkConnected();
    }
    /**
     * 按指定的地址 写入一个word
     *
     * @param address 地址
     * @param data    word的值
     */
    public void WriteWord(String address, short data) {
        if (s7PLC == null) {
            return;
        }
        s7PLC.writeInt16(address, data);
    }
    /**
     * 从某地址连续 写入多个word
     *
     * @param address 地址
     * @param datas   word的值
     */
    public void WriteWord(String address, List<Short> datas) {
        if (s7PLC == null) {
            return;
        }
        // s7PLC.write(address, data);
        List<String> addresslist = GetAddressList(address, datas.size(), 16);
        MultiAddressWrite addressWrite = new MultiAddressWrite();
        for (int i = 0; i < datas.size(); i++) {
            addressWrite.addInt16(addresslist.get(i), datas.get(i));
        }
        s7PLC.writeMultiData(addressWrite);
    }
    /**
     * 按指定的地址 写入多个word
     *
     * @param address 地址
     * @param datas   word的值
     */
    /**
     * 按指定的地址 写入一个Bit
     *
     * @param address 地址
     * @param data    Bit的值
     */
    public void WriteBit(String address, Boolean data) {
        if (s7PLC == null) {
            return;
        }
        s7PLC.writeBoolean(address, data);
    }
    /**
     * 按指定的地址 写入多个bit
     *
     * @param address 地址
     * @param datas   bit的值
     */
    public void WriteBit(List<String> address, List<Boolean> datas) {
        if (s7PLC == null) {
            return;
        }
        // s7PLC.write(address, data);
        MultiAddressWrite addressWrite = new MultiAddressWrite();
        for (int i = 0; i < address.size(); i++) {
            addressWrite.addBoolean(address.get(i), datas.get(i));
        }
        s7PLC.writeMultiData(addressWrite);
    }
    /**
     * 从某地址连续 写入多个bit
     *
     * @param address 地址
     * @param datas   word的值
     */
    public void WriteBit(String address, List<Boolean> datas) {
        if (s7PLC == null) {
            return;
        }
        // s7PLC.write(address, data);
        List<String> addresslist = GetAddressList(address, datas.size(), 1);
        MultiAddressWrite addressWrite = new MultiAddressWrite();
        for (int i = 0; i < datas.size(); i++) {
            addressWrite.addBoolean(addresslist.get(i), datas.get(i));
        }
        s7PLC.writeMultiData(addressWrite);
    }
    /**
     * 按指定的地址 写入多个byte
     *
     * @param address 地址
     * @param datas   byte的值
     */
    public void WriteByte(String address, byte[] datas) {
        if (s7PLC == null) {
            return;
        }
        // s7PLC.write(address, data);
        s7PLC.writeByte(address, datas);
    }
    /**
     * 按指定的地址 读取word结果集
     *
     * @param address 地址
     * @return 结果
     */
    public List<Short> ReadWord(List<String> address) {
        if (s7PLC == null) {
            return null;
        }
        try {
            return s7PLC.readInt16(address);
        } catch (Exception e) {
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    }
    private int getIndexFromAddress(String address) {
        // 可以解析出地址中的数字部分,并转换为整数
        return 0;
    }
    private String getAddressFromIndex(int index) {
        // 整数转换为地址格式的字符串
        return "";
    }
    /**
     * 按指定的地址 读取word结果集
     *
     * @param address 地址
     * @param count   连续读多少个word
     * @return 结果
     */
    public List<Short> ReadWord(String address, int count) {
        if (s7PLC == null) {
            return null;
        }
        List<String> addresslist = GetAddressList(address, count, 16);
        try {
            return s7PLC.readInt16(addresslist);
        } catch (Exception e) {
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    }
    /**
     * 按指定的地址 读取byte结果集
     *
     * @param address 地址
     * @param count   连续读多少个byte
     * @return 结果
     */
    public byte[] ReadByte(String address, int count) {
        if (s7PLC == null) {
            return null;
        }
        // List<String> addresslist = GetAddressList(address, count, 16);
        try {
            return s7PLC.readByte(address, count);
        } catch (Exception e) {
            // 处理异常
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    }
    /**
     * 按指定的地址 按bit位 0 flase 1 true 读取结果
     *
     * @param addresslist 地址集
     * @return Boolean结果
     */
    public List<Boolean> ReadBits(List<String> addresslist) {
        if (s7PLC == null) {
            return null;
        }
        return s7PLC.readBoolean(addresslist);
    }
    //读取不连续地址bit
    public List<Boolean> readBits(List<String> addressList) {
        if (s7PLC == null || addressList.isEmpty()) {
            return null;
        }
        List<Boolean> values = new ArrayList<>();
        for (String address : addressList) {
            try {
                boolean value = s7PLC.readBoolean(address);
                values.add(value);
            } catch (Exception e) {
                // 处理异常
                System.out.println("读取 " + address + " 失败:" + e.getMessage());
            }
        }
        return values;
    }
    //读取String
    public List<String> readStrings(List<String> addressList) {
        if (s7PLC == null) {
            return null;
        }
        List<String> result = new ArrayList<>();
        for (String address : addressList) {
            try {
                byte[] bytes = s7PLC.readByte(address, 14);
                if (bytes != null) {
                    String str = new String(bytes, StandardCharsets.UTF_8);
                    result.add(str);
                }
            } catch (Exception e) {
                System.out.println("读取 " + address + " 失败:" + e.getMessage());
                result.add(null);
            }
        }
        return result;
    }
    //不连续地址写入Word
    public void WriteWord(List<String> address, List<Short> datas) {
        if (s7PLC == null) {
            return;
        }
        for (int i = 0; i < address.size(); i++) {
            String addr = address.get(i);
            short data = datas.get(i);
            if (addr.contains("-")) {
                outmesid(String.valueOf(data), addr); // 单独处理带破折号的地址
            } else {
                s7PLC.writeInt16(addr, data); // 将数据写入单个地址
            }
        }
    }
    //字符串写入
    public void outmesid(String data, String addr) {
//        System.out.println("outmesid: " + data);
        List<Byte> glassidlist = new ArrayList<>();
        String[] parts = addr.split("-");
        if (parts.length == 2) {
            addr = parts[0]; // 只保留 "-" 前面的部分
        }
        for (char iditem : data.toCharArray()) {
            glassidlist.add(Byte.valueOf(String.valueOf(iditem)));
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        WriteByte(addr, bytes);
    }
    //读取不连续word
    public List<Short> readWords(List<String> addresses) {
        if (s7PLC == null) {
            return null;
        }
        List<Short> data = new ArrayList<>();
        for (String address : addresses) {
            try {
                // 单个地址
                Short value = s7PLC.readInt16(address);
                data.add(value);
            } catch (Exception e) {
                System.out.println("读取 " + address + " 失败:" + e.getMessage());
            }
        }
        return data;
    }
    //读取时间
    public Long readtime(String address) {
        if (s7PLC == null) {
            return null;
        }
        try {
            return s7PLC.readTime(address);
        } catch (Exception e) {
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    }
    public void writetime(String address, long datas) {
        if (s7PLC == null)
            return;
        s7PLC.writeTime(address, datas); // 将数据写入单个地址
    }
    private int extractAddressNumber(String address) {
        String numberStr = address.replaceAll("\\D+", ""); // 使用正则表达式提取数字部分
        return Integer.parseInt(numberStr);
    }
    /**
     * 从指定的地址开始 连续按bit位读取
     *
     * @param address 地址
     * @param count   长度
     * @return Boolean结果
     */
    public List<Boolean> ReadBits(String address, int count) {
        if (s7PLC == null)
            return null;
        List<String> addresslist = GetAddressList(address, count, 1);
        try {
            return s7PLC.readBoolean(addresslist);
        } catch (Exception e) {
            System.out.println("读取 " + address + " 失败:" + e.getMessage());
            return null;
        }
    }
    ;
    private List<String> GetAddressList(String address, int count, int addedbit) {
        List<String> addresslist = new ArrayList<String>();
        String[] stringdatas = address.trim().split("\\.");
        if (stringdatas.length < 2 || !address.startsWith("DB")) {
            return null;
        }
        int dbwindex = 0;
        int bitindex = 0;
        if (stringdatas.length == 2) {
            dbwindex = Integer.parseInt(stringdatas[1]);
        } else if (stringdatas.length == 3) {
            dbwindex = Integer.parseInt(stringdatas[1]);
            bitindex = Integer.parseInt(stringdatas[2]);
        } else {
            return null;
        }
        addresslist.add(address);
        for (int i = 0; i < count - 1; i++) {
            int bitcurrent = bitindex + addedbit;
            if (bitcurrent > 7) {
                dbwindex += bitcurrent / 8;
                bitindex = 0;
            } else {
                bitindex = bitcurrent;
            }
            String endstr = stringdatas.length == 3 ? "." + bitindex : "";
            addresslist.add(stringdatas[0] + "." + dbwindex + endstr);
        }
        return addresslist;
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/TokenTools.java
New file
@@ -0,0 +1,22 @@
package com.mes.tools;
import cn.hutool.core.date.DateUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.util.Date;
public class TokenTools {
    /**
     * 生成token
     *
     * @return
     */
    public static String getToken(String userid, String sign) {
        return JWT.create().withAudience(userid) // 将 user id 保存到 token 里面,作为载荷
                .withExpiresAt(DateUtil.offsetHour(new Date(), 24)) // 2小时后token过期
                .sign(Algorithm.HMAC256(sign)); // 以 password 作为 token 的密钥
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/MD5.java
New file
@@ -0,0 +1,36 @@
package com.mes.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public final class MD5 {
    public static String encrypt(String strSrc) {
        try {
            char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
                    '9', 'a', 'b', 'c', 'd', 'e', 'f' };
            byte[] bytes = strSrc.getBytes();
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(bytes);
            bytes = md.digest();
            int j = bytes.length;
            char[] chars = new char[j * 2];
            int k = 0;
            for (int i = 0; i < bytes.length; i++) {
                byte b = bytes[i];
                chars[k++] = hexChars[b >>> 4 & 0xf];
                chars[k++] = hexChars[b & 0xf];
            }
            return new String(chars);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            throw new RuntimeException("MD5加密出错!!+" + e);
        }
    }
    public static void main(String[] args) {
        System.out.println(MD5.encrypt("111111"));
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResponseUtil.java
New file
@@ -0,0 +1,28 @@
package com.mes.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.HttpStatus;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @Author : zhoush
 * @Date: 2024/4/8 15:46
 * @Description:
 */
public class ResponseUtil {
    public static final String APPLICATION_JSON_UTF8_VALUE = "application/json;charset=UTF-8";
    public static void out(HttpServletResponse response, Result r) {
        ObjectMapper mapper = new ObjectMapper();
        response.setStatus(HttpStatus.OK.value());
        response.setContentType(APPLICATION_JSON_UTF8_VALUE);
        try {
            mapper.writeValue(response.getWriter(), r);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/Result.java
New file
@@ -0,0 +1,56 @@
package com.mes.utils;
import lombok.Data;
@Data
public class Result<T> {
    private Integer code;
    private String message;
    private T data;
    private Result() {
    }
    public static <T> Result<T> build(Integer code, String message, T data) {
        Result<T> result = new Result<T>();
        result.setCode(code);
        result.setMessage(message);
        if (data != null) {
            result.setData(data);
        }
        return result;
    }
    public static <T> Result<T> build(ResultCodeEnum resultCodeEnum, T data) {
        Result<T> result = new Result<T>();
        result.setCode(resultCodeEnum.getCode());
        result.setMessage(resultCodeEnum.getMessage());
        if (data != null) {
            result.setData(data);
        }
        return result;
    }
    public static <T> Result<T> success() {
        return build(ResultCodeEnum.SUCCESS, null);
    }
    public static <T> Result<T> success(T data) {
        return build(ResultCodeEnum.SUCCESS.getCode(), "", data);
    }
    public static Result error(Integer code, String msg) {
        return build(code, msg, null);
    }
    public static <T> Result<T> error(T data) {
        return build(ResultCodeEnum.FAIL.getCode(), "", data);
    }
    public static <T> Result<T> error() {
        return build(ResultCodeEnum.FAIL.getCode(), "服务器发生异常", null);
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResultCodeEnum.java
New file
@@ -0,0 +1,33 @@
package com.mes.utils;
import lombok.Getter;
/**
 * @author zhoush
 */
@Getter
public enum ResultCodeEnum {
    SUCCESS(200,"成功"),
    FAIL(201, "失败"),
    SERVICE_ERROR(2012, "服务异常"),
    DATA_ERROR(204, "数据异常"),
    ILLEGAL_REQUEST(205, "非法请求"),
    REPEAT_SUBMIT(206, "重复提交"),
    LOGIN_AUTH(208, "未登陆"),
    PERMISSION(209, "没有权限"),
    ;
    private Integer code;
    private String message;
    ResultCodeEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
}
hangzhoumesParent/common/servicebase/src/main/resources/banner.txt
New file
@@ -0,0 +1,32 @@
________                ________                 ___       _____________   ____
`MMMMMMMb.          68b `MMMMMMMb.               `MMb     dMM'`MMMMMMMMM  6MMMMb\
 MM    `Mb          Y89  MM    `Mb                MMM.   ,PMM  MM      \ 6M'    `
 MM     MM   ____   ___  MM     MM   _____        M`Mb   d'MM  MM        MM
 MM    .M9  6MMMMb  `MM  MM    .M9  6MMMMMb       M YM. ,P MM  MM    ,   YM.
 MMMMMMM(  6M'  `Mb  MM  MMMMMMM(  6M'   `Mb      M `Mb d' MM  MMMMMMM    YMMMMb
 MM    `Mb MM    MM  MM  MM    `Mb MM     MM      M  YM.P  MM  MM    `        `Mb
 MM     MM MMMMMMMM  MM  MM     MM MM     MM      M  `Mb'  MM  MM              MM
 MM     MM MM        MM  MM     MM MM     MM      M   YP   MM  MM              MM
 MM    .M9 YM    d9  MM  MM    .M9 YM.   ,M9 68b  M   `'   MM  MM      / L    ,M9
_MMMMMMM9'  YMMMM9  _MM__MMMMMMM9'  YMMMMM9  Y89 _M_      _MM__MMMMMMMMM MYMMMM9
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机      永无BUG                  //
hangzhoumesParent/common/springsecurity/pom.xml
New file
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>common</artifactId>
        <groupId>com.mes</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>springsecurity</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.mes</groupId>
            <artifactId>servicebase</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- Spring Security依赖 -->
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-security</artifactId>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>io.jsonwebtoken</groupId>-->
<!--            <artifactId>jjwt</artifactId>-->
<!--        </dependency>-->
    </dependencies>
</project>
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/config/TokenWebSecurityConfig.java
New file
@@ -0,0 +1,69 @@
//package com.mes.config;
//
//
//import com.mes.filter.TokenAuthFilter;
//import com.mes.filter.TokenLoginFilter;
//import com.mes.security.DefaultPasswordEncoder;
//import com.mes.security.TokenLogoutHandler;
//import com.mes.security.TokenManager;
//import com.mes.security.UnauthEntryPoint;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
//import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
//import org.springframework.security.config.annotation.web.builders.HttpSecurity;
//import org.springframework.security.config.annotation.web.builders.WebSecurity;
//import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
//import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
//import org.springframework.security.core.userdetails.UserDetailsService;
//
//@Configuration
//@EnableWebSecurity
//@EnableGlobalMethodSecurity(prePostEnabled = true)
//public class TokenWebSecurityConfig extends WebSecurityConfigurerAdapter {
//
//    private TokenManager tokenManager;
//    private RedisTemplate redisTemplate;
//    private DefaultPasswordEncoder defaultPasswordEncoder;
//    private UserDetailsService userDetailsService;
//
//    @Autowired
//    public TokenWebSecurityConfig(UserDetailsService userDetailsService, DefaultPasswordEncoder defaultPasswordEncoder,
//                                  TokenManager tokenManager, RedisTemplate redisTemplate) {
//        this.userDetailsService = userDetailsService;
//        this.defaultPasswordEncoder = defaultPasswordEncoder;
//        this.tokenManager = tokenManager;
//        this.redisTemplate = redisTemplate;
//    }
//
//    /**
//     * 配置设置
//     * @param http
//     * @throws Exception
//     */
//    //设置退出的地址和token,redis操作地址
//    @Override
//    protected void configure(HttpSecurity http) throws Exception {
//        http.exceptionHandling()
//                .authenticationEntryPoint(new UnauthEntryPoint())//没有权限访问
//                .and().csrf().disable()
//                .authorizeRequests()
//                .anyRequest().authenticated()
//                .and().logout().logoutUrl("/admin/acl/index/logout")//退出路径
//                .addLogoutHandler(new TokenLogoutHandler(tokenManager,redisTemplate)).and()
//                .addFilter(new TokenLoginFilter(authenticationManager(), tokenManager, redisTemplate))
//                .addFilter(new TokenAuthFilter(authenticationManager(), tokenManager, redisTemplate)).httpBasic();
//    }
//
//    //调用userDetailsService和密码处理
//    @Override
//    public void configure(AuthenticationManagerBuilder auth) throws Exception {
//        auth.userDetailsService(userDetailsService).passwordEncoder(defaultPasswordEncoder);
//    }
//    //不进行认证的路径,可以直接访问
//    @Override
//    public void configure(WebSecurity web) throws Exception {
//        web.ignoring().antMatchers("/api/**");
//    }
//}
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/SecurityUser.java
New file
@@ -0,0 +1,73 @@
//package com.mes.entity;
//
//import lombok.Data;
//import org.springframework.security.core.GrantedAuthority;
//import org.springframework.security.core.authority.SimpleGrantedAuthority;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.util.StringUtils;
//
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.List;
//
//@Data
//public class SecurityUser implements UserDetails {
//
//    //当前登录用户
//    private transient User currentUserInfo;
//
//    //当前权限
//    private List<String> permissionValueList;
//
//    public SecurityUser() {
//    }
//
//    public SecurityUser(User user) {
//        if (user != null) {
//            this.currentUserInfo = user;
//        }
//    }
//
//    @Override
//    public Collection<? extends GrantedAuthority> getAuthorities() {
//        Collection<GrantedAuthority> authorities = new ArrayList<>();
//        for(String permissionValue : permissionValueList) {
//            if(StringUtils.isEmpty(permissionValue)) continue;
//            SimpleGrantedAuthority authority = new SimpleGrantedAuthority(permissionValue);
//            authorities.add(authority);
//        }
//
//        return authorities;
//    }
//
//    @Override
//    public String getPassword() {
//        return currentUserInfo.getPassword();
//    }
//
//    @Override
//    public String getUsername() {
//        return currentUserInfo.getUsername();
//    }
//
//    @Override
//    public boolean isAccountNonExpired() {
//        return true;
//    }
//
//    @Override
//    public boolean isAccountNonLocked() {
//        return true;
//    }
//
//    @Override
//    public boolean isCredentialsNonExpired() {
//        return true;
//    }
//
//    @Override
//    public boolean isEnabled() {
//        return true;
//    }
//}
//
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/User.java
New file
@@ -0,0 +1,31 @@
//package com.mes.entity;
//
//import io.swagger.annotations.ApiModel;
//import io.swagger.annotations.ApiModelProperty;
//import lombok.Data;
//
//import java.io.Serializable;
//
//@Data
//@ApiModel(description = "用户实体类")
//public class User implements Serializable {
//
//    private static final long serialVersionUID = 1L;
//
//    @ApiModelProperty(value = "微信openid")
//    private String username;
//
//    @ApiModelProperty(value = "密码")
//    private String password;
//
//    @ApiModelProperty(value = "昵称")
//    private String nickName;
//
//    @ApiModelProperty(value = "用户头像")
//    private String salt;
//
//    @ApiModelProperty(value = "用户签名")
//    private String token;
//
//}
//
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenAuthFilter.java
New file
@@ -0,0 +1,60 @@
//package com.mes.filter;
//
//import com.mes.security.TokenManager;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.security.authentication.AuthenticationManager;
//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
//import org.springframework.security.core.GrantedAuthority;
//import org.springframework.security.core.authority.SimpleGrantedAuthority;
//import org.springframework.security.core.context.SecurityContextHolder;
//import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
//
//import javax.servlet.FilterChain;
//import javax.servlet.ServletException;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.List;
//
//public class TokenAuthFilter extends BasicAuthenticationFilter {
//
//    private TokenManager tokenManager;
//    private RedisTemplate redisTemplate;
//    public TokenAuthFilter(AuthenticationManager authenticationManager,TokenManager tokenManager,RedisTemplate redisTemplate) {
//        super(authenticationManager);
//        this.tokenManager = tokenManager;
//        this.redisTemplate = redisTemplate;
//    }
//
//    @Override
//    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
//        //获取当前认证成功用户权限信息
//        UsernamePasswordAuthenticationToken authRequest = getAuthentication(request);
//        //判断如果有权限信息,放到权限上下文中
//        if(authRequest != null) {
//            SecurityContextHolder.getContext().setAuthentication(authRequest);
//        }
//        chain.doFilter(request,response);
//    }
//
//    private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
//        //从header获取token
//        String token = request.getHeader("token");
//        if(token != null) {
//            //从token获取用户名
//            String username = tokenManager.getUserInfoFromToken(token);
//            //从redis获取对应权限列表
//            List<String> permissionValueList = (List<String>)redisTemplate.opsForValue().get(username);
//            Collection<GrantedAuthority> authority = new ArrayList<>();
//            for(String permissionValue : permissionValueList) {
//                SimpleGrantedAuthority auth = new SimpleGrantedAuthority(permissionValue);
//                authority.add(auth);
//            }
//            return new UsernamePasswordAuthenticationToken(username,token,authority);
//        }
//        return null;
//    }
//
//}
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenLoginFilter.java
New file
@@ -0,0 +1,74 @@
//package com.mes.filter;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.mes.utils.Result;
//import com.mes.entity.SecurityUser;
//import com.mes.entity.User;
//import com.mes.security.TokenManager;
//import com.mes.utils.ResponseUtil;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.security.authentication.AuthenticationManager;
//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
//import org.springframework.security.core.Authentication;
//import org.springframework.security.core.AuthenticationException;
//import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
//import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
//
//import javax.servlet.FilterChain;
//import javax.servlet.ServletException;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.util.ArrayList;
//
//public class TokenLoginFilter extends UsernamePasswordAuthenticationFilter {
//
//    private TokenManager tokenManager;
//    private RedisTemplate redisTemplate;
//    private AuthenticationManager authenticationManager;
//
//    public TokenLoginFilter(AuthenticationManager authenticationManager, TokenManager tokenManager, RedisTemplate redisTemplate) {
//        this.authenticationManager = authenticationManager;
//        this.tokenManager = tokenManager;
//        this.redisTemplate = redisTemplate;
//        this.setPostOnly(false);
//        this.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/admin/acl/login","POST"));
//    }
//
//    //1 获取表单提交用户名和密码
//    @Override
//    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
//            throws AuthenticationException {
//        //获取表单提交数据
//        try {
//            User user = new ObjectMapper().readValue(request.getInputStream(), User.class);
//            return authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(user.getUsername(),user.getPassword(),
//                    new ArrayList<>()));
//        } catch (IOException e) {
//            e.printStackTrace();
//            throw new RuntimeException();
//        }
//    }
//
//    //2 认证成功调用的方法
//    @Override
//    protected void successfulAuthentication(HttpServletRequest request,
//                                            HttpServletResponse response, FilterChain chain, Authentication authResult)
//            throws IOException, ServletException {
//        //认证成功,得到认证成功之后用户信息
//        SecurityUser user = (SecurityUser)authResult.getPrincipal();
//        //根据用户名生成token
//        String token = tokenManager.createToken(user.getCurrentUserInfo().getUsername());
//        //把用户名称和用户权限列表放到redis
//        redisTemplate.opsForValue().set(user.getCurrentUserInfo().getUsername(),user.getPermissionValueList());
//        //返回token
//        ResponseUtil.out(response, Result.success(token));
//    }
//
//    //3 认证失败调用的方法
//    @Override
//    protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed)
//            throws IOException, ServletException {
//        ResponseUtil.out(response, Result.error());
//    }
//}
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/DefaultPasswordEncoder.java
New file
@@ -0,0 +1,25 @@
//package com.mes.security;
//
//import com.mes.utils.MD5;
//import org.springframework.security.crypto.password.PasswordEncoder;
//import org.springframework.stereotype.Component;
//
//@Component
//public class DefaultPasswordEncoder implements PasswordEncoder {
//
//    public DefaultPasswordEncoder() {
//        this(-1);
//    }
//    public DefaultPasswordEncoder(int strength) {
//    }
//    //进行MD5加密
//    @Override
//    public String encode(CharSequence charSequence) {
//        return MD5.encrypt(charSequence.toString());
//    }
//    //进行密码比对
//    @Override
//    public boolean matches(CharSequence charSequence, String encodedPassword) {
//        return encodedPassword.equals(MD5.encrypt(charSequence.toString()));
//    }
//}
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenLogoutHandler.java
New file
@@ -0,0 +1,35 @@
//package com.mes.security;
//
//import com.mes.utils.Result;
//import com.mes.utils.ResponseUtil;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.security.core.Authentication;
//import org.springframework.security.web.authentication.logout.LogoutHandler;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
////退出处理器
//public class TokenLogoutHandler implements LogoutHandler {
//    private TokenManager tokenManager;
//    private RedisTemplate redisTemplate;
//
//    public TokenLogoutHandler(TokenManager tokenManager,RedisTemplate redisTemplate) {
//        this.tokenManager = tokenManager;
//        this.redisTemplate = redisTemplate;
//    }
//    @Override
//    public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
//        //1 从header里面获取token
//        //2 token不为空,移除token,从redis删除token
//        String token = request.getHeader("token");
//        if(token != null) {
//            //移除
//            tokenManager.removeToken(token);
//            //从token获取用户名
//            String username = tokenManager.getUserInfoFromToken(token);
//            redisTemplate.delete(username);
//        }
//        ResponseUtil.out(response, Result.success());
//    }
//}
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenManager.java
New file
@@ -0,0 +1,30 @@
//package com.mes.security;
//
//import io.jsonwebtoken.CompressionCodecs;
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.SignatureAlgorithm;
//import org.springframework.stereotype.Component;
//
//import java.util.Date;
//
//@Component
//public class TokenManager {
//    //token有效时长
//    private long tokenEcpiration = 24*60*60*1000;
//    //编码秘钥
//    private String tokenSignKey = "123456";
//    //1 使用jwt根据用户名生成token
//    public String createToken(String username) {
//        String token = Jwts.builder().setSubject(username)
//                .setExpiration(new Date(System.currentTimeMillis()+tokenEcpiration))
//                .signWith(SignatureAlgorithm.HS512, tokenSignKey).compressWith(CompressionCodecs.GZIP).compact();
//        return token;
//    }
//    //2 根据token字符串得到用户信息
//    public String getUserInfoFromToken(String token) {
//        String userinfo = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token).getBody().getSubject();
//        return userinfo;
//    }
//    //3 删除token
//    public void removeToken(String token) { }
//}
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/UnauthEntryPoint.java
New file
@@ -0,0 +1,18 @@
//package com.mes.security;
//
//import com.mes.utils.Result;
//import com.mes.utils.ResponseUtil;
//import org.springframework.security.core.AuthenticationException;
//import org.springframework.security.web.AuthenticationEntryPoint;
//
//import javax.servlet.ServletException;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//
//public class UnauthEntryPoint implements AuthenticationEntryPoint {
//    @Override
//    public void commence(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {
//        ResponseUtil.out(httpServletResponse, Result.error());
//    }
//}
hangzhoumesParent/gateway/pom.xml
New file
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>hangzhoumesParent</artifactId>
        <groupId>com.mes</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>gateway</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--        服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    </dependencies>
</project>
hangzhoumesParent/gateway/src/main/java/com/mes/GateWayApplication.java
New file
@@ -0,0 +1,20 @@
package com.mes;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
 * @Author : zhoush
 * @Date: 2024/3/28 11:21
 * @Description:
 */
@SpringBootApplication
@EnableDiscoveryClient
public class GateWayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GateWayApplication.class, args);
    }
}
hangzhoumesParent/gateway/src/main/resources/application.yml
New file
@@ -0,0 +1,56 @@
server:
  port: 88
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: cacheGlass
          uri: lb://cacheGlass
          predicates:
            - Path=/api/cacheGlass/**
          filters:
            - StripPrefix=2
        - id: cacheVerticalGlass
          uri: http://127.0.0.1:8082
          predicates:
            - Path=/api/cacheVerticalGlass/**
          filters:
            - StripPrefix=2
        - id: loadGlass
          uri: http://127.0.0.1:8083
          predicates:
            - Path=/api/loadGlass/**
          filters:
            - StripPrefix=2
        - id: temperingGlass
          uri: http://127.0.0.1:8084
          predicates:
            - Path=/api/temperingGlass/**
          filters:
            - StripPrefix=2
        - id: unLoadGlass
          uri: http://127.0.0.1:8085
          predicates:
            - Path=/api/unLoadGlass/**
          filters:
            - StripPrefix=2
#        - id: unLoadGlass
#          uri: lb://unLoadGlass
#          predicates:
#            - Path=/unLoadGlass/**
#          filters:
#            - RewritePath=/unLoadGlass/(?<segment>.*), /$\{segment}
hangzhoumesParent/moduleService/CacheGlassModule/pom.xml
New file
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>moduleService</artifactId>
        <groupId>com.mes</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>cacheGlass</artifactId>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.mes</groupId>
            <artifactId>servicebase</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
</project>
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/CacheGlassModuleApplication.java
New file
@@ -0,0 +1,30 @@
package com.mes;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
 * @Author : zhoush
 * @Date: 2024/3/25 10:49
 * @Description:
 */
@Slf4j
@SpringBootApplication
@MapperScan("com.mes.*.mapper")
@EnableDiscoveryClient
@EnableSwagger2
public class CacheGlassModuleApplication {
    public static void main(String[] args) {
        try {
            SpringApplication.run(CacheGlassModuleApplication.class, args);
        }catch (Exception e){
            log.error(e.getMessage());
        }
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/S7object.java
New file
@@ -0,0 +1,36 @@
package com.mes.common;
import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
import com.mes.tools.S7control;
/**
 * @Author : zhoush
 * @Date: 2024/4/9 15:13
 * @Description:
 */
public class S7object {
    public S7control plccontrol; // PLC通讯类实例
    private EPlcType plcType = EPlcType.S1500; // 西门子PLC类型
    private String ip = "192.168.10.1"; // plc ip地址
    private int port = 102; // plc 端口号
    private static volatile S7object instance = null;
    private S7object() {
        if (plccontrol == null) {
            plccontrol = new S7control(plcType, ip, port,0,0);
        }
    }
    // 单例模式 获取类的唯一实例
    public static S7object getinstance() {
        if (instance == null) {
            synchronized (S7object.class) {
                if (instance == null) {
                    instance = new S7object();
                }
            }
        }
        return instance;
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
New file
@@ -0,0 +1,28 @@
package com.mes.edgstoragecage.controller;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@RestController
@RequestMapping("/edgStorageCage")
public class EdgStorageCageController {
        //todo: 实例代码 待删除
    @ApiOperation("测试")
    @GetMapping("/index")
    public String index() {
        return "hello world";
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageDetailsController.java
New file
@@ -0,0 +1,19 @@
package com.mes.edgstoragecage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@RestController
@RequestMapping("/edgStorageCageDetails")
public class EdgStorageCageDetailsController {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java
New file
@@ -0,0 +1,50 @@
package com.mes.edgstoragecage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class EdgStorageCage implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 磨边前理片笼表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 设备id
     */
    private Integer deviceId;
    /**
     * 栅格号
     */
    private Integer slot;
    /**
     * 启用状态
     */
    private String enableState;
    /**
     * 剩余
     */
    private Integer remainWidth;
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
New file
@@ -0,0 +1,110 @@
package com.mes.edgstoragecage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class EdgStorageCageDetails implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 磨边前理片笼详情表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 设备id
     */
    private Integer deviceId;
    /**
     * 栅格号
     */
    private Integer slot;
    /**
     * 玻璃id
     */
    private Integer glassId;
    /**
     * 小片在格内的顺序
     */
    private Integer sequence;
    /**
     * 流程卡号
     */
    private String flowCardId;
    /**
     * 玻璃类型
     */
    private Integer glassType;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 磨前宽
     */
    private Double edgWidth;
    /**
     * 磨前高
     */
    private Double edgHeight;
    /**
     * 钢化版图id
     */
    private Integer temperingLayoutId;
    /**
     * 钢化版图片序
     */
    private Integer temperingFeedSequence;
    /**
     * 原片顺序
     */
    private Integer patternSequence;
    /**
     * 状态
     */
    private Integer state;
    /**
     * 玻璃间隙
     */
    private Integer gap;
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.edgstoragecage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface EdgStorageCageDetailsMapper extends BaseMapper<EdgStorageCageDetails> {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.edgstoragecage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.edgstoragecage.entity.EdgStorageCage;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface EdgStorageCageMapper extends BaseMapper<EdgStorageCage> {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
New file
@@ -0,0 +1,16 @@
package com.mes.edgstoragecage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface EdgStorageCageDetailsService extends IService<EdgStorageCageDetails> {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
New file
@@ -0,0 +1,16 @@
package com.mes.edgstoragecage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.edgstoragecage.entity.EdgStorageCage;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface EdgStorageCageService extends IService<EdgStorageCage> {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.edgstoragecage.service.impl;
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Service
public class EdgStorageCageDetailsServiceImpl extends ServiceImpl<EdgStorageCageDetailsMapper, EdgStorageCageDetails> implements EdgStorageCageDetailsService {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.edgstoragecage.service.impl;
import com.mes.edgstoragecage.entity.EdgStorageCage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.edgstoragecage.mapper.EdgStorageCageMapper;
import com.mes.edgstoragecage.service.EdgStorageCageService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Service
public class EdgStorageCageServiceImpl extends ServiceImpl<EdgStorageCageMapper, EdgStorageCage> implements EdgStorageCageService {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
New file
@@ -0,0 +1,19 @@
package com.mes.taskcache.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@RestController
@RequestMapping("/taskCache")
public class TaskCacheController {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/entity/TaskCache.java
New file
@@ -0,0 +1,49 @@
package com.mes.taskcache.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class TaskCache implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ID编号
     */
      @TableId("ID")
    private String id;
    /**
     * 起始
     */
    private String startCell;
    /**
     * 目标
     */
    private String endCell;
    /**
     * 任务类型 1:进   2:出
     */
    private String taskType;
    /**
     * 任务状态 0 未开始  1正在进行   2完成
     */
    private String taskStauts;
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.taskcache.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.taskcache.entity.TaskCache;
/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface TaskCacheMapper extends BaseMapper<TaskCache> {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
New file
@@ -0,0 +1,16 @@
package com.mes.taskcache.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.taskcache.entity.TaskCache;
/**
 * <p>
 * 服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface TaskCacheService extends IService<TaskCache> {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.taskcache.service.impl;
import com.mes.taskcache.entity.TaskCache;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.taskcache.mapper.TaskCacheMapper;
import com.mes.taskcache.service.TaskCacheService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Service
public class TaskCacheServiceImpl extends ServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/temperingglass/controller/GlassInfoController.java
New file
@@ -0,0 +1,19 @@
package com.mes.temperingglass.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@RestController
@RequestMapping("/glassInfo")
public class GlassInfoController {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/temperingglass/entity/GlassInfo.java
New file
@@ -0,0 +1,130 @@
package com.mes.temperingglass.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class GlassInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 玻璃信息表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 流程卡
     */
    private String flowcardId;
    /**
     * 流程卡玻璃类型
     */
    private Integer glassType;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 膜系
     */
    private Integer filmsid;
    /**
     * 磨前宽
     */
    private Double edgWidth;
    /**
     * 磨前高
     */
    private Double edgHeight;
    /**
     * 是否配片
     */
    private Integer ismultiple;
    /**
     * 配片最大宽
     */
    private Double maxWidth;
    /**
     * 配片最大高
     */
    private Double maxHeight;
    /**
     * 钢化是否接受横放
     */
    private Integer ishorizontal;
    /**
     * 原片顺序
     */
    private Integer patternSequence;
    /**
     * 钢化版图id
     */
    private Integer temperingLayoutId;
    /**
     * 钢化版图片序
     */
    private Integer temperingFeedSequence;
    /**
     * x坐标
     */
    private Integer xCoordinate;
    /**
     * y坐标
     */
    private Integer yCoordinate;
    /**
     * 旋转角度(逆时针)
     */
    private Integer angle;
    /**
     * 工程号
     */
    private Integer engineerId;
    /**
     * 生产规则id
     */
    private Integer ruleId;
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/temperingglass/mapper/GlassInfoMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.temperingglass.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.temperingglass.entity.GlassInfo;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface GlassInfoMapper extends BaseMapper<GlassInfo> {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/temperingglass/service/GlassInfoService.java
New file
@@ -0,0 +1,16 @@
package com.mes.temperingglass.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.temperingglass.entity.GlassInfo;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface GlassInfoService extends IService<GlassInfo> {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/temperingglass/service/impl/GlassInfoServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.temperingglass.service.impl;
import com.mes.temperingglass.entity.GlassInfo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.temperingglass.mapper.GlassInfoMapper;
import com.mes.temperingglass.service.GlassInfoService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Service
public class GlassInfoServiceImpl extends ServiceImpl<GlassInfoMapper, GlassInfo> implements GlassInfoService {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
New file
@@ -0,0 +1,25 @@
server:
  port: 8081
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8&characterEncoding=utf-8&useSSL=false
    username: root
    password: beibo.123/
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: cacheGlass
  redis:
    database: 0
    host: 192.168.56.10
    port: 6379
    password:
  session:
    store-type: redis
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
New file
@@ -0,0 +1,26 @@
package com.mes;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
/**
 * @Author : zhoush
 * @Date: 2024/3/27 16:37
 * @Description:
 */
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = CacheGlassModuleApplication.class)
public class CacheGlassModuleApplicationTest {
    @Test
    public void testFindPath() {
        log.info("完整路径:{}", Arrays.asList("123"));
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/pom.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>moduleService</artifactId>
        <groupId>com.mes</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>cacheVerticalGlass</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
</project>
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/CacheVerticalClassModuleApplication.java
New file
@@ -0,0 +1,30 @@
package com.mes;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
 * @Author : zhoush
 * @Date: 2024/3/25 10:49
 * @Description:
 */
@Slf4j
@SpringBootApplication
@EnableSwagger2
@EnableDiscoveryClient
@MapperScan(basePackages = "com.mes.*.mapper")
public class CacheVerticalClassModuleApplication {
    public static void main(String[] args) {
        try {
            SpringApplication.run(CacheVerticalClassModuleApplication.class, args);
        }catch (Exception e){
            log.error(e.getMessage());
        }
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java
New file
@@ -0,0 +1,29 @@
package com.mes.bigstorage.controller;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@RestController
@RequestMapping("/bigStorageCage")
public class BigStorageCageController {
        //todo: 实例代码 待删除
    @ApiOperation("测试")
    @GetMapping("/index")
    public String index() {
        return "hello world";
    }
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
New file
@@ -0,0 +1,21 @@
package com.mes.bigstorage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@RestController
@RequestMapping("/bigStorageCageDetails")
public class BigStorageCageDetailsController {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
New file
@@ -0,0 +1,50 @@
package com.mes.bigstorage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class BigStorageCage implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 大理片笼表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 设备id
     */
    private Integer deviceId;
    /**
     * 栅格号
     */
    private Integer slot;
    /**
     * 启用状态
     */
    private String enableState;
    /**
     * 剩余宽度
     */
    private Integer remainWidth;
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
New file
@@ -0,0 +1,95 @@
package com.mes.bigstorage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class BigStorageCageDetails implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 大理片笼详情表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 设备id
     */
    private Integer deviceId;
    /**
     * 栅格号
     */
    private Integer slot;
    /**
     * 玻璃id
     */
    private String glassId;
    /**
     * 小片在格内的顺序
     */
    private Integer sequence;
    /**
     * 流程卡号
     */
    private String flowCardId;
    /**
     * 玻璃类型
     */
    private Integer glassType;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 钢化版图id
     */
    private Integer temperingLayoutId;
    /**
     * 钢化版图片序
     */
    private Integer temperingFeedSequence;
    /**
     * 状态
     */
    private Integer state;
    /**
     * 玻璃间隙
     */
    private Integer gap;
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
New file
@@ -0,0 +1,17 @@
package com.mes.bigstorage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.bigstorage.entity.BigStorageCageDetails;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface BigStorageCageDetailsMapper extends BaseMapper<BigStorageCageDetails> {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.bigstorage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.bigstorage.entity.BigStorageCage;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface BigStorageCageMapper extends BaseMapper<BigStorageCage> {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
New file
@@ -0,0 +1,16 @@
package com.mes.bigstorage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.bigstorage.entity.BigStorageCageDetails;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface BigStorageCageDetailsService extends IService<BigStorageCageDetails> {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
New file
@@ -0,0 +1,16 @@
package com.mes.bigstorage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.bigstorage.entity.BigStorageCage;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface BigStorageCageService extends IService<BigStorageCage> {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.bigstorage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Service
public class BigStorageCageDetailsServiceImpl extends ServiceImpl<BigStorageCageDetailsMapper, BigStorageCageDetails> implements BigStorageCageDetailsService {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.bigstorage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.bigstorage.entity.BigStorageCage;
import com.mes.bigstorage.mapper.BigStorageCageMapper;
import com.mes.bigstorage.service.BigStorageCageService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Service
public class BigStorageCageServiceImpl extends ServiceImpl<BigStorageCageMapper, BigStorageCage> implements BigStorageCageService {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
New file
@@ -0,0 +1,21 @@
package com.mes.temperingglass.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@RestController
@RequestMapping("/temperingGlassInfo")
public class TemperingGlassInfoController {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
New file
@@ -0,0 +1,95 @@
package com.mes.temperingglass.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class TemperingGlassInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 钢化小片信息表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 流程卡
     */
    private String flowcardId;
    /**
     * 流程卡玻璃类型
     */
    private Integer glassType;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 膜系
     */
    private Integer filmsid;
    /**
     * 钢化是否接受横放
     */
    private Integer ishorizontal;
    /**
     * 钢化版图id
     */
    private Integer temperingLayoutId;
    /**
     * 钢化版图片序
     */
    private Integer temperingFeedSequence;
    /**
     * x坐标
     */
    private Integer xCoordinate;
    /**
     * y坐标
     */
    private Integer yCoordinate;
    /**
     * 旋转角度(逆时针)
     */
    private Integer angle;
    /**
     * 状态
     */
    private Integer state;
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.temperingglass.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.temperingglass.entity.TemperingGlassInfo;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface TemperingGlassInfoMapper extends BaseMapper<TemperingGlassInfo> {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
New file
@@ -0,0 +1,16 @@
package com.mes.temperingglass.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface TemperingGlassInfoService extends IService<TemperingGlassInfo> {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.temperingglass.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Service
public class TemperingGlassInfoServiceImpl extends ServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingGlassInfoService {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/uppattenusage/controller/GlassInfoController.java
New file
@@ -0,0 +1,21 @@
package com.mes.uppattenusage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@RestController
@RequestMapping("/glassInfo")
public class GlassInfoController {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/uppattenusage/entity/GlassInfo.java
New file
@@ -0,0 +1,130 @@
package com.mes.uppattenusage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class GlassInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 玻璃信息表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 流程卡
     */
    private String flowcardId;
    /**
     * 流程卡玻璃类型
     */
    private Integer glassType;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 膜系
     */
    private Integer filmsid;
    /**
     * 磨前宽
     */
    private Double edgWidth;
    /**
     * 磨前高
     */
    private Double edgHeight;
    /**
     * 是否配片
     */
    private Integer ismultiple;
    /**
     * 配片最大宽
     */
    private Double maxWidth;
    /**
     * 配片最大高
     */
    private Double maxHeight;
    /**
     * 钢化是否接受横放
     */
    private Integer ishorizontal;
    /**
     * 原片顺序
     */
    private Integer patternSequence;
    /**
     * 钢化版图id
     */
    private Integer temperingLayoutId;
    /**
     * 钢化版图片序
     */
    private Integer temperingFeedSequence;
    /**
     * x坐标
     */
    private Integer xCoordinate;
    /**
     * y坐标
     */
    private Integer yCoordinate;
    /**
     * 旋转角度(逆时针)
     */
    private Integer angle;
    /**
     * 工程号
     */
    private Integer engineerId;
    /**
     * 生产规则id
     */
    private Integer ruleId;
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/uppattenusage/mapper/GlassInfoMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.uppattenusage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.uppattenusage.entity.GlassInfo;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface GlassInfoMapper extends BaseMapper<GlassInfo> {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/uppattenusage/service/GlassInfoService.java
New file
@@ -0,0 +1,16 @@
package com.mes.uppattenusage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.uppattenusage.entity.GlassInfo;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface GlassInfoService extends IService<GlassInfo> {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/uppattenusage/service/impl/GlassInfoServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.uppattenusage.service.impl;
import com.mes.uppattenusage.entity.GlassInfo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.uppattenusage.mapper.GlassInfoMapper;
import com.mes.uppattenusage.service.GlassInfoService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Service
public class GlassInfoServiceImpl extends ServiceImpl<GlassInfoMapper, GlassInfo> implements GlassInfoService {
}
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
New file
@@ -0,0 +1,23 @@
server:
  port: 8082
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8&characterEncoding=utf-8&useSSL=false
    username: root
    password: beibo.123/
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: cacheVerticalGlass
  redis:
    database: 0
    host: 192.168.56.10
    port: 6379
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
hangzhoumesParent/moduleService/LoadGlassModule/pom.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>moduleService</artifactId>
        <groupId>com.mes</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>loadGlass</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
</project>
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java
New file
@@ -0,0 +1,29 @@
package com.mes;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
 * @Author : zhoush
 * @Date: 2024/4/8 13:26
 * @Description:
 */
@Slf4j
@SpringBootApplication
@EnableSwagger2
@EnableDiscoveryClient
@MapperScan(basePackages = "com.mes.*.mapper")
public class LoadGlassModuleApplication {
    public static void main(String[] args) {
        try {
            SpringApplication.run(LoadGlassModuleApplication.class, args);
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
New file
@@ -0,0 +1,27 @@
package com.mes.temperingglass.controller;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@RestController
@RequestMapping("/temperingGlassInfo")
public class TemperingGlassInfoController {
        //todo: 实例代码 待删除
    @ApiOperation("测试")
    @GetMapping("/index")
    public String index() {
        return "hello world";
    }
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
New file
@@ -0,0 +1,96 @@
package com.mes.temperingglass.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class TemperingGlassInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 钢化小片信息表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 流程卡
     */
    private String flowcardId;
    /**
     * 流程卡玻璃类型
     */
    private Integer glassType;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 膜系
     */
    private Integer filmsid;
    /**
     * 钢化是否接受横放
     */
    private Integer ishorizontal;
    /**
     * 钢化版图id
     */
    private Integer temperingLayoutId;
    /**
     * 钢化版图片序
     */
    private Integer temperingFeedSequence;
    /**
     * x坐标
     */
    private Integer xCoordinate;
    /**
     * y坐标
     */
    private Integer yCoordinate;
    /**
     * 旋转角度(逆时针)
     */
    private Integer angle;
    /**
     * 状态
     */
    private Integer state;
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.temperingglass.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.temperingglass.entity.TemperingGlassInfo;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface TemperingGlassInfoMapper extends BaseMapper<TemperingGlassInfo> {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
New file
@@ -0,0 +1,16 @@
package com.mes.temperingglass.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface TemperingGlassInfoService extends IService<TemperingGlassInfo> {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.temperingglass.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Service
public class TemperingGlassInfoServiceImpl extends ServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingGlassInfoService {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
New file
@@ -0,0 +1,21 @@
package com.mes.uppattenusage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@RestController
@RequestMapping("/upPattenUsage")
public class UpPattenUsageController {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/entity/UpPattenUsage.java
New file
@@ -0,0 +1,65 @@
package com.mes.uppattenusage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class UpPattenUsage implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 原片使用情况表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 工程号
     */
    private Integer engineeringId;
    /**
     * 膜系id
     */
    private Integer filmsId;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 原片版图片序
     */
    private Integer layoutSequence;
    /**
     * 状态
     */
    private Integer state;
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/mapper/UpPattenUsageMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.uppattenusage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.uppattenusage.entity.UpPattenUsage;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface UpPattenUsageMapper extends BaseMapper<UpPattenUsage> {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
New file
@@ -0,0 +1,16 @@
package com.mes.uppattenusage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.uppattenusage.entity.UpPattenUsage;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface UpPattenUsageService extends IService<UpPattenUsage> {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.uppattenusage.service.impl;
import com.mes.uppattenusage.entity.UpPattenUsage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.uppattenusage.mapper.UpPattenUsageMapper;
import com.mes.uppattenusage.service.UpPattenUsageService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Service
public class UpPattenUsageServiceImpl extends ServiceImpl<UpPattenUsageMapper, UpPattenUsage> implements UpPattenUsageService {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/upworkstation/controller/UpWorkstationController.java
New file
@@ -0,0 +1,21 @@
package com.mes.upworkstation.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@RestController
@RequestMapping("/upWorkstation")
public class UpWorkstationController {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/upworkstation/entity/UpWorkstation.java
New file
@@ -0,0 +1,75 @@
package com.mes.upworkstation.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class UpWorkstation implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 上片工位表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 工位号
     */
    private Integer workstationId;
    /**
     * 设备id
     */
    private Integer deviceId;
    /**
     * 启用状态
     */
    private Integer enableState;
    /**
     * 工作状态
     */
    private Integer workState;
    /**
     * 原片宽
     */
    private Double patternWidth;
    /**
     * 原片高
     */
    private Double patternHeigth;
    /**
     * 原片厚度
     */
    private Double patternThickness;
    /**
     * 膜系
     */
    private Integer filmsId;
    /**
     * 数量
     */
    private Integer number;
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/upworkstation/mapper/UpWorkstationMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.upworkstation.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.upworkstation.entity.UpWorkstation;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface UpWorkstationMapper extends BaseMapper<UpWorkstation> {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/upworkstation/service/UpWorkstationService.java
New file
@@ -0,0 +1,16 @@
package com.mes.upworkstation.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.upworkstation.entity.UpWorkstation;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface UpWorkstationService extends IService<UpWorkstation> {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/upworkstation/service/impl/UpWorkstationServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.upworkstation.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.upworkstation.entity.UpWorkstation;
import com.mes.upworkstation.mapper.UpWorkstationMapper;
import com.mes.upworkstation.service.UpWorkstationService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Service
public class UpWorkstationServiceImpl extends ServiceImpl<UpWorkstationMapper, UpWorkstation> implements UpWorkstationService {
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
New file
@@ -0,0 +1,23 @@
server:
  port: 8083
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8&characterEncoding=utf-8&useSSL=false
    username: root
    password: beibo.123/
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: loadGlass
  redis:
    database: 0
    host: 192.168.56.10
    port: 6379
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
hangzhoumesParent/moduleService/TemperingGlassModule/pom.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>moduleService</artifactId>
        <groupId>com.mes</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>temperingGlass</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
</project>
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/TemperingGlassModuleApplication.java
New file
@@ -0,0 +1,29 @@
package com.mes;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
 * @Author : zhoush
 * @Date: 2024/4/8 13:26
 * @Description:
 */
@Slf4j
@SpringBootApplication
@EnableSwagger2
@EnableDiscoveryClient
@MapperScan(basePackages = "com.mes.*.mapper")
public class TemperingGlassModuleApplication {
    public static void main(String[] args) {
        try {
            SpringApplication.run(TemperingGlassModuleApplication.class, args);
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
New file
@@ -0,0 +1,27 @@
package com.mes.temperingglass.controller;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@RestController
@RequestMapping("/temperingGlassInfo")
public class TemperingGlassInfoController {
        //todo: 实例代码 待删除
    @ApiOperation("测试")
    @GetMapping("/index")
    public String index() {
        return "hello world";
    }
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
New file
@@ -0,0 +1,95 @@
package com.mes.temperingglass.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class TemperingGlassInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 钢化小片信息表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 流程卡
     */
    private String flowcardId;
    /**
     * 流程卡玻璃类型
     */
    private Integer glassType;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 膜系
     */
    private Integer filmsid;
    /**
     * 钢化是否接受横放
     */
    private Integer ishorizontal;
    /**
     * 钢化版图id
     */
    private Integer temperingLayoutId;
    /**
     * 钢化版图片序
     */
    private Integer temperingFeedSequence;
    /**
     * x坐标
     */
    private Integer xCoordinate;
    /**
     * y坐标
     */
    private Integer yCoordinate;
    /**
     * 旋转角度(逆时针)
     */
    private Integer angle;
    /**
     * 状态
     */
    private Integer state;
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.temperingglass.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.temperingglass.entity.TemperingGlassInfo;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface TemperingGlassInfoMapper extends BaseMapper<TemperingGlassInfo> {
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
New file
@@ -0,0 +1,16 @@
package com.mes.temperingglass.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface TemperingGlassInfoService extends IService<TemperingGlassInfo> {
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.temperingglass.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Service
public class TemperingGlassInfoServiceImpl extends ServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingGlassInfoService {
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
New file
@@ -0,0 +1,22 @@
server:
  port: 8084
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8&characterEncoding=utf-8&useSSL=false
    username: root
    password: beibo.123/
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: temperingGlass
  redis:
    database: 0
    host: 192.168.56.10
    port: 6379
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>moduleService</artifactId>
        <groupId>com.mes</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>unLoadGlass</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
</project>
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/UnLoadGlassApplication.java
New file
@@ -0,0 +1,20 @@
package com.mes;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
 * @Author : zhoush
 * @Date: 2024/4/7 14:36
 * @Description:
 */
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan(basePackages = "com.mes.*.mapper")
public class UnLoadGlassApplication {
    public static void main(String[] args) {
        SpringApplication.run(UnLoadGlassApplication.class, args);
    }
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
New file
@@ -0,0 +1,30 @@
package com.mes.downglassinfo.controller;
import com.mes.downglassinfo.entity.DownGlassInfo;
import com.mes.downglassinfo.service.DownGlassInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Api(tags = "下料信息")
@RestController
@RequestMapping("/downGlassInfo")
public class DownGlassInfoController {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java
New file
@@ -0,0 +1,35 @@
package com.mes.downglassinfo.controller;
import com.mes.downworkstation.entity.DownWorkstation;
import com.mes.downworkstation.service.DownWorkstationService;
import com.mes.uppattenusage.service.GlassInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Api(tags = "下料任务")
@RestController
@RequestMapping("/downGlassTask")
public class DownGlassTaskController {
    //todo: 实例代码 待删除
    @ApiOperation("测试")
    @GetMapping("/index")
    public String index() {
        return "hello world";
    }
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
New file
@@ -0,0 +1,52 @@
package com.mes.downglassinfo.entity;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class DownGlassInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 下片玻璃信息表id
     */
      private Integer id;
    /**
     * 流程卡号
     */
    private String flowCardId;
    /**
     * 顺序
     */
    private Integer sequence;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
New file
@@ -0,0 +1,75 @@
package com.mes.downglassinfo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class DownGlassTask implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 起始
     */
    private String startCell;
    /**
     * 目标
     */
    private String endCell;
    /**
     * 任务类型 1:进   2:出
     */
    private String taskType;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 膜系
     */
    private String filmsid;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 流程卡号
     */
    private String flowCardId;
    /**
     * 任务状态 0 未开始  1正在进行   2完成
     */
    private Integer taskStauts;
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.downglassinfo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.downglassinfo.entity.DownGlassInfo;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface DownGlassInfoMapper extends BaseMapper<DownGlassInfo> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassTaskMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.downglassinfo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.downglassinfo.entity.DownGlassTask;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface DownGlassTaskMapper extends BaseMapper<DownGlassTask> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
New file
@@ -0,0 +1,16 @@
package com.mes.downglassinfo.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.downglassinfo.entity.DownGlassInfo;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface DownGlassInfoService extends IService<DownGlassInfo> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassTaskService.java
New file
@@ -0,0 +1,16 @@
package com.mes.downglassinfo.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.downglassinfo.entity.DownGlassTask;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface DownGlassTaskService extends IService<DownGlassTask> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.downglassinfo.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.downglassinfo.entity.DownGlassInfo;
import com.mes.downglassinfo.mapper.DownGlassInfoMapper;
import com.mes.downglassinfo.service.DownGlassInfoService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Service
public class DownGlassInfoServiceImpl extends ServiceImpl<DownGlassInfoMapper, DownGlassInfo> implements DownGlassInfoService {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java
New file
@@ -0,0 +1,21 @@
package com.mes.downglassinfo.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.downglassinfo.entity.DownGlassTask;
import com.mes.downglassinfo.mapper.DownGlassTaskMapper;
import com.mes.downglassinfo.service.DownGlassTaskService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Service
public class DownGlassTaskServiceImpl extends ServiceImpl<DownGlassTaskMapper, DownGlassTask> implements DownGlassTaskService {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageController.java
New file
@@ -0,0 +1,21 @@
package com.mes.downstorage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@RestController
@RequestMapping("/downStorageCage")
public class DownStorageCageController {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
New file
@@ -0,0 +1,21 @@
package com.mes.downstorage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@RestController
@RequestMapping("/downStorageCageDetails")
public class DownStorageCageDetailsController {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
New file
@@ -0,0 +1,50 @@
package com.mes.downstorage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class DownStorageCage implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 下片前理片笼表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 设备id
     */
    private Integer deviceId;
    /**
     * 栅格号
     */
    private Integer slot;
    /**
     * 启用状态
     */
    private String enableState;
    /**
     * 剩余
     */
    private Integer remainWidth;
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java
New file
@@ -0,0 +1,95 @@
package com.mes.downstorage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class DownStorageCageDetails implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 下片前理片笼明细表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 设备id
     */
    private Integer deviceId;
    /**
     * 栅格号
     */
    private Integer slot;
    /**
     * 玻璃id
     */
    private Integer glassId;
    /**
     * 小片在格内的顺序
     */
    private Integer sequence;
    /**
     * 流程卡号
     */
    private String flowCardId;
    /**
     * 玻璃类型
     */
    private Integer glassType;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 钢化版图id
     */
    private Integer temperingLayoutId;
    /**
     * 钢化版图片序
     */
    private Integer temperingFeedSequence;
    /**
     * 状态
     */
    private Integer state;
    /**
     * 玻璃间隙
     */
    private Integer gap;
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.downstorage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.downstorage.entity.DownStorageCageDetails;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface DownStorageCageDetailsMapper extends BaseMapper<DownStorageCageDetails> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.downstorage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.downstorage.entity.DownStorageCage;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface DownStorageCageMapper extends BaseMapper<DownStorageCage> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
New file
@@ -0,0 +1,16 @@
package com.mes.downstorage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.downstorage.entity.DownStorageCageDetails;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface DownStorageCageDetailsService extends IService<DownStorageCageDetails> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
New file
@@ -0,0 +1,16 @@
package com.mes.downstorage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.downstorage.entity.DownStorageCage;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface DownStorageCageService extends IService<DownStorageCage> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.downstorage.service.impl;
import com.mes.downstorage.entity.DownStorageCageDetails;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.downstorage.mapper.DownStorageCageDetailsMapper;
import com.mes.downstorage.service.DownStorageCageDetailsService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Service
public class DownStorageCageDetailsServiceImpl extends ServiceImpl<DownStorageCageDetailsMapper, DownStorageCageDetails> implements DownStorageCageDetailsService {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.downstorage.service.impl;
import com.mes.downstorage.entity.DownStorageCage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.downstorage.mapper.DownStorageCageMapper;
import com.mes.downstorage.service.DownStorageCageService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Service
public class DownStorageCageServiceImpl extends ServiceImpl<DownStorageCageMapper, DownStorageCage> implements DownStorageCageService {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
New file
@@ -0,0 +1,21 @@
package com.mes.downworkstation.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@RestController
@RequestMapping("/downWorkstation")
public class DownWorkstationController {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationTaskController.java
New file
@@ -0,0 +1,21 @@
package com.mes.downworkstation.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@RestController
@RequestMapping("/downWorkstationTask")
public class DownWorkstationTaskController {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java
New file
@@ -0,0 +1,55 @@
package com.mes.downworkstation.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class DownWorkstation implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 下片工位表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 工位id
     */
    private Integer workstationId;
    /**
     * 流程卡号
     */
    private String flowCardId;
    /**
     * 设备id
     */
    private Integer deviceId;
    /**
     * 启用状态
     */
    private Integer enableState;
    /**
     * 工作状态
     */
    private Integer workState;
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java
New file
@@ -0,0 +1,60 @@
package com.mes.downworkstation.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class DownWorkstationTask implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 膜系
     */
    private String filmsid;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 流程卡号
     */
    private String flowCardId;
    /**
     * 任务状态
     */
    private Integer state;
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.downworkstation.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.downworkstation.entity.DownWorkstation;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface DownWorkstationMapper extends BaseMapper<DownWorkstation> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.downworkstation.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.downworkstation.entity.DownWorkstationTask;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface DownWorkstationTaskMapper extends BaseMapper<DownWorkstationTask> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java
New file
@@ -0,0 +1,16 @@
package com.mes.downworkstation.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.downworkstation.entity.DownWorkstation;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface DownWorkstationService extends IService<DownWorkstation> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationTaskService.java
New file
@@ -0,0 +1,16 @@
package com.mes.downworkstation.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.downworkstation.entity.DownWorkstationTask;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
public interface DownWorkstationTaskService extends IService<DownWorkstationTask> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.downworkstation.service.impl;
import com.mes.downworkstation.entity.DownWorkstation;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.downworkstation.mapper.DownWorkstationMapper;
import com.mes.downworkstation.service.DownWorkstationService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Service
public class DownWorkstationServiceImpl extends ServiceImpl<DownWorkstationMapper, DownWorkstation> implements DownWorkstationService {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationTaskServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.downworkstation.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.downworkstation.entity.DownWorkstationTask;
import com.mes.downworkstation.mapper.DownWorkstationTaskMapper;
import com.mes.downworkstation.service.DownWorkstationTaskService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-04-07
 */
@Service
public class DownWorkstationTaskServiceImpl extends ServiceImpl<DownWorkstationTaskMapper, DownWorkstationTask> implements DownWorkstationTaskService {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/uppattenusage/controller/GlassInfoController.java
New file
@@ -0,0 +1,20 @@
package com.mes.uppattenusage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@RestController
@RequestMapping("/glassInfo")
public class GlassInfoController {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/uppattenusage/entity/GlassInfo.java
New file
@@ -0,0 +1,131 @@
package com.mes.uppattenusage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class GlassInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 玻璃信息表id
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 流程卡
     */
    private String flowcardId;
    /**
     * 流程卡玻璃类型
     */
    private Integer glassType;
    /**
     * 宽
     */
    private Double width;
    /**
     * 高
     */
    private Double height;
    /**
     * 厚度
     */
    private Double thickness;
    /**
     * 膜系
     */
    private Integer filmsid;
    /**
     * 磨前宽
     */
    private Double edgWidth;
    /**
     * 磨前高
     */
    private Double edgHeight;
    /**
     * 是否配片
     */
    private Integer ismultiple;
    /**
     * 配片最大宽
     */
    private Double maxWidth;
    /**
     * 配片最大高
     */
    private Double maxHeight;
    /**
     * 钢化是否接受横放
     */
    private Integer ishorizontal;
    /**
     * 原片顺序
     */
    private Integer patternSequence;
    /**
     * 钢化版图id
     */
    private Integer temperingLayoutId;
    /**
     * 钢化版图片序
     */
    private Integer temperingFeedSequence;
    /**
     * x坐标
     */
    private Integer xCoordinate;
    /**
     * y坐标
     */
    private Integer yCoordinate;
    /**
     * 旋转角度(逆时针)
     */
    private Integer angle;
    /**
     * 工程号
     */
    private Integer engineerId;
    /**
     * 生产规则id
     */
    private Integer ruleId;
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/uppattenusage/mapper/GlassInfoMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.uppattenusage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.uppattenusage.entity.GlassInfo;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface GlassInfoMapper extends BaseMapper<GlassInfo> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/uppattenusage/service/GlassInfoService.java
New file
@@ -0,0 +1,16 @@
package com.mes.uppattenusage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.uppattenusage.entity.GlassInfo;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface GlassInfoService extends IService<GlassInfo> {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/GlassInfoServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.uppattenusage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.uppattenusage.entity.GlassInfo;
import com.mes.uppattenusage.mapper.GlassInfoMapper;
import com.mes.uppattenusage.service.GlassInfoService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Service
public class GlassInfoServiceImpl extends ServiceImpl<GlassInfoMapper, GlassInfo> implements GlassInfoService {
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
New file
@@ -0,0 +1,23 @@
server:
  port: 8085
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8&characterEncoding=utf-8&useSSL=false
    username: root
    password: beibo.123/
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: unLoadGlass
  redis:
    database: 0
    host: 192.168.56.10
    port: 6379
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
hangzhoumesParent/moduleService/pom.xml
New file
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>hangzhoumesParent</artifactId>
        <groupId>com.mes</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>moduleService</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>CacheGlassModule</module>
        <module>CacheVerticalGlassModule</module>
        <module>LoadGlassModule</module>
        <module>TemperingGlassModule</module>
        <module>UnLoadGlassModule</module>
    </modules>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--web 需要启动项目-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <!--依赖服务的工具类-->
        <dependency>
            <groupId>com.mes</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--开发者工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
hangzhoumesParent/pom.xml
New file
@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mes</groupId>
    <artifactId>hangzhoumesParent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>common</module>
        <module>moduleService</module>
        <module>gateway</module>
    </modules>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
    </parent>
    <properties>
        <!-- 跳过测试 -->
        <skipTests>true</skipTests>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <repositories>
        <repository>
            <id>nexus-aliyun</id>
            <name>Nexus aliyun</name>
            <layout>default</layout>
            <url>https://maven.aliyun.com/repository/public</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
        <repository>
            <id>spring</id>
            <url>https://maven.aliyun.com/repository/spring</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>
hangzhoumesParent/readMe.md
New file
@@ -0,0 +1,23 @@
1、本项目是基于SpringBoot+Mybatis-plus+Mysql+Vue+ElementUI+Maven+Nginx的项目,目录结果结构如下:
    ├─src
    ├─com   插件生成的代码,用于各自开发使用
    │  └─mes
    ├─common  公共模块
    │  ├─src
    └─moduleService
        ├─-CacheGlassModule
        ├─-CacheVerticalGlassModule
        ├─-LoadGlassModule
        ├─-TemperingGlassModule
        └─-UnLoadGlassModule
2、运行项目:
    1、启动项目:启动各自模块启动类 例如:CacheGlassModuleApplication.java#main()
    2、访问项目:
    3、项目地址:http://localhost:8081/mesModuleCache/doc.html#/home
    4、项目说明: 本界面为Api文档,公开人员用于调试
3、项目说明:
    1、项目分为公共模块common,业务模块moduleService。
    2、common模块中包含公共的类,例如:公共的实体类、拦截器、工具类、常量类、异常处理等。
    3、moduleService中包含各个业务模块,每个业务模块中包含一个启动类,开发人员需要开发各自负责的业务模块。
    4、com目录下的文件为插件生成的代码,用于各自开发使用。用完删除即可,避免影响开发。