From f8a73ae78727eab0063a26b4c57c3d451f1a0ab5 Mon Sep 17 00:00:00 2001
From: ZengTao <2773468879@qq.com>
Date: 星期四, 18 四月 2024 14:23:05 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

---
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java                             |   76 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcAlarm.json                                               |  371 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/GlobalExceptionHandler.java                                   |   32 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingMapper.java                     |   34 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java             |   12 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml                                                   |   28 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenManager.java                                                  |   30 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/LoginUser.java                                              |   94 
 hangzhoumesParent/gateway/src/main/java/com/mes/config/MyCorsConfig.java                                                                  |   34 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java                                      |   20 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java                                               |   97 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenLogoutHandler.java                                            |   35 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/SysUserService.java                                        |   20 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcParameterInfo.java                                       |  131 
 hangzhoumesParent/gateway/pom.xml                                                                                                         |   31 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationTaskServiceImpl.java  |   42 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownGlassLogic.java                       |  155 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcParameter.json                                           |  610 ++
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/UnLoadGlassApplication.java                                       |   31 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/service/UpPattenUsageService.java                         |   16 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/TemperingGlassModuleApplication.java                           |   29 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java                                       |   27 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java            |   16 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java         |   79 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/UpWorkstationMapper.java                         |    1 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeProject.java                                                 |  205 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserRoleMapper.java                                      |   18 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcSign.json                                                |  460 ++
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java                                          |   18 
 hangzhoumesParent/gateway/src/main/java/com/mes/GateWayApplication.java                                                                   |   20 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java         |  131 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/GlassInfo.java                                   |    2 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcRead.json                                                |  195 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java |   20 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/controller/UpPattenUsageController.java                   |   20 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/SysUserRole.java                                            |   36 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownGlassCacheLogic.java                      |  239 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/OptimizeRequest.java                                         |    7 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/JwtUtil.java                                                   |  120 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcState.json                                               |  285 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResultCodeEnum.java                                                      |   33 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/LoadGlassMapper.java                             |   18 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java    |   50 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationTaskService.java           |   19 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/TokenWebSecurityConfig.java                                   |   53 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMapper.xml                                           |    5 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/entity/UpPattenUsage.java                                 |   66 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassTaskMapper.java                     |   17 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/Plcframe.json                                               |   51 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java                                                           |  421 +
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/DefaultPasswordEncoder.java                                        |   25 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java                                  |   35 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeLayoutController.java                                    |   20 
 hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/ApplicationTest.java                                                |   33 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeDetailService.java                                          |   16 
 hangzhoumesParent/common/springsecurity/pom.xml                                                                                           |   38 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java                               |   89 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java                               |   76 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java                  |   62 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java                                   |   20 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/xml/SysUserRoleMapper.xml                                   |    5 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java                      |   19 
 hangzhoumesParent/gateway/src/main/resources/application.yml                                                                              |   56 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageDetailsController.java     |   19 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/UpPattenUsageServiceImpl.java                |   20 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java                           |    7 
 TemperingGlassModule/MES-Module (1).iml                                                                                                   |  134 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/SysMenuService.java                                            |   19 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/Result.java                                                              |   56 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/entity/GlassInfo.java                                    |  131 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/entity/GlassInfo.java                                   |  131 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcBitObject.java                                                       |  141 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageController.java             |   21 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java              |   70 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PLCAutoMes.java                                                         |   88 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/WebUtils.java                                                  |   30 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeLayout.java                                                  |  106 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java                    |    9 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/MybatisPlusConfig.java                                           |   30 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java                                                 |  196 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml                                                      |   35 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java               |   32 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java                                      |   39 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleMenuServiceImpl.java                               |   20 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java                    |   16 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/mapper/UpPattenUsageMapper.java                           |   16 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java                                              |   21 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/FastJsonRedisSerializer.java                                   |   55 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java                                              |   18 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcTest.json                                                |  378 +
 hangzhoumesParent/common/springsecurity/src/main/resources/application.yml                                                                |   25 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java             |   16 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRoleMenu.java                                                |   36 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeLayoutServiceImpl.java                                 |   23 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/test.xlsx                                                   |    0 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleMenuService.java                                        |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/InitUtil.java                                                            |  127 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java                              |   16 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java             |   22 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java                                   |   20 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResponseUtil.java                                                        |   28 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/RedisConfig.java                                              |   37 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserMapper.java                                          |   18 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/UnauthEntryPoint.java                                              |   18 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/common/S7object.java                                                |   36 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java          |   16 
 hangzhoumesParent/common/pom.xml                                                                                                          |  177 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/HangzhouMesMapper.java                            |   76 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingService.java                   |   63 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcBitInfo.java                                             |   76 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java                                                    |   82 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMenuMapper.xml                                       |    5 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java                   |   63 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassTaskService.java                   |   27 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserRoleController.java                              |   20 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java      |   25 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/CacheGlassModuleApplication.java                                   |   30 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/SecurityUser.java                                                    |   73 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java             |   30 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/MD5.java                                                                 |   36 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java                   |   19 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/ExcelToJsonConverter.java                                   |  107 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/entity/TaskCache.java                                    |   15 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenLoginFilter.java                                                |   74 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcBitObject.java                                           |  141 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/config/TokenWebSecurityConfig.java                                          |   69 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java                                     |   24 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterInfo.java                                                   |  130 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/PpService.java                                   |   51 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java                          |   51 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeDetailServiceImpl.java                                 |   22 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/AuthenticationEntryPointImpl.java                            |   29 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java                                                             |    5 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java                              |   16 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java          |   34 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java                                            |   18 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/AccessDeniedHandlerImpl.java                                 |   30 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java                            |   38 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/sign.xlsx                                                   |    0 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Swagger2Config.java                                              |   93 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PLCAutoMes.java                                             |   95 
 hangzhoumesParent/moduleService/pom.xml                                                                                                   |   72 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/Plchome.java                                               |   61 
 hangzhoumesParent/readMe.md                                                                                                               |   18 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/alarm.xlsx                                                  |    0 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml                                                        |   34 
 hangzhoumesParent/common/springsecurity/src/main/resources/mapper/SysMenuMapper.xml                                                       |   15 
 hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java                               |   26 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingOverService.java               |   36 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java      |  116 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java                   |   14 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcMes.json                                                 |   50 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java          |   33 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java                                |   23 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java                  |   96 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeDetailController.java                                    |   20 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java                                           |    7 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java          |   79 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java                       |   64 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/User.java                                                            |   31 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java                           |   51 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/handler/MyMetaObjectHandler.java                                        |   22 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java            |   10 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/WebSocketServer.java                                        |  162 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/PLCAutoMes.java                                            |   91 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageMapper.java                     |   16 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleService.java                                            |   16 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java                             |   25 
 hangzhoumesParent/moduleService/LoadGlassModule/pom.xml                                                                                   |   32 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleMenuController.java                                  |   20 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/PpMapper.java                                     |   36 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkSequence.java                              |   15 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/RedisUtil.java                                                 |  220 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeDetailMapper.java                                            |   18 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java                   |    9 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml                                                       |   30 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java                     |   17 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java                                         |   10 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/UpWorkstationService.java                       |    6 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java              |   12 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java                 |    6 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/ServiceException.java                                         |   14 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java                           |    9 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java                            |   23 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRole.java                                                    |   50 
 hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml                                                                                 |   41 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java                  |   36 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/HangzhoumesService.java                          |   35 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java   |   19 
 hangzhoumesParent/moduleService/CacheGlassModule/pom.xml                                                                                  |   32 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java                           |   24 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcParameterObject.java                                     |  195 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java                                   |   67 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java           |   25 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeLayoutService.java                                          |   16 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java                 |   76 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/S7control.java                                             |  458 ++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcBitInfo.java                                                         |   75 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/SysUser.java                                                |   66 
 hangzhoumesParent/moduleService/TemperingGlassModule/pom.xml                                                                              |   32 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java  |   54 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java                     |   20 
 hangzhoumesParent/common/servicebase/pom.xml                                                                                              |    7 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/xml/SysUserMapper.xml                                       |    5 
 TemperingGlassModule/MES-Module.iml                                                                                                       |  125 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java                   |   54 
 hangzhoumesParent/pom.xml                                                                                                                 |   73 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserRoleServiceImpl.java                           |   20 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/SysUserRoleService.java                                    |   16 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/Configuration.java                                          |   46 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationTaskController.java     |   19 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeDetail.java                                                  |  123 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenAuthFilter.java                                                 |   60 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java                   |    9 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java                      |   81 
 hangzhoumesParent/common/servicebase/src/main/resources/banner.txt                                                                        |   32 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java            |   28 
 217 files changed, 12,634 insertions(+), 240 deletions(-)

diff --git "a/TemperingGlassModule/MES-Module \0501\051.iml" "b/TemperingGlassModule/MES-Module \0501\051.iml"
index 100b632..9855791 100644
--- "a/TemperingGlassModule/MES-Module \0501\051.iml"
+++ "b/TemperingGlassModule/MES-Module \0501\051.iml"
@@ -1,139 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
+<module type="JAVA_MODULE" version="4">
   <component name="MavenCustomPomFilePath">
     <option name="mavenPomFileUrl" value="file://$MODULE_DIR$/effective-pom.xml" />
   </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$/src/main/java">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-    </content>
-    <content url="file://$MODULE_DIR$/src/main/resources">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-    </content>
-    <content url="file://$MODULE_DIR$/src/test/java">
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-    </content>
+    <output url="file://$MODULE_DIR$/../../../Documents/HangZhouMes/TemperingGlassModule/target/classes" />
+    <output-test url="file://$MODULE_DIR$/../../../Documents/HangZhouMes/TemperingGlassModule/target/test-classes" />
+    <exclude-output />
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.5.9" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.9" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.9" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.5.9" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.10" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.10" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.33" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.28" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.5.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.6" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.6" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.12.6" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.5.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.56" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.56" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.56" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.5.9" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.13" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.1.1" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.70" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.33" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.20" level="project" />
-    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.5.9" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.5.9" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.5.9" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.5.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.4.7" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:2.4.7" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:9.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.7.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.9.0" level="project" />
-    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.22" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.9.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.3.15" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.8.4" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.3.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-test-autoconfigure:2.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: com.auth0:java-jwt:3.10.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.12.6" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.12.6" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.12.6" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: commons-codec:commons-codec:1.15" level="project" />
-    <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.19.0" level="project" />
-    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.4.0" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.5.9" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.5.9" level="project" />
-    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.7" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: com.github.xingshuangs:iot-communication:1.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.5.9" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.15" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.36.Final" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/TemperingGlassModule/MES-Module.iml b/TemperingGlassModule/MES-Module.iml
index ddaeab8..643a1de 100644
--- a/TemperingGlassModule/MES-Module.iml
+++ b/TemperingGlassModule/MES-Module.iml
@@ -1,15 +1,124 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
+    <output url="file://$MODULE_DIR$/../../../Documents/HangZhouMes/TemperingGlassModule/target/classes" />
+    <output-test url="file://$MODULE_DIR$/../../../Documents/HangZhouMes/TemperingGlassModule/target/test-classes" />
+    <content url="file://$MODULE_DIR$" />
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.10" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.10" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.33" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.28" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.56" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.56" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.56" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.13" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.1.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.70" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.33" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.20" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.5.9" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.5.9" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.5.9" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.4.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:2.4.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:9.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.9.0" level="project" />
+    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.22" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.9.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.3.15" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.8.4" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.3.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-test-autoconfigure:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: com.auth0:java-jwt:3.10.3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.12.6" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: commons-codec:commons-codec:1.15" level="project" />
+    <orderEntry type="library" name="Maven: org.assertj:assertj-core:3.19.0" level="project" />
+    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.4.0" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.7" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xingshuangs:iot-communication:1.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.36.Final" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/hangzhoumesParent/common/pom.xml b/hangzhoumesParent/common/pom.xml
new file mode 100644
index 0000000..82e9685
--- /dev/null
+++ b/hangzhoumesParent/common/pom.xml
@@ -0,0 +1,177 @@
+<?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>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-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>
+
+        <!--浠g爜鐢熸垚宸ュ叿-->
+        <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>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.alibaba</groupId>
+                    <artifactId>fastjson</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.1.8</version>
+        </dependency>
+
+        <!--  鏁版嵁搴撹璁℃枃妗g敓鎴愬伐鍏�-->
+        <dependency>
+            <groupId>cn.smallbun.screw</groupId>
+            <artifactId>screw-core</artifactId>
+            <version>1.0.5</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.alibaba</groupId>
+                    <artifactId>fastjson</artifactId>
+                </exclusion>
+            </exclusions>
+        </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>
+
+        <!--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>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.33</version>
+        </dependency>
+
+    </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/hangzhoumesParent/common/servicebase/pom.xml b/hangzhoumesParent/common/servicebase/pom.xml
index af93dc5..46c17d9 100644
--- a/hangzhoumesParent/common/servicebase/pom.xml
+++ b/hangzhoumesParent/common/servicebase/pom.xml
@@ -11,13 +11,6 @@
 
     <artifactId>servicebase</artifactId>
 
-<!--    <dependencies>-->
-<!--        <dependency>-->
-<!--            <groupId>com.github.yulichang</groupId>-->
-<!--            <artifactId>mybatis-plus-join</artifactId>-->
-<!--            <version>1.1.6</version>-->
-<!--        </dependency>-->
-<!--    </dependencies>-->
     <properties>
         <maven.compiler.source>8</maven.compiler.source>
         <maven.compiler.target>8</maven.compiler.target>
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/MybatisPlusConfig.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..94e02f0
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/MybatisPlusConfig.java
@@ -0,0 +1,30 @@
+package com.mes.common.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+/**
+ * @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;
+    }
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Swagger2Config.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Swagger2Config.java
new file mode 100644
index 0000000..8a8dca4
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Swagger2Config.java
@@ -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()
+                //鍙樉绀篴pi璺緞涓嬬殑椤甸潰
+                .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()
+                //鍙樉绀篴dmin璺緞涓嬬殑椤甸潰
+                .apis(RequestHandlerSelectors.basePackage("com.mes"))
+                .paths(PathSelectors.any())
+                .build()
+                .globalOperationParameters(pars);
+    }
+
+    private ApiInfo webApiInfo() {
+        return new ApiInfoBuilder()
+                .title("缃戠珯-API鏂囨。")
+                .description("鏈枃妗f弿杩颁簡mes缃戠珯寰湇鍔℃帴鍙e畾涔�")
+                .version("1.0")
+                .contact(new Contact("zhan_py", "", ""))
+                .build();
+    }
+
+    private ApiInfo adminApiInfo() {
+        return new ApiInfoBuilder()
+                .title("鍚庡彴绠$悊绯荤粺-API鏂囨。")
+                .description("鏈枃妗f弿杩颁簡mes鍚庡彴绯荤粺鏈嶅姟鎺ュ彛瀹氫箟")
+                .version("1.0")
+                .contact(new Contact("zhan_py", "", ""))
+                .build();
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/GlobalExceptionHandler.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/GlobalExceptionHandler.java
new file mode 100644
index 0000000..2d10ece
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/GlobalExceptionHandler.java
@@ -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 {
+    /**
+     * 濡傛灉鏄痵erviceExcaption锛屽垯璋冪敤璇ユ柟娉�
+     */
+    @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();
+    }
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/ServiceException.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/ServiceException.java
new file mode 100644
index 0000000..0c9ddbc
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/exception/ServiceException.java
@@ -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();
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/handler/MyMetaObjectHandler.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/handler/MyMetaObjectHandler.java
new file mode 100644
index 0000000..fb96335
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/handler/MyMetaObjectHandler.java
@@ -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);
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PLCAutoMes.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PLCAutoMes.java
new file mode 100644
index 0000000..0d60791
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PLCAutoMes.java
@@ -0,0 +1,88 @@
+package com.mes.device;
+
+import com.mes.tools.InitUtil;
+import org.springframework.context.annotation.Configuration;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class PLCAutoMes extends Thread {
+
+    // 鐢ㄤ簬瀛樺偍搴旂敤绋嬪簭鐨勯厤缃俊鎭�
+    private Configuration config;
+    private static InitUtil initUtil;
+
+
+    // 鍗曚緥瀹炰緥
+    private static PLCAutoMes instance;
+    private static String PlcMes = PLCAutoMes.class.getResource("/JsonFile/PlcMes.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 PlcBitObject plcPlcAlarm = initUtil.initbit(PlcAlarm);
+    public static PlcParameterObject PlcMesObject = initUtil.initword(PlcMes);
+    public static PlcParameterObject PlcReadObject = initUtil.initword(PlcRead);
+    public static PlcParameterObject PlcframeObject = initUtil.initword(Plcframe);
+
+    // 绉佹湁鏋勯�犲嚱鏁�
+    public PLCAutoMes() throws IOException {
+
+        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);
+            InitUtil.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));
+
+        }
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcBitInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcBitInfo.java
new file mode 100644
index 0000000..3fefdac
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcBitInfo.java
@@ -0,0 +1,75 @@
+package com.mes.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;
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcBitObject.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcBitObject.java
new file mode 100644
index 0000000..2a86a0f
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcBitObject.java
@@ -0,0 +1,141 @@
+package com.mes.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 鏁版嵁鍖� 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    public int getPlcAddressLength() {
+        return plcAddressLength;
+    }
+
+    /**
+     * @return 璁剧疆锛氭暟鎹尯 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    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璇诲彇鍥炴潵鐨刡yte绫诲瀷鏁版嵁闆嗗悎
+     */
+    public void setPlcBitList(List<Boolean> plcValueArray) {
+        if (plcBitList != null) {
+            for (PlcBitInfo plcbitInfo : plcBitList) {
+                plcbitInfo.setValue(plcValueArray.get(plcbitInfo.getAddressIndex()));
+            }
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterInfo.java
new file mode 100644
index 0000000..15fa1e7
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterInfo.java
@@ -0,0 +1,130 @@
+package com.mes.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 + "-" + newIndex;
+        }
+        return null;
+    }
+
+    public int getPlcAddress() {
+
+        return addressIndex;
+    }
+
+    public String getAddress() {
+        return getAddress(this.addressIndex);
+    }
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java
new file mode 100644
index 0000000..10a3b2f
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java
@@ -0,0 +1,196 @@
+package com.mes.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 鏁版嵁鍖� 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    public int getPlcAddressLength() {
+        return plcAddressLength;
+    }
+
+    /**
+     * @return 璁剧疆锛氭暟鎹尯 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    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璇诲彇鍥炴潵鐨刡yte绫诲瀷鏁版嵁闆嗗悎
+     */
+    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绫诲瀷杞琤yte[]
+     *
+     * @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[]绫诲瀷杞瑂hort
+     *
+     * @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;
+    }
+
+
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeDetailController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeDetailController.java
new file mode 100644
index 0000000..c1d3a8e
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeDetailController.java
@@ -0,0 +1,20 @@
+package com.mes.pp.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+@RestController
+@RequestMapping("/userinfo/optimize-detail")
+public class OptimizeDetailController {
+
+}
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeLayoutController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeLayoutController.java
new file mode 100644
index 0000000..65b9a8b
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeLayoutController.java
@@ -0,0 +1,20 @@
+package com.mes.pp.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+@RestController
+@RequestMapping("/userinfo/optimize-layout")
+public class OptimizeLayoutController {
+
+}
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java
index 4309548..43fd1d7 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java
@@ -8,7 +8,10 @@
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
 
@@ -37,15 +40,12 @@
         return Result.build(200, "", glass);
     }
 
-    @ApiOperation("淇濆瓨宸ョ▼淇℃伅")
-    @PostMapping("/saveProject") //鏄剧ず宸ョ▼閫夋嫨淇℃伅
-    public Result<List<OptimizeProject>> saveProject(@RequestBody OptimizeRequest optimizeRequest) {
-        log.info("鑾峰彇閫夋嫨濂界殑宸ョ▼id杩涜鏌ヨ鏁版嵁鍚庝繚瀛�");
-        List<OptimizeProject> glass = optimizeProjectService.saveProject(optimizeRequest);
-        log.info("鏄剧ず宸ョ▼閫夋嫨淇℃伅鍚庤繘琛屼繚瀛�:{}", glass);
-        //void insetProject(glass);
-        return Result.build(200, "", glass);
-    }
+//    public Result<List<OptimizeProject>> saveProject(@RequestBody OptimizeRequest optimizeRequest) {
+//        log.info("灏嗚姹傚弬鏁板皝瑁呭湪璇锋眰绫婚噷闈�");
+//        List<OptimizeProject> glass = optimizeProjectService.saveProject(optimizeRequest);
+//        log.info("鏄剧ず宸ョ▼閫夋嫨淇℃伅:{}", glass);
+//        return Result.build(200, "", glass);
+//    }
 
 }
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeDetail.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeDetail.java
new file mode 100644
index 0000000..ba5ea47
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeDetail.java
@@ -0,0 +1,123 @@
+package com.mes.pp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OptimizeDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 宸ョ▼鍙�
+     */
+    private String projectNo;
+
+    /**
+     * 娴佺▼鍗″彿
+     */
+    private String processId;
+
+    /**
+     * 灞�
+     */
+    private Integer layer;
+
+    /**
+     * 搴忓彿
+     */
+    private Integer orderSort;
+
+    /**
+     * 鐗堝浘id
+     */
+    private Integer stockId;
+
+    /**
+     * 鐗堝浘搴�
+     */
+    private Integer stockNumber;
+
+    /**
+     * 鍥惧彿
+     */
+    private Integer graphNo;
+
+    /**
+     * 灏忕墖缂栧彿
+     */
+    private String glassId;
+
+    /**
+     * 灏忕墖ID
+     */
+    private Integer polysId;
+
+    /**
+     * 灏忕墖瀹斤紙鍔犵(閲忥級
+     */
+    private Double pWidth;
+
+    /**
+     * 灏忕墖楂橈紙鍔犵(閲忥級
+     */
+    private Double pHeight;
+
+    /**
+     * 灏忕墖瀹�
+     */
+    private Double width;
+
+    /**
+     * 灏忕墖楂�
+     */
+    private Double height;
+
+    /**
+     * x鍧愭爣
+     */
+    private Double xAxis;
+
+    /**
+     * y鍧愭爣
+     */
+    private Double yAxis;
+
+    /**
+     * 閽㈠寲鐗堝浘缂栧彿(鏋跺彿)
+     */
+    private Integer heatLayoutId;
+
+    private String h;
+
+    private String g;
+
+    private String r;
+
+    private String glassPoint;
+
+    @TableField("intRemark")
+    private Integer intremark;
+
+    @TableField("strRemark")
+    private String strremark;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeLayout.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeLayout.java
new file mode 100644
index 0000000..75e4d99
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeLayout.java
@@ -0,0 +1,106 @@
+package com.mes.pp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OptimizeLayout implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 宸ョ▼鍙�
+     */
+    private String projectNo;
+
+    /**
+     * 鍘熺墖ID
+     */
+    private Integer stockId;
+
+    private Double width;
+
+    private Double height;
+
+    private Double realwidth;
+
+    private Double realheight;
+
+    /**
+     * 鍒囪鐜�
+     */
+    private String usageRate;
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    private String stockCode;
+
+    /**
+     * 涓婁慨杈�
+     */
+    private String upTrim;
+
+    /**
+     * 涓�
+     */
+    private String downTrim;
+
+    /**
+     * 宸�
+     */
+    private String leftTrim;
+
+    /**
+     * 鍙�
+     */
+    private String rightTrim;
+
+    /**
+     * 鏁伴噺
+     */
+    private Integer count;
+
+    /**
+     * 灏忕墖鏁�
+     */
+    private String glassCount;
+
+    /**
+     * 灏忕墖闈㈢Н
+     */
+    private String glassArea;
+
+    /**
+     * 鍒涘缓浜�
+     */
+    private Integer creater;
+
+    private Date createTime;
+
+    @TableField("intRemark")
+    private Integer intremark;
+
+    @TableField("strRemark")
+    private String strremark;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeProject.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeProject.java
new file mode 100644
index 0000000..beb015c
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeProject.java
@@ -0,0 +1,205 @@
+package com.mes.pp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OptimizeProject implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鑷锛�<浼樺寲-宸ョ▼>
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 宸ョ▼缂栧彿
+     */
+    private String projectNo;
+
+    /**
+     * 宸ョ▼椤圭洰鍚�
+     */
+    private String projectName;
+
+    /**
+     * 鐜荤拑鑶滅郴
+     */
+    private String glassType;
+
+    /**
+     * 鐜荤拑鍘氬害
+     */
+    private String glassThickness;
+
+    /**
+     * 宸ョ▼绉嶇被
+     */
+    private Integer type;
+
+    /**
+     * 鐘舵�侊細	-2鍒犻櫎锛�	-1榛樿锛�		1娴佺▼鍗″垱寤猴紱	2绗竴娆′紭鍖栦繚瀛�;		10閽㈠寲鎺ㄨ崘鍒涘缓淇濆瓨锛�	20浼樺寲缁撴灉淇濆瓨
+     */
+    private Integer state;
+
+    /**
+     * 鎬绘暟
+     */
+    private Integer glassTotal;
+
+    /**
+     * 鎬婚潰绉�
+     */
+    private Double glassTotalArea;
+
+    /**
+     * 娴佺▼鍗℃暟閲�
+     */
+    private Integer processQty;
+
+    /**
+     * 寰幆钀芥灦鏁�
+     */
+    private Integer guidance;
+
+    /**
+     * 绗竴娆′娇鐢ㄥ師鏂欐暟
+     */
+    private Integer fristStockQty;
+
+    /**
+     * 绗竴娆″钩鍧囧垏瑁佺巼
+     */
+    private String fristCutPct;
+
+    /**
+     * 浣跨敤鐨勫師鏂欐暟
+     */
+    private Integer rawStockQty;
+
+    /**
+     * 浣跨敤鐨勫師鏂欓潰绉�
+     */
+    private String rawStockArea;
+
+    /**
+     * 骞冲潎鍒囪鐜�
+     */
+    private String avgCutPct;
+
+    /**
+     * 鏈夋晥鍒囪鐜�
+     */
+    private String validCutPct;
+
+    /**
+     * 灏剧墖鍒囪鐜�
+     */
+    private String lastCutPct;
+
+    /**
+     * g娣锋帓绋嬪害
+     */
+    private String chaosPct;
+
+    /**
+     * g鏈�澶ц杞界巼
+     */
+    private String maxLoadPct;
+
+    /**
+     * g鏈�澶ч潰绉�
+     */
+    private String maxArea;
+
+    /**
+     * g鏈�澶ф暟閲�
+     */
+    private Integer maxQty;
+
+    /**
+     * g涓婄墖瀹�
+     */
+    private Float loadWidth;
+
+    /**
+     * g涓婄墖闀�
+     */
+    private Float loadLength;
+
+    /**
+     * x闂撮殧
+     */
+    private Float xSpace;
+
+    /**
+     * y闂撮殧
+     */
+    private Float ySpace;
+
+    /**
+     * g骞冲潎瑁呰浇鐜�
+     */
+    private Float loadRate;
+
+    /**
+     * 娴佺▼鍗¢泦鍚�
+     */
+    private String processCards;
+
+    /**
+     * g鎬荤倝鏁�
+     */
+    private Integer furnacesQty;
+
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+    /**
+     * 鍒涘缓浜�
+     */
+    private String creater;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    private Date updateTime;
+
+    /**
+     * 棰勭暀锛屼娇鐢ㄩ渶娉ㄦ槑
+     */
+    @TableField("intRemark")
+    private Integer intremark;
+
+    /**
+     * 棰勭暀锛屼娇鐢ㄩ渶娉ㄦ槑
+     */
+    @TableField("strRemark")
+    private String strremark;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/OptimizeRequest.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/OptimizeRequest.java
index c790386..1560554 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/OptimizeRequest.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/OptimizeRequest.java
@@ -8,13 +8,10 @@
  */
 @Data
 public class OptimizeRequest {
-    @ApiParam("")
-    private String projectNo;
 
     @ApiParam("")
     private Integer state;
 
-
+    @ApiParam("")
+    private String projectNo;
 }
-
-
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeDetailMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeDetailMapper.java
new file mode 100644
index 0000000..b73f34e
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeDetailMapper.java
@@ -0,0 +1,18 @@
+package com.mes.pp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.pp.entity.OptimizeDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+@Mapper
+public interface OptimizeDetailMapper extends BaseMapper<OptimizeDetail> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java
new file mode 100644
index 0000000..1cef895
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java
@@ -0,0 +1,18 @@
+package com.mes.pp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.pp.entity.OptimizeLayout;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+@Mapper
+public interface OptimizeLayoutMapper extends BaseMapper<OptimizeLayout> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java
index 7a2c882..be5eec9 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java
@@ -1,12 +1,8 @@
 package com.mes.pp.mapper;
 
-import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.pp.entity.OptimizeProject;
-import com.mes.pp.entity.request.OptimizeRequest;
 import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
 
 /**
  * <p>
@@ -17,7 +13,6 @@
  * @since 2024-04-16
  */
 @Mapper
-@DS("pp")
 public interface OptimizeProjectMapper extends BaseMapper<OptimizeProject> {
-    List<OptimizeProject> saveProject(OptimizeRequest optimizeRequest);
+
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeDetailService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeDetailService.java
new file mode 100644
index 0000000..3cd12bc
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeDetailService.java
@@ -0,0 +1,16 @@
+package com.mes.pp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.pp.entity.OptimizeDetail;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+public interface OptimizeDetailService extends IService<OptimizeDetail> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeLayoutService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeLayoutService.java
new file mode 100644
index 0000000..ec7dc25
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeLayoutService.java
@@ -0,0 +1,16 @@
+package com.mes.pp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.pp.entity.OptimizeLayout;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+public interface OptimizeLayoutService extends IService<OptimizeLayout> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
index 93cd685..c3631d6 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
@@ -21,14 +21,4 @@
      * @return
      */
     List<OptimizeProject> listByState(OptimizeRequest optimizeRequest);
-    /**
-     * 鏌ヨ淇濆瓨鍒板師鐗囦娇鐢ㄨ鎯呰〃鐨勬暟鎹�
-     * @return
-     */
-    List<OptimizeProject> saveProject(OptimizeRequest optimizeRequest);
-    /**
-     * 灏嗗伐绋嬩俊鎭繚瀛樺埌鍘熺墖浣跨敤璇︽儏琛�
-     * @return
-     */
-    void insetProject(OptimizeProject glass);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeDetailServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeDetailServiceImpl.java
new file mode 100644
index 0000000..81df3f4
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeDetailServiceImpl.java
@@ -0,0 +1,22 @@
+package com.mes.pp.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.pp.entity.OptimizeDetail;
+import com.mes.pp.mapper.OptimizeDetailMapper;
+import com.mes.pp.service.OptimizeDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+@Service
+@DS("pp")
+public class OptimizeDetailServiceImpl extends ServiceImpl<OptimizeDetailMapper, OptimizeDetail> implements OptimizeDetailService {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeLayoutServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeLayoutServiceImpl.java
new file mode 100644
index 0000000..4881d52
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeLayoutServiceImpl.java
@@ -0,0 +1,23 @@
+package com.mes.pp.service.impl;
+
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.pp.entity.OptimizeLayout;
+import com.mes.pp.mapper.OptimizeLayoutMapper;
+import com.mes.pp.service.OptimizeLayoutService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-16
+ */
+@Service
+@DS("pp")
+public class OptimizeLayoutServiceImpl extends ServiceImpl<OptimizeLayoutMapper, OptimizeLayout> implements OptimizeLayoutService {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
index e01fd73..abcb098 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
@@ -11,7 +11,6 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -32,26 +31,10 @@
     public List<OptimizeProject> listByState(OptimizeRequest optimizeRequest) {
         log.info("灏嗗弬鏁颁紶鍏ュ埌鏌ヨ绫婚噷,宸ョ▼鍙峰仛闈炵┖鍒ゆ柇妯$硦鏌ヨ");
         LambdaQueryWrapper<OptimizeProject> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(OptimizeProject::getState,optimizeRequest.getState())
-                .like(StringUtils.isNotBlank(optimizeRequest.getProjectNo()),OptimizeProject::getProjectNo,optimizeRequest.getProjectNo())
-                //.groupBy(OptimizeProject::getProjectNo)
-        ;
+        wrapper.eq(OptimizeProject::getState, optimizeRequest.getState())
+                .like(StringUtils.isNotBlank(optimizeRequest.getProjectNo()), OptimizeProject::getProjectNo, optimizeRequest.getProjectNo())
+                .groupBy(OptimizeProject::getProjectNo);
         log.info("杩斿洖宸ョ▼淇℃伅");
         return this.list(wrapper);
     }
-
-
-    @Override
-    public void insetProject(OptimizeProject glass) {
-
-    }
-
-    @Override
-    public List<OptimizeProject> saveProject(OptimizeRequest optimizeRequest) {
-        log.info("灏嗗弬鏁颁紶鍏ュ埌鏌ヨ绫婚噷,宸ョ▼鍙峰仛闈炵┖鍒ゆ柇妯$硦鏌ヨ");
-
-        log.info("杩斿洖宸ョ▼淇℃伅");
-        return this.baseMapper.saveProject(optimizeRequest);
-    }
-
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
index a2463c5..218263e 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
@@ -22,7 +22,7 @@
         // 2銆佸叏灞�閰嶇疆
         // 鍏ㄥ眬閰嶇疆
         GlobalConfig gc = new GlobalConfig();
-        gc.setOutputDir("D:\\Documents\\hangzhoumesParent1\\");
+        gc.setOutputDir("D:\\workspace\\hangzhoumesParent1\\");
 
         gc.setServiceName("%sService");	//鍘绘帀Service鎺ュ彛鐨勯瀛楁瘝I
         gc.setAuthor("zhoush");
@@ -50,7 +50,8 @@
         // 5銆佺瓥鐣ラ厤缃�
         StrategyConfig strategy = new StrategyConfig();
 
-        strategy.setInclude("up_patten_usage");
+//        strategy.setInclude("activity_info", "activity_rule", "activity_sku", "coupon_info", "coupon_range",
+//                "coupon_use");
 
         strategy.setNaming(NamingStrategy.underline_to_camel);//鏁版嵁搴撹〃鏄犲皠鍒板疄浣撶殑鍛藉悕绛栫暐
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java
new file mode 100644
index 0000000..07a4c33
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/DatabaseDesignDocUtil.java
@@ -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("鏁版嵁搴撹璁℃枃妗g敓鎴�")
+                //鏁版嵁婧�
+                .dataSource(dataSource)
+                //鐢熸垚閰嶇疆
+                .engineConfig(engineConfig)
+                //鐢熸垚閰嶇疆
+                .produceConfig(processConfig)
+                .build();
+        //鎵ц鐢熸垚
+        new DocumentationExecute(config).execute();
+    }
+
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/InitUtil.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/InitUtil.java
new file mode 100644
index 0000000..0bf1a9f
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/InitUtil.java
@@ -0,0 +1,127 @@
+package com.mes.tools;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import com.mes.device.PlcBitInfo;
+import com.mes.device.PlcBitObject;
+import com.mes.device.PlcParameterInfo;
+import com.mes.device.PlcParameterObject;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class InitUtil {
+    //鍒濆鍖杦ord
+    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;
+    }
+
+    //鍒濆鍖朾it
+    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, 0x03};
+        // byte[] getplcvlues = MockS7PLC.getInstance().readByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
+        plcParameterObject.setPlcParameterList(getplcvlues);
+    }
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java
new file mode 100644
index 0000000..fafbd45
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java
@@ -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);
+        }
+    }
+
+    /**
+     * 鍏抽棴瑗块棬瀛恠7閫氳杩炴帴
+     */
+    public void CloseS7client() {
+        if (s7PLC == null) {
+            s7PLC.close();
+        }
+        s7PLC.checkConnected();
+    }
+
+    /**
+     * s7閫氳杩炴帴鐘舵��
+     */
+    public boolean CheckConnected() {
+        return s7PLC.checkConnected();
+    }
+
+    /**
+     * 鎸夋寚瀹氱殑鍦板潃 鍐欏叆涓�涓獁ord
+     *
+     * @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鐨勫��
+     */
+
+
+    /**
+     * 鎸夋寚瀹氱殑鍦板潃 鍐欏叆涓�涓狟it
+     *
+     * @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) {
+
+        // 鍙互瑙f瀽鍑哄湴鍧�涓殑鏁板瓧閮ㄥ垎锛屽苟杞崲涓烘暣鏁�
+        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;
+        }
+
+    }
+
+    /**
+     * 鎸夋寚瀹氱殑鍦板潃 鎸塨it浣� 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);
+    }
+
+    //璇诲彇涓嶈繛缁瓀ord
+    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+", ""); // 浣跨敤姝e垯琛ㄨ揪寮忔彁鍙栨暟瀛楅儴鍒�
+        return Integer.parseInt(numberStr);
+    }
+
+
+    /**
+     * 浠庢寚瀹氱殑鍦板潃寮�濮� 杩炵画鎸塨it浣嶈鍙�
+     *
+     * @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;
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/MD5.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/MD5.java
new file mode 100644
index 0000000..e0153d2
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/MD5.java
@@ -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"));
+    }
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResponseUtil.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResponseUtil.java
new file mode 100644
index 0000000..ad4f177
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResponseUtil.java
@@ -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();
+        }
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/Result.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/Result.java
new file mode 100644
index 0000000..9b9a681
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/Result.java
@@ -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);
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResultCodeEnum.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResultCodeEnum.java
new file mode 100644
index 0000000..f29b532
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/ResultCodeEnum.java
@@ -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;
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/banner.txt b/hangzhoumesParent/common/servicebase/src/main/resources/banner.txt
new file mode 100644
index 0000000..b4027f0
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/banner.txt
@@ -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                銆�銆�//
\ No newline at end of file
diff --git a/hangzhoumesParent/common/springsecurity/pom.xml b/hangzhoumesParent/common/springsecurity/pom.xml
new file mode 100644
index 0000000..f4e6eed
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/pom.xml
@@ -0,0 +1,38 @@
+<?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>
+            <version>0.9.0</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/RedisConfig.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/RedisConfig.java
new file mode 100644
index 0000000..e469272
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/RedisConfig.java
@@ -0,0 +1,37 @@
+package com.mes.common.config;
+
+import com.mes.common.utils.FastJsonRedisSerializer;
+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.StringRedisSerializer;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/9 19:13
+ * @Description:
+ */
+@Configuration
+public class RedisConfig {
+
+    @Bean
+    @SuppressWarnings(value = {"unchecked", "rawtypes"})
+    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
+        RedisTemplate<Object, Object> template = new RedisTemplate<>();
+        template.setConnectionFactory(connectionFactory);
+
+        FastJsonRedisSerializer serializer = new FastJsonRedisSerializer(Object.class);
+
+        // 浣跨敤StringRedisSerializer鏉ュ簭鍒楀寲鍜屽弽搴忓垪鍖杛edis鐨刱ey鍊�
+        template.setKeySerializer(new StringRedisSerializer());
+        template.setValueSerializer(serializer);
+
+        // Hash鐨刱ey涔熼噰鐢⊿tringRedisSerializer鐨勫簭鍒楀寲鏂瑰紡
+        template.setHashKeySerializer(new StringRedisSerializer());
+        template.setHashValueSerializer(serializer);
+
+        template.afterPropertiesSet();
+        return template;
+    }
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/TokenWebSecurityConfig.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/TokenWebSecurityConfig.java
new file mode 100644
index 0000000..e4a543e
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/config/TokenWebSecurityConfig.java
@@ -0,0 +1,53 @@
+package com.mes.common.config;
+
+
+import com.mes.common.filter.JwtAuthenticationTokenFilter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.AuthenticationManager;
+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.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+@Configuration
+//@EnableWebSecurity
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class TokenWebSecurityConfig extends WebSecurityConfigurerAdapter {
+    @Autowired
+    private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
+
+    @Bean
+    public PasswordEncoder passwordEncoder() {
+        return new BCryptPasswordEncoder();
+    }
+
+    /**
+     * 閰嶇疆杩囨护瑙勫垯
+     */
+    @Override
+    protected void configure(HttpSecurity http) throws Exception {
+        http
+                //鍏抽棴csrf
+                .csrf().disable()
+                //涓嶉�氳繃Session鑾峰彇SecurityContext
+                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
+                .and()
+                .authorizeRequests()
+                // 瀵逛簬鐧诲綍鎺ュ彛 鍏佽鍖垮悕璁块棶
+                .antMatchers("/userinfo/login").anonymous()
+                .antMatchers("/hello").permitAll()
+                // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇�
+                .anyRequest().permitAll();
+//        http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
+    }
+
+    @Bean
+    @Override
+    public AuthenticationManager authenticationManagerBean() throws Exception {
+        return super.authenticationManagerBean();
+    }
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java
new file mode 100644
index 0000000..5be6d66
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java
@@ -0,0 +1,76 @@
+package com.mes.common.filter;
+
+import com.mes.common.utils.JwtUtil;
+import com.mes.common.utils.RedisUtil;
+import com.mes.menu.mapper.SysMenuMapper;
+import com.mes.userinfo.entity.LoginUser;
+import io.jsonwebtoken.Claims;
+import org.springframework.beans.factory.annotation.Autowired;
+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.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import javax.annotation.Resource;
+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.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/10 9:42
+ * @Description:
+ */
+@Component
+public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
+    // 姝ゅ瑙i噴涓轰粈涔堜笉鍘诲疄鐜癋ilter鎺ュ彛锛屽洜涓哄湪鏌愪簺鎯呭喌涓嬩細杩囨护涓ゆ锛屾墽琛屼袱娆ilter閲岄潰鐨勬柟娉曪紝鎵�浠ユ垜浠�夋嫨缁ф壙SpringSecurity涓殑OncePerRequestFilter
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Resource
+    private SysMenuMapper menuMapper;
+
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
+        //鑾峰彇token
+        String token = request.getHeader("token");
+        if (!StringUtils.hasText(token)) {
+            //鏀捐
+            filterChain.doFilter(request, response);
+            return; // 姝ゅ鍔犱笂return濂藉鏄悗闈㈢粨鏋滆繑鍥炵殑鏃跺�欏氨涓嶄細鍐嶈蛋涓�閬嶆杩囨护鍣ㄧ殑鏂规硶浜�
+        }
+        //瑙f瀽token
+        String userid;
+        try {
+            Claims claims = JwtUtil.parseJWT(token);
+            userid = claims.getSubject();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("token闈炴硶");
+        }
+        //浠巖edis涓幏鍙栫敤鎴蜂俊鎭�
+        String redisKey = "login:" + userid;
+        LoginUser loginUser = redisUtil.getCacheObject(redisKey);
+        if (Objects.isNull(loginUser)) {
+            throw new RuntimeException("鐢ㄦ埛鏈櫥褰�");
+        }
+        //瀛樺叆SecurityContextHolder锛屼互渚涘悗闈㈢殑杩囨护鍣ㄤ娇鐢�
+        List<String> permissionKeyList = menuMapper.selectPermsByUserId(Long.parseLong(userid));
+        List<GrantedAuthority> authorities = permissionKeyList.stream().
+                map(SimpleGrantedAuthority::new)
+                .collect(Collectors.toList());
+        UsernamePasswordAuthenticationToken authenticationToken =
+                new UsernamePasswordAuthenticationToken(loginUser, null, authorities);
+        SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+        //鏀捐
+        filterChain.doFilter(request, response);
+    }
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/AccessDeniedHandlerImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/AccessDeniedHandlerImpl.java
new file mode 100644
index 0000000..302ff52
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/AccessDeniedHandlerImpl.java
@@ -0,0 +1,30 @@
+package com.mes.common.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.mes.common.utils.WebUtils;
+import com.mes.utils.Result;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.web.access.AccessDeniedHandler;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/12 10:38
+ * @Description:
+ */
+@Component
+public class AccessDeniedHandlerImpl implements AccessDeniedHandler {
+    @Override
+    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
+        Result result = Result.error(HttpStatus.FORBIDDEN.value(), "鏉冮檺涓嶈冻");
+        String json = JSON.toJSONString(result);
+        WebUtils.renderString(response, json);
+
+    }
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/AuthenticationEntryPointImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/AuthenticationEntryPointImpl.java
new file mode 100644
index 0000000..6cf146f
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/handler/AuthenticationEntryPointImpl.java
@@ -0,0 +1,29 @@
+package com.mes.common.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.mes.common.utils.WebUtils;
+import com.mes.utils.Result;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.AuthenticationEntryPoint;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/12 10:38
+ * @Description:
+ */
+@Component
+public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint {
+    @Override
+    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
+        Result result = Result.error(HttpStatus.UNAUTHORIZED.value(), "璁よ瘉澶辫触璇烽噸鏂扮櫥褰�");
+        String json = JSON.toJSONString(result);
+        WebUtils.renderString(response, json);
+    }
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/FastJsonRedisSerializer.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/FastJsonRedisSerializer.java
new file mode 100644
index 0000000..f8ab417
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/FastJsonRedisSerializer.java
@@ -0,0 +1,55 @@
+package com.mes.common.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.parser.ParserConfig;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.SerializationException;
+
+import java.nio.charset.Charset;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/11 15:28
+ * @Description:
+ */
+public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
+
+    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
+
+    private Class<T> clazz;
+
+    static {
+        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
+    }
+
+    public FastJsonRedisSerializer(Class<T> clazz) {
+        super();
+        this.clazz = clazz;
+    }
+
+    @Override
+    public byte[] serialize(T t) throws SerializationException {
+        if (t == null) {
+            return new byte[0];
+        }
+        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
+    }
+
+    @Override
+    public T deserialize(byte[] bytes) throws SerializationException {
+        if (bytes == null || bytes.length <= 0) {
+            return null;
+        }
+        String str = new String(bytes, DEFAULT_CHARSET);
+
+        return JSON.parseObject(str, clazz);
+    }
+
+
+    protected JavaType getJavaType(Class<?> clazz) {
+        return TypeFactory.defaultInstance().constructType(clazz);
+    }
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/JwtUtil.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/JwtUtil.java
new file mode 100644
index 0000000..8c8f0d9
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/JwtUtil.java
@@ -0,0 +1,120 @@
+package com.mes.common.utils;
+
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.JwtBuilder;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.Base64;
+import java.util.Date;
+import java.util.UUID;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/9 19:15
+ * @Description:
+ */
+public class JwtUtil {
+
+    //鏈夋晥鏈熶负
+    public static final Long JWT_TTL = 60 * 60 * 1000L;// 60 * 60 *1000  涓�涓皬鏃�
+    //璁剧疆绉橀挜鏄庢枃
+    public static final String JWT_KEY = "sangeng";
+
+    public static String getUUID() {
+        String token = UUID.randomUUID().toString().replaceAll("-", "");
+        return token;
+    }
+
+    /**
+     * 鐢熸垚jtw
+     *
+     * @param subject token涓瀛樻斁鐨勬暟鎹紙json鏍煎紡锛�
+     * @return
+     */
+    public static String createJWT(String subject) {
+        JwtBuilder builder = getJwtBuilder(subject, null, getUUID());// 璁剧疆杩囨湡鏃堕棿
+        return builder.compact();
+    }
+
+    /**
+     * 鐢熸垚jtw
+     *
+     * @param subject   token涓瀛樻斁鐨勬暟鎹紙json鏍煎紡锛�
+     * @param ttlMillis token瓒呮椂鏃堕棿
+     * @return
+     */
+    public static String createJWT(String subject, Long ttlMillis) {
+        JwtBuilder builder = getJwtBuilder(subject, ttlMillis, getUUID());// 璁剧疆杩囨湡鏃堕棿
+        return builder.compact();
+    }
+
+    private static JwtBuilder getJwtBuilder(String subject, Long ttlMillis, String uuid) {
+        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
+        SecretKey secretKey = generalKey();
+        long nowMillis = System.currentTimeMillis();
+        Date now = new Date(nowMillis);
+        if (ttlMillis == null) {
+            ttlMillis = JwtUtil.JWT_TTL;
+        }
+        long expMillis = nowMillis + ttlMillis;
+        Date expDate = new Date(expMillis);
+        return Jwts.builder()
+                .setId(uuid)              //鍞竴鐨処D
+                .setSubject(subject)   // 涓婚  鍙互鏄疛SON鏁版嵁
+                .setIssuer("sg")     // 绛惧彂鑰�
+                .setIssuedAt(now)      // 绛惧彂鏃堕棿
+                .signWith(signatureAlgorithm, secretKey) //浣跨敤HS256瀵圭О鍔犲瘑绠楁硶绛惧悕, 绗簩涓弬鏁颁负绉橀挜
+                .setExpiration(expDate);
+    }
+
+    /**
+     * 鍒涘缓token
+     *
+     * @param id
+     * @param subject
+     * @param ttlMillis
+     * @return
+     */
+    public static String createJWT(String id, String subject, Long ttlMillis) {
+        JwtBuilder builder = getJwtBuilder(subject, ttlMillis, id);// 璁剧疆杩囨湡鏃堕棿
+        return builder.compact();
+    }
+
+    public static void main(String[] args) throws Exception {
+        String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJjYWM2ZDVhZi1mNjVlLTQ0MDAtYjcxMi0zYWEwOGIyOTIwYjQiLCJzdWIiOiJzZyIsImlzcyI6InNnIiwiaWF0IjoxNjM4MTA2NzEyLCJleHAiOjE2MzgxMTAzMTJ9.JVsSbkP94wuczb4QryQbAke3ysBDIL5ou8fWsbt_ebg";
+        Claims claims = parseJWT(token);
+        System.out.println(claims);
+    }
+
+    /**
+     * 鐢熸垚鍔犲瘑鍚庣殑绉橀挜 secretKey
+     *
+     * @return
+     */
+    public static SecretKey generalKey() {
+        byte[] encodedKey = Base64.getDecoder().decode(JwtUtil.JWT_KEY);
+        SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
+        return key;
+    }
+
+    /**
+     * 瑙f瀽
+     *
+     * @param jwt
+     * @return
+     * @throws Exception
+     */
+    public static Claims parseJWT(String jwt) throws Exception {
+        SecretKey secretKey = generalKey();
+        return Jwts.parser()
+                .setSigningKey(secretKey)
+                .parseClaimsJws(jwt)
+                .getBody();
+    }
+
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/RedisUtil.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/RedisUtil.java
new file mode 100644
index 0000000..e097010
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/RedisUtil.java
@@ -0,0 +1,220 @@
+package com.mes.common.utils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.BoundSetOperations;
+import org.springframework.data.redis.core.HashOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * spring redis 宸ュ叿绫�
+ **/
+@Component
+public class RedisUtil {
+    @Autowired
+    public RedisTemplate redisTemplate;
+
+    /**
+     * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
+     *
+     * @param key   缂撳瓨鐨勯敭鍊�
+     * @param value 缂撳瓨鐨勫��
+     */
+    public <T> void setCacheObject(final String key, final T value) {
+        redisTemplate.opsForValue().set(key, value);
+    }
+
+    /**
+     * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
+     *
+     * @param key      缂撳瓨鐨勯敭鍊�
+     * @param value    缂撳瓨鐨勫��
+     * @param timeout  鏃堕棿
+     * @param timeUnit 鏃堕棿棰楃矑搴�
+     */
+    public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) {
+        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
+    }
+
+    /**
+     * 璁剧疆鏈夋晥鏃堕棿
+     *
+     * @param key     Redis閿�
+     * @param timeout 瓒呮椂鏃堕棿
+     * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触
+     */
+    public boolean expire(final String key, final long timeout) {
+        return expire(key, timeout, TimeUnit.SECONDS);
+    }
+
+    /**
+     * 璁剧疆鏈夋晥鏃堕棿
+     *
+     * @param key     Redis閿�
+     * @param timeout 瓒呮椂鏃堕棿
+     * @param unit    鏃堕棿鍗曚綅
+     * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触
+     */
+    public boolean expire(final String key, final long timeout, final TimeUnit unit) {
+        return redisTemplate.expire(key, timeout, unit);
+    }
+
+    /**
+     * 鑾峰緱缂撳瓨鐨勫熀鏈璞°��
+     *
+     * @param key 缂撳瓨閿��
+     * @return 缂撳瓨閿�煎搴旂殑鏁版嵁
+     */
+    public <T> T getCacheObject(final String key) {
+        ValueOperations<String, T> operation = redisTemplate.opsForValue();
+        return operation.get(key);
+    }
+
+    /**
+     * 鍒犻櫎鍗曚釜瀵硅薄
+     *
+     * @param key
+     */
+    public boolean deleteObject(final String key) {
+        return redisTemplate.delete(key);
+    }
+
+    /**
+     * 鍒犻櫎闆嗗悎瀵硅薄
+     *
+     * @param collection 澶氫釜瀵硅薄
+     * @return
+     */
+    public long deleteObject(final Collection collection) {
+        return redisTemplate.delete(collection);
+    }
+
+    /**
+     * 缂撳瓨List鏁版嵁
+     *
+     * @param key      缂撳瓨鐨勯敭鍊�
+     * @param dataList 寰呯紦瀛樼殑List鏁版嵁
+     * @return 缂撳瓨鐨勫璞�
+     */
+    public <T> long setCacheList(final String key, final List<T> dataList) {
+        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
+        return count == null ? 0 : count;
+    }
+
+    /**
+     * 鑾峰緱缂撳瓨鐨刲ist瀵硅薄
+     *
+     * @param key 缂撳瓨鐨勯敭鍊�
+     * @return 缂撳瓨閿�煎搴旂殑鏁版嵁
+     */
+    public <T> List<T> getCacheList(final String key) {
+        return redisTemplate.opsForList().range(key, 0, -1);
+    }
+
+    /**
+     * 缂撳瓨Set
+     *
+     * @param key     缂撳瓨閿��
+     * @param dataSet 缂撳瓨鐨勬暟鎹�
+     * @return 缂撳瓨鏁版嵁鐨勫璞�
+     */
+    public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) {
+        BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
+        Iterator<T> it = dataSet.iterator();
+        while (it.hasNext()) {
+            setOperation.add(it.next());
+        }
+        return setOperation;
+    }
+
+    /**
+     * 鑾峰緱缂撳瓨鐨剆et
+     *
+     * @param key
+     * @return
+     */
+    public <T> Set<T> getCacheSet(final String key) {
+        return redisTemplate.opsForSet().members(key);
+    }
+
+    /**
+     * 缂撳瓨Map
+     *
+     * @param key
+     * @param dataMap
+     */
+    public <T> void setCacheMap(final String key, final Map<String, T> dataMap) {
+        if (dataMap != null) {
+            redisTemplate.opsForHash().putAll(key, dataMap);
+        }
+    }
+
+    /**
+     * 鑾峰緱缂撳瓨鐨凪ap
+     *
+     * @param key
+     * @return
+     */
+    public <T> Map<String, T> getCacheMap(final String key) {
+        return redisTemplate.opsForHash().entries(key);
+    }
+
+    /**
+     * 寰�Hash涓瓨鍏ユ暟鎹�
+     *
+     * @param key   Redis閿�
+     * @param hKey  Hash閿�
+     * @param value 鍊�
+     */
+    public <T> void setCacheMapValue(final String key, final String hKey, final T value) {
+        redisTemplate.opsForHash().put(key, hKey, value);
+    }
+
+    /**
+     * 鑾峰彇Hash涓殑鏁版嵁
+     *
+     * @param key  Redis閿�
+     * @param hKey Hash閿�
+     * @return Hash涓殑瀵硅薄
+     */
+    public <T> T getCacheMapValue(final String key, final String hKey) {
+        HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
+        return opsForHash.get(key, hKey);
+    }
+
+    /**
+     * 鍒犻櫎Hash涓殑鏁版嵁
+     *
+     * @param key
+     * @param hkey
+     */
+    public void delCacheMapValue(final String key, final String hkey) {
+        HashOperations hashOperations = redisTemplate.opsForHash();
+        hashOperations.delete(key, hkey);
+    }
+
+    /**
+     * 鑾峰彇澶氫釜Hash涓殑鏁版嵁
+     *
+     * @param key   Redis閿�
+     * @param hKeys Hash閿泦鍚�
+     * @return Hash瀵硅薄闆嗗悎
+     */
+    public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) {
+        return redisTemplate.opsForHash().multiGet(key, hKeys);
+    }
+
+    /**
+     * 鑾峰緱缂撳瓨鐨勫熀鏈璞″垪琛�
+     *
+     * @param pattern 瀛楃涓插墠缂�
+     * @return 瀵硅薄鍒楄〃
+     */
+    public Collection<String> keys(final String pattern) {
+        return redisTemplate.keys(pattern);
+    }
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/WebUtils.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/WebUtils.java
new file mode 100644
index 0000000..618144d
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/WebUtils.java
@@ -0,0 +1,30 @@
+package com.mes.common.utils;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/9 19:16
+ * @Description:
+ */
+public class WebUtils {
+    /**
+     * 灏嗗瓧绗︿覆娓叉煋鍒板鎴风
+     *
+     * @param response 娓叉煋瀵硅薄
+     * @param string   寰呮覆鏌撶殑瀛楃涓�
+     * @return null
+     */
+    public static String renderString(HttpServletResponse response, String string) {
+        try {
+            response.setStatus(200);
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+            response.getWriter().print(string);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/config/TokenWebSecurityConfig.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/config/TokenWebSecurityConfig.java
new file mode 100644
index 0000000..610451e
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/config/TokenWebSecurityConfig.java
@@ -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
+//     */
+//    //璁剧疆閫�鍑虹殑鍦板潃鍜宼oken锛宺edis鎿嶄綔鍦板潃
+//    @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/**");
+//    }
+//}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/SecurityUser.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/SecurityUser.java
new file mode 100644
index 0000000..b0f9c1a
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/SecurityUser.java
@@ -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;
+//    }
+//}
+//
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/User.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/User.java
new file mode 100644
index 0000000..2e3ec7e
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/entity/User.java
@@ -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;
+//
+//}
+//
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenAuthFilter.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenAuthFilter.java
new file mode 100644
index 0000000..5b1fd72
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenAuthFilter.java
@@ -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) {
+//        //浠巋eader鑾峰彇token
+//        String token = request.getHeader("token");
+//        if(token != null) {
+//            //浠巘oken鑾峰彇鐢ㄦ埛鍚�
+//            String username = tokenManager.getUserInfoFromToken(token);
+//            //浠巖edis鑾峰彇瀵瑰簲鏉冮檺鍒楄〃
+//            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;
+//    }
+//
+//}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenLoginFilter.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenLoginFilter.java
new file mode 100644
index 0000000..d3f5f4c
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/filter/TokenLoginFilter.java
@@ -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();
+//        //鏍规嵁鐢ㄦ埛鍚嶇敓鎴恡oken
+//        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());
+//    }
+//}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java
new file mode 100644
index 0000000..131b179
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/controller/SysMenuController.java
@@ -0,0 +1,39 @@
+package com.mes.menu.controller;
+
+
+import com.mes.menu.entity.SysMenu;
+import com.mes.menu.service.SysMenuService;
+import com.mes.utils.Result;
+import io.swagger.annotations.ApiModel;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鑿滃崟琛�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@ApiModel("鑾峰彇鑿滃崟淇℃伅")
+@RestController
+@RequestMapping("/menu/sysMenu")
+public class SysMenuController {
+
+    @Autowired
+    SysMenuService sysMenuService;
+
+    @ApiOperation("鑾峰彇鐢ㄦ埛鏈夋潈闄愮殑鎵�鏈夎彍鍗�")
+    @GetMapping("/list")
+    public Result<List<SysMenu>> getMenuTree() {
+        return Result.success(sysMenuService.getMenuTree());
+    }
+
+}
+
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java
new file mode 100644
index 0000000..9ae6597
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java
@@ -0,0 +1,82 @@
+package com.mes.menu.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SysMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鑷id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鐖秈d
+     */
+    private Integer parentId;
+
+    /**
+     * 妯″潡鍚嶇О
+     */
+    private String menuName;
+
+    /**
+     * 鍥炬爣
+     */
+    private String icon;
+
+    /**
+     * 鍦板潃
+     */
+    private String url;
+
+    /**
+     * 璇█绫诲瀷
+     */
+    private String languageType;
+
+    /**
+     * 鐘舵��
+     */
+    private Integer status;
+
+    /**
+     * 鎺掑簭
+     */
+    private String listSort;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date createTime;
+
+    /**
+     * 瀛愯彍鍗�
+     */
+    @TableField(exist = false)
+    private List<SysMenu> children;
+
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java
new file mode 100644
index 0000000..04fd616
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java
@@ -0,0 +1,21 @@
+package com.mes.menu.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.menu.entity.SysMenu;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鑿滃崟琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@Mapper
+public interface SysMenuMapper extends BaseMapper<SysMenu> {
+
+    List<String> selectPermsByUserId(long parseLong);
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/SysMenuService.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/SysMenuService.java
new file mode 100644
index 0000000..3b77a2e
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/SysMenuService.java
@@ -0,0 +1,19 @@
+package com.mes.menu.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.menu.entity.SysMenu;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鑿滃崟琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+public interface SysMenuService extends IService<SysMenu> {
+
+    List<SysMenu> getMenuTree();
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java
new file mode 100644
index 0000000..8527a36
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java
@@ -0,0 +1,67 @@
+package com.mes.menu.service.impl;
+
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.menu.entity.SysMenu;
+import com.mes.menu.mapper.SysMenuMapper;
+import com.mes.menu.service.SysMenuService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鑿滃崟琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@Service
+@Slf4j
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
+
+    @Override
+    public List<SysMenu> getMenuTree() {
+        List<SysMenu> menuList = this.baseMapper.selectList(null);
+        return create(menuList);
+    }
+
+
+    /**
+     * 灏嗘暟鎹簱涓煡璇㈠嚭鏉ョ殑list闆嗗悎浼犲叆姝ゆ柟娉曞嵆鍙幏寰楁帓鎴愭爲褰㈢粨鏋勭殑list闆嗗悎
+     *
+     * @param lists
+     * @return
+     */
+    public List<SysMenu> create(List<SysMenu> lists) {
+        List<SysMenu> deptTreeList = lists.stream()
+                .filter(item -> item.getParentId() == 0)
+                .map(item -> {
+                    item.setChildren(getChildren(item, lists));
+                    return item;
+                }).collect(Collectors.toList());
+        return deptTreeList;
+    }
+
+    /**
+     * 姝ゆ柟娉曞皢琚�掑綊璋冪敤
+     *
+     * @param menu
+     * @param menus
+     * @return
+     */
+    private List<SysMenu> getChildren(SysMenu menu, List<SysMenu> menus) {
+        List<SysMenu> res = menus.stream()
+                .filter(item -> item.getParentId().equals(menu.getId()))
+                .map(item -> {
+                    item.setChildren(getChildren(item, menus));
+                    return item;
+                }).collect(Collectors.toList());
+        log.info("鑿滃崟鏍�:{}", JSONUtil.toJsonStr(res));
+        return res;
+    }
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java
new file mode 100644
index 0000000..943ff7d
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java
@@ -0,0 +1,20 @@
+package com.mes.role.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 瑙掕壊琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@RestController
+@RequestMapping("/role/sys-role")
+public class SysRoleController {
+
+}
+
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleMenuController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleMenuController.java
new file mode 100644
index 0000000..77b3175
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleMenuController.java
@@ -0,0 +1,20 @@
+package com.mes.role.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@RestController
+@RequestMapping("/role/sys-role-menu")
+public class SysRoleMenuController {
+
+}
+
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRole.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRole.java
new file mode 100644
index 0000000..14fd4a3
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRole.java
@@ -0,0 +1,50 @@
+package com.mes.role.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-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private String name;
+
+    /**
+     * 瑙掕壊鏉冮檺瀛楃涓�
+     */
+    private String roleKey;
+
+    /**
+     * 瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛�
+     */
+    private String status;
+
+    /**
+     * 鍒犻櫎鏍囧織
+     */
+    private Integer delFlag;
+
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRoleMenu.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRoleMenu.java
new file mode 100644
index 0000000..e69af40
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/entity/SysRoleMenu.java
@@ -0,0 +1,36 @@
+package com.mes.role.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-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysRoleMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 瑙掕壊ID
+     */
+    @TableId(value = "role_id", type = IdType.AUTO)
+    private Long roleId;
+
+    /**
+     * 鑿滃崟id
+     */
+    private Long menuId;
+
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java
new file mode 100644
index 0000000..4a549d3
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java
@@ -0,0 +1,18 @@
+package com.mes.role.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.role.entity.SysRole;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 瑙掕壊琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@Mapper
+public interface SysRoleMapper extends BaseMapper<SysRole> {
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java
new file mode 100644
index 0000000..451d7fe
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java
@@ -0,0 +1,18 @@
+package com.mes.role.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.role.entity.SysRoleMenu;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@Mapper
+public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMapper.xml b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMapper.xml
new file mode 100644
index 0000000..9a0cd27
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.role.mapper.SysRoleMapper">
+
+</mapper>
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMenuMapper.xml b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMenuMapper.xml
new file mode 100644
index 0000000..af0749b
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/xml/SysRoleMenuMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.role.mapper.SysRoleMenuMapper">
+
+</mapper>
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleMenuService.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleMenuService.java
new file mode 100644
index 0000000..e4d23dc
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleMenuService.java
@@ -0,0 +1,16 @@
+package com.mes.role.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.role.entity.SysRoleMenu;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+public interface SysRoleMenuService extends IService<SysRoleMenu> {
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleService.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleService.java
new file mode 100644
index 0000000..6f89b19
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/SysRoleService.java
@@ -0,0 +1,16 @@
+package com.mes.role.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.role.entity.SysRole;
+
+/**
+ * <p>
+ * 瑙掕壊琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+public interface SysRoleService extends IService<SysRole> {
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleMenuServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleMenuServiceImpl.java
new file mode 100644
index 0000000..4c8a475
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleMenuServiceImpl.java
@@ -0,0 +1,20 @@
+package com.mes.role.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.role.entity.SysRoleMenu;
+import com.mes.role.mapper.SysRoleMenuMapper;
+import com.mes.role.service.SysRoleMenuService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@Service
+public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuMapper, SysRoleMenu> implements SysRoleMenuService {
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java
new file mode 100644
index 0000000..5b78836
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java
@@ -0,0 +1,20 @@
+package com.mes.role.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.role.entity.SysRole;
+import com.mes.role.mapper.SysRoleMapper;
+import com.mes.role.service.SysRoleService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 瑙掕壊琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@Service
+public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/DefaultPasswordEncoder.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/DefaultPasswordEncoder.java
new file mode 100644
index 0000000..fe7efc7
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/DefaultPasswordEncoder.java
@@ -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()));
+//    }
+//}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenLogoutHandler.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenLogoutHandler.java
new file mode 100644
index 0000000..e696abc
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenLogoutHandler.java
@@ -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 浠巋eader閲岄潰鑾峰彇token
+//        //2 token涓嶄负绌猴紝绉婚櫎token锛屼粠redis鍒犻櫎token
+//        String token = request.getHeader("token");
+//        if(token != null) {
+//            //绉婚櫎
+//            tokenManager.removeToken(token);
+//            //浠巘oken鑾峰彇鐢ㄦ埛鍚�
+//            String username = tokenManager.getUserInfoFromToken(token);
+//            redisTemplate.delete(username);
+//        }
+//        ResponseUtil.out(response, Result.success());
+//    }
+//}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenManager.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenManager.java
new file mode 100644
index 0000000..61cf3ee
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/TokenManager.java
@@ -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鏍规嵁鐢ㄦ埛鍚嶇敓鎴恡oken
+//    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) { }
+//}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/UnauthEntryPoint.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/UnauthEntryPoint.java
new file mode 100644
index 0000000..bc09439
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/security/UnauthEntryPoint.java
@@ -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());
+//    }
+//}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java
new file mode 100644
index 0000000..326e4d0
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java
@@ -0,0 +1,35 @@
+package com.mes.userinfo.controller;
+
+
+import com.mes.userinfo.entity.SysUser;
+import com.mes.userinfo.service.SysUserService;
+import com.mes.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 鐢ㄦ埛琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@RestController
+@RequestMapping("/userinfo")
+public class SysUserController {
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @PostMapping("/login")
+    public Result login(@RequestBody SysUser user) {
+        return sysUserService.login(user);
+    }
+
+    @GetMapping("/hello")
+    public Result hello() {
+        return Result.success("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJlZjMyMjQ4NDcyODE0ZWFlYWRlOTBkYmZjYWFlZmNmZSIsInN1YiI6IjEiLCJpc3MiOiJzZyIsImlhdCI6MTcxMjkwMjI0NCwiZXhwIjoxNzEyOTA1ODQ0fQ.DlJkhkiwjZSqprdLzKaTB3yuyxGukerKeF0FbJK_6HY");
+    }
+}
+
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserRoleController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserRoleController.java
new file mode 100644
index 0000000..8d6e6a7
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserRoleController.java
@@ -0,0 +1,20 @@
+package com.mes.userinfo.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@RestController
+@RequestMapping("/userinfo/sys-user-role")
+public class SysUserRoleController {
+
+}
+
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/LoginUser.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/LoginUser.java
new file mode 100644
index 0000000..d60a05f
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/LoginUser.java
@@ -0,0 +1,94 @@
+package com.mes.userinfo.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/11 15:46
+ * @Description:
+ */
+public class LoginUser implements UserDetails {
+
+
+    private SysUser user;
+
+    /**
+     * 瀛樺偍鏉冮檺淇℃伅
+     */
+    @JSONField(serialize = false)
+    private List<String> permissions;
+
+    /**
+     * 瀛樺偍SpringSecurity璋冪敤getAuthorities()鏂规硶鑾峰彇鐨勬潈闄愪俊鎭殑闆嗗悎
+     */
+    @JSONField(serialize = false)
+    private List<GrantedAuthority> authorities;
+
+
+    public LoginUser() {
+    }
+
+    public LoginUser(SysUser user, List<String> permissions) {
+        this.user = user;
+        this.permissions = permissions;
+    }
+
+    public SysUser getUser() {
+        return user;
+    }
+
+    public void setUser(SysUser user) {
+        this.user = user;
+    }
+
+    @Override
+    public Collection<? extends GrantedAuthority> getAuthorities() {
+
+        // 浼樺寲涓哄彧闇�瑕佺涓�娆¤幏鍙栫殑鏃跺�欒繘琛岄亶鍘嗭紝鍚庨潰鍐嶇敤灏变細浠巃uthorities杩欎釜鎴愬憳鍙橀噺涓幏鍙栦簡锛屼笉浼氬啀杩涜Stream寰幆閬嶅巻浜�
+        if (authorities != null) {
+            return authorities;
+        }
+        //鎶妏ermissions涓瓧绗︿覆绫诲瀷鐨勬潈闄愪俊鎭浆鎹㈡垚GrantedAuthority瀵硅薄瀛樺叆authorities涓�
+        authorities = permissions.stream().
+                map(SimpleGrantedAuthority::new)
+                .collect(Collectors.toList());
+        return authorities;
+    }
+
+    @Override
+    public String getPassword() {
+        return user.getPassword();
+    }
+
+    @Override
+    public String getUsername() {
+        return user.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;
+    }
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/SysUser.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/SysUser.java
new file mode 100644
index 0000000..dcb8384
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/SysUser.java
@@ -0,0 +1,66 @@
+package com.mes.userinfo.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-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鐢ㄦ埛鍚�
+     */
+    private String userName;
+
+    /**
+     * 鏄电О
+     */
+    private String nickName;
+
+    /**
+     * 瀵嗙爜
+     */
+    private String password;
+
+    /**
+     * 璐﹀彿鐘舵�侊紙0姝e父 1鍋滅敤锛�
+     */
+    private String status;
+
+    /**
+     * 澶村儚
+     */
+    private String avatar;
+
+    /**
+     * 鐢ㄦ埛绫诲瀷锛�0绠$悊鍛橈紝1鏅�氱敤鎴凤級
+     */
+    private String userType;
+
+    /**
+     * 鍒犻櫎鏍囧織
+     */
+    private Integer delFlag;
+
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/SysUserRole.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/SysUserRole.java
new file mode 100644
index 0000000..4d76c57
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/entity/SysUserRole.java
@@ -0,0 +1,36 @@
+package com.mes.userinfo.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-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysUserRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鐢ㄦ埛id
+     */
+    @TableId(value = "user_id", type = IdType.AUTO)
+    private Long userId;
+
+    /**
+     * 瑙掕壊id
+     */
+    private Long roleId;
+
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserMapper.java
new file mode 100644
index 0000000..093812d
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserMapper.java
@@ -0,0 +1,18 @@
+package com.mes.userinfo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.userinfo.entity.SysUser;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢ㄦ埛琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@Mapper
+public interface SysUserMapper extends BaseMapper<SysUser> {
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserRoleMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserRoleMapper.java
new file mode 100644
index 0000000..c40b16f
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserRoleMapper.java
@@ -0,0 +1,18 @@
+package com.mes.userinfo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.userinfo.entity.SysUserRole;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@Mapper
+public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/xml/SysUserMapper.xml b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/xml/SysUserMapper.xml
new file mode 100644
index 0000000..300e913
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/xml/SysUserMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.userinfo.mapper.SysUserMapper">
+
+</mapper>
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/xml/SysUserRoleMapper.xml b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/xml/SysUserRoleMapper.xml
new file mode 100644
index 0000000..0fd2be9
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/xml/SysUserRoleMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.userinfo.mapper.SysUserRoleMapper">
+
+</mapper>
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/SysUserRoleService.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/SysUserRoleService.java
new file mode 100644
index 0000000..0992b6c
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/SysUserRoleService.java
@@ -0,0 +1,16 @@
+package com.mes.userinfo.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.userinfo.entity.SysUserRole;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+public interface SysUserRoleService extends IService<SysUserRole> {
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/SysUserService.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/SysUserService.java
new file mode 100644
index 0000000..ca49aa0
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/SysUserService.java
@@ -0,0 +1,20 @@
+package com.mes.userinfo.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.userinfo.entity.SysUser;
+import com.mes.utils.Result;
+
+/**
+ * <p>
+ * 鐢ㄦ埛琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+public interface SysUserService extends IService<SysUser> {
+
+    Result login(SysUser user);
+
+    Result logout();
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserRoleServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserRoleServiceImpl.java
new file mode 100644
index 0000000..baa93c2
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserRoleServiceImpl.java
@@ -0,0 +1,20 @@
+package com.mes.userinfo.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.userinfo.entity.SysUserRole;
+import com.mes.userinfo.mapper.SysUserRoleMapper;
+import com.mes.userinfo.service.SysUserRoleService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@Service
+public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService {
+
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java
new file mode 100644
index 0000000..f6207b7
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java
@@ -0,0 +1,89 @@
+package com.mes.userinfo.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.common.utils.JwtUtil;
+import com.mes.common.utils.RedisUtil;
+import com.mes.menu.mapper.SysMenuMapper;
+import com.mes.userinfo.entity.LoginUser;
+import com.mes.userinfo.entity.SysUser;
+import com.mes.userinfo.mapper.SysUserMapper;
+import com.mes.userinfo.service.SysUserService;
+import com.mes.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 鐢ㄦ埛琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-11
+ */
+@Service
+public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService, UserDetailsService {
+
+    @Autowired
+    private AuthenticationManager authenticationManager;
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Resource
+    private SysMenuMapper sysMenuMapper;
+
+    @Override
+    public Result login(SysUser user) {
+        UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUserName(), user.getPassword());
+        Authentication authenticate = authenticationManager.authenticate(authenticationToken);
+        if (Objects.isNull(authenticate)) {
+            throw new RuntimeException("鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒");
+        }
+        //浣跨敤userid鐢熸垚token
+        LoginUser loginUser = (LoginUser) authenticate.getPrincipal();
+        String userId = loginUser.getUser().getId().toString();
+        String jwt = JwtUtil.createJWT(userId);
+        //authenticate瀛樺叆redis
+        redisUtil.setCacheObject("login:" + userId, loginUser);
+        //鎶妕oken鍝嶅簲缁欏墠绔�
+        HashMap<String, String> map = new HashMap<>();
+        map.put("token", jwt);
+        return Result.success(map);
+    }
+
+    @Override
+    public Result logout() {
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+        Long userid = loginUser.getUser().getId();
+        redisUtil.deleteObject("login:" + userid);
+        return Result.success("閫�鍑烘垚鍔�");
+    }
+
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+        LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(SysUser::getUserName, username);
+        SysUser user = this.baseMapper.selectOne(lqw);
+        //鍒ゆ柇鏄惁涓虹┖
+        if (Objects.isNull(user)) {
+            throw new RuntimeException("鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒");
+        }
+        //鏌ヨ鏉冮檺淇℃伅
+        List<String> perms = sysMenuMapper.selectPermsByUserId(user.getId());
+
+        return new LoginUser(user, perms);
+    }
+}
diff --git a/hangzhoumesParent/common/springsecurity/src/main/resources/application.yml b/hangzhoumesParent/common/springsecurity/src/main/resources/application.yml
new file mode 100644
index 0000000..d5978be
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/resources/application.yml
@@ -0,0 +1,25 @@
+server:
+  port: 8089
+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: 10.153.19.150:8848
+  application:
+    name: security
+  redis:
+    database: 0
+    host: 10.153.19.150
+    port: 6379
+    password:
+  session:
+    store-type: redis
+mybatis-plus:
+  mapper-locations: classpath*:mapper/*.xml
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
diff --git a/hangzhoumesParent/common/springsecurity/src/main/resources/mapper/SysMenuMapper.xml b/hangzhoumesParent/common/springsecurity/src/main/resources/mapper/SysMenuMapper.xml
new file mode 100644
index 0000000..38607e4
--- /dev/null
+++ b/hangzhoumesParent/common/springsecurity/src/main/resources/mapper/SysMenuMapper.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.menu.mapper.SysMenuMapper">
+
+    <select id="selectPermsByUserId" resultType="java.lang.String">
+        SELECT DISTINCT m.perms
+        FROM sys_user_role ur
+                 LEFT JOIN sys_role r ON ur.role_id = r.id
+                 LEFT JOIN sys_role_menu rm ON ur.role_id = rm.role_id
+                 LEFT JOIN sys_menu m ON m.id = rm.menu_id
+        WHERE user_id = #{userid}
+          AND r.status = 0
+          AND m.status = 0
+    </select>
+</mapper>
diff --git a/hangzhoumesParent/gateway/pom.xml b/hangzhoumesParent/gateway/pom.xml
new file mode 100644
index 0000000..5125cf1
--- /dev/null
+++ b/hangzhoumesParent/gateway/pom.xml
@@ -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>
\ No newline at end of file
diff --git a/hangzhoumesParent/gateway/src/main/java/com/mes/GateWayApplication.java b/hangzhoumesParent/gateway/src/main/java/com/mes/GateWayApplication.java
new file mode 100644
index 0000000..f1b5399
--- /dev/null
+++ b/hangzhoumesParent/gateway/src/main/java/com/mes/GateWayApplication.java
@@ -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);
+    }
+}
diff --git a/hangzhoumesParent/gateway/src/main/java/com/mes/config/MyCorsConfig.java b/hangzhoumesParent/gateway/src/main/java/com/mes/config/MyCorsConfig.java
new file mode 100644
index 0000000..f7f9f8d
--- /dev/null
+++ b/hangzhoumesParent/gateway/src/main/java/com/mes/config/MyCorsConfig.java
@@ -0,0 +1,34 @@
+package com.mes.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.reactive.CorsWebFilter;
+import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/3/25 14:13
+ * @Description:
+ */
+@Configuration
+public class MyCorsConfig {
+    @Bean
+    public CorsWebFilter corsFilter() {
+
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+        CorsConfiguration corsConfiguration = new CorsConfiguration();
+        //鍏佽鍝簺澶磋法鍩�
+        corsConfiguration.addAllowedHeader("*");
+        // 鍏佽鍝簺鏂瑰紡璺ㄥ煙   get  post  delete 绛夋柟寮�
+        corsConfiguration.addAllowedMethod("*");
+        //鍏佽鍝簺璇锋眰鏉ユ簮璺ㄥ煙    *  浠绘剰鏉ユ簮
+        corsConfiguration.addAllowedOrigin("*");
+        // 鏄惁鍏佽鎼哄甫cooker璺ㄥ煙
+        corsConfiguration.setAllowCredentials(true);
+        //娉ㄥ唽璺ㄨ秺閰嶇疆       /**閰嶇疆璇锋眰璺緞
+        source.registerCorsConfiguration("/**", corsConfiguration);
+        return new CorsWebFilter(source);
+    }
+
+}
diff --git a/hangzhoumesParent/gateway/src/main/resources/application.yml b/hangzhoumesParent/gateway/src/main/resources/application.yml
new file mode 100644
index 0000000..1452d31
--- /dev/null
+++ b/hangzhoumesParent/gateway/src/main/resources/application.yml
@@ -0,0 +1,56 @@
+server:
+  port: 88
+spring:
+  application:
+    name: gateway
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 10.153.19.150:8848
+    gateway:
+      discovery:
+        locator:
+          enabled: true
+      routes:
+        - id: cacheGlass
+          uri: lb://cacheGlass
+          predicates:
+            - Path=/api/cacheGlass/**
+          filters:
+            - StripPrefix=2
+
+        - id: cacheVerticalGlass
+          uri: lb://cacheVerticalGlass
+          predicates:
+            - Path=/api/cacheVerticalGlass/**
+          filters:
+            - StripPrefix=2
+
+        - id: loadGlass
+          uri: lb://loadGlass
+          predicates:
+            - Path=/api/loadGlass/**
+          filters:
+            - StripPrefix=2
+
+        - id: temperingGlass
+          uri: lb://temperingGlass
+          predicates:
+            - Path=/api/temperingGlass/**
+          filters:
+            - StripPrefix=2
+
+        - id: unLoadGlass
+          uri: lb://unLoadGlass
+          predicates:
+            - Path=/api/unLoadGlass/**
+          filters:
+            - StripPrefix=2
+
+#        - id: unLoadGlass
+#          uri: lb://unLoadGlass
+#          predicates:
+#            - Path=/unLoadGlass/**
+#          filters:
+#            - RewritePath=/unLoadGlass/(?<segment>.*), /$\{segment}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/pom.xml b/hangzhoumesParent/moduleService/CacheGlassModule/pom.xml
new file mode 100644
index 0000000..81c937a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/pom.xml
@@ -0,0 +1,32 @@
+<?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.github.yulichang</groupId>
+            <artifactId>mybatis-plus-join</artifactId>
+            <version>1.1.6</version>
+        </dependency>
+    </dependencies>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+
+</project>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/CacheGlassModuleApplication.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/CacheGlassModuleApplication.java
new file mode 100644
index 0000000..95a9a73
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/CacheGlassModuleApplication.java
@@ -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());
+        }
+
+    }
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PLCAutoMes.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PLCAutoMes.java
new file mode 100644
index 0000000..a97b2c6
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PLCAutoMes.java
@@ -0,0 +1,95 @@
+package com.mes.common;
+
+
+import java.io.IOException;
+
+import static com.mes.common.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));
+
+        }
+    }
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcBitInfo.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcBitInfo.java
new file mode 100644
index 0000000..fe3439d
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcBitInfo.java
@@ -0,0 +1,76 @@
+package com.mes.common;
+
+
+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;
+    }
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcBitObject.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcBitObject.java
new file mode 100644
index 0000000..4bd20de
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcBitObject.java
@@ -0,0 +1,141 @@
+package com.mes.common;
+
+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 鏁版嵁鍖� 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    public int getPlcAddressLength() {
+        return plcAddressLength;
+    }
+
+    /**
+     * @return 璁剧疆锛氭暟鎹尯 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    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璇诲彇鍥炴潵鐨刡yte绫诲瀷鏁版嵁闆嗗悎
+     */
+    public void setPlcBitList(List<Boolean> plcValueArray) {
+        if (plcBitList != null) {
+            for (PlcBitInfo plcbitInfo : plcBitList) {
+                plcbitInfo.setValue(plcValueArray.get(plcbitInfo.getAddressIndex()));
+            }
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcParameterInfo.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcParameterInfo.java
new file mode 100644
index 0000000..c4d17af
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcParameterInfo.java
@@ -0,0 +1,131 @@
+package com.mes.common;
+
+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);
+    }
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcParameterObject.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcParameterObject.java
new file mode 100644
index 0000000..e06fc12
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/common/PlcParameterObject.java
@@ -0,0 +1,195 @@
+package com.mes.common;
+
+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 鏁版嵁鍖� 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    public int getPlcAddressLength() {
+        return plcAddressLength;
+    }
+
+    /**
+     * @return 璁剧疆锛氭暟鎹尯 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    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璇诲彇鍥炴潵鐨刡yte绫诲瀷鏁版嵁闆嗗悎
+     */
+    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绫诲瀷杞琤yte[]
+     *
+     * @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[]绫诲瀷杞瑂hort
+     *
+     * @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;
+    }
+
+
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
new file mode 100644
index 0000000..702296e
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
@@ -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: 瀹炰緥浠g爜 寰呭垹闄�
+    @ApiOperation("娴嬭瘯")
+    @GetMapping("/index")
+    public String index() {
+        return "hello world";
+    }
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageDetailsController.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageDetailsController.java
new file mode 100644
index 0000000..3fe9ba4
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageDetailsController.java
@@ -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 {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java
new file mode 100644
index 0000000..1e7b87a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCage.java
@@ -0,0 +1,51 @@
+package com.mes.edgstoragecage.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 EdgStorageCage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 纾ㄨ竟鍓嶇悊鐗囩琛╥d
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 璁惧id
+     */
+    private Integer deviceId;
+
+    /**
+     * 鏍呮牸鍙�
+     */
+    private Integer slot;
+
+    /**
+     * 鍚敤鐘舵��
+     */
+    private String enableState;
+
+    /**
+     * 鍓╀綑
+     */
+    private Integer remainWidth;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
index ba1a018..1961c30 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
@@ -2,13 +2,14 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.Serializable;
+
 /**
  * <p>
- * 
+ *
  * </p>
  *
  * @author zhoush
@@ -23,8 +24,8 @@
     /**
      * 纾ㄨ竟鍓嶇悊鐗囩璇︽儏琛╥d
      */
-      @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
 
     /**
      * 璁惧id
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
new file mode 100644
index 0000000..5b857ef
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
@@ -0,0 +1,16 @@
+package com.mes.edgstoragecage.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface EdgStorageCageDetailsMapper extends MPJBaseMapper<EdgStorageCageDetails> {
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java
new file mode 100644
index 0000000..2509b1d
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java
@@ -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> {
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
new file mode 100644
index 0000000..1b2282b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
@@ -0,0 +1,25 @@
+package com.mes.edgstoragecage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface EdgStorageCageDetailsService extends IService<EdgStorageCageDetails> {
+    //鑾峰彇鍏ㄩ儴 纾ㄨ竟鍓嶇紦瀛樼淇℃伅
+    public List<Map> getEdgStorageInfos();
+
+    //淇敼 绗煎唴鏁版嵁
+    public List<Map> setEdgStorageInfos();
+
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
new file mode 100644
index 0000000..84362fe
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
@@ -0,0 +1,36 @@
+package com.mes.edgstoragecage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.edgstoragecage.entity.EdgStorageCage;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface EdgStorageCageService extends IService<EdgStorageCage> {
+
+    //鏌ヨ绗煎唴绌烘牸
+    List<EdgStorageCage> selectCacheEmpty();
+
+    //鏌ヨ绗煎唴鍑虹墖椤哄簭璇︽儏
+    List<EdgStorageCage> selectCacheOut();
+
+    //鏌ヨ绗煎唴璇︽儏
+    List<Map> selectCacheInfos();
+
+    //娣诲姞鐞嗙墖绗间俊鎭�  浼犲叆glassid
+    boolean insertCacheInfo(String glassid);
+
+    //淇敼鐞嗙墖绗煎唴淇℃伅
+    boolean updateCacheInfo(String cacheId);
+
+    //鍒犻櫎鐞嗙墖绗煎唴淇℃伅
+    boolean deleteCacheInfo(String cacheId);
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
new file mode 100644
index 0000000..726adf3
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -0,0 +1,54 @@
+package com.mes.edgstoragecage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.query.MPJQueryWrapper;
+import com.mes.edgstoragecage.entity.EdgStorageCage;
+import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
+import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
+import com.mes.taskcache.mapper.HangzhouMesMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+@Service
+public class EdgStorageCageDetailsServiceImpl extends ServiceImpl<EdgStorageCageDetailsMapper, EdgStorageCageDetails> implements EdgStorageCageDetailsService {
+    //鑾峰彇鍏ㄩ儴鏁版嵁
+    @Autowired
+    private HangzhouMesMapper hangzhouMesMapper;
+    @Autowired
+    private EdgStorageCageDetailsMapper edgStorageCageDetailsMapper;
+
+    //鑾峰彇纾ㄨ竟鍓嶇紦瀛樼悊鐗囩淇℃伅
+    @Override
+    public List<Map> getEdgStorageInfos() {
+        List<Map> map = edgStorageCageDetailsMapper.selectJoinList(
+                Map.class, new MPJQueryWrapper<EdgStorageCage>().selectAll(EdgStorageCage.class)
+                        .select("a.c", "a.d")
+                        .leftJoin("ab a on t.id=a.id")
+                        .le("a.id", "1")
+        );
+        return map;
+    }
+
+    ;
+
+    @Override
+    public List<Map> setEdgStorageInfos() {
+        return hangzhouMesMapper.selectCachInfo();
+    }
+
+    ;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
new file mode 100644
index 0000000..35202ab
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
@@ -0,0 +1,79 @@
+package com.mes.edgstoragecage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.edgstoragecage.entity.EdgStorageCage;
+import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
+import com.mes.edgstoragecage.mapper.EdgStorageCageMapper;
+import com.mes.edgstoragecage.service.EdgStorageCageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+@Service
+public class EdgStorageCageServiceImpl extends ServiceImpl<EdgStorageCageMapper, EdgStorageCage> implements EdgStorageCageService {
+
+    @Autowired
+    EdgStorageCageMapper edgStorageCageMapper;
+    @Autowired
+    EdgStorageCageDetailsMapper edgStorageCageDetailsMapper;
+
+    @Override
+    //鏌ヨ绗煎唴绌烘牸   EdgStorageCage as esc left join EdgStorageCageDetails as escd esc.device_id=escd.device_id
+    public List<EdgStorageCage> selectCacheEmpty() {
+        List<EdgStorageCage> listEdgStorageCage = edgStorageCageMapper.selectList(null);
+        ;
+        List<EdgStorageCageDetails> orderList = listEdgStorageCage.stream()
+                .flatMap(user -> edgStorageCageDetailsMapper.selectList(
+                        new QueryWrapper<EdgStorageCageDetails>().eq("user_id", user.getId())).stream()
+                )
+                .collect(Collectors.toList());
+
+        return listEdgStorageCage;
+    }
+
+    @Override
+    //鏌ヨ绗煎唴鍑虹墖浠诲姟
+    public List<EdgStorageCage> selectCacheOut() {
+        List<EdgStorageCage> list = new ArrayList<EdgStorageCage>();
+        return list;
+    }
+
+    @Override
+    //鐞嗙墖缂撳瓨璇︽儏
+    public List<Map> selectCacheInfos() {
+        List<Map> mapList = new ArrayList<>();
+        return mapList;
+    }
+
+    @Override
+    //娣诲姞鐞嗙墖绗间俊鎭�  浼犲叆glassid
+    public boolean insertCacheInfo(String glassid) {
+        return false;
+    }
+
+    @Override
+    //淇敼鐞嗙墖绗煎唴淇℃伅
+    public boolean updateCacheInfo(String cacheId) {
+        return false;
+    }
+
+    @Override
+    //鍒犻櫎鐞嗙墖绗煎唴淇℃伅
+    public boolean deleteCacheInfo(String cacheId) {
+        return false;
+    }
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java
new file mode 100644
index 0000000..909764f
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java
@@ -0,0 +1,19 @@
+package com.mes.glassinfo.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 {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/entity/GlassInfo.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
new file mode 100644
index 0000000..56eb5a4
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
@@ -0,0 +1,131 @@
+package com.mes.glassinfo.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 GlassInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鐜荤拑淇℃伅琛╥d
+     */
+    @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;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
new file mode 100644
index 0000000..93bbc01
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
@@ -0,0 +1,16 @@
+package com.mes.glassinfo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.glassinfo.entity.GlassInfo;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface GlassInfoMapper extends BaseMapper<GlassInfo> {
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
new file mode 100644
index 0000000..bff5ddd
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
@@ -0,0 +1,23 @@
+package com.mes.glassinfo.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.glassinfo.entity.GlassInfo;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface GlassInfoService extends IService<GlassInfo> {
+
+    public List<GlassInfo> selectAll();
+
+    public List<GlassInfo> selectId(String glassId);
+
+    public List<GlassInfo> selectFlowcardId(String flowcard_id);
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
new file mode 100644
index 0000000..65a8ee5
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -0,0 +1,54 @@
+package com.mes.glassinfo.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.mapper.GlassInfoMapper;
+import com.mes.glassinfo.service.GlassInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+@Service
+public class GlassInfoServiceImpl extends ServiceImpl<GlassInfoMapper, GlassInfo> implements GlassInfoService {
+
+    @Autowired
+    GlassInfoMapper glassInfoMapper;
+
+    //鏍规嵁ID 鑾峰彇灏忕墖鏁版嵁
+    @Override
+    public List<GlassInfo> selectId(String glassId) {
+        QueryWrapper<GlassInfo> queryWrapper = new QueryWrapper<GlassInfo>();
+        queryWrapper.eq("id", glassId);
+        return glassInfoMapper.selectList(queryWrapper);
+    }
+
+    ;
+
+    //鑾峰彇鍏ㄩ儴灏忕墖鏁版嵁
+    @Override
+    public List<GlassInfo> selectAll() {
+        return glassInfoMapper.selectList(null);
+    }
+
+    ;
+
+    //鏍规嵁宸ョ▼ 鑾峰彇灏忕墖鏁版嵁
+    @Override
+    public List<GlassInfo> selectFlowcardId(String flowcardId) {
+        QueryWrapper<GlassInfo> queryWrapper = new QueryWrapper<GlassInfo>();
+        queryWrapper.eq("flowcardId", flowcardId);
+        return glassInfoMapper.selectList(queryWrapper);
+    }
+
+    ;
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
new file mode 100644
index 0000000..37ad945
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
@@ -0,0 +1,81 @@
+package com.mes.taskcache.controller;
+
+import com.mes.taskcache.service.HangzhoumesService;
+import com.mes.taskcache.service.PpService;
+import com.mes.utils.Result;
+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
+ */
+@RestController
+@RequestMapping("/taskCache")
+public class TaskCacheController {
+
+    @Autowired
+    private PpService ppService;
+
+    @Autowired
+    private HangzhoumesService hangzhoumesService;
+
+//    @GetMapping("/SelectTerritoryInfo") // 鏌ヨ閽㈠寲鐗堝浘淇℃伅-鏍规嵁 宸ョ▼鍙�
+//    @ResponseBody
+//    public Result SelectTerritoryInfo(@RequestParam(name = "ProcessId", required = false) String ProcessId) {
+//        List<Tempered> h = ppService.selectTemperedTerritory(ProcessId);
+//        return Result.seccess(h);
+//    }
+
+    @GetMapping("/CutTerritory") // 鏌ヨ鍒囧壊鐗堝浘淇℃伅-鏍规嵁 宸ョ▼鍙�
+    @ResponseBody
+    public Result CutTerritory(String ProcessId) {
+        List<Map> h = ppService.selectCutTerritory(ProcessId);
+        return Result.build(200, "鎴愬姛", h);
+    }
+
+    @GetMapping("/CurrentCutTerritory") // 璇嗗埆鏄剧ず  褰撳墠鐗堝浘
+    @ResponseBody
+    public Result CurrentCutTerritory() {
+        List<Map> h = ppService.selectCutTerritory();
+        System.out.println(h);
+        return Result.build(200, "鎴愬姛", h);
+    }
+
+    @GetMapping("/SelectCutTerritory") // 璇嗗埆鏄剧ず  鐗瑰畾鐗堝浘
+    @ResponseBody
+    public Result SelectCutTerritory(String TerritoryId) {
+        List<Map> h = ppService.selectCutTerritory(TerritoryId);
+        return Result.build(200, "鎴愬姛", h);
+    }
+
+    @GetMapping("/IdentControls") //   璇嗗埆鎿嶄綔锛�   鐮存崯/鎷胯蛋     鍙傛暟锛圛D锛屽姛鑳絒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.build(200, "鎴愬姛", h);
+    }
+
+    @GetMapping("/SelectCageInfo") // 鏌ヨ绗煎唴淇℃伅
+    @ResponseBody
+    public Result SelectCageInfo(String ProcessId) {
+        List<Map> h = hangzhoumesService.SelectCageInfo();
+        return Result.build(200, "鎴愬姛", h);
+    }
+
+    @GetMapping("/SelectEdgTask") //纾ㄨ竟浠诲姟
+    @ResponseBody
+    public Result SelectEdgTask(String ProcessId) {
+        List<Map> EdgTasks = hangzhoumesService.SelectEdgInfo("1");
+        return Result.build(200, "鎴愬姛", EdgTasks);
+    }
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/entity/TaskCache.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/entity/TaskCache.java
new file mode 100644
index 0000000..acd8f83
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/entity/TaskCache.java
@@ -0,0 +1,15 @@
+package com.mes.taskcache.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data  //lombok 绠�鍐檍ava浠g爜 瀹炰綋绫荤殑get涓巗et
+@TableName("task_cache")
+public class TaskCache {
+    private String ID;//浠诲姟缂栧彿
+    private String startcell;//璧峰
+    private String endcell;//缁撴潫
+    private String tasktype;//浠诲姟绫诲瀷
+    private String taskstauts;//浠诲姟鐘舵��
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/HangzhouMesMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/HangzhouMesMapper.java
new file mode 100644
index 0000000..ab38e20
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/HangzhouMesMapper.java
@@ -0,0 +1,76 @@
+package com.mes.taskcache.mapper;
+
+
+import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.taskcache.entity.TaskCache;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface HangzhouMesMapper {
+
+    // 鐜荤拑淇℃伅 鎸塈D鏌ヨ
+    @Select("select * from `glass_info` where id=#{id}")
+    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);
+
+    // 鏌ヨ绗煎瓙鍐呯┖闂�
+    @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();
+
+    // 鏌ヨ绗煎瓙鍐呭嚭鐗囦换鍔�
+    @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();
+
+    // 鏌ヨ绗煎瓙鍐呬俊鎭�
+    @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);
+
+    // 鏌ヨ鍙繘姝ょ墖鐜荤拑鐨勬爡鏍煎彿
+    @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);
+
+    // 鏌ヨ鍏ㄩ儴浠诲姟
+    @Select("select * from task_cache")
+    List<TaskCache> selectCacheInfoAll();
+
+    // 鏌ヨ杩涚墖浠诲姟
+    @Select("select * from task_cache where task_type='1' and task_stauts='0'")
+    List<TaskCache> selectInputCacheInfo();
+
+    // 鏌ヨ鍑虹墖浠诲姟
+    @Select("select * from task_cache where task_type='2' and task_stauts='0'")
+    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);
+
+    // 淇敼绗煎瓙鍐呬俊鎭�
+    @Update("update")
+    Integer updateCache(@Param("id") Integer id, @Param("order_id") String order_id);
+
+    // 娣诲姞鐞嗙墖浠诲姟
+    @Insert("INSERT into task_cache VALUES(#{id},#{start},#{end},#{type},0)")
+    Integer insertCacheTask(String id, String start, String end, String type);
+
+    //
+    // @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);
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/PpMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/PpMapper.java
new file mode 100644
index 0000000..8f2c0dc
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/PpMapper.java
@@ -0,0 +1,36 @@
+package com.mes.taskcache.mapper;
+
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+import java.util.Map;
+
+//
+//@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} and stock_id=#{TerritoryId}")
+    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);
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java
new file mode 100644
index 0000000..751feda
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java
@@ -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> {
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/HangzhoumesService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/HangzhoumesService.java
new file mode 100644
index 0000000..7c59022
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/HangzhoumesService.java
@@ -0,0 +1,35 @@
+package com.mes.taskcache.service;
+
+
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.taskcache.mapper.HangzhouMesMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class HangzhoumesService {
+
+    @Autowired
+    private HangzhouMesMapper hangzhouMesMapper;
+
+    //鏍规嵁缂栧彿 鏌ユ壘鐜荤拑灏忕墖淇℃伅
+    public GlassInfo getUserInfo(String process_id) {
+        return hangzhouMesMapper.selectGlassId(process_id);
+    }
+
+    //鐞嗙墖缂撳瓨 绗煎唴淇℃伅
+    public List<Map> SelectCageInfo() {
+        return hangzhouMesMapper.selectCachInfo();
+    }
+
+    //纾ㄨ竟灏忕墖淇℃伅
+    public List<Map> SelectEdgInfo(String line) {
+        return hangzhouMesMapper.selectEdgInfo(line);
+    }
+
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/PpService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/PpService.java
new file mode 100644
index 0000000..d6b8f14
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/PpService.java
@@ -0,0 +1,51 @@
+package com.mes.taskcache.service;
+
+
+import com.mes.taskcache.mapper.HangzhouMesMapper;
+import com.mes.taskcache.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() {
+        //寰楀埌瑕佹樉绀虹殑 宸ョ▼ID 浠ュ強鐗堝浘ID
+        //1.鍦℉angzhoumes鏁版嵁搴撻噷 寰楀埌鐩墠宸茬粡  棰嗗彇浣嗘湭瀹屾垚鐨� 宸ョ▼ID闆嗗悎
+        //2.鎷垮伐绋嬮泦鍚堝幓PP鏁版嵁搴撻噷 寰楀埌瀵瑰簲鐨勫皬鐗囬泦鍚�
+        //3.鎷垮搴旂殑灏忕墖闆嗗悎 涓� 缂撳瓨浠诲姟琛ㄨ繘琛屽姣� 鏌ユ壘涓嬩竴鐗堝浘鏄剧ず   
+        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);
+    }
+
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
new file mode 100644
index 0000000..2d2bafc
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
@@ -0,0 +1,38 @@
+package com.mes.taskcache.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.taskcache.entity.TaskCache;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface TaskCacheService extends IService<TaskCache> {
+
+    //娣诲姞鐞嗙墖绗间换鍔�
+    public boolean insertTaskCache();
+
+    //鏌ヨ纾ㄨ竟浠诲姟
+    public List<TaskCache> selectEdgInfo(String line);
+
+    //鏌ヨ鐞嗙墖浠诲姟
+    public List<TaskCache> selectCacheInfo();
+
+    //鏌ヨ鍏ㄩ儴浠诲姟
+    public List<TaskCache> selectAll();
+
+    //鏌ヨ杩涚墖浠诲姟
+    public List<TaskCache> selectInputTaskCache();
+
+    //鏌ヨ鍑虹墖浠诲姟
+    public List<TaskCache> selectOutTaskCache();
+
+    //鏌ヨ  A09  鎴� A10 鏈�鏂扮殑涓�鐗� 鍑虹墖浠诲姟
+    public boolean selectLastOutCacheInfo();
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
new file mode 100644
index 0000000..aec4976
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
@@ -0,0 +1,63 @@
+package com.mes.taskcache.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.taskcache.entity.TaskCache;
+import com.mes.taskcache.mapper.TaskCacheMapper;
+import com.mes.taskcache.service.TaskCacheService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+@Service
+public class TaskCacheServiceImpl extends ServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService {
+
+    //娣诲姞鐞嗙墖绗间换鍔�
+    @Override
+    public boolean insertTaskCache() {
+        return false;
+    }
+
+    //鏌ヨ纾ㄨ竟浠诲姟
+    @Override
+    public List<TaskCache> selectEdgInfo(String line) {
+        return null;
+    }
+
+    //鏌ヨ鐞嗙墖浠诲姟
+    @Override
+    public List<TaskCache> selectCacheInfo() {
+        return null;
+    }
+
+    //鏌ヨ鍏ㄩ儴浠诲姟
+    @Override
+    public List<TaskCache> selectAll() {
+        return null;
+    }
+
+    //鏌ヨ杩涚墖浠诲姟
+    @Override
+    public List<TaskCache> selectInputTaskCache() {
+        return null;
+    }
+
+    //鏌ヨ鍑虹墖浠诲姟
+    @Override
+    public List<TaskCache> selectOutTaskCache() {
+        return null;
+    }
+
+    //鏌ヨ  A09  鎴� A10 鏈�鏂扮殑涓�鐗� 鍑虹墖浠诲姟
+    @Override
+    public boolean selectLastOutCacheInfo() {
+        return false;
+    }
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
new file mode 100644
index 0000000..5e0bd43
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -0,0 +1,30 @@
+server:
+  port: 8081
+spring:
+  datasource:
+    dynamic:
+      primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster
+      strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
+      datasource:
+        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
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 10.153.19.150:8848
+  application:
+    name: cacheGlass
+  redis:
+    database: 0
+    host: 10.153.19.150
+    port: 6379
+    password: 123456
+  session:
+    store-type: redis
+mybatis-plus:
+  mapper-locations: classpath*:mapper/*.xml
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
new file mode 100644
index 0000000..9593dcd
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
@@ -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"));
+    }
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/pom.xml b/hangzhoumesParent/moduleService/LoadGlassModule/pom.xml
new file mode 100644
index 0000000..b5c3882
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/pom.xml
@@ -0,0 +1,32 @@
+<?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>
+    <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>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java
new file mode 100644
index 0000000..2634690
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java
@@ -0,0 +1,24 @@
+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) {
+        SpringApplication.run(LoadGlassModuleApplication.class, args);
+    }
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/common/S7object.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/common/S7object.java
new file mode 100644
index 0000000..45e5467
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/common/S7object.java
@@ -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; // 瑗块棬瀛怭LC绫诲瀷
+    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;
+    }
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/controller/UpPattenUsageController.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/controller/UpPattenUsageController.java
new file mode 100644
index 0000000..c95e08f
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/controller/UpPattenUsageController.java
@@ -0,0 +1,20 @@
+package com.mes.glassinfo.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 {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/entity/UpPattenUsage.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/entity/UpPattenUsage.java
new file mode 100644
index 0000000..279f93b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/entity/UpPattenUsage.java
@@ -0,0 +1,66 @@
+package com.mes.glassinfo.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 UpPattenUsage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鍘熺墖浣跨敤鎯呭喌琛╥d
+     */
+    @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;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/mapper/UpPattenUsageMapper.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/mapper/UpPattenUsageMapper.java
new file mode 100644
index 0000000..4dca443
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/mapper/UpPattenUsageMapper.java
@@ -0,0 +1,16 @@
+package com.mes.glassinfo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.glassinfo.entity.UpPattenUsage;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface UpPattenUsageMapper extends BaseMapper<UpPattenUsage> {
+
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/service/UpPattenUsageService.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/service/UpPattenUsageService.java
new file mode 100644
index 0000000..bc3d5d7
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/service/UpPattenUsageService.java
@@ -0,0 +1,16 @@
+package com.mes.glassinfo.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.glassinfo.entity.UpPattenUsage;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface UpPattenUsageService extends IService<UpPattenUsage> {
+
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/UpPattenUsageServiceImpl.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/UpPattenUsageServiceImpl.java
new file mode 100644
index 0000000..9f2301a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/UpPattenUsageServiceImpl.java
@@ -0,0 +1,20 @@
+package com.mes.glassinfo.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.glassinfo.entity.UpPattenUsage;
+import com.mes.glassinfo.mapper.UpPattenUsageMapper;
+import com.mes.glassinfo.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 {
+
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java
index 0ae98af..1108e41 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java
@@ -1,14 +1,15 @@
 package com.mes.workstation.controller;
 
 
+import com.mes.utils.Result;
 import com.mes.workstation.entity.GlassInfo;
 import com.mes.workstation.entity.UpWorkstation;
 import com.mes.workstation.service.UpWorkstationService;
-import com.mes.utils.Result;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+
 import java.util.List;
 
 /**
@@ -34,9 +35,9 @@
         return Result.build(200, "", glass);
     }
 
+
     //鏂板宸ヤ綅淇℃伅淇敼涓�鏉″伐浣嶄俊鎭�,鎺ユ敹瀹炰緥绫诲瓧娈典负瀹介珮鍘氳啘绯绘暟閲忓伐浣峣d
     //鍒犻櫎宸ヤ綅淇℃伅涔熺敤杩欎釜,闄や簡宸ヤ綅id鐜荤拑淇℃伅浼爊ull
-    @ApiOperation("淇敼宸ヤ綅琛ㄥ鍔犵幓鐠冧俊鎭垨鑰呭垹闄ょ幓鐠冧俊鎭�")
     @PostMapping("/updateGlassMessage")
     @ResponseBody
     public void updateGlassMessage(@RequestBody UpWorkstation upwork) {
@@ -44,7 +45,6 @@
     }
 
 
-    @ApiOperation("寮�濮嬩笂鐗囦换鍔�")
     @PostMapping("/selectPriority") //寮�濮嬩笂鐗囦换鍔�
     @ResponseBody
     public void selectPriority() {
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/GlassInfo.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/GlassInfo.java
index 78ccdb5..3e0b335 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/GlassInfo.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/GlassInfo.java
@@ -120,7 +120,7 @@
     /**
      * 宸ョ▼鍙�
      */
-    private Long engineerId;
+    private Integer engineerId;
 
     /**
      * 鐢熶骇瑙勫垯id
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkSequence.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkSequence.java
new file mode 100644
index 0000000..ca1d3a2
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkSequence.java
@@ -0,0 +1,15 @@
+package com.mes.workstation.entity;
+
+import lombok.Data;
+
+/**
+ * @author wu
+ */
+@Data
+public class UpWorkSequence {
+
+    private int sequence;
+
+    private int number;
+
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java
new file mode 100644
index 0000000..546b6a7
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java
@@ -0,0 +1,76 @@
+package com.mes.workstation.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 UpWorkstation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婄墖宸ヤ綅琛╥d
+     */
+    @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;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/LoadGlassMapper.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/LoadGlassMapper.java
new file mode 100644
index 0000000..aedecb4
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/LoadGlassMapper.java
@@ -0,0 +1,18 @@
+package com.mes.workstation.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.workstation.entity.UpWorkstation;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.Map;
+
+@Mapper
+public interface LoadGlassMapper extends BaseMapper<UpWorkstation> {
+    //鍒ゆ柇浼樺厛宸ヤ綅鍚哥墖
+    @Select("select b.layout_sequence,a.number 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}")
+    Map<String, Object> selectPriority(int id);
+
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/UpWorkstationMapper.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/UpWorkstationMapper.java
index 1a5e695..5731173 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/UpWorkstationMapper.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/UpWorkstationMapper.java
@@ -18,5 +18,4 @@
 public interface UpWorkstationMapper extends BaseMapper<UpWorkstation> {
 
     List<UpWorkSequence> selectPriority(@Param("id") int id);
-
 }
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/UpWorkstationService.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/UpWorkstationService.java
index 9d79c99..7a03568 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/UpWorkstationService.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/UpWorkstationService.java
@@ -1,11 +1,7 @@
 package com.mes.workstation.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.mes.pp.entity.OptimizeProject;
-import com.mes.pp.entity.request.OptimizeRequest;
 import com.mes.workstation.entity.UpWorkstation;
-
-import java.util.List;
 
 /**
  * <p>
@@ -24,8 +20,6 @@
 
     //鍒ゆ柇浼樺厛鍚哥墖浣嶇疆鍚庡彂閫佸嚭鐗囦换鍔�
     public void selectPriority() ;
-
-    //鏌ヨ姝e湪杩涜鐨勫伐绋�
 
 
     /**
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java
index 4b61ade..7578046 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java
@@ -1,20 +1,12 @@
 package com.mes.workstation.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-//import com.mes.common.S7object;
-import com.mes.pp.entity.OptimizeProject;
-import com.mes.pp.entity.request.OptimizeRequest;
 import com.mes.workstation.entity.UpWorkSequence;
 import com.mes.workstation.entity.UpWorkstation;
 import com.mes.workstation.mapper.UpWorkstationMapper;
 import com.mes.workstation.service.UpWorkstationService;
-import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
-
-import java.util.List;
 
 /**
  * <p>
@@ -25,7 +17,6 @@
  * @since 2024-04-07
  */
 @Service
-@Slf4j
 public class UpWorkstationServiceImpl extends ServiceImpl<UpWorkstationMapper, UpWorkstation> implements UpWorkstationService {
 
     public static final String DB_100_10 = "DB_100_10";
@@ -36,9 +27,6 @@
         return "1".equals(loadstart);
 
     }
-    //鏄剧ず姝e湪杩涜浠诲姟鐨勫伐绋嬩俊鎭�
-
-
     //鍒ゆ柇浼樺厛鍚哥墖浣嶇疆鍚庡彂閫佸嚭鐗囦换鍔�
     public void selectPriority() {
         //todo:鍒ゆ柇鏄惁鍙互鍚哥墖杩涜浠诲姟
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
new file mode 100644
index 0000000..ae352b3
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
@@ -0,0 +1,34 @@
+server:
+  port: 8083
+
+spring:
+  datasource:
+    dynamic:
+      primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster
+      strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
+      datasource:
+        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
+        pp:
+          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
+          username: root
+          password: beibo.123/
+          driver-class-name: com.mysql.cj.jdbc.Driver
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 10.153.19.150:8848
+  application:
+    name: loadGlass
+  redis:
+    database: 0
+    host: 10.153.19.150
+    port: 6379
+    password: 123456
+mybatis-plus:
+  mapper-locations: classpath*:mapper/*.xml
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/ApplicationTest.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/ApplicationTest.java
new file mode 100644
index 0000000..9f636a1
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/ApplicationTest.java
@@ -0,0 +1,33 @@
+package com.mes;
+
+import com.mes.pp.entity.OptimizeDetail;
+import com.mes.pp.service.OptimizeDetailService;
+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 javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/16 9:46
+ * @Description:
+ */
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = LoadGlassModuleApplication.class)
+public class ApplicationTest {
+
+
+    @Resource
+    OptimizeDetailService optimizationDetailService;
+
+    @Test
+    public void test() {
+        List<OptimizeDetail> list = optimizationDetailService.list();
+        System.out.println("鑾峰彇璁板綍鏁帮細" + list.size());
+    }
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/pom.xml b/hangzhoumesParent/moduleService/TemperingGlassModule/pom.xml
new file mode 100644
index 0000000..bce3faf
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/pom.xml
@@ -0,0 +1,32 @@
+<?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>
+    <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>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/TemperingGlassModuleApplication.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/TemperingGlassModuleApplication.java
new file mode 100644
index 0000000..489df44
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/TemperingGlassModuleApplication.java
@@ -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());
+        }
+
+    }
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
new file mode 100644
index 0000000..c78f5bf
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
@@ -0,0 +1,50 @@
+package com.mes.temperingglass.controller;
+
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.service.TemperingOverService;
+import com.mes.temperingglass.service.TemperingService;
+import com.mes.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+@RestController
+@RequestMapping("/temperingGlassInfo")
+
+// TidyUpGlassModule 閽㈠寲妯″潡
+public class TemperingGlassInfoController {
+
+    @Autowired
+    TemperingService temperingService;
+
+    @Autowired
+    private TemperingOverService temperingOverService;
+
+    @PostMapping("/SelectWaitingGlass") // 鏌ヨ閽㈠寲绛夌墖涓殑鐗堝浘淇℃伅,鐘舵�佷负1鐨勪负宸插埌,鐘舵�佷负0鐨勪负绛夊緟涓�
+    @ResponseBody
+    public Result SelectWaitingGlass(@RequestParam(name = "ProcessId", required = false) String ProcessId) {
+        List<TemperingGlassInfo> glass = temperingService.SelectWaitingGlass();
+        System.out.println(glass);
+        return Result.build(200, "", glass);
+    }
+
+    @GetMapping("/SelectIntoGlass") // 鏌ヨ杩涚倝涓殑閽㈠寲绛夌墖涓殑鐗堝浘淇℃伅,鐘舵�佸叏涓�1鐨勪负宸插埌銆�
+    @ResponseBody
+    public Result SelectIntoGlass(String ProcessId) {
+        List<TemperingGlassInfo> glass = temperingService.SelectIntoGlass();
+        System.out.println(glass);
+        return Result.build(200, "", glass);
+    }
+
+    @GetMapping("/SelectOutGlass") //閽㈠寲鍚庢樉绀哄嚭鐐夌殑鐗堝浘淇℃伅
+    @ResponseBody
+    public Result SelectOutGlass(String ProcessId) {
+        List<TemperingGlassInfo> glass = temperingOverService.SelectOutGlass();
+        System.out.println(glass);
+        return Result.build(200, "", glass);
+    }
+
+
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
new file mode 100644
index 0000000..8aaa9b1
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
@@ -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;
+
+    /**
+     * 閽㈠寲灏忕墖淇℃伅琛╥d
+     */
+    @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;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
new file mode 100644
index 0000000..adc5786
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
@@ -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> {
+
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingMapper.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingMapper.java
new file mode 100644
index 0000000..3b66b46
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingMapper.java
@@ -0,0 +1,34 @@
+package com.mes.temperingglass.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface TemperingMapper extends BaseMapper<TemperingGlassInfo> {
+
+
+    //鏌ヨ璇ョ幓鐠冪殑灏哄鍜屽潗鏍�
+//@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<TemperingGlassInfo> 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<TemperingGlassInfo> 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<TemperingGlassInfo> SelectOutGlass();
+
+
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
new file mode 100644
index 0000000..36e9d45
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
@@ -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> {
+
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingOverService.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingOverService.java
new file mode 100644
index 0000000..387d325
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingOverService.java
@@ -0,0 +1,36 @@
+package com.mes.temperingglass.service;
+
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.mapper.TemperingMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class TemperingOverService {
+    private final TemperingMapper temperingMapper;
+
+    //PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
+    public TemperingOverService(TemperingMapper temperingMapper) {
+        this.temperingMapper = temperingMapper;
+    }
+
+    //鎺ユ敹鍑虹倝淇″彿鍜岀倝鍙�
+    public String SelectOutSignal() {
+
+        //S7control.getinstance().WriteWord("鍑虹倝淇″彿", (short)1);
+        return "GlassInfo";
+    }
+
+    //鍙戦�佺‘璁ゆ敹鍒颁俊鍙�
+    public void OverSignal() {
+        //S7control.getinstance().WriteWord("纭瀛�", (short)1);
+    }
+
+    //鏄剧ず閽㈠寲鍑虹倝鍚庣殑鐗堝浘淇℃伅
+    public List<TemperingGlassInfo> SelectOutGlass() {
+        return temperingMapper.SelectOutGlass();
+    }
+
+
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingService.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingService.java
new file mode 100644
index 0000000..f122d7d
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingService.java
@@ -0,0 +1,63 @@
+package com.mes.temperingglass.service;
+//import com.mes.temperingglass.entity.GlassInfo;
+
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.mapper.TemperingMapper;
+import com.mes.tools.S7control;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class TemperingService {
+
+    private final TemperingMapper temperingMapper;
+    private S7control s7control;
+
+    public TemperingService(TemperingMapper temperingMapper) {
+        this.temperingMapper = temperingMapper;
+    }
+
+    //    //鎺ユ敹id杩斿洖鍧愭爣鍜屾暟鎹�
+//    public GlassInfo SelectOutGlass (String glassid) {
+//        GlassInfo GlassInfo = temperingMapper.SelectGlass(glassid);
+//        return GlassInfo;
+//    }
+    //鍙戦�佸潗鏍囦俊鎭�
+    public void SendCoordinate(short glassX, short glassY) {
+        s7control.WriteWord("DB100.10", glassX);
+        s7control.WriteWord("DB100.10", glassY);
+    }
+
+    //鍒ゆ柇鏄惁鍙互鍙戦�佽繘鐐変俊鍙�
+    public int SelectTempering(String glassid) {
+        int tempering = temperingMapper.SelectTempering(glassid);
+        if (tempering == 1) {
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+
+    //鍙戦�佽繘鐐変俊鍙�
+    public void SendIntoGlass(short start) {
+        s7control.WriteWord("DB100.10", start);
+    }
+
+    //鎺ュ彈瀹屾垚瀛楀洖澶嶇‘璁ゅ瓧
+    public void SendIntoGlass() {
+        s7control.WriteWord("DB100.10", (short) 1);
+    }
+
+    //鏄剧ず绛夊緟涓殑鐗堝浘
+    public List<TemperingGlassInfo> SelectWaitingGlass() {
+        List<TemperingGlassInfo> WaitingGlass = temperingMapper.SelectWaitingGlass();
+        return WaitingGlass;
+    }
+
+    //鏄剧ず姝e湪杩涚倝鐨勭増鍥�
+    public List<TemperingGlassInfo> SelectIntoGlass() {
+        List<TemperingGlassInfo> IntoGlass = temperingMapper.SelectInGlass();
+        return IntoGlass;
+    }
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
new file mode 100644
index 0000000..0687213
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -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 {
+
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
new file mode 100644
index 0000000..a84c58e
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
@@ -0,0 +1,28 @@
+server:
+  port: 8084
+spring:
+  datasource:
+    dynamic:
+      primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster
+      strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
+      datasource:
+        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
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 10.153.19.150:8848
+  application:
+    name: temperingGlass
+  redis:
+    database: 0
+    host: 10.153.19.150
+    port: 6379
+    password: 123456
+mybatis-plus:
+  mapper-locations: classpath*:mapper/*.xml
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml b/hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml
new file mode 100644
index 0000000..27baa5d
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/pom.xml
@@ -0,0 +1,41 @@
+<?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>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>5.2.4</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.9</version>
+            <scope>compile</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>com.github.yulichang</groupId>
+            <artifactId>mybatis-plus-join</artifactId>
+            <version>1.2.4</version>
+        </dependency>
+
+    </dependencies>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/UnLoadGlassApplication.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/UnLoadGlassApplication.java
new file mode 100644
index 0000000..f3d0880
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/UnLoadGlassApplication.java
@@ -0,0 +1,31 @@
+package com.mes;
+
+import com.mes.tools.WebSocketServer;
+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 org.springframework.context.ConfigurableApplicationContext;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/7 14:36RRRR
+ * @Description:
+ */
+@Slf4j
+@SpringBootApplication
+@EnableSwagger2
+@EnableDiscoveryClient
+@MapperScan(basePackages = "com.mes.*.mapper")
+public class UnLoadGlassApplication {
+
+
+    public static void main(String[] args) {
+        SpringApplication springApplication = new SpringApplication(UnLoadGlassApplication.class);
+        ConfigurableApplicationContext applicationContext = springApplication.run(args);
+        WebSocketServer.setApplicationContext(applicationContext);
+    }
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/PLCAutoMes.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/PLCAutoMes.java
new file mode 100644
index 0000000..e6eaef7
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/PLCAutoMes.java
@@ -0,0 +1,91 @@
+package com.mes.common;
+
+import com.mes.device.PlcParameterObject;
+import com.mes.tools.InitUtil;
+import org.springframework.context.annotation.Configuration;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.mes.tools.InitUtil.readAndUpdateWordValues;
+
+public class PLCAutoMes extends Thread {
+
+    // 鐢ㄤ簬瀛樺偍搴旂敤绋嬪簭鐨勯厤缃俊鎭�
+    private Configuration config;
+    private static InitUtil initUtil;
+
+
+    // 鍗曚緥瀹炰緥
+    private static PLCAutoMes instance;
+    private static String PlcMes = PLCAutoMes.class.getResource("/JsonFile/PlcMes.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 PlcBitObject plcPlcAlarm = initUtil.initbit(PlcAlarm);
+    public static PlcParameterObject PlcMesObject = initUtil.initword(PlcMes);
+    public static PlcParameterObject PlcReadObject = initUtil.initword(PlcRead);
+    public static PlcParameterObject PlcframeObject = initUtil.initword(Plcframe);
+
+    // 绉佹湁鏋勯�犲嚱鏁�
+    public PLCAutoMes() throws IOException {
+
+        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));
+
+        }
+    }
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/Plchome.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/Plchome.java
new file mode 100644
index 0000000..9a4a882
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/Plchome.java
@@ -0,0 +1,61 @@
+package com.mes.common;
+
+import cn.hutool.json.JSONObject;
+import com.mes.downworkstation.service.DownGlassLogic;
+import com.mes.tools.WebSocketServer;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Component;
+
+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() {
+        this.plcServiceSupplier = () -> WebSocketServer.applicationContext.getBean(DownGlassLogic.class);
+    }
+
+
+    @Override
+    public void run() {
+        while (!Thread.currentThread().isInterrupted()) {
+            try {
+                i++;
+                Thread.sleep(100);
+                DownGlassLogic plcService = plcServiceSupplier.get();
+                // plcService.performPlcActions();
+                //plcService.unloadpush();
+
+                //褰撲笅鐗囦换鍔¤〃鐘舵�佷负1鏃跺�欏皢鏁版嵁鎻掑叆鍒颁笅鐗囩幓鐠冧俊鎭〃
+                plcService.insertdownglassinfo();
+
+
+                //褰撴満姊版墜浠诲姟琛ㄤ腑鐘舵�佷负1 鏇存柊宸茬粡钀芥灦鏁伴噺锛屽苟涓旀妸涓嬬墖浠诲姟琛ㄧ殑閭f潯璁板綍鍒犳帀 宸ヤ綅琛ㄦ祦绋嬪崱缁戝畾浜嗘灦瀛�
+                plcService.downWorkstation();
+
+
+            } catch (InterruptedException e) {
+                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());
+                }
+            }
+
+        }
+    }
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/S7control.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/S7control.java
new file mode 100644
index 0000000..429a6e0
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/S7control.java
@@ -0,0 +1,458 @@
+package com.mes.common;
+
+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閫氳绫诲疄渚�
+    private EPlcType plcType = EPlcType.S1500; // 瑗块棬瀛怭LC绫诲瀷
+    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 static S7control getinstance() {
+        if (instance == null) {
+            synchronized (S7control.class) {
+                if (instance == null) {
+                    instance = new S7control();
+                }
+            }
+        }
+        return instance;
+    }
+
+    /**
+     * 鍏抽棴瑗块棬瀛恠7閫氳杩炴帴
+     */
+    public void CloseS7client() {
+        if (s7PLC == null)
+            s7PLC.close();
+        s7PLC.checkConnected();
+    }
+
+    /**
+     * s7閫氳杩炴帴鐘舵��
+     */
+    public boolean CheckConnected() {
+        return s7PLC.checkConnected();
+    }
+
+    /**
+     * 鎸夋寚瀹氱殑鍦板潃 鍐欏叆涓�涓獁ord
+     *
+     * @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鐨勫��
+     */
+
+
+    /**
+     * 鎸夋寚瀹氱殑鍦板潃 鍐欏叆涓�涓狟it
+     *
+     * @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) {
+
+        // 鍙互瑙f瀽鍑哄湴鍧�涓殑鏁板瓧閮ㄥ垎锛屽苟杞崲涓烘暣鏁�
+        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;
+        }
+
+    }
+
+    /**
+     * 鎸夋寚瀹氱殑鍦板潃 鎸塨it浣� 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;
+    }
+
+
+    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)
+            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);
+        S7control.getinstance().WriteByte(addr, bytes);
+    }
+
+    //璇诲彇涓嶈繛缁瓀ord
+    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+", ""); // 浣跨敤姝e垯琛ㄨ揪寮忔彁鍙栨暟瀛楅儴鍒�
+        return Integer.parseInt(numberStr);
+    }
+
+
+    /**
+     * 浠庢寚瀹氱殑鍦板潃寮�濮� 杩炵画鎸塨it浣嶈鍙�
+     *
+     * @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;
+        }
+
+    }
+
+    ;
+
+
+    public void writeString(String addr, String data) {
+        s7PLC.writeString(addr, data);
+    }
+
+
+    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;
+    }
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java
new file mode 100644
index 0000000..beff854
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java
@@ -0,0 +1,27 @@
+package com.mes.config;
+
+import com.mes.common.Plchome;
+import com.mes.device.PLCAutoMes;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+@Component
+@Order(1)
+
+public class AppRunnerConfig implements ApplicationRunner {
+
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        // TODO Auto-generated method stub
+        //
+        System.out.println("鍚姩瀹屾垚");
+
+
+        new PLCAutoMes().start();
+
+        new Plchome().start();
+
+    }
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
new file mode 100644
index 0000000..0aa64b9
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
@@ -0,0 +1,12 @@
+package com.mes.downglassinfo.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/downGlassInfo")
+public class DownGlassInfoController {
+
+
+    // Other endpoints can be added for CRUD operations
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java
new file mode 100644
index 0000000..ae4a15f
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassTaskController.java
@@ -0,0 +1,30 @@
+package com.mes.downglassinfo.controller;
+
+
+import io.swagger.annotations.Api;
+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
+ */
+@Api(tags = "涓嬫枡浠诲姟")
+@RestController
+@RequestMapping("/downGlassTask")
+public class DownGlassTaskController {
+
+    //todo: 瀹炰緥浠g爜 寰呭垹闄�
+    @ApiOperation("娴嬭瘯")
+    @GetMapping("/index")
+    public String index() {
+        return "hello world";
+    }
+}
+
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
index 24cc506..f37361a 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
@@ -1,13 +1,14 @@
 package com.mes.downglassinfo.entity;
 
-import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springframework.stereotype.Component;
 
+import java.io.Serializable;
+
 /**
  * <p>
- * 
+ *
  * </p>
  *
  * @author zhoush
@@ -23,7 +24,7 @@
     /**
      * 涓嬬墖鐜荤拑淇℃伅琛╥d
      */
-      private Long id;
+    private int id;
 
     /**
      * 娴佺▼鍗″彿
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
index a4b0121..9f354d8 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
@@ -2,13 +2,14 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.Serializable;
+
 /**
  * <p>
- * 
+ *
  * </p>
  *
  * @author zhoush
@@ -23,8 +24,8 @@
     /**
      * id
      */
-      @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
 
     /**
      * 璧峰
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
new file mode 100644
index 0000000..7450c30
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
@@ -0,0 +1,17 @@
+package com.mes.downglassinfo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.downglassinfo.entity.DownGlassInfo;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface DownGlassInfoMapper extends BaseMapper<DownGlassInfo> {
+
+//   @Select("SELECT MAX(sequence) FROM down_glass_info WHERE flow_card_id = #{flowCardId} LIMIT 1")
+//   Integer getMaxSequenceByFlowCardId(@Param("flowCardId") String flowCardId);
+////
+// @Delete("delete  from down_glass_task where flow_card_id = #{flowCardId}")
+//  void deletetask(@Param("flowCardId") String flowCardId);
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassTaskMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassTaskMapper.java
new file mode 100644
index 0000000..cb91c98
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassTaskMapper.java
@@ -0,0 +1,17 @@
+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> {
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
new file mode 100644
index 0000000..7ba3394
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
@@ -0,0 +1,14 @@
+package com.mes.downglassinfo.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.downglassinfo.entity.DownGlassInfo;
+
+public interface DownGlassInfoService extends IService<DownGlassInfo> {
+
+
+    Integer getMaxSequenceByFlowCardId(String flowCardId);
+
+    void insertDownGlassInfo(DownGlassInfo downGlassInfo);
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassTaskService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassTaskService.java
new file mode 100644
index 0000000..cd89680
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassTaskService.java
@@ -0,0 +1,27 @@
+package com.mes.downglassinfo.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.downglassinfo.entity.DownGlassTask;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface DownGlassTaskService extends IService<DownGlassTask> {
+
+    List<DownGlassTask> getUnloadingTaskState();
+
+    void updateTaskStateToZero(String flowCardId);
+
+    void deleteTask(String flowCardId);
+
+    DownGlassTask selectLastOutCacheInfo(String endCell);
+
+    Integer insertCacheTask(int id, String start, String end, String type, double width, double height, String filmsId, double thickness, String flowCardId);
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
new file mode 100644
index 0000000..e493c74
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
@@ -0,0 +1,33 @@
+package com.mes.downglassinfo.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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;
+
+@Service
+public class DownGlassInfoServiceImpl extends ServiceImpl<DownGlassInfoMapper, DownGlassInfo> implements DownGlassInfoService {
+
+    // 鏍规嵁娴佺▼鍗″彿鏌ヨ鏈�澶у簭鍙�
+    @Override
+    public Integer getMaxSequenceByFlowCardId(String flowCardId) {
+        QueryWrapper<DownGlassInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("flow_card_id", flowCardId);
+        queryWrapper.orderByDesc("sequence"); // 鎸夌収搴忓彿鍊掑簭鎺掑簭
+        queryWrapper.select("sequence").last("LIMIT 1"); // 閫夋嫨鏈�澶у簭鍙峰苟闄愬埗缁撴灉涓�1鏉¤褰�
+        DownGlassInfo downGlassInfo = baseMapper.selectOne(queryWrapper);
+        if (downGlassInfo != null) {
+            return downGlassInfo.getSequence();
+        }
+        return 0;
+    }
+
+    @Override
+    public void insertDownGlassInfo(DownGlassInfo downGlassInfo) {
+        baseMapper.insert(downGlassInfo);
+    }
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java
new file mode 100644
index 0000000..31d78d0
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java
@@ -0,0 +1,79 @@
+package com.mes.downglassinfo.service.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+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;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+@Service
+public class DownGlassTaskServiceImpl extends ServiceImpl<DownGlassTaskMapper, DownGlassTask> implements DownGlassTaskService {
+
+
+    @Override
+    public List<DownGlassTask> getUnloadingTaskState() {
+        QueryWrapper<DownGlassTask> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("task_stauts", 1);
+        return baseMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public void updateTaskStateToZero(String flowCardId) {
+        UpdateWrapper<DownGlassTask> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.set("task_stauts", 0).eq("flow_card_id", flowCardId);
+        baseMapper.update(null, updateWrapper);
+    }
+
+    @Override
+    public void deleteTask(String flowCardId) {
+        LambdaQueryWrapper<DownGlassTask> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(DownGlassTask::getFlowCardId, flowCardId);
+
+        baseMapper.delete(queryWrapper);
+    }
+
+    @Override
+    public DownGlassTask selectLastOutCacheInfo(String endCell) {
+        QueryWrapper<DownGlassTask> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("task_type", "2")
+                .eq("task_status", "2")
+                .eq("end_cell", endCell)
+                .last("LIMIT 1");
+
+        return baseMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public Integer insertCacheTask(int id, String start, String end, String type, double width, double height, String filmsId, double thickness, String flowCardId) {
+        DownGlassTask glassInfo = new DownGlassTask();
+        glassInfo.setId(id);
+        glassInfo.setStartCell(start);
+        glassInfo.setEndCell(end);
+        glassInfo.setTaskType(type);
+        glassInfo.setWidth(width);
+        glassInfo.setHeight(height);
+        glassInfo.setFilmsid(filmsId);
+        glassInfo.setThickness(thickness);
+        glassInfo.setFlowCardId(flowCardId);
+        glassInfo.setTaskStauts(0); // 榛樿浠诲姟鐘舵�佷负0
+
+        int rows = baseMapper.insert(glassInfo);
+        return rows > 0 ? rows : null;
+    }
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageController.java
new file mode 100644
index 0000000..82c4d3a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageController.java
@@ -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 {
+
+
+}
+
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
new file mode 100644
index 0000000..e7b0344
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
@@ -0,0 +1,25 @@
+package com.mes.downstorage.controller;
+
+import com.mes.downstorage.entity.DownStorageCageDetails;
+import com.mes.downstorage.service.DownStorageCageDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/down-storage-cage-details")
+public class DownStorageCageDetailsController {
+
+    @Autowired
+    private DownStorageCageDetailsService downStorageCageDetailsService;
+
+    @PostMapping("/add")
+    public String addDownStorageCageDetails(@RequestBody DownStorageCageDetails details) {
+        downStorageCageDetailsService.addDownStorageCageDetails(details);
+        return "Details added successfully";
+    }
+
+    // Other CRUD operations can be defined here
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
new file mode 100644
index 0000000..e747ab1
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
@@ -0,0 +1,51 @@
+package com.mes.downstorage.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 DownStorageCage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓嬬墖鍓嶇悊鐗囩琛╥d
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 璁惧id
+     */
+    private Integer deviceId;
+
+    /**
+     * 鏍呮牸鍙�
+     */
+    private Integer slot;
+
+    /**
+     * 鍚敤鐘舵��
+     */
+    private String enableState;
+
+    /**
+     * 鍓╀綑
+     */
+    private Integer remainWidth;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java
index e50436f..32aba4d 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java
@@ -2,13 +2,14 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.Serializable;
+
 /**
  * <p>
- * 
+ *
  * </p>
  *
  * @author zhoush
@@ -23,8 +24,8 @@
     /**
      * 涓嬬墖鍓嶇悊鐗囩鏄庣粏琛╥d
      */
-      @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
 
     /**
      * 璁惧id
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java
new file mode 100644
index 0000000..bdb011a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java
@@ -0,0 +1,70 @@
+package com.mes.downstorage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.downstorage.entity.DownStorageCageDetails;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-03-27
+ */
+@Mapper
+public interface DownStorageCageDetailsMapper extends BaseMapper<DownStorageCageDetails> {
+    //
+//    @Select("select * from `glass_info` where id=#{id}")
+//    GlassInfo SelectGlassId(String id);
+    // 鏌ヨ绗煎瓙鍐呯┖闂�
+    @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")
+    List<DownStorageCageDetails> SelectCacheLeisure();
+
+    // 鏌ヨ绗﹀悎宸ヤ綅鐨勫嚭鐗囩幓鐠�
+    @Select("select escd.* from down_storage_cage as esc LEFT JOIN down_storage_cage_details as escd on esc.slot=escd.slot left join down_workstation as dw  on escd.flow_card_id=dw.flow_card_id WHERE escd.slot IS NOT NULL and dw.workstation_id BETWEEN #{start} and #{end} order by escd.tempering_layout_id,escd.tempering_feed_sequence")
+    List<DownStorageCageDetails> SelectCacheOut(int start, int end);
+
+    // 鏌ヨ绗煎瓙鍐呬俊鎭�
+    @Select("select escd.* from down_storage_cage as esc LEFT JOIN down_storage_cage_details as escd on esc.slot=escd.slot order by esc.slot")
+    List<DownStorageCageDetails> SelectCachInfo();
+
+    // 鏌ヨ鍙繘姝ょ墖鐜荤拑鐨勬爡鏍煎彿
+    @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 not null and 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<DownStorageCageDetails> SelectIsExistIntoCache(Integer tempering_layout_id, Integer tempering_feed_sequence,
+                                                        double width);
+
+    // 鏌ヨ鍙繘姝ょ墖鐜荤拑鐨勬爡鏍煎彿
+    @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 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<DownStorageCageDetails> SelectIsExistIntoCache(Integer tempering_layout_id, double width);
+
+//    // 鏌ヨ鍏ㄩ儴浠诲姟
+//    @Select("select * from down_glass_task")
+//    List<DownGlassTask> SelectCacheInfoAll();
+//
+//    // 鏌ヨ杩涚墖浠诲姟
+//    @Select("select * from down_glass_task where task_type='1' and task_stauts='0'")
+//    List<DownGlassTask> SelectInputCacheInfo();
+//
+//    // 鏌ヨ鍑虹墖浠诲姟
+//    @Select("select * from down_glass_task where task_type='2' and task_stauts='0'")
+//    List<DownGlassTask> SelectOutCacheInfo();
+
+    // 鏌ヨ  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);
+
+    // 淇敼绗煎瓙鍐呬俊鎭�
+//    @Update("update")
+//    Integer UpdateCache(@Param("id") Integer id, @Param("order_id") String order_id);
+
+    // 娣诲姞涓嬬墖浠诲姟
+    @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);
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageMapper.java
new file mode 100644
index 0000000..ff19df6
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageMapper.java
@@ -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> {
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownGlassCacheLogic.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownGlassCacheLogic.java
new file mode 100644
index 0000000..ce6d4e3
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownGlassCacheLogic.java
@@ -0,0 +1,239 @@
+package com.mes.downstorage.service;
+
+import com.mes.common.PLCAutoMes;
+import com.mes.common.S7control;
+import com.mes.device.PlcParameterObject;
+import com.mes.downglassinfo.service.DownGlassTaskService;
+import com.mes.downstorage.entity.DownStorageCageDetails;
+import com.mes.downstorage.mapper.DownStorageCageDetailsMapper;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.tools.WebSocketServer;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Data
+@Service
+public class DownGlassCacheLogic {
+    @Autowired
+    private DownStorageCageDetailsMapper selectInfo;
+    private GlassInfoService GlassInfoService;
+    private DownStorageCageDetailsService downStorageCageDetailsService;
+    private DownGlassTaskService downGlassTaskService;
+
+    /**
+     * @param Number //璇嗗埆閫昏緫    涓嶄氦浜�
+     */
+
+    public void identify(String Number) {
+        //鏌ヨ浠诲姟
+        PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
+        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1);
+        String s = S7control.getinstance().ReadWord("DB14.26", 1).get(0) + "";
+        boolean isexist = isExist(Number);
+        if (isexist) {
+            //瀛樺湪閫昏緫    1.娣诲姞淇℃伅 2.鍥炲PLC瀛樺湪
+            //S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),(short) 1);
+        } else {
+            //涓嶅瓨鍦ㄩ�昏緫  1.鍥炲PLC涓嶅瓨鍦�
+            //S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),(short) 2);
+        }
+    }
+
+    //涓嬬墖鍓嶇悊鐗�
+    public static final String RESULT_IN = "1";
+    public static final String RESULT_OUT = "2";
+    public static final String RESULT_IN_OUT = "3";
+
+    public void process() {
+        String result = S7control.getinstance().ReadWord("DB14.0", 1).get(0) + "";
+        String number = S7control.getinstance().ReadWord("DB14.2", 1).get(0) + "";
+
+        // 杩涚墖璇锋眰
+        if (RESULT_IN.equals(result)) {
+            processInto(number);
+        }
+        // 鍑虹墖璇锋眰
+        else if (RESULT_OUT.equals(result)) {
+            processOut();
+        }
+        // 杩涘嚭鐗囪姹�
+        else if (RESULT_IN_OUT.equals(result)) {
+            // 鍏堝嚭鍚庤繘
+            if (!processOut()) {
+                processInto(number);
+            }
+        }
+    }
+
+
+    /**
+     * @param Number
+     * @return //涓嬬墖鍓嶇悊鐗� 杩�
+     */
+
+    public boolean processInto(String Number) {
+        GlassInfoService = WebSocketServer.applicationContext.getBean(GlassInfoService.class);
+        //鎸塱d鏌ヨ鐜荤拑淇℃伅琛ㄩ噷鐨勭幓鐠�
+        GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number);
+        PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
+        //瀛樺湪姝ょ幓鐠冪紪鍙�
+        if (GlassInfo != null) {
+            //鍚岄挗鍖栫増鍥惧唴鐨勬爡鏍煎彿
+            List<DownStorageCageDetails> list = selectInfo.SelectIsExistIntoCache(GlassInfo.getTemperingLayoutId(), GlassInfo.getTemperingFeedSequence(), GlassInfo.getWidth());
+            //绌烘爡鏍煎彿
+            if (list.size() == 0) {
+                list = selectInfo.SelectCacheLeisure();
+            }
+            //灏忎簬姝ょ幓鐠冮挗鍖栫増鍥惧簭鍙风殑鏍呮牸鍙�
+            if (list.size() == 0) {
+                list = selectInfo.SelectIsExistIntoCache(GlassInfo.getTemperingLayoutId(), GlassInfo.getWidth());
+            }
+            if (list.size() > 0) {
+                //瀛樺湪绌烘牸  
+                //1.鐢熸垚浠诲姟锛�  璧峰浣嶇疆0   缁撴潫浣嶇疆this.slot  浠诲姟绫诲瀷 1   锛堣繘鐗囦换鍔★級
+                //2.鍥炲 1杩涚墖
+                DownStorageCageDetails item = list.get(0);
+                selectInfo.insertCacheTask(GlassInfo.getId() + "", "0", item.getSlot() + "", "1", GlassInfo.getWidth(), GlassInfo.getHeight(), GlassInfo.getFilmsid(), GlassInfo.getThickness(), GlassInfo.getFlowcardId());
+
+                S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1);
+                return true;
+            }
+
+        } else {
+            // ID缂栧彿涓嶅瓨鍦�   涓嶅鐞�/鍥炲PLC  杩涜鎶ヨ鎻愮ず
+        }
+        //杩斿洖缁撴灉
+        return false;
+    }
+
+    //鐞嗙墖 鍑�
+    public boolean processOut() {
+        // 鏌ヨ浠诲姟
+        String G06 = S7control.getinstance().ReadWord("DB14.56", 1).get(0) + "";
+        String G11 = S7control.getinstance().ReadWord("DB14.58", 1).get(0) + "";
+        String G13 = S7control.getinstance().ReadWord("DB14.58", 1).get(0) + "";
+        PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
+        List<DownStorageCageDetails> list = selectInfo.SelectCacheOut(1, 5);
+        List<DownStorageCageDetails> list2 = selectInfo.SelectCacheOut(6, 10);
+        List<DownStorageCageDetails> list3 = selectInfo.SelectCacheOut(1, 10);
+
+        // 鎸夌収椤哄簭绗﹀悎鍓嶇鍑虹墖
+        if (!list.isEmpty()) {
+            DownStorageCageDetails item = list.get(0);
+            if (G06.equals("0") && G11.equals("1")) {
+                // 鍑哄埌 G06
+                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 (!list2.isEmpty()) {
+            DownStorageCageDetails item2 = list2.get(0);
+            if (G06.equals("1") && G11.equals("0")) {
+                // 鍑哄埌 G11
+                selectInfo.insertCacheTask(item2.getGlassId() + "", "0", "11", "2", item2.getWidth(), item2.getHeight(), item2.getFilmsid(), item2.getThickness(), item2.getFlowCardId());
+                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "2");
+                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
+                return true;
+            }
+            // 瓒呭嚭灏哄浼樺厛浜哄伐鍑虹墖 浜哄伐澶勭悊
+        } else if (!list3.isEmpty()) {
+            DownStorageCageDetails item3 = list3.get(0);
+            if (item3.getHeight() >= 3440 && item3.getWidth() >= 1440) {
+
+                String endcell = "06";
+                String SendEndcell = "1";
+
+                selectInfo.insertCacheTask(item3.getGlassId() + "", "0", endcell, "2", item3.getWidth(), item3.getHeight(), item3.getFilmsid(), item3.getThickness(), item3.getFlowCardId());
+                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell);
+                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
+                return true;
+            }
+        }
+
+        // 杩斿洖缁撴灉
+        return false;
+    }
+
+//鏌ヨ鏄惁缁戝畾鏋跺瓙
+//    public boolean selectFlowCardId(String FlowCardId){
+//
+//    }
+
+    /**
+     * @param Number //纾ㄨ竟   涓嶄氦浜�  鐞嗙墖鍜岀(杈规満鑷繁浜や簰
+     */
+
+    public void processMb(String Number) {
+        //鎸塱d鏌ヨ鐜荤拑淇℃伅琛ㄩ噷鐨勭幓鐠�
+        GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number);
+        PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
+        if (GlassInfo != null) {
+            //鍙戦�佷换鍔�   ID   闀� 瀹� 鍘� 鍊掕 宸ヨ壓鍔熻兘绛�
+            S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.22").getAddress(), "N10000");
+            S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.24").getAddress(), "1000");
+            S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.26").getAddress(), "800");
+            S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "60");
+            S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.30").getAddress(), "2");
+            S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
+        }
+        //杩斿洖缁撴灉
+    }
+
+
+    /**
+     * @param Number
+     * @return 鏌ヨ娑堟伅闃熷垪閲屾鐜荤拑ID鐨勬暟鎹�
+     */
+    public boolean selectMessageId(String Number) {
+        //鏌ヨ鏄惁瀛樺湪
+
+        GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number);
+        if (GlassInfo == null) {
+            //杩斿洖 涓嶅瓨鍦�
+            return false;
+
+        }
+        //杩斿洖 瀛樺湪
+        return true;
+    }
+
+    /**
+     * @param Number
+     * @return 鍒犻櫎娑堟伅闃熷垪閲屾鐜荤拑ID鐨勬暟鎹�
+     */
+
+    public boolean deleteMessageId(String Number) {
+        //鏌ヨ鏄惁瀛樺湪
+        GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number);
+        if (GlassInfo == null) {
+            //杩斿洖 涓嶅瓨鍦�
+            return false;
+        }
+        //杩斿洖 瀛樺湪
+        return true;
+    }
+
+
+    /**
+     * @param Number
+     * @return //鏄惁瀛樺湪姝ょ紪鍙风幓鐠�
+     */
+    public boolean isExist(String Number) {
+        //鏌ヨ鏄惁瀛樺湪
+        GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number);
+        if (GlassInfo == null) {
+            //杩斿洖 涓嶅瓨鍦�
+            return false;
+        }
+        //杩斿洖 瀛樺湪
+        return true;
+    }
+
+}
+
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
new file mode 100644
index 0000000..bbe9a5c
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
@@ -0,0 +1,10 @@
+package com.mes.downstorage.service;
+
+import com.mes.downstorage.entity.DownStorageCageDetails;
+
+public interface DownStorageCageDetailsService {
+
+    void addDownStorageCageDetails(DownStorageCageDetails details);
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
new file mode 100644
index 0000000..76a7993
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
@@ -0,0 +1,19 @@
+package com.mes.downstorage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.downstorage.entity.DownStorageCage;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-03-27
+ */
+public interface DownStorageCageService extends IService<DownStorageCage> {
+    public List<Map> gettask();
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
new file mode 100644
index 0000000..877de8e
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
@@ -0,0 +1,19 @@
+package com.mes.downstorage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.downstorage.entity.DownStorageCageDetails;
+import com.mes.downstorage.mapper.DownStorageCageDetailsMapper;
+import com.mes.downstorage.service.DownStorageCageDetailsService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DownStorageCageDetailsServiceImpl extends ServiceImpl<DownStorageCageDetailsMapper, DownStorageCageDetails> implements DownStorageCageDetailsService {
+
+    @Override
+    public void addDownStorageCageDetails(DownStorageCageDetails details) {
+        this.save(details);
+    }
+
+
+    // Other business methods can be implemented here
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
new file mode 100644
index 0000000..fe93e4a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
@@ -0,0 +1,34 @@
+package com.mes.downstorage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.downstorage.entity.DownStorageCage;
+import com.mes.downstorage.mapper.DownStorageCageMapper;
+import com.mes.downstorage.service.DownStorageCageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-03-27
+ */
+@Service
+public class DownStorageCageServiceImpl extends ServiceImpl<DownStorageCageMapper, DownStorageCage> implements DownStorageCageService {
+    @Autowired
+    private DownStorageCageMapper downStorageCageMapper;
+
+    @Override
+    public List<Map> gettask() {
+        downStorageCageMapper.selectList(null);
+//        downStorageCageMapper.selectJoin();
+        return null;
+    }
+
+    ;
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
new file mode 100644
index 0000000..b08f73b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
@@ -0,0 +1,131 @@
+package com.mes.downworkstation.controller;
+
+
+import com.mes.downworkstation.entity.DownWorkstation;
+import com.mes.downworkstation.service.DownWorkstationService;
+import com.mes.glassinfo.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;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-03-27
+ */
+
+@RestController
+@RequestMapping("/api/unLoadGlass")
+public class DownWorkstationController {
+
+    @Autowired
+    private DownWorkstationService downWorkstationService;
+    @Autowired
+    private GlassInfoService glassInfoService;
+
+    @GetMapping("/getone")
+    public ResponseEntity<?> getOneDownWorkstations() {
+        try {
+            List<DownWorkstation> data = downWorkstationService.getoneDownWorkstations(1, 5);
+            // 鏋勫缓绗﹀悎棰勬湡鏍煎紡鐨勫搷搴旀暟鎹�
+            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")
+    public List<DownWorkstation> gettwoDownWorkstations() {
+        return downWorkstationService.getoneDownWorkstations(6, 10);
+    }
+
+    @GetMapping("/getflowCardId")
+    public ResponseEntity<Map<String, Object>> getflowCardId() {
+        Map<String, Object> responseData = new HashMap<>();
+        try {
+            List<Map<String, Object>> data = glassInfoService.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 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 琛ㄤ腑鐨勬�绘暟閲�
+        downWorkstationService.updateFlowCardIdAndCount(flowCardId, glassInfoCount, workstationId);
+
+        // 鏋勫缓鍝嶅簲鏁版嵁
+        Map<String, Object> responseData = new HashMap<>();
+        responseData.put("message", "updated successfully");
+        responseData.put("code", 200);
+        // 杩斿洖澶勭悊缁撴灉
+        return ResponseEntity.ok(responseData);
+    }
+
+
+    @PostMapping("/clear")
+    public ResponseEntity<Map<String, Object>> clearWorkstationInfo(@RequestBody Map<String, Object> requestData) {
+        // 璋冪敤 DownWorkstationService 涓殑鏂规硶娓呴櫎鎸囧畾宸ヤ綅ID鐨勪俊鎭�
+        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);
+        }
+
+
+        // 鏋勫缓鍝嶅簲鏁版嵁
+
+    }
+
+
+}
+
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationTaskController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationTaskController.java
new file mode 100644
index 0000000..396acb1
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationTaskController.java
@@ -0,0 +1,19 @@
+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 {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java
new file mode 100644
index 0000000..e9f6e7a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstation.java
@@ -0,0 +1,64 @@
+package com.mes.downworkstation.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+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 DownWorkstation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓嬬墖宸ヤ綅琛╥d
+     */
+    @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;
+
+
+    @TableField("total_quantity")
+    private Integer totalquantity;
+
+    @TableField("racks_number")
+    private Integer Racksnumber;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java
index 97bd560..6fdd959 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java
@@ -2,13 +2,14 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.Serializable;
+
 /**
  * <p>
- * 
+ *
  * </p>
  *
  * @author zhoush
@@ -23,8 +24,8 @@
     /**
      * id
      */
-      @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
 
     /**
      * 瀹�
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java
new file mode 100644
index 0000000..29165dd
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java
@@ -0,0 +1,76 @@
+package com.mes.downworkstation.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.downworkstation.entity.DownWorkstation;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-03-27
+ */
+@Mapper
+
+@Repository
+@InterceptorIgnore(tenantLine = "true")
+@DS("hangzhoumes") // 鎸囧畾浣跨敤 hangzhoumes 鏁版嵁婧�
+
+public interface DownWorkstationMapper extends BaseMapper<DownWorkstation> {
+
+
+    //鏌ヨ宸ヤ綅琛ㄥ拰浠诲姟琛ㄤ腑鐘舵�佷负1鐨勬祦绋嬪崱鍙峰拰宸茶惤鏋舵暟閲�
+    @Select("SELECT dwt.flow_card_id,dw.id,dw.racks_number FROM down_workstation_task dwt JOIN down_workstation dw ON dwt.flow_card_id = dw.flow_card_id WHERE dwt.state = 1 LIMIT 1")
+    List<DownWorkstation> selectdownWorkstationstate();
+
+
+//    @Select("SELECT flow_card_id,filmsid,width,height,thickness FROM down_glass_task WHERE task_stauts = 1;")
+//    List<DownGlassTask> selectunloadingtaskstate();
+    //鏇存柊钀芥灦鏁伴噺
+//    @Update("UPDATE down_workstation SET racks_number = #{racksNumber} " +
+//            "WHERE flow_card_id = #{flowCardId}")
+//    void  update_racks_number(@Param("flowCardId") String flowCardId,
+//                              @Param("racksNumber") Integer racksNumber);
+
+    //鎻掑叆鏈烘浠诲姟琛�
+//    @Insert("INSERT INTO down_workstation_task (flow_card_id, width, height, thickness, filmsid,state) " +
+//            "VALUES (#{flowCardId}, #{width}, #{height}, #{thickness}, #{filmsid},1)")
+//    void insertdownWorkstationtask(DownGlassInfo downGlassInfo);
+
+    //鏍规嵁宸ヤ綅id鏇存柊瀹炰綋绫绘帴鏀剁殑鏁版嵁
+//    @Update("UPDATE down_workstation SET width = #{width}, height = #{height}, flow_card_id = #{flowCardId} WHERE workstation_id = #{workstationId}")
+//    void updateFlowCardId(DownWorkstation downWorkstation);
+
+
+//    @Update("UPDATE down_workstation_task SET state = 0 WHERE flow_card_id = #{flowCardId}")
+//    void update_task_state_to_zero(@Param("flowCardId") String flowCardId);
+
+
+//    @Select("SELECT * FROM down_workstation WHERE workstation_id BETWEEN #{startId} AND #{endId}")
+//    List<DownWorkstation> getDownWorkstationsInRange(@Param("startId") int startId, @Param("endId") int endId);
+
+
+//    @Select("SELECT DISTINCT  flowcard_id from glass_info")
+//    @ResultType(Map.class)
+//    List<Map<String, Object>> getflowCardId();
+
+//    @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);
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java
new file mode 100644
index 0000000..b9209fc
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java
@@ -0,0 +1,22 @@
+package com.mes.downworkstation.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.downworkstation.entity.DownWorkstation;
+import com.mes.downworkstation.entity.DownWorkstationTask;
+
+import java.util.List;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface DownWorkstationTaskMapper extends BaseMapper<DownWorkstationTask> {
+
+    List<DownWorkstationTask> selectList();
+
+    DownWorkstation selectdownWorkstationstate();
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownGlassLogic.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownGlassLogic.java
new file mode 100644
index 0000000..12efb2c
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownGlassLogic.java
@@ -0,0 +1,155 @@
+package com.mes.downworkstation.service;
+
+import com.mes.common.PLCAutoMes;
+import com.mes.device.PlcParameterObject;
+import com.mes.downglassinfo.entity.DownGlassInfo;
+import com.mes.downglassinfo.entity.DownGlassTask;
+import com.mes.downglassinfo.mapper.DownGlassInfoMapper;
+import com.mes.downglassinfo.service.DownGlassInfoService;
+import com.mes.downglassinfo.service.DownGlassTaskService;
+import com.mes.downstorage.entity.DownStorageCageDetails;
+import com.mes.downworkstation.entity.DownWorkstation;
+import com.mes.downworkstation.mapper.DownWorkstationMapper;
+import com.mes.tools.WebSocketServer;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Data
+@Service
+public class DownGlassLogic {
+    @Autowired
+    private DownGlassInfo downGlassInfo;
+    private DownWorkstation downWorkstation;
+    private DownGlassInfoMapper downGlassInfoMapper;
+    private DownGlassInfoService downGlassInfoService;
+    private DownGlassTaskService downGlassTaskService;
+    private DownWorkstationMapper downWorkstationMapper;
+    private DownWorkstationService downWorkstationService;
+    private DownWorkstationTaskService downWorkstationTaskService;
+    PlcParameterObject plcread = PLCAutoMes.PlcReadObject;
+    /**
+     * // 鏈烘鎵�1PLC璇锋眰瀛�
+     */
+    String robot1PLCrequestword = plcread.getPlcParameter("A01Position").getValue();
+    /**
+     * // 鏈烘鎵�2PLC璇锋眰瀛�
+     */
+    String robot2PLCrequestword = plcread.getPlcParameter("A01Position").getValue();
+    /**
+     * // 鐜荤拑id
+     */
+    String glassID = plcread.getPlcParameter("A01Position").getValue();
+    String glasswidth = plcread.getPlcParameter("A01Position").getValue();
+    String glassheight = plcread.getPlcParameter("A01Position").getValue();
+    //
+    String glassthickness = plcread.getPlcParameter("A01Position").getValue();
+    String pLcwancheng = plcread.getPlcParameter("A01Position").getValue();
+
+    /**
+     * // 瀛樻斁寰呭鐞嗙殑鐜荤拑淇℃伅
+     */
+    private List<DownGlassInfo> glassList;
+    /**
+     * 瀛樻斁鐜荤拑鏀剧疆鍦ㄧ紦瀛樼涓殑璇︾粏淇℃伅
+     */
+    private List<DownStorageCageDetails> cageDetailsList;
+
+    /**
+     * //褰撲笅鐗囦换鍔¤〃鐘舵�佷负1鏃跺�欏皢鏁版嵁鎻掑叆鍒颁笅鐗囩幓鐠冧俊鎭〃
+     */
+
+    public void insertdownglassinfo() {
+
+
+        downWorkstationMapper = WebSocketServer.applicationContext.getBean(DownWorkstationMapper.class);
+        downWorkstationService = WebSocketServer.applicationContext.getBean(DownWorkstationService.class);
+        downWorkstationTaskService = WebSocketServer.applicationContext.getBean(DownWorkstationTaskService.class);
+        downGlassInfoService = WebSocketServer.applicationContext.getBean(DownGlassInfoService.class);
+        downGlassInfoMapper = WebSocketServer.applicationContext.getBean(DownGlassInfoMapper.class);
+        downGlassTaskService = WebSocketServer.applicationContext.getBean(DownGlassTaskService.class);
+        List<DownGlassTask> taskdownGlassInf = downGlassTaskService.getUnloadingTaskState();
+//
+
+
+        if (taskdownGlassInf != null && !taskdownGlassInf.isEmpty()) {
+
+//
+
+            for (DownGlassTask downGlassInfo : taskdownGlassInf) {
+                // 鍒涘缓鏂扮殑 DownGlassInfo 瀵硅薄骞惰缃浉鍏冲睘鎬�
+                DownGlassInfo newdownGlassInfo = new DownGlassInfo();
+
+                newdownGlassInfo.setFlowCardId(downGlassInfo.getFlowCardId());
+                Integer maxSequence = downGlassInfoService.getMaxSequenceByFlowCardId(downGlassInfo.getFlowCardId());
+                // 鍒濆鍖栭『搴忓瓧娈靛��
+                int sequence = maxSequence != null ? maxSequence + 1 : 1;
+
+                newdownGlassInfo.setWidth(downGlassInfo.getWidth());
+                newdownGlassInfo.setHeight(downGlassInfo.getHeight());
+                newdownGlassInfo.setThickness(downGlassInfo.getThickness());
+                newdownGlassInfo.setFilmsid(downGlassInfo.getFilmsid());
+                // 璁剧疆椤哄簭瀛楁鍊�
+                newdownGlassInfo.setSequence(sequence);
+
+                // 鎻掑叆鏁版嵁鍒颁笅鐗囩幓鐠冧俊鎭〃
+                downGlassInfoService.insertDownGlassInfo(newdownGlassInfo);
+                //鎻掑叆鏁版嵁鍒版満姊版墜浠诲姟琛�
+
+                downWorkstationTaskService.insertdownWorkstationtask(newdownGlassInfo);
+                //鏇存柊涓嬬墖浠诲姟琛ㄧ姸鎬佷负0
+                downGlassTaskService.updateTaskStateToZero(downGlassInfo.getFlowCardId());
+
+                sequence++; // 閫掑椤哄簭瀛楁鍊�
+
+
+            }
+        }
+    }
+
+
+    /**
+     * //褰撴満姊版墜浠诲姟琛ㄤ腑鐘舵�佷负1锛屽伐浣嶈〃娴佺▼鍗$粦瀹氫簡鏋跺瓙 鏇存柊宸茬粡钀芥灦鏁伴噺锛屽苟涓旀妸涓嬬墖浠诲姟琛ㄧ殑瀵瑰簲璁板綍鍒犳帀
+     */
+
+    public void downWorkstation() {
+
+
+        try {
+            //鏌ヨ涓嬬墖宸ヤ綅琛ㄤ腑鏋跺瓙鏄惁缁戝畾浜嗘祦绋嬪崱鍙� 宸ヤ綅琛ㄥ拰浠诲姟琛ㄤ腑鐘舵�佷负1鐨勬祦绋嬪崱鍙峰拰宸茶惤鏋舵暟閲�
+            List<DownWorkstation> taskdownWorkstation = downWorkstationMapper.selectdownWorkstationstate();
+            if (taskdownWorkstation != null && !taskdownWorkstation.isEmpty()) {
+                //锛屽鏋滃凡缁忕粦瀹氬垯鏇存柊宸茶惤鏋舵暟閲�,骞朵笖鍒犻櫎涓嬬墖浠诲姟琛ㄤ腑鐨勮褰�
+                for (DownWorkstation downWorkstation : taskdownWorkstation) {
+                    //鏇存柊涓嬬墖宸ヤ綅琛ㄤ腑宸茶惤鏋舵暟閲�
+                    downWorkstationService.updateracksnumber(downWorkstation.getFlowCardId(), downWorkstation.getRacksnumber() + 1);
+                    //鏇存柊鏈烘浠诲姟琛ㄤ腑鐘舵�佷负0
+                    downWorkstationTaskService.updateTaskStateToZero(downWorkstation.getFlowCardId());
+                    //鍒犻櫎涓嬬墖浠诲姟琛ㄤ腑鐨勮褰�
+                    downGlassTaskService.deleteTask(downWorkstation.getFlowCardId());
+
+                }
+            }
+        } catch (Exception e) {
+            // 鎵撳嵃寮傚父淇℃伅
+            e.printStackTrace();
+            // 鎴栬�呭彲浠ヨ繘琛屽叾浠栧紓甯稿鐞嗭紝姣斿璁板綍鏃ュ織鎴栬�呰繑鍥炵壒瀹氱殑閿欒淇℃伅
+        }
+
+
+    }
+
+
+    /**
+     * @param downWorkstation // 婊℃灦鎷夎蛋 娓呴櫎娴佺▼鍗′俊鎭�
+     */
+
+//    public void clearFlowCardId(DownWorkstation downWorkstation) {
+//
+//        downWorkstationMapper.clearFlowCardId(downWorkstation);
+//    }
+
+
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java
new file mode 100644
index 0000000..76d3fb3
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java
@@ -0,0 +1,32 @@
+package com.mes.downworkstation.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.downworkstation.entity.DownWorkstation;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-03-27
+ */
+public interface DownWorkstationService extends IService<DownWorkstation> {
+
+    List<DownWorkstation> getoneDownWorkstations(int startId, int endId);
+
+    int getTotalQuantity(int workstationId);
+
+    int getRacksNumber(int workstationId);
+
+    void clearFlowCardId(int workstationId);
+
+    void updateracksnumber(String flowCardId, int racksnumber);
+
+
+    int updateFlowCardIdAndCount(String flowCardId, int glassInfoCount, int workstationId);
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationTaskService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationTaskService.java
new file mode 100644
index 0000000..58e3445
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationTaskService.java
@@ -0,0 +1,19 @@
+package com.mes.downworkstation.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.downglassinfo.entity.DownGlassInfo;
+import com.mes.downworkstation.entity.DownWorkstationTask;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface DownWorkstationTaskService extends IService<DownWorkstationTask> {
+    void insertdownWorkstationtask(DownGlassInfo downGlassInfo);
+
+    void updateTaskStateToZero(String flowCardId);
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
new file mode 100644
index 0000000..ca152d0
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
@@ -0,0 +1,116 @@
+package com.mes.downworkstation.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.downworkstation.entity.DownWorkstation;
+import com.mes.downworkstation.entity.DownWorkstationTask;
+import com.mes.downworkstation.mapper.DownWorkstationMapper;
+import com.mes.downworkstation.mapper.DownWorkstationTaskMapper;
+import com.mes.downworkstation.service.DownWorkstationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+public class DownWorkstationServiceImpl extends ServiceImpl<DownWorkstationMapper, DownWorkstation> implements DownWorkstationService {
+
+    @Autowired
+    private DownWorkstationMapper downWorkstationMapper;
+    private DownWorkstationTaskMapper downWorkstationTaskMapper;
+
+
+    //    @Override
+//    public List<DownWorkstation> gettwoDownWorkstations() {
+//        return downWorkstationMapper.getDownWorkstationsInRange(6,10);
+//    }
+//鑾峰彇鎬绘暟閲�
+    @Override
+    public int getTotalQuantity(int workstationId) {
+        QueryWrapper<DownWorkstation> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("total_quantity")
+                .eq("workstation_id", workstationId);
+
+        DownWorkstation result = baseMapper.selectOne(queryWrapper);
+        return result != null ? result.getTotalquantity() : 0;
+    }
+
+//    @Override
+//    public int getTotalQuantity(int workstationId) {
+//        Integer totalQuantity = downWorkstationMapper.getTotalQuantity(workstationId);
+//        return totalQuantity != null ? totalQuantity : 0;
+//    }
+
+    //    @Override
+//    public int getRacksNumber(int workstationId) {
+//        Integer racksNumber = downWorkstationMapper.getRacksNumber(workstationId);
+//        return racksNumber != null ? racksNumber : 0;
+//    }
+    //鏍规嵁鏉′欢鑾峰彇钀芥灦鏁伴噺
+    @Override
+    public int getRacksNumber(int workstationId) {
+        QueryWrapper<DownWorkstation> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("racks_number")
+                .eq("workstation_id", workstationId);
+
+        DownWorkstation result = baseMapper.selectOne(queryWrapper);
+        return result != null ? result.getRacksnumber() : 0;
+    }
+
+    //鏍规嵁鏉′欢鑾峰彇宸ヤ綅鐜荤拑淇℃伅
+    @Override
+    public List<DownWorkstation> getoneDownWorkstations(int startId, int endId) {
+        QueryWrapper<DownWorkstation> queryWrapper = new QueryWrapper<>();
+        queryWrapper.between("workstation_id", startId, endId);
+
+        return baseMapper.selectList(queryWrapper);
+    }
+
+
+//
+
+
+    @Override
+    public void updateracksnumber(String flowCardId, int racksNumber) {
+        UpdateWrapper<DownWorkstation> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.set("racks_number", racksNumber).eq("flow_card_id", flowCardId);
+        baseMapper.update(null, updateWrapper);
+    }
+
+
+    @Override
+    public int updateFlowCardIdAndCount(String flowCardId, int glassInfoCount, int workstationId) {
+        UpdateWrapper<DownWorkstation> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.set("total_quantity", glassInfoCount)
+                .set("flow_card_id", flowCardId)
+                .eq("workstation_id", workstationId);
+
+        return baseMapper.update(null, updateWrapper);
+    }
+
+    @Override
+    public void clearFlowCardId(int workstationId) {
+        UpdateWrapper<DownWorkstation> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.set("flow_card_id", null)
+                .set("total_quantity", 0)
+                .set("racks_number", 0)
+                .eq("workstation_id", workstationId);
+
+        baseMapper.update(null, updateWrapper);
+    }
+
+
+    @Transactional
+    public void crossDatabaseQuery() {
+        // 浠� MySQL 鏁版嵁搴撲腑鏌ヨ鏁版嵁锛屽彧杩斿洖涓�鏉$鍚堟潯浠剁殑鏁版嵁
+        DownWorkstation downWorkstation = downWorkstationTaskMapper.selectdownWorkstationstate();
+
+        // 浠� SQL Server 鏁版嵁搴撲腑鏌ヨ鏁版嵁
+        List<DownWorkstationTask> downWorkstationTasks = downWorkstationTaskMapper.selectList();
+
+
+    }
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationTaskServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationTaskServiceImpl.java
new file mode 100644
index 0000000..89bbd8e
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationTaskServiceImpl.java
@@ -0,0 +1,42 @@
+package com.mes.downworkstation.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.downglassinfo.entity.DownGlassInfo;
+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 {
+
+
+    public void insertdownWorkstationtask(DownGlassInfo downGlassInfo) {
+        DownWorkstationTask entity = new DownWorkstationTask();
+        entity.setFlowCardId(downGlassInfo.getFlowCardId());
+        entity.setWidth(downGlassInfo.getWidth());
+        entity.setHeight(downGlassInfo.getHeight());
+        entity.setThickness(downGlassInfo.getThickness());
+        entity.setFilmsid(downGlassInfo.getFilmsid());
+        entity.setState(1);
+
+        baseMapper.insert(entity);
+    }
+
+    @Override
+    public void updateTaskStateToZero(String flowCardId) {
+        UpdateWrapper<DownWorkstationTask> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.set("state", 0).eq("flow_card_id", flowCardId);
+
+        baseMapper.update(null, updateWrapper);
+    }
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java
new file mode 100644
index 0000000..b58b5b0
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/controller/GlassInfoController.java
@@ -0,0 +1,20 @@
+package com.mes.glassinfo.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 {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/entity/GlassInfo.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
new file mode 100644
index 0000000..dc023ed
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
@@ -0,0 +1,131 @@
+package com.mes.glassinfo.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;
+
+    /**
+     * 鐜荤拑淇℃伅琛╥d
+     */
+    @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;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
new file mode 100644
index 0000000..7f5b32c
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
@@ -0,0 +1,25 @@
+package com.mes.glassinfo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.glassinfo.entity.GlassInfo;
+import org.mapstruct.Mapper;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-03-27
+ */
+@Mapper
+public interface GlassInfoMapper extends BaseMapper<GlassInfo> {
+
+
+//    @Select("SELECT COUNT(*) FROM glass_info WHERE flowcard_id = #{flowCardId}")
+//    int getGlassInfoCountByFlowCardId(@Param("flowCardId") String flowCardId);
+
+//    @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);
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
new file mode 100644
index 0000000..4019774
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
@@ -0,0 +1,24 @@
+package com.mes.glassinfo.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.glassinfo.entity.GlassInfo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-03-27
+ */
+public interface GlassInfoService extends IService<GlassInfo> {
+
+    int getGlassInfoCountByFlowCardId(String flowCardId);
+
+    List<Map<String, Object>> getFlowCardId();
+
+    GlassInfo selectGlassId(String id);
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
new file mode 100644
index 0000000..d064db4
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -0,0 +1,62 @@
+package com.mes.uppattenusage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.mapper.GlassInfoMapper;
+import com.mes.glassinfo.service.GlassInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-03-27
+ */
+@Service
+public class GlassInfoServiceImpl extends ServiceImpl<GlassInfoMapper, GlassInfo> implements GlassInfoService {
+
+    private GlassInfoMapper glassInfoMapper;
+
+    @Autowired
+    public GlassInfoServiceImpl(GlassInfoMapper glassInfoMapper) {
+        this.glassInfoMapper = glassInfoMapper;
+    }
+
+    @Override
+    public int getGlassInfoCountByFlowCardId(String flowCardId) {
+        QueryWrapper<GlassInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("flowcard_id", flowCardId);
+
+        return baseMapper.selectCount(queryWrapper);
+    }
+
+    @Override
+    public List<Map<String, Object>> getFlowCardId() {
+        return baseMapper.selectMaps(new QueryWrapper<GlassInfo>().select("DISTINCT flowcard_id"));
+    }
+
+    @Override
+    public GlassInfo selectGlassId(String id) {
+        QueryWrapper<GlassInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("id", id);
+
+        return baseMapper.selectOne(queryWrapper);
+    }
+
+
+//    public void updateFlowCardIdAndCount(String flowCardId, int glassInfoCount, int workstationId) {
+//        int rowsAffected = glassInfoMapper.updateFlowCardIdAndCount(flowCardId, glassInfoCount, workstationId);
+//        if (rowsAffected > 0) {
+//            System.out.println("鏇存柊鏋跺瓙涓婃祦绋嬪崱 ID 鍜屾暟閲忔垚鍔�");
+//        } else {
+//            System.out.println("鏇存柊鏋跺瓙涓婃祦绋嬪崱 ID 鍜屾暟閲忓け璐�");
+//        }
+//    }
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/Configuration.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/Configuration.java
new file mode 100644
index 0000000..319a5d4
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/Configuration.java
@@ -0,0 +1,46 @@
+package com.mes.tools;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+/**
+ * @author SNG-012
+ * <p>
+ * Configuration 绫荤敤浜庡姞杞介厤缃枃浠跺苟鎻愪緵璁块棶閰嶇疆椤圭殑鏂规硶銆�
+ */
+public class Configuration {
+
+    /**
+     * // Properties 瀵硅薄锛岀敤浜庡瓨鍌ㄩ厤缃枃浠朵腑鐨勯敭鍊煎銆�
+     */
+    private Properties properties;
+
+    /**
+     * @param fileName
+     * @throws IOException // 鏋勯�犲嚱鏁帮紝鏍规嵁浼犲叆鐨勬枃浠跺悕鍔犺浇閰嶇疆鏂囦欢銆�
+     */
+
+    public Configuration(String fileName) throws IOException {
+        // 浣跨敤绫诲姞杞藉櫒鑾峰彇璧勬簮鏂囦欢鐨勮緭鍏ユ祦銆�
+        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(fileName);
+        // 濡傛灉杈撳叆娴佷负null锛岃〃绀烘湭鎵惧埌鏂囦欢锛屾姏鍑篎ileNotFoundException銆�
+        if (inputStream == null) {
+            throw new FileNotFoundException("Property file '" + fileName + "' not found in the classpath");
+        }
+        // 瀹炰緥鍖朠roperties瀵硅薄銆�
+        properties = new Properties();
+        // 浠庤緭鍏ユ祦鍔犺浇閰嶇疆椤广��
+        properties.load(inputStream);
+    }
+
+    /**
+     * @param key
+     * @return // 鏍规嵁閰嶇疆椤圭殑閿幏鍙栧叾瀵瑰簲鐨勫�笺��
+     */
+
+    public String getProperty(String key) {
+        return properties.getProperty(key);
+    }
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/ExcelToJsonConverter.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/ExcelToJsonConverter.java
new file mode 100644
index 0000000..8fbb58a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/ExcelToJsonConverter.java
@@ -0,0 +1,107 @@
+package com.mes.tools;
+
+import com.google.gson.Gson;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+public class ExcelToJsonConverter {
+
+    public static void main(String[] args) {
+        String excelFilePath = "src/main/resources/JsonFile/alarm.xlsx";
+        String sheetName = "Sheet1";
+        int addressColumnIndex = 0;
+        int nameColumnIndex = 1;
+
+        //int unitColumnIndex = 2;
+        String outputFilePath = "src/main/resources/JsonFile/PlcAlarm.json";
+
+        try (Workbook workbook = new XSSFWorkbook(new FileInputStream(excelFilePath))) {
+            Sheet sheet = workbook.getSheet(sheetName);
+
+            List<LinkedHashMap<String, Object>> jsonList = new ArrayList<>();
+
+            Iterator<Row> rowIterator = sheet.iterator();
+            // Skip the header row
+            if (rowIterator.hasNext()) {
+                rowIterator.next();
+            }
+
+            int plcAddressLength = 0; // 璁板綍鎵�鏈� addressLenght 鐨勫拰
+            int addressIndex = 0; // 鑷鐨勫湴鍧�绱㈠紩
+            while (rowIterator.hasNext()) {
+                Row row = rowIterator.next();
+
+                Cell nameCell = row.getCell(nameColumnIndex);
+                Cell addressCell = row.getCell(addressColumnIndex);
+                //  Cell unitCell = row.getCell(unitColumnIndex);
+
+                String name = nameCell.getStringCellValue();
+                String address = addressCell.getStringCellValue();
+                // String unit = unitCell.getStringCellValue();
+
+                //  String addressIndex = extractAddressIndex(address);
+
+                LinkedHashMap<String, Object> jsonObject = new LinkedHashMap<>();
+                jsonObject.put("codeId", name);
+                jsonObject.put("addressIndex", addressIndex);
+
+                int addressLength = 0;
+                if (address.contains("~")) {
+                    addressLength = 14;
+                } else {
+                    addressLength = 2;
+                }
+                // jsonObject.put("addressLenght", String.valueOf(addressLength));
+
+                //jsonObject.put("unit", unit);
+
+                plcAddressLength += addressLength;
+
+                jsonList.add(jsonObject);
+                addressIndex++;
+            }
+
+            LinkedHashMap<String, Object> resultObject = new LinkedHashMap<>();
+            resultObject.put("plcAddressBegin", "DB100.0");
+            resultObject.put("plcAddressLenght", String.valueOf(plcAddressLength));
+            // resultObject.put("dataType", "word");
+            resultObject.put("dataType", "bit");
+            resultObject.put("parameteInfor", jsonList);
+
+            Gson gson = new Gson();
+            String jsonOutput = gson.toJson(resultObject);
+
+            try (FileWriter fileWriter = new FileWriter(outputFilePath)) {
+                fileWriter.write(jsonOutput);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    private static String extractAddressIndex(String address) {
+        // Assuming the address format is "DB103.DBW0" or "DB103.DBB100~DBB113"
+        if (address.startsWith("DB") && address.contains(".DBW")) {
+            int startIndex = address.indexOf(".DBW") + 4;
+            int endIndex = address.length();
+            return address.substring(startIndex, endIndex);
+        } else if (address.startsWith("DB") && address.contains(".DBB")) {
+            int startIndex2 = address.indexOf(".DBB") + 4;
+            int endIndex2 = address.indexOf("~");
+            return address.substring(startIndex2, endIndex2);
+        }
+        return "";
+    }
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/WebSocketServer.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/WebSocketServer.java
new file mode 100644
index 0000000..fcd2a10
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/tools/WebSocketServer.java
@@ -0,0 +1,162 @@
+package com.mes.tools;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@ServerEndpoint(value = "/api/talk/{username}")
+@Component("webSocketServer")
+public class WebSocketServer {
+
+    // @Autowired
+    // HomeMapper homeMapper;
+
+    public static ConfigurableApplicationContext applicationContext;
+
+    // 瑙e喅鏃犳硶娉ㄥ叆mapper闂 //浣跨敤鏂规硶
+    // homeMapper=WebSocketServer.applicationContext.getBean(HomeMapper.class);
+    public static void setApplicationContext(ConfigurableApplicationContext configurableApplicationContext) {
+        WebSocketServer.applicationContext = configurableApplicationContext;
+    }
+
+    private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
+    private List<String> messages;
+    /**
+     * 璁板綍褰撳墠鍦ㄧ嚎杩炴帴鏁�
+     */
+    public static final Map<String, ArrayList<WebSocketServer>> sessionMap = new ConcurrentHashMap<>();
+
+    String username;
+    Session session;
+
+    public WebSocketServer() {
+        this.messages = new ArrayList<>();
+    }
+
+    /**
+     * 杩炴帴寤虹珛鎴愬姛璋冪敤鐨勬柟娉�
+     */
+    @OnOpen
+    public void onOpen(Session session, @PathParam("username") String username) {
+        this.username = username;
+        this.session = session;
+        List<WebSocketServer> webSocketServers = sessionMap.get(username);
+        if (webSocketServers == null) {
+            ArrayList<WebSocketServer> arrayListwebserver = new ArrayList<WebSocketServer>();
+            arrayListwebserver.add(this);
+            sessionMap.put(username, arrayListwebserver);
+        } else {
+            webSocketServers.add(this);
+        }
+
+        log.info("鏈夋柊鐢ㄦ埛鍔犲叆锛寀sername={}, 褰撳墠鍦ㄧ嚎浜烘暟涓猴細{}", username, sessionMap.get(username).size());
+
+        // JSONObject result = new JSONObject();
+        // JSONArray array = new JSONArray();
+        // result.set("users", array);
+        // for (Object key : sessionMap.keySet()) {
+        // JSONObject jsonObject = new JSONObject();
+        // jsonObject.set("username", key);
+        // array.add(jsonObject);
+        // }
+
+        // sendAllMessage(JSONUtil.toJsonStr(result)); // 鍚庡彴鍙戦�佹秷鎭粰鎵�鏈夌殑瀹㈡埛绔�
+    }
+
+    /**
+     * 杩炴帴鍏抽棴璋冪敤鐨勬柟娉�
+     */
+    @OnClose
+    public void onClose(Session session, @PathParam("username") String username) {
+        List<WebSocketServer> webSocketServers = sessionMap.get(username);
+        ArrayList<WebSocketServer> arrayListwebserver = new ArrayList<WebSocketServer>();
+        if (webSocketServers.size() > 1) {
+            for (WebSocketServer webSocketServer : webSocketServers) {
+                if (webSocketServer != this) {
+                    arrayListwebserver.add(webSocketServer);
+                }
+            }
+            sessionMap.put(username, arrayListwebserver);
+            log.info("绉婚櫎username={}涓�鍚嶇敤鎴穝ession, {}鐨勫綋鍓嶅湪绾夸汉鏁颁负锛歿}", username, username, sessionMap.get(username).size());
+        } else {
+            sessionMap.remove(username);
+            log.info("绉婚櫎username={}涓�鍚嶇敤鎴穝ession, {}杩炴帴鍏抽棴, 褰撳墠杩炴帴鏁颁负锛歿}", username, username, sessionMap.size());
+        }
+
+    }
+
+    /**
+     * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉�
+     * 鍚庡彴鏀跺埌瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅
+     * onMessage 鏄竴涓秷鎭殑涓浆绔�
+     * 鎺ュ彈 娴忚鍣ㄧ socket.send 鍙戦�佽繃鏉ョ殑 json鏁版嵁
+     *
+     * @param message 瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅
+     */
+    @OnMessage
+    public void onMessage(String message, Session session, @PathParam("username") String username) {
+        log.info("鏈嶅姟绔敹鍒扮敤鎴穟sername={}鐨勬秷鎭�:{}", username, message);
+        JSONObject obj = JSONUtil.parseObj(message);
+        String text = obj.getStr("data");
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.set("message", text);
+        this.messages.add(text);
+        this.sendMessage(jsonObject.toString()); // JSONUtil.toJsonStr(jsonObject)
+
+    }
+
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error("鍙戠敓閿欒");
+        error.printStackTrace();
+    }
+
+    /**
+     * 鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔�
+     */
+    public void sendMessage(String message) {
+        try {
+            // log.info("鏈嶅姟绔粰瀹㈡埛绔痆{}]鍙戦�佹秷鎭瘂}", this.session.getId(), message);
+            this.session.getBasicRemote().sendText(message);
+        } catch (Exception e) {
+            log.error("鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔け璐�", e);
+        }
+    }
+
+    // /**
+    //  * 鏈嶅姟绔彂閫佹秷鎭粰鎵�鏈夊鎴风
+    //  */
+    // public void sendAllMessage(String message) {
+    //     try {
+    //         for (WebSocketServer webSocketServer : sessionMap.values()) {
+    //             // log.info("鏈嶅姟绔粰瀹㈡埛绔痆{}]鍙戦�佹秷鎭瘂}", this.session.getId(), message);
+    //             webSocketServer.sendMessage(message);
+    //         }
+    //     } catch (Exception e) {
+    //         log.error("鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔け璐�", e);
+    //     }
+    // }
+
+    public List<String> getMessages() {
+        return messages;
+
+    }
+
+    public void clearMessages() {
+        messages.clear();
+    }
+
+
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcAlarm.json b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcAlarm.json
new file mode 100644
index 0000000..acfdad0
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcAlarm.json
@@ -0,0 +1,371 @@
+{
+  "plcAddressBegin": "DB104.0.0",
+  "plcAddressLenght": "91",
+  "dataType": "bit",
+  "parameteInfor": [
+    {
+      "codeId": "D01VFDerror",
+      "addressIndex": 0
+    },
+    {
+      "codeId": "D02VFDerror",
+      "addressIndex": 1
+    },
+    {
+      "codeId": "D03VFDerror",
+      "addressIndex": 2
+    },
+    {
+      "codeId": "D04VFDerror",
+      "addressIndex": 3
+    },
+    {
+      "codeId": "D05VFDerror",
+      "addressIndex": 4
+    },
+    {
+      "codeId": "D06VFDerror",
+      "addressIndex": 5
+    },
+    {
+      "codeId": "B01VFDerror",
+      "addressIndex": 6
+    },
+    {
+      "codeId": "B02VFDerror",
+      "addressIndex": 7
+    },
+    {
+      "codeId": "A01VFDerror",
+      "addressIndex": 8
+    },
+    {
+      "codeId": "A02VFDerror",
+      "addressIndex": 9
+    },
+    {
+      "codeId": "A01servoturnerror",
+      "addressIndex": 10
+    },
+    {
+      "codeId": "A02servoturnerror",
+      "addressIndex": 11
+    },
+    {
+      "codeId": "A01servotravelerror",
+      "addressIndex": 12
+    },
+    {
+      "codeId": "A02servotravelerror",
+      "addressIndex": 13
+    },
+    {
+      "codeId": "B01servotravelerror",
+      "addressIndex": 14
+    },
+    {
+      "codeId": "B02servotravelerror",
+      "addressIndex": 15
+    },
+    {
+      "codeId": "D01DECerror",
+      "addressIndex": 16
+    },
+    {
+      "codeId": "D01poserror",
+      "addressIndex": 17
+    },
+    {
+      "codeId": "D02DECerror",
+      "addressIndex": 18
+    },
+    {
+      "codeId": "D02poserror",
+      "addressIndex": 19
+    },
+    {
+      "codeId": "D03DECerror",
+      "addressIndex": 20
+    },
+    {
+      "codeId": "D03poserror",
+      "addressIndex": 21
+    },
+    {
+      "codeId": "D04DECerror",
+      "addressIndex": 22
+    },
+    {
+      "codeId": "D04poserror",
+      "addressIndex": 23
+    },
+    {
+      "codeId": "D05DECerror",
+      "addressIndex": 24
+    },
+    {
+      "codeId": "D05poserror",
+      "addressIndex": 25
+    },
+    {
+      "codeId": "D06DECerror",
+      "addressIndex": 26
+    },
+    {
+      "codeId": "D06poserror",
+      "addressIndex": 27
+    },
+    {
+      "codeId": "A01DECerror",
+      "addressIndex": 28
+    },
+    {
+      "codeId": "A01poserror",
+      "addressIndex": 29
+    },
+    {
+      "codeId": "A02DECerror",
+      "addressIndex": 30
+    },
+    {
+      "codeId": "A02poserror",
+      "addressIndex": 31
+    },
+    {
+      "codeId": "B01INDECerror",
+      "addressIndex": 32
+    },
+    {
+      "codeId": "B01INposerror",
+      "addressIndex": 33
+    },
+    {
+      "codeId": "B01OUTDECerror",
+      "addressIndex": 34
+    },
+    {
+      "codeId": "B01OUTposerror",
+      "addressIndex": 35
+    },
+    {
+      "codeId": "B02INDECerror",
+      "addressIndex": 36
+    },
+    {
+      "codeId": "B02INposerror",
+      "addressIndex": 37
+    },
+    {
+      "codeId": "B02OUTDECerror",
+      "addressIndex": 38
+    },
+    {
+      "codeId": "B02OUTposerror",
+      "addressIndex": 39
+    },
+    {
+      "codeId": "D01Scanglassexceedinglimit",
+      "addressIndex": 40
+    },
+    {
+      "codeId": "emergencystopalarm",
+      "addressIndex": 41
+    },
+    {
+      "codeId": "Moreglassthanknown",
+      "addressIndex": 42
+    },
+    {
+      "codeId": "lessglassthanknown",
+      "addressIndex": 43
+    },
+    {
+      "codeId": "D01conveyortimeoutalarm",
+      "addressIndex": 44
+    },
+    {
+      "codeId": "D02conveyortimeoutalarm",
+      "addressIndex": 45
+    },
+    {
+      "codeId": "D03conveyortimeoutalarm",
+      "addressIndex": 46
+    },
+    {
+      "codeId": "D04conveyortimeoutalarm",
+      "addressIndex": 47
+    },
+    {
+      "codeId": "D05conveyortimeoutalarm",
+      "addressIndex": 48
+    },
+    {
+      "codeId": "D06conveyortimeoutalarm",
+      "addressIndex": 49
+    },
+    {
+      "codeId": "A01conveyortimeoutalarm",
+      "addressIndex": 50
+    },
+    {
+      "codeId": "A02conveyortimeoutalarm",
+      "addressIndex": 51
+    },
+    {
+      "codeId": "B01conveyortimeoutalarm",
+      "addressIndex": 52
+    },
+    {
+      "codeId": "B02conveyortimeoutalarm",
+      "addressIndex": 53
+    },
+    {
+      "codeId": "A01conveyorLeftsafetyalarm",
+      "addressIndex": 54
+    },
+    {
+      "codeId": "A01conveyorrightsafetyalarm",
+      "addressIndex": 55
+    },
+    {
+      "codeId": "A02conveyorLeftsafetyalarm",
+      "addressIndex": 56
+    },
+    {
+      "codeId": "A02conveyorrightsafetyalarm",
+      "addressIndex": 57
+    },
+    {
+      "codeId": "1#buffersafetyalarm",
+      "addressIndex": 58
+    },
+    {
+      "codeId": "2#buffersafetyalarm",
+      "addressIndex": 59
+    },
+    {
+      "codeId": "3#buffersafetyalarm",
+      "addressIndex": 60
+    },
+    {
+      "codeId": "4#buffersafetyalarm",
+      "addressIndex": 61
+    },
+    {
+      "codeId": "A01.SRrightinposerror",
+      "addressIndex": 62
+    },
+    {
+      "codeId": "A02.SRleftinposerror",
+      "addressIndex": 63
+    },
+    {
+      "codeId": "B01.SRleftinposerror",
+      "addressIndex": 64
+    },
+    {
+      "codeId": "B01.SRleftdecerror",
+      "addressIndex": 65
+    },
+    {
+      "codeId": "B01.SRrightdecerror",
+      "addressIndex": 66
+    },
+    {
+      "codeId": "B01.SRrightinposerror",
+      "addressIndex": 67
+    },
+    {
+      "codeId": "B02.SRleftinposerror",
+      "addressIndex": 68
+    },
+    {
+      "codeId": "B02.SRleftdecerror",
+      "addressIndex": 69
+    },
+    {
+      "codeId": "B02.SRrightdecerror",
+      "addressIndex": 70
+    },
+    {
+      "codeId": "B02.SRrightinposerror",
+      "addressIndex": 71
+    },
+    {
+      "codeId": "A01servoturnhomed",
+      "addressIndex": 72
+    },
+    {
+      "codeId": "A02servoturnhomed",
+      "addressIndex": 73
+    },
+    {
+      "codeId": "A01servotravelhomed",
+      "addressIndex": 74
+    },
+    {
+      "codeId": "A02servotravelhomed",
+      "addressIndex": 75
+    },
+    {
+      "codeId": "B01servotravelhomed",
+      "addressIndex": 76
+    },
+    {
+      "codeId": "B02servotravelhomed",
+      "addressIndex": 77
+    },
+    {
+      "codeId": "resetDelay",
+      "addressIndex": 78
+    },
+    {
+      "codeId": "A01travelNegativelimit",
+      "addressIndex": 79
+    },
+    {
+      "codeId": "A01travelPositivelimit",
+      "addressIndex": 80
+    },
+    {
+      "codeId": "A01turnuplimit",
+      "addressIndex": 81
+    },
+    {
+      "codeId": "A01turndownlimit",
+      "addressIndex": 82
+    },
+    {
+      "codeId": "A02travelNegativelimit",
+      "addressIndex": 83
+    },
+    {
+      "codeId": "A02travelPositivelimit",
+      "addressIndex": 84
+    },
+    {
+      "codeId": "A02turnuplimit",
+      "addressIndex": 85
+    },
+    {
+      "codeId": "A02turndownlimit",
+      "addressIndex": 86
+    },
+    {
+      "codeId": "B01travelNegativelimit",
+      "addressIndex": 87
+    },
+    {
+      "codeId": "B01travelPositivelimit",
+      "addressIndex": 88
+    },
+    {
+      "codeId": "B02travelNegativelimit",
+      "addressIndex": 89
+    },
+    {
+      "codeId": "B02travelPositivelimit",
+      "addressIndex": 90
+    }
+  ]
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcMes.json b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcMes.json
new file mode 100644
index 0000000..ab5d4cd
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcMes.json
@@ -0,0 +1,50 @@
+{
+   "plcAddressBegin":"DB105.0",
+   "plcAddressLenght":"12",
+   "dataType":"word",
+   "parameteInfor":[
+      {
+         "codeId": "OutActivate",
+         "addressIndex":"0",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+          "codeId": "Addgoal",
+          "addressIndex":"2",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"m/min"      
+       },
+       {
+          "codeId": "AddLength",
+          "addressIndex":"4",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"m/min"       
+       },
+       {
+          "codeId": "AddWidth",
+          "addressIndex":"6",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       },
+       {
+          "codeId": "AddCount",
+          "addressIndex":"8",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       },
+       {
+          "codeId": "OutStart",
+          "addressIndex":"10",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       }
+
+   ]
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcParameter.json b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcParameter.json
new file mode 100644
index 0000000..afbe090
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcParameter.json
@@ -0,0 +1,610 @@
+{
+   "plcAddressBegin":"DB100.0",
+   "plcAddressLenght":"198",
+   "dataType":"word",
+   "parameteInfor":[
+      {
+         "codeId": "conveyorVelocity(Max)",
+         "addressIndex":"0",
+         "addressLenght":"2",
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+          "codeId": "conveyorVelocity(AutoFAST)",
+          "addressIndex":"2",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"m/min"      
+       },
+       {
+          "codeId": "conveyorVelocity(AutoSLOW)",
+          "addressIndex":"4",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"m/min"       
+       },
+       {
+          "codeId": "conveyorVelocity(Manual)",
+          "addressIndex":"6",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       },
+       {
+          "codeId": "A01A02TURNJOGVelocity",
+          "addressIndex":"8",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       },
+       {
+          "codeId": "A01A02TRAVELJOGVelocity",
+          "addressIndex":"10",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       },
+       {
+          "codeId": "B01B02TRAVELJOGVelocity",
+          "addressIndex":"12",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       },
+       {
+          "codeId": "A01A02TURNPOSVelocityAUTO",
+          "addressIndex":"14",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       },
+       {
+          "codeId": "A01TURNPOSVelocitymanual",
+          "addressIndex":"16",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       },
+       {
+         "codeId": "A01A02TRAVELPOSVelocityAUTO",
+         "addressIndex":"18",
+         "addressLenght":"2",
+         "ratio":"1",
+         "unit":"mm/S"
+      },
+     {
+       "codeId": "A01TRAVELPOSVelocitymanual",
+       "addressIndex":"20",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm/S"
+     },
+     {
+       "codeId": "B01B02TRAVELPOSVelocityAUTO",
+       "addressIndex":"22",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm/S"
+     },
+     {
+       "codeId": "B01TRAVELPOSVelocitymanual",
+       "addressIndex":"24",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm/S"
+     },
+     {
+       "codeId": "A01A02conveyorVelocity(Max)",
+       "addressIndex":"26",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"m/min"
+     },
+     {
+       "codeId": "A01A02conveyorVelocity(AutoFAST)",
+       "addressIndex":"28",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"m/min"
+     },
+     {
+       "codeId": "A01A02conveyorVelocity(AutoSLOW)",
+       "addressIndex":"30",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"m/min"
+     },
+     {
+       "codeId": "B01B02conveyorVelocity(Manual)",
+       "addressIndex":"32",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"m/min"
+     },
+     {
+       "codeId": "B01B02conveyorVelocity(Max)",
+       "addressIndex":"34",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"m/min"
+     },
+     {
+       "codeId": "B01B02conveyorVelocity(AutoFAST)",
+       "addressIndex":"36",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"m/min"
+     },
+     {
+       "codeId": "B01B02conveyorVelocity(AutoSLOW)",
+       "addressIndex":"38",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"m/min"
+     },
+     {
+       "codeId": "B01B02conveyorVelocity(Manual)",
+       "addressIndex":"40",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"m/min"
+     },
+     {
+       "codeId": "gridspacing",
+       "addressIndex":"42",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A01Spliceaddresssetting",
+       "addressIndex":"44",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A02Spliceaddresssetting",
+       "addressIndex":"46",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A011#gridaddress",
+       "addressIndex":"48",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A0122#gridaddress",
+       "addressIndex":"50",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A0143#gridaddress",
+       "addressIndex":"52",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A0164#gridaddress",
+       "addressIndex":"54",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A0185#gridaddress",
+       "addressIndex":"56",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A01106#gridaddress",
+       "addressIndex":"58",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A01127#gridaddress",
+       "addressIndex":"60",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A01148#gridaddress",
+       "addressIndex":"62",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A01169#gridaddress",
+       "addressIndex":"64",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A01190#gridaddress",
+       "addressIndex":"66",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A021#gridaddress",
+       "addressIndex":"68",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A0222#gridaddress",
+       "addressIndex":"70",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A0243#gridaddress",
+       "addressIndex":"72",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A0264#gridaddress",
+       "addressIndex":"74",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A0285#gridaddress",
+       "addressIndex":"76",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A02106#gridaddress",
+       "addressIndex":"78",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A02127#gridaddress",
+       "addressIndex":"80",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A02148#gridaddress",
+       "addressIndex":"82",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A02169#gridaddress",
+       "addressIndex":"84",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A02190#gridaddress",
+       "addressIndex":"86",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "B011#gridaddress",
+       "addressIndex":"88",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "B0122#gridaddress",
+       "addressIndex":"90",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "B0143#gridaddress",
+       "addressIndex":"92",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "B0164#gridaddress",
+       "addressIndex":"94",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "B0185#gridaddress",
+       "addressIndex":"96",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "B02106#gridaddress",
+       "addressIndex":"98",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "B02127#gridaddress",
+       "addressIndex":"100",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "B02148#gridaddress",
+       "addressIndex":"102",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "B02169#gridaddress",
+       "addressIndex":"104",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "B02190#gridaddress",
+       "addressIndex":"106",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"mm"
+     },
+     {
+       "codeId": "A01Targetgrid(Manual)",
+       "addressIndex":"108",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": " A02Targetgrid(Manual)",
+       "addressIndex":"110",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "B01Targetgrid(Manual)",
+       "addressIndex":"112",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "B02Targetgrid(Manual)",
+       "addressIndex":"114",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "A01turnTargetAngle(Manual)",
+       "addressIndex":"116",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"掳"
+     },
+     {
+       "codeId": "A02turnTargetAngle(Manual)",
+       "addressIndex":"118",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"掳"
+     },
+     {
+       "codeId": "A01turnAngle1",
+       "addressIndex":"120",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"掳"
+     },
+     {
+       "codeId": "A01turnAngle2",
+       "addressIndex":"122",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"掳"
+     },
+     {
+       "codeId": "A01turnAngle3",
+       "addressIndex":"124",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"掳"
+     },
+     {
+       "codeId": "A01turnAngle4",
+       "addressIndex":"126",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"掳"
+     },
+     {
+       "codeId": "A02turnAngle1",
+       "addressIndex":"128",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"掳"
+     },
+     {
+       "codeId": "A02turnAngle2",
+       "addressIndex":"130",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"掳"
+     },
+     {
+       "codeId": "A02turnAngle3",
+       "addressIndex":"132",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"掳"
+     },
+     {
+       "codeId": "A02turnAngle4",
+       "addressIndex":"134",
+       "addressLenght":"2",
+       "ratio":"1",
+       "unit":"掳"
+     },
+     {
+       "codeId": "Minimumglasslength",
+       "addressIndex":"136",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "Minimumglassheight",
+       "addressIndex":"138",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "Maximumglasslength",
+       "addressIndex":"140",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "Maximumglassheight",
+       "addressIndex":"142",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "A01cellsGlassNum",
+       "addressIndex":"144",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "A02cellsGlassNum",
+       "addressIndex":"146",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "A01ID",
+       "addressIndex":"148",
+       "addressLenght":"14",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "A02ID",
+       "addressIndex":"162",
+       "addressLenght":"14",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "A02TRAVELPOSVelocitymanual",
+       "addressIndex":"176",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "B02TRAVELPOSVelocitymanual",
+       "addressIndex":"178",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "Startingpositionofthefeedca",
+       "addressIndex":"180",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "Targetpositionofthefeedcar",
+       "addressIndex":"182",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "Lengthofincomingglass",
+       "addressIndex":"184",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "Widthofincomingglass",
+       "addressIndex":"186",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     },
+     {
+       "codeId": "Startingpositionoftheexitcar",
+       "addressIndex":"188",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     }, {
+       "codeId": "Exitcartargetposition",
+       "addressIndex":"190",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     }
+     , {
+       "codeId": "A02TURNPOSVelocitymanual",
+       "addressIndex":"192",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     }
+     , {
+       "codeId": "A01delayTime",
+       "addressIndex":"194",
+       "addressLenght":"2",
+       "ratio":"1"
+
+     }
+
+
+   ]
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcRead.json b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcRead.json
new file mode 100644
index 0000000..f3ebb33
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcRead.json
@@ -0,0 +1,195 @@
+{
+   "plcAddressBegin": "DB106.0",
+   "plcAddressLenght": "66",
+   "dataType": "word",
+   "parameteInfor": [{
+         "codeId": "A01Position",
+         "addressIndex": "0",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "A01FlipPosition",
+         "addressIndex": "2",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "A01QuestStartPosition",
+         "addressIndex": "4",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "A01EndPosition",
+         "addressIndex": "6",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "FeedCarStatus",
+         "addressIndex": "8",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "A02QuestOver",
+         "addressIndex": "10",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "A02Position",
+         "addressIndex": "12",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "A02FlipPosition",
+         "addressIndex": "14",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "A02QuestStartPosition",
+         "addressIndex": "16",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "A02EndPosition",
+         "addressIndex": "18",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "ExitCarStatus",
+         "addressIndex": "20",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "A02QuestOver",
+         "addressIndex": "22",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "FeedRequest",
+         "addressIndex": "24",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "FeedID",
+         "addressIndex": "26",
+         "addressLenght":"14", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B01Position",
+         "addressIndex": "40",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B01QuestPosition",
+         "addressIndex": "42",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B01CurrentTaskMode",
+         "addressIndex": "44",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B01CarStatus",
+         "addressIndex": "46",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B01CarTaskStatus",
+         "addressIndex": "48",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B02Position",
+         "addressIndex": "50",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B02CarCurrentTask",
+         "addressIndex": "52",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B02CurrentTaskMode",
+         "addressIndex": "54",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B02CarStatus",
+         "addressIndex": "56",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B02CarSaskStatus",
+         "addressIndex": "58",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B01CompleteTheReport",
+         "addressIndex": "60",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "B02CompleteTheReport",
+         "addressIndex": "62",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+         "codeId": "OutRequest",
+         "addressIndex": "64",
+         "addressLenght":"2", 
+         "ratio":"1",
+         "unit":"m/min"    
+      }
+   ]
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcSign.json b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcSign.json
new file mode 100644
index 0000000..8f9295a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcSign.json
@@ -0,0 +1,460 @@
+{
+  "plcAddressBegin": "DB102.0.0",
+  "plcAddressLenght": "112",
+  "dataType": "bit",
+  "parameteInfor": [
+    {
+      "codeId": "D01.SRdec",
+      "addressIndex": 0
+    },
+    {
+      "codeId": "D01.SRinpos",
+      "addressIndex": 1
+    },
+    {
+      "codeId": "D02.SRdec",
+      "addressIndex": 2
+    },
+    {
+      "codeId": "D02.SRinpos",
+      "addressIndex": 3
+    },
+    {
+      "codeId": "D03.SRinto",
+      "addressIndex": 4
+    },
+    {
+      "codeId": "D03.SRdec",
+      "addressIndex": 5
+    },
+    {
+      "codeId": "D03.SRinpos",
+      "addressIndex": 6
+    },
+    {
+      "codeId": "D04.SRdec",
+      "addressIndex": 7
+    },
+    {
+      "codeId": "D04.SRinpos",
+      "addressIndex": 8
+    },
+    {
+      "codeId": "D05.SRdec",
+      "addressIndex": 9
+    },
+    {
+      "codeId": "D05.SRinpos",
+      "addressIndex": 10
+    },
+    {
+      "codeId": "D06.SRdec",
+      "addressIndex": 11
+    },
+    {
+      "codeId": "D06.SRinpos",
+      "addressIndex": 12
+    },
+    {
+      "codeId": "B01.SRindec",
+      "addressIndex": 13
+    },
+    {
+      "codeId": "B01.SRininpos",
+      "addressIndex": 14
+    },
+    {
+      "codeId": "B01.SRoutdec",
+      "addressIndex": 15
+    },
+    {
+      "codeId": "B01.SRoutinpos",
+      "addressIndex": 16
+    },
+    {
+      "codeId": "B01.SRturnon",
+      "addressIndex": 17
+    },
+    {
+      "codeId": "B01.SRturnoff",
+      "addressIndex": 18
+    },
+    {
+      "codeId": "B01.SRup",
+      "addressIndex": 19
+    },
+    {
+      "codeId": "B01.SRdown",
+      "addressIndex": 20
+    },
+    {
+      "codeId": "B02.SRoutdec",
+      "addressIndex": 21
+    },
+    {
+      "codeId": "B02.SRoutinpos",
+      "addressIndex": 22
+    },
+    {
+      "codeId": "B02.SRindec",
+      "addressIndex": 23
+    },
+    {
+      "codeId": "B02.SRininpos",
+      "addressIndex": 24
+    },
+    {
+      "codeId": "B02.SRturnon",
+      "addressIndex": 25
+    },
+    {
+      "codeId": "B02.SRturnoff",
+      "addressIndex": 26
+    },
+    {
+      "codeId": "B02.SRup",
+      "addressIndex": 27
+    },
+    {
+      "codeId": "B02.SRdown",
+      "addressIndex": 28
+    },
+    {
+      "codeId": "B01.SRinsafety",
+      "addressIndex": 29
+    },
+    {
+      "codeId": "B01.SRoutsafety",
+      "addressIndex": 30
+    },
+    {
+      "codeId": "B02.SRinsafety",
+      "addressIndex": 31
+    },
+    {
+      "codeId": "SB.start(+)",
+      "addressIndex": 32
+    },
+    {
+      "codeId": "SB.stop(-)",
+      "addressIndex": 33
+    },
+    {
+      "codeId": "SB.reset",
+      "addressIndex": 34
+    },
+    {
+      "codeId": "SB.auto/manul",
+      "addressIndex": 35
+    },
+    {
+      "codeId": "D01.SB.confirm",
+      "addressIndex": 36
+    },
+    {
+      "codeId": "SB.emg",
+      "addressIndex": 37
+    },
+    {
+      "codeId": "D01.SB.start",
+      "addressIndex": 38
+    },
+    {
+      "codeId": "D06.SB.start",
+      "addressIndex": 39
+    },
+    {
+      "codeId": "B02.SRoutsafety",
+      "addressIndex": 40
+    },
+    {
+      "codeId": "SafetyDoor.requset",
+      "addressIndex": 41
+    },
+    {
+      "codeId": "SafetyDoor.confirm",
+      "addressIndex": 42
+    },
+    {
+      "codeId": "SafetyDoor.reset",
+      "addressIndex": 43
+    },
+    {
+      "codeId": "Sspce",
+      "addressIndex": 44
+    },
+    {
+      "codeId": "Sspce",
+      "addressIndex": 45
+    },
+    {
+      "codeId": "Sspce",
+      "addressIndex": 46
+    },
+    {
+      "codeId": "Sspce",
+      "addressIndex": 47
+    },
+    {
+      "codeId": "A01.SRleftdec",
+      "addressIndex": 48
+    },
+    {
+      "codeId": "A01.SRleftinpos",
+      "addressIndex": 49
+    },
+    {
+      "codeId": "A01.SRleftsafety",
+      "addressIndex": 50
+    },
+    {
+      "codeId": "A01.SRrightdec",
+      "addressIndex": 51
+    },
+    {
+      "codeId": "A01.SRrightinpos",
+      "addressIndex": 52
+    },
+    {
+      "codeId": "A01.SRrightsafety",
+      "addressIndex": 53
+    },
+    {
+      "codeId": "A01.SRturnhome",
+      "addressIndex": 54
+    },
+    {
+      "codeId": "A01.SRturnup",
+      "addressIndex": 55
+    },
+    {
+      "codeId": "A01.SRturndown",
+      "addressIndex": 56
+    },
+    {
+      "codeId": "A01.SRtravelhome",
+      "addressIndex": 57
+    },
+    {
+      "codeId": "A01.SRtravelleftdec",
+      "addressIndex": 58
+    },
+    {
+      "codeId": "A01.SRtravelleftlimit",
+      "addressIndex": 59
+    },
+    {
+      "codeId": "A01.SRtravelrightdec",
+      "addressIndex": 60
+    },
+    {
+      "codeId": "A01.SRtravelrightlimit",
+      "addressIndex": 61
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 62
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 63
+    },
+    {
+      "codeId": "A02.SRleftdec",
+      "addressIndex": 64
+    },
+    {
+      "codeId": "A02.SRleftinpos",
+      "addressIndex": 65
+    },
+    {
+      "codeId": "A02.SRleftsafety",
+      "addressIndex": 66
+    },
+    {
+      "codeId": "A02.SRrightdec",
+      "addressIndex": 67
+    },
+    {
+      "codeId": "A02.SRrightinpos",
+      "addressIndex": 68
+    },
+    {
+      "codeId": "A02.SRrightsafety",
+      "addressIndex": 69
+    },
+    {
+      "codeId": "A02.SRturnhome",
+      "addressIndex": 70
+    },
+    {
+      "codeId": "A02.SRturnup",
+      "addressIndex": 71
+    },
+    {
+      "codeId": "A02.SRturndown",
+      "addressIndex": 72
+    },
+    {
+      "codeId": "A02.SRtravelhome",
+      "addressIndex": 73
+    },
+    {
+      "codeId": "A02.SRtravelleftdec",
+      "addressIndex": 74
+    },
+    {
+      "codeId": "A02.SRtravelleftlimit",
+      "addressIndex": 75
+    },
+    {
+      "codeId": "A02.SRtravelrightdec",
+      "addressIndex": 76
+    },
+    {
+      "codeId": "A02.SRtravelrightlimit",
+      "addressIndex": 77
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 78
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 79
+    },
+    {
+      "codeId": "B01.SRorigin",
+      "addressIndex": 80
+    },
+    {
+      "codeId": "B01.SRleftlimit",
+      "addressIndex": 81
+    },
+    {
+      "codeId": "B01.SRrightlimit",
+      "addressIndex": 82
+    },
+    {
+      "codeId": "B02.SRorigin",
+      "addressIndex": 83
+    },
+    {
+      "codeId": "B02.SRleftlimit",
+      "addressIndex": 84
+    },
+    {
+      "codeId": "B02.SRrightlimit",
+      "addressIndex": 85
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 86
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 87
+    },
+    {
+      "codeId": "LED.red",
+      "addressIndex": 88
+    },
+    {
+      "codeId": "LED.green",
+      "addressIndex": 89
+    },
+    {
+      "codeId": "LED.yellow",
+      "addressIndex": 90
+    },
+    {
+      "codeId": "D01.LED.green",
+      "addressIndex": 91
+    },
+    {
+      "codeId": "D06.LED.green",
+      "addressIndex": 92
+    },
+    {
+      "codeId": "B01.YV.turn",
+      "addressIndex": 93
+    },
+    {
+      "codeId": "B01.YV.updown",
+      "addressIndex": 94
+    },
+    {
+      "codeId": "B01.YV.gassing",
+      "addressIndex": 95
+    },
+    {
+      "codeId": "B02.YV.turn",
+      "addressIndex": 96
+    },
+    {
+      "codeId": "B02.YV.updown",
+      "addressIndex": 97
+    },
+    {
+      "codeId": "B02.YV.gassing",
+      "addressIndex": 98
+    },
+    {
+      "codeId": "SafetyDoor.Led",
+      "addressIndex": 99
+    },
+    {
+      "codeId": "SafetyDoor.open",
+      "addressIndex": 100
+    },
+    {
+      "codeId": "D01SB.confirm",
+      "addressIndex": 101
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 102
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 103
+    },
+    {
+      "codeId": "A01oilPump",
+      "addressIndex": 104
+    },
+    {
+      "codeId": "A01motorCtr",
+      "addressIndex": 105
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 106
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 107
+    },
+    {
+      "codeId": "A02oilPump",
+      "addressIndex": 108
+    },
+    {
+      "codeId": "A02motorCtr",
+      "addressIndex": 109
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 110
+    },
+    {
+      "codeId": "space",
+      "addressIndex": 111
+    }
+    ,
+    {
+      "codeId": "space",
+      "addressIndex": 111
+    }
+  ]
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcState.json b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcState.json
new file mode 100644
index 0000000..595107e
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcState.json
@@ -0,0 +1,285 @@
+{
+  "plcAddressBegin": "DB103.0",
+  "plcAddressLenght": "258",
+  "dataType": "word",
+  "parameteInfor": [
+    {
+      "codeId": "D01.State",
+      "addressIndex": "0",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "D02.State",
+      "addressIndex": "2",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "B01.State",
+      "addressIndex": "4",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "B02.State",
+      "addressIndex": "6",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A01.State",
+      "addressIndex": "8",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A02.State",
+      "addressIndex": "10",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "D03.State",
+      "addressIndex": "12",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "D04.State",
+      "addressIndex": "14",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "D05.State",
+      "addressIndex": "16",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "D06.State",
+      "addressIndex": "18",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A01tavelActualPosition",
+      "addressIndex": "20",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A01turnActualangle",
+      "addressIndex": "22",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A02tavelActualPosition",
+      "addressIndex": "24",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A02turnActualangle",
+      "addressIndex": "26",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "B01tavelActualPosition",
+      "addressIndex": "28",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "B02tavelActualPosition",
+      "addressIndex": "30",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A01CurrentGrid",
+      "addressIndex": "32",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A02CurrentGrid",
+      "addressIndex": "34",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "B01CurrentGrid",
+      "addressIndex": "36",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "B01TargetGrid",
+      "addressIndex": "38",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "B02CurrentGrid",
+      "addressIndex": "40",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "B02TargetGrid",
+      "addressIndex": "42",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "D01ID",
+      "addressIndex": "44",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "D02ID",
+      "addressIndex": "58",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "D03ID",
+      "addressIndex": "72",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "D04ID",
+      "addressIndex": "86",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "D05ID",
+      "addressIndex": "100",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "D06ID",
+      "addressIndex": "114",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "A01ID1",
+      "addressIndex": "128",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "A01ID2",
+      "addressIndex": "142",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "A02ID1",
+      "addressIndex": "156",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "A02ID2",
+      "addressIndex": "170",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "B01ID1",
+      "addressIndex": "184",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "B01ID2",
+      "addressIndex": "198",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "B02ID1",
+      "addressIndex": "212",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "B02ID2",
+      "addressIndex": "226",
+      "addressLenght": "14",
+      "unit": ""
+    },
+    {
+      "codeId": "A01conveyorFaultcodes",
+      "addressIndex": "240",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A01turnservoFaultcodes",
+      "addressIndex": "242",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A01travelservoFaultcodes",
+      "addressIndex": "244",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A02conveyorFaultcodes",
+      "addressIndex": "246",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A02turnservoFaultcodes",
+      "addressIndex": "248",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "A02travelservoFaultcodes",
+      "addressIndex": "250",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "B01travelservoFaultcodes",
+      "addressIndex": "252",
+      "addressLenght": "2",
+      "unit": ""
+    },
+    {
+      "codeId": "B02travelservoFaultcodes",
+      "addressIndex": "254",
+      "addressLenght": "2",
+      "unit": ""
+    }
+    ,
+    {
+      "codeId": "Scanningguns",
+      "addressIndex": "256",
+      "addressLenght": "2",
+      "unit": ""
+    }
+    ,
+    {
+      "codeId": "Frameid",
+      "addressIndex": "270",
+      "addressLenght": "2",
+      "unit": ""
+    }
+  ]
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcTest.json b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcTest.json
new file mode 100644
index 0000000..95a2010
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcTest.json
@@ -0,0 +1,378 @@
+{
+  "plcAddressBegin": "DB101.0.0",
+  "plcAddressLenght": "93",
+  "dataType": "bit",
+  "parameteInfor": [
+    {
+      "codeId": "D01VFDconveyor",
+      "addressIndex": 0
+    },
+    {
+      "codeId": "D02VFDconveyor",
+      "addressIndex": 1
+    },
+    {
+      "codeId": "D03VFDconveyor",
+      "addressIndex": 2
+    },
+    {
+      "codeId": "D04VFDconveyor",
+      "addressIndex": 3
+    },
+    {
+      "codeId": "D05VFDconveyor",
+      "addressIndex": 4
+    },
+    {
+      "codeId": "D06VFDconveyor",
+      "addressIndex": 5
+    },
+    {
+      "codeId": "A01VFDconveyor",
+      "addressIndex": 6
+    },
+    {
+      "codeId": "A02VFDconveyor",
+      "addressIndex": 7
+    },
+    {
+      "codeId": "B01VFDconveyor",
+      "addressIndex": 8
+    },
+    {
+      "codeId": "B02VFDconveyor",
+      "addressIndex": 9
+    },
+    {
+      "codeId": "A01SERVETURN",
+      "addressIndex": 10
+    },
+    {
+      "codeId": "A02SERVETURN",
+      "addressIndex": 11
+    },
+    {
+      "codeId": "A01SERVETRAVEL",
+      "addressIndex": 12
+    },
+    {
+      "codeId": "A02SERVETRAVEL",
+      "addressIndex": 13
+    },
+    {
+      "codeId": "B01SERVETRAVEL",
+      "addressIndex": 14
+    },
+    {
+      "codeId": "B02SERVETRAVEL",
+      "addressIndex": 15
+    },
+    {
+      "codeId": "A01SERVETURNPOS",
+      "addressIndex": 16
+    },
+    {
+      "codeId": "A02SERVETURNPOS",
+      "addressIndex": 17
+    },
+    {
+      "codeId": "A01SERVETRAVELPOS",
+      "addressIndex": 18
+    },
+    {
+      "codeId": "A02SERVETRAVELPOS",
+      "addressIndex": 19
+    },
+    {
+      "codeId": "B01SERVETRAVELPOS",
+      "addressIndex": 20
+    },
+    {
+      "codeId": "B02SERVETRAVELPOS",
+      "addressIndex": 21
+    },
+    {
+      "codeId": "B01YVTURN",
+      "addressIndex": 22
+    },
+    {
+      "codeId": "B01YVUPDOWN",
+      "addressIndex": 23
+    },
+    {
+      "codeId": "B02YVTURN",
+      "addressIndex": 24
+    },
+    {
+      "codeId": "B02YVUPDOWN",
+      "addressIndex": 25
+    },
+    {
+      "codeId": "B01YVGassing",
+      "addressIndex": 26
+    },
+    {
+      "codeId": "B02YVGassing",
+      "addressIndex": 27
+    },
+    {
+      "codeId": "A01VFDconveyorreverse",
+      "addressIndex": 28
+    },
+    {
+      "codeId": "A02VFDconveyorreverse",
+      "addressIndex": 29
+    },
+    {
+      "codeId": "A01SERVETURNreset",
+      "addressIndex": 30
+    },
+    {
+      "codeId": "A01SERVETURNhome",
+      "addressIndex": 31
+    },
+    {
+      "codeId": "A01SERVETRAVELreset",
+      "addressIndex": 32
+    },
+    {
+      "codeId": "A02SERVETURNreset",
+      "addressIndex": 33
+    },
+    {
+      "codeId": "A02SERVETURNhome",
+      "addressIndex": 34
+    },
+    {
+      "codeId": "A02SERVETRAVELreset",
+      "addressIndex": 35
+    },
+    {
+      "codeId": "B01SERVETRAVELreset",
+      "addressIndex": 36
+    },
+    {
+      "codeId": "B01SERVETRAVELhome",
+      "addressIndex": 37
+    },
+    {
+      "codeId": "B02SERVETRAVELreset",
+      "addressIndex": 38
+    },
+    {
+      "codeId": "B02SERVETRAVELhome",
+      "addressIndex": 39
+    },
+    {
+      "codeId": "Manualstoragestartup",
+      "addressIndex": 40
+    },
+    {
+      "codeId": "Manualoutputstartup",
+      "addressIndex": 41
+    },
+    {
+      "codeId": "A01oilpump",
+      "addressIndex": 42
+    },
+    {
+      "codeId": "A02oilpump",
+      "addressIndex": 43
+    },
+    {
+      "codeId": "A01get1#gridaddress",
+      "addressIndex": 44
+    },
+    {
+      "codeId": "A01get22#gridaddress",
+      "addressIndex": 45
+    },
+    {
+      "codeId": "A01get43#gridaddress",
+      "addressIndex": 46
+    },
+    {
+      "codeId": "A01get64#gridaddress",
+      "addressIndex": 47
+    },
+    {
+      "codeId": "A01get85#gridaddress",
+      "addressIndex": 48
+    },
+    {
+      "codeId": "A01get106#gridaddress",
+      "addressIndex": 49
+    },
+    {
+      "codeId": "A01get127#gridaddress",
+      "addressIndex": 50
+    },
+    {
+      "codeId": "A01get148#gridaddress",
+      "addressIndex": 51
+    },
+    {
+      "codeId": "A01get169#gridaddress",
+      "addressIndex": 52
+    },
+    {
+      "codeId": "A02get190#gridaddress",
+      "addressIndex": 53
+    },
+    {
+      "codeId": "A02get1#gridaddress",
+      "addressIndex": 54
+    },
+    {
+      "codeId": "A02get22#gridaddress",
+      "addressIndex": 55
+    },
+    {
+      "codeId": "A02get43#gridaddress",
+      "addressIndex": 56
+    },
+    {
+      "codeId": "A02get64#gridaddress",
+      "addressIndex": 57
+    },
+    {
+      "codeId": "A02get85#gridaddress",
+      "addressIndex": 58
+    },
+    {
+      "codeId": "A02get106#gridaddress",
+      "addressIndex": 59
+    },
+    {
+      "codeId": "A02get127#gridaddress",
+      "addressIndex": 60
+    },
+    {
+      "codeId": "A02get148#gridaddress",
+      "addressIndex": 61
+    },
+    {
+      "codeId": "A02get169#gridaddress",
+      "addressIndex": 62
+    },
+    {
+      "codeId": "A02get190#gridaddress",
+      "addressIndex": 63
+    },
+    {
+      "codeId": "B01get1#gridaddress",
+      "addressIndex": 64
+    },
+    {
+      "codeId": "B01get22#gridaddress",
+      "addressIndex": 65
+    },
+    {
+      "codeId": "B01get43#gridaddress",
+      "addressIndex": 66
+    },
+    {
+      "codeId": "B01get64#gridaddress",
+      "addressIndex": 67
+    },
+    {
+      "codeId": "B01get85#gridaddress",
+      "addressIndex": 68
+    },
+    {
+      "codeId": "B02get106#gridaddress",
+      "addressIndex": 69
+    },
+    {
+      "codeId": "B02get127#gridaddress",
+      "addressIndex": 70
+    },
+    {
+      "codeId": "B02get148#gridaddress",
+      "addressIndex": 71
+    },
+    {
+      "codeId": "B02get169#gridaddress",
+      "addressIndex": 72
+    },
+    {
+      "codeId": "B02get190#gridaddress",
+      "addressIndex": 73
+    },
+    {
+      "codeId": "D01IDClean",
+      "addressIndex": 74
+    },
+    {
+      "codeId": "D02IDClean",
+      "addressIndex": 75
+    },
+    {
+      "codeId": "D03IDClean",
+      "addressIndex": 76
+    },
+    {
+      "codeId": "D04IDClean",
+      "addressIndex": 77
+    },
+    {
+      "codeId": "D05IDClean",
+      "addressIndex": 78
+    },
+    {
+      "codeId": "D06IDClean",
+      "addressIndex": 79
+    },
+    {
+      "codeId": "A01IDClean",
+      "addressIndex": 80
+    },
+    {
+      "codeId": "A02IDClean",
+      "addressIndex": 81
+    },
+    {
+      "codeId": "B01IDClean",
+      "addressIndex": 82
+    },
+    {
+      "codeId": "B02IDClean",
+      "addressIndex": 83
+    },
+    {
+      "codeId": "abort/resumeTasks",
+      "addressIndex": 84
+    },
+    {
+      "codeId": "A01SERVETRAVELhome",
+      "addressIndex": 85
+    },
+    {
+      "codeId": "A02SERVETRAVELhome",
+      "addressIndex": 86
+    },
+    {
+      "codeId": "A01A02travelHoming",
+      "addressIndex": 87
+    },
+    {
+      "codeId": "A01halfAutoSelect",
+      "addressIndex": 88
+    },
+    {
+      "codeId": "A02halfAutoSelect",
+      "addressIndex": 89
+    },
+    {
+      "codeId": "A02abortTasks",
+      "addressIndex": 90
+    },
+    {
+      "codeId": "emgHMI",
+      "addressIndex": 91
+    },
+    {
+      "codeId": "Scanningmethod",
+      "addressIndex": 92
+  ]
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/Plcframe.json b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/Plcframe.json
new file mode 100644
index 0000000..c270227
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/Plcframe.json
@@ -0,0 +1,51 @@
+{
+   "plcAddressBegin":"DB17.0",
+   "plcAddressLenght":"40",
+   "dataType":"word",
+   "parameteInfor":[
+      {
+         "codeId": "E01id",  
+         "addressIndex":"0",
+         "addressLenght":"14", 
+         "ratio":"1",
+         "unit":"m/min"    
+      },
+      {
+          "codeId": "E01Quest",
+          "addressIndex":"16",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"m/min"      
+       },
+       {
+          "codeId": "E01Reply",
+          "addressIndex":"18",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"m/min"       
+       },
+       {
+          "codeId": "J01Quest",
+          "addressIndex":"20",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       },
+       {
+          "codeId": "J01id",
+          "addressIndex":"22",
+          "addressLenght":"14",
+          "ratio":"1",
+          "unit":"mm/S"
+       },
+       {
+          "codeId": "J01TurnGo",
+          "addressIndex":"38",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":"mm/S"
+       }
+
+
+   ]
+}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/alarm.xlsx b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/alarm.xlsx
new file mode 100644
index 0000000..50b26dc
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/alarm.xlsx
Binary files differ
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/sign.xlsx b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/sign.xlsx
new file mode 100644
index 0000000..3922301
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/sign.xlsx
Binary files differ
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/test.xlsx b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/test.xlsx
new file mode 100644
index 0000000..9862cf5
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/test.xlsx
Binary files differ
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
new file mode 100644
index 0000000..bea69f9
--- /dev/null
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
@@ -0,0 +1,35 @@
+server:
+  port: 8085
+
+spring:
+  datasource:
+    dynamic:
+      primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster
+      strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
+      datasource:
+        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
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 10.153.19.150:8848
+  application:
+    name: unLoadGlass
+  redis:
+    database: 0
+    host: 10.153.19.150
+    port: 6379
+    password: 123456
+mybatis-plus:
+  mapper-locations: classpath*:mapper/**/*.xml
+
+  #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  # 璁剧疆 MyBatis 鏃ュ織绾у埆涓� ERROR
+logging:
+  level:
+    com:
+      baomidou:
+        mybatisplus=ERROR:
diff --git a/hangzhoumesParent/moduleService/pom.xml b/hangzhoumesParent/moduleService/pom.xml
new file mode 100644
index 0000000..4541032
--- /dev/null
+++ b/hangzhoumesParent/moduleService/pom.xml
@@ -0,0 +1,72 @@
+<?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>
+            <artifactId>servicebase</artifactId>
+            <groupId>com.mes</groupId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <artifactId>springsecurity</artifactId>
+            <groupId>com.mes</groupId>
+            <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>
\ No newline at end of file
diff --git a/hangzhoumesParent/pom.xml b/hangzhoumesParent/pom.xml
new file mode 100644
index 0000000..d0f498c
--- /dev/null
+++ b/hangzhoumesParent/pom.xml
@@ -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>
\ No newline at end of file
diff --git a/hangzhoumesParent/readMe.md b/hangzhoumesParent/readMe.md
new file mode 100644
index 0000000..d2ffe19
--- /dev/null
+++ b/hangzhoumesParent/readMe.md
@@ -0,0 +1,18 @@
+1銆佹湰椤圭洰鏄熀浜嶴pringBoot+Mybatis-plus+Mysql+Vue+ElementUI+Maven+Nginx鐨勯」鐩�,鐩綍缁撴灉缁撴瀯濡備笅锛�
+
+    鈹溾攢src
+    鈹溾攢com   鎻掍欢鐢熸垚鐨勪唬鐮侊紝鐢ㄤ簬鍚勮嚜寮�鍙戜娇鐢�
+    鈹�  鈹斺攢mes
+    鈹溾攢common  鍏叡妯″潡
+    鈹�  鈹溾攢src
+    鈹斺攢moduleService
+        鈹溾攢-CacheGlassModule
+        鈹溾攢-CacheVerticalGlassModule
+        鈹溾攢-LoadGlassModule
+        鈹溾攢-TemperingGlassModule
+        鈹斺攢-UnLoadGlassModule
+
+2銆佽繍琛岄」鐩細 1銆佸惎鍔ㄩ」鐩細鍚姩鍚勮嚜妯″潡鍚姩绫� 渚嬪锛欳acheGlassModuleApplication.java#main()
+2銆佽闂」鐩細 3銆侀」鐩湴鍧�锛歨ttp://localhost:8081/mesModuleCache/doc.html#/home
+4銆侀」鐩鏄庯細 鏈晫闈负Api鏂囨。锛屽叕寮�浜哄憳鐢ㄤ簬璋冭瘯 3銆侀」鐩鏄庯細 1銆侀」鐩垎涓哄叕鍏辨ā鍧梒ommon锛屼笟鍔℃ā鍧梞oduleService銆� 2銆乧ommon妯″潡涓寘鍚叕鍏辩殑绫伙紝渚嬪锛氬叕鍏辩殑瀹炰綋绫汇�佹嫤鎴櫒銆佸伐鍏风被銆佸父閲忕被銆佸紓甯稿鐞嗙瓑銆�
+3銆乵oduleService涓寘鍚悇涓笟鍔℃ā鍧楋紝姣忎釜涓氬姟妯″潡涓寘鍚竴涓惎鍔ㄧ被,寮�鍙戜汉鍛橀渶瑕佸紑鍙戝悇鑷礋璐g殑涓氬姟妯″潡銆� 4銆乧om鐩綍涓嬬殑鏂囦欢涓烘彃浠剁敓鎴愮殑浠g爜锛岀敤浜庡悇鑷紑鍙戜娇鐢ㄣ�傜敤瀹屽垹闄ゅ嵆鍙紝閬垮厤褰卞搷寮�鍙戙��
\ No newline at end of file

--
Gitblit v1.8.0