wu
2024-04-01 e0a7b6146f74f1680231ff9c508990220a166d97
Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes
55个文件已修改
4 文件已重命名
92个文件已添加
115个文件已删除
42320 ■■■■■ 已修改文件
CacheGlassModule/MES-Module.iml 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/common/PlcTools/S7control.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/controller/OrderTestController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/controller/TidyUpGlassModuleController.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/TaskCache.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/device/InitUtil.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/device/PLCAutoMes.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/device/PlcBitInfo.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/device/PlcBitObject.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/device/PlcParameterInfo.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/entity/device/PlcParameterObject.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/mapper/SelectInfo.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/mapper/userInfo/SysMenuItemMapper.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/mapper/userInfo/UserMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/CacheGlassService/Logic.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/hangzhoumes/hangzhoumesService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/pp/SelectdppService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/userInfo/SysErrorService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/userInfo/SysMenuItemService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/userInfo/SysMenuService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/java/com/mes/service/userInfo/UserService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/resources/application.yml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/resources/banner.txt 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/target/classes/application.yml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/MES-Module (1).iml 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/MES-Module.iml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/mapper/userInfo/SysMenuItemMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/mapper/userInfo/UserMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/service/userInfo/SysErrorService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/service/userInfo/SysMenuItemService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/service/userInfo/SysMenuService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/java/com/mes/service/userInfo/UserService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/src/main/resources/application.yml 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/target/MES-Module-0.0.1-SNAPSHOT.jar.original 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/target/maven-archiver/pom.properties 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/target/surefire-reports/TEST-com.mes.MesApplicationTests.xml 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TemperingGlassModule/target/surefire-reports/com.mes.MesApplicationTests.txt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/config.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package-lock.json 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/1.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/11.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/2.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/3.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/88.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/9.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/aaa.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/background.jpg 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/bigcar01.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/dipan.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/emi.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/main.css 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/s.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/shangpianji .png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/shangpianji.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/sz.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/taimian.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/user.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/woshihuancun.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/xmjc.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/xmjclzh.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/components/ComputedTest.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/components/basic/BasicTable.vue 675 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/components/basic/product/GlassType.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/components/sd/product/GlassType.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/layout/MainErpView.vue 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/router/index.js 837 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/unloadrequest.js 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/webSocket.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Caching/caching.vue 766 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/HomeView.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Identify/identify.vue 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/LoginView.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchase.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseStorage.vue 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/RegisterView.vue 156 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/CreateReturns.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/ReturnsReport.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/SelectDeliveryList.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/SelectReturns.vue 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/returns.vue 426 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 568 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Create.vue 724 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Details.vue 453 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Payment.vue 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Return.vue 593 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Select.vue 486 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Storage.vue 603 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/stockBasicData.vue 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/TL/Temperedlayout/Temperedlayout.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass.rar 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass.zip 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/Landingindication.vue 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/UnLoadGlass.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachineracktwo.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredient/CreateIngredients.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredient/Ingredients.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredient/SelectIngredients.vue 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/AccessoriesMonthlySettlement.vue 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/CreateOutBound.vue 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/IngredientsStock.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/MaterialOutbound.vue 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/OriginalMonthlySettlement.vue 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/ReturnToStorage.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/ReturnToStorageCreate.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/SelectIngredientsStock.vue 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/CreateProductStock.vue 339 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/FinishedGoodsIssue.vue 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/FinishedProductOut.vue 317 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/FinishedProductReturn.vue 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/FinishedProductRework.vue 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/OrderAllocation.vue 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/ProductStock.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/ProductStockList.vue 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/ReworkRecord.vue 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/TakeOutRecord.vue 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/TransferRecord.vue 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainTrader/CreateTrader.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainTrader/SelectTrader.vue 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainTrader/Trader.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/purchaseOrder/PurchaseOrder.vue 114 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/purchaseOrder/Select.vue 1355 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/purchaseReturn/PurchaseReturn.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/purchaseReturn/Select.vue 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/purchaseStorage/PurchaseStorage.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/purchaseStorage/Select.vue 276 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockReport/StockMonthReport.vue 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockReport/StockReport.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockReport/StockWarehouseReport.vue 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockReport/SubsidiaryMonthReport.vue 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockReport/WarehouseReport.vue 387 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/BOM.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/BenchmarkBOM.vue 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/OrderBOM.vue 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/OrderBOMDetails.vue 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/SelectBOM.vue 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/StandardBOM.vue 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/StandardBOMDetail.vue 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/Replenish/AddReplenish.vue 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/Replenish/PrintReplenishFlowCard.vue 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/Replenish/Replenish.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/Replenish/SelectReplenish.vue 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/machine/AddMachine.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/machine/AddMaintenanceAndRepair.vue 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/machine/Machine.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/machine/MaintenanceAndRepair.vue 316 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/machine/SelectMachine.vue 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/AddProcessCard.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/PrintFlowCard.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/PrintProcess.vue 954 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/ProcessCard.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/ProcessCardDetails.vue 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/ProductionScheduling.vue 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/SelectAddProcess.vue 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/SelectPrintFlowCard.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/SelectProcessCard.vue 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/SplittingDetails.vue 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/DamageReport.vue 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/EquipmentOutput.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/OrderBOMOutside.vue 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/OrderPlanDecomposition.vue 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/ProcessCardProgress.vue 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/ProcessToBeCompleted.vue 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/ProductionSchedule.vue 341 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/QualityReport.vue 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/RawMaterialRequisition.vue 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/Report.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/SplittingDetailsOutside.vue 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/TaskCompletionStatus.vue 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/TeamOutput.vue 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/WorkInProgress.vue 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/Yield.vue 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/AddReportingWork.vue 395 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/QualityInReviewDetail.vue 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/QualityInspectionReview.vue 253 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/ReportingWorkDetail.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/ReportingWorks.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/SelectReportingWorks.vue 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/rework/AddRework.vue 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/rework/Rework.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/rework/SelectRework.vue 436 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/workOrder/AddWorkOrder.vue 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/workOrder/ReleaseWorkOrder.vue 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/workOrder/SelectAddWorkOrder.vue 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/workOrder/SelectWorkOrder.vue 366 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/workOrder/WorkOrder.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/customer/CreateCustomer.vue 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/customer/SelectCustomer.vue 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/delivery/CreateDelivery.vue 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/delivery/Delivery.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/delivery/DeliveryReport.vue 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/delivery/SelectDelivery.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/delivery/SelectOrderList.vue 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/order/CreateOrder.vue 483 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/order/Order.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/order/OrderReport.vue 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/order/SelectOrder.vue 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/order/UpdateOrderCraft.vue 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/CreateProduct.vue 435 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/Product.vue 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/SelectProduct.vue 421 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/Test.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/Test11.vue 520 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/testSort.vue 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/returns/Returns.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/returns/SelectReturns.vue 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/vite.config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/mockPLCData.properties 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/common/PlcTools/MockS7PLC.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/common/PlcTools/MockS7PLCtwo.java 276 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/common/RabbitMQUtils.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/controller/DownGlassInfoController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/controller/userInfo/UserController.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/entity/DownWorkstation.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/entity/device/PlcParameterObject.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/mapper/DownGlassInfoMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/mapper/DownWorkstationMapper.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/mapper/userInfo/SysMenuItemMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/DownGlassInfoService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/GlassHandler.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/ModuleA.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/ModuleB.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/PLCAutoMes.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/PlcService.java 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/Plcaction.java 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/Plchome.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/userInfo/SysErrorService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/userInfo/SysMenuItemService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/userInfo/SysMenuService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/userInfo/UserService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/tools/InitUtil.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/PlcAlarm.json 371 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/PlcMes.json 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/PlcParameter.json 610 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/PlcRead.json 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/PlcSign.json 460 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/PlcState.json 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/PlcTest.json 378 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/Plcframe.json 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/alarm.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/sign.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/JsonFile/test.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/resources/application.yml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/PlcAlarm.json 371 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/PlcMes.json 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/PlcParameter.json 610 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/PlcRead.json 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/PlcSign.json 460 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/PlcState.json 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/PlcTest.json 378 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/Plcframe.json 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/alarm.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/sign.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/JsonFile/test.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/target/classes/application.yml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/MES-Module.iml
@@ -1,133 +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 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$">
      <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$/../../Code/HangZhouMes/CacheGlassModule/target/classes" />
    <output-test url="file://$MODULE_DIR$/../../Code/HangZhouMes/CacheGlassModule/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>
CacheGlassModule/src/main/java/com/mes/common/PlcTools/S7control.java
@@ -1,7 +1,9 @@
package com.mes.common.PlcTools;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;
import java.sql.Time;
import java.util.ArrayList;
import java.util.List;
@@ -9,15 +11,37 @@
import com.github.xingshuangs.iot.protocol.s7.service.MultiAddressWrite;
import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
import com.google.common.primitives.Bytes;
import org.apache.ibatis.jdbc.Null;
public class S7control {
    S7PLC s7PLC; // PLC通讯类实例
    private EPlcType plcType = EPlcType.S1500; // 西门子PLC类型
    private String ip = "192.168.10.1"; // plc ip地址
    private int port = 102; // plc 端口号
    
    public S7control(EPlcType plcType, String ip, int port, int rack, int slot) {
    private static volatile S7control instance = null;
    private S7control() {
        if (s7PLC == null)
            s7PLC = new S7PLC(plcType, ip, port,0,0);
    } 
    public S7control(EPlcType plcType,String ip,int port,int a,int b) {
        if (s7PLC == null)
            s7PLC = new S7PLC(plcType, ip, port,a,b);
    }
    // 单例模式 获取类的唯一实例
    public static S7control getinstance() {
        if (instance == null) {
            synchronized (S7control.class) {
                if (instance == null)
                    instance = new S7control();
            }
        }
        return instance;
    }
    /**
     * 关闭西门子s7通讯连接
     */
@@ -181,7 +205,6 @@
    public List<Short> ReadWord(String address, int count) {
        if (s7PLC == null)
            return null;
        List<String> addresslist = GetAddressList(address, count, 16);
        try {
            return s7PLC.readInt16(addresslist);
@@ -191,7 +214,13 @@
            return null;
        }
    }
    public byte[] Readbyte(String address, int count) {
        byte[] byt=new byte[count];
        int wordcount=((count%2==0)?count/2:count+1);
        List<Short> word=ReadWord(address,wordcount);
        return byt;
    }
    /**
     * 按指定的地址 读取byte结果集
     * 
@@ -269,6 +298,41 @@
}
    public List<String> readStringsandword(List<String> addressList) {
        if (s7PLC == null) {
            return null;
        }
        List<String> result = new ArrayList<>();
        for (String address : addressList) {
            try {
                if (address.contains("-")) {
                    address = address.substring(0, address.indexOf("-"));
                    byte[] bytes = s7PLC.readByte(address, 14);
                    if (bytes != null) {
                        String str = new String(bytes, StandardCharsets.UTF_8);
                        result.add(str);
                    }
                } else {
                    Short value = s7PLC.readInt16(address);
                    result.add(value.toString());
                }
            } catch (Exception e) {
                System.out.println("读取 " + address + " 失败:" + e.getMessage());
                result.add(null);
            }
        }
        return result;
    }
//不连续地址写入Word
    public void WriteWord(List<String> address, List<Short> datas) {
        if (s7PLC == null)
@@ -300,7 +364,7 @@
            glassidlist.add(Byte.valueOf(String.valueOf(iditem)));
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        WriteByte(addr, bytes);
        S7control.getinstance().WriteByte(addr, bytes);
    }
//读取不连续word
@@ -410,4 +474,11 @@
        }
        return addresslist;
    }
    public void writeString(String addr,String data) {
        s7PLC.writeString(addr,data);
    }
    public String readStrings(String addr) {
        return s7PLC.readString(addr);
    }
}
CacheGlassModule/src/main/java/com/mes/controller/OrderTestController.java
File was deleted
CacheGlassModule/src/main/java/com/mes/controller/TidyUpGlassModuleController.java
New file
@@ -0,0 +1,71 @@
package com.mes.controller;
import com.mes.mapper.SelectInfo;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.mes.common.Result;
import com.mes.entity.Tempered;
import com.mes.service.pp.SelectdppService;
import com.mes.service.hangzhoumes.*;
@RestController
@RequestMapping("/TidyUpGlassModule")
// TidyUpGlassModule 理片模块
public class TidyUpGlassModuleController {
    @Autowired
    private SelectInfo SelectInfo;
    @Autowired
    private SelectdppService SelectppService;
    @Autowired
    private hangzhoumesService hangzhoumesService;
    @GetMapping("/SelectTerritoryInfo") // 查询钢化版图信息-根据 工程号
    @ResponseBody
    public Result SelectTerritoryInfo(@RequestParam(name = "ProcessId", required = false) String ProcessId) {
        List<Tempered> h = SelectppService.SelectTemperedTerritory(ProcessId);
        System.out.println(h.size()+":"+ProcessId);
        return Result.seccess(h);
    }
    @GetMapping("/CutTerritory") // 查询切割版图信息-根据 工程号
    @ResponseBody
    public Result CutTerritory(String ProcessId) {
        List<Map> h = SelectppService.SelectCutTerritory(ProcessId);
        System.out.println(h.size());
        return Result.seccess(h);
    }
    @GetMapping("/SelectCutTerritory") // 识别显示  当前版图
    @ResponseBody
    public Result SelectCutTerritory(String ProcessId) {
        List<Map> h = SelectppService.SelectCutTerritory("P24032508");
        System.out.println(h.size());
        return Result.seccess(h);
    }
    @GetMapping("/SelectCageInfo") // 查询笼内信息
    @ResponseBody
    public Result SelectCageInfo(String ProcessId) {
        List<Map> h = SelectppService.SelectCutTerritory("P24032508");
        System.out.println(h.size());
        return Result.seccess(h);
    }
    @GetMapping("/SelectEdgTask") //磨边任务
    @ResponseBody
    public Result SelectEdgTask(String ProcessId) {
        List<Map> EdgTasks = hangzhoumesService.SelectEdgInfo("1");
        System.out.println(EdgTasks.size());
        return Result.seccess(EdgTasks);
    }
}
CacheGlassModule/src/main/java/com/mes/entity/TaskCache.java
New file
@@ -0,0 +1,15 @@
package com.mes.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data  //lombok 简写java代码 实体类的get与set
@TableName("task_cache")
public class TaskCache {
    private  String ID;//任务编号
    private  String startcell;//起始
    private  String endcell;//结束
    private  String tasktype;//任务类型
    private  String taskstauts;//任务状态
}
CacheGlassModule/src/main/java/com/mes/entity/device/InitUtil.java
New file
@@ -0,0 +1,124 @@
package com.mes.entity.device;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.mes.common.PlcTools.S7control;
public class InitUtil {
    //初始化word
    public static PlcParameterObject initword(String jsonFilePath) {
        try {
            FileReader fileReader = new FileReader(jsonFilePath);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuilder content = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line);
            }
            bufferedReader.close();
            fileReader.close();
            JSONObject jsonfileobj = new JSONObject(content.toString());
            JSONArray jsonArray = jsonfileobj.getJSONArray("parameteInfor");
            PlcParameterObject plcParameterObject = new PlcParameterObject();
            plcParameterObject.setPlcAddressBegin(jsonfileobj.getStr("plcAddressBegin"));//设置起始位地址
            plcParameterObject.setPlcAddressLength(Integer.valueOf(jsonfileobj.getStr("plcAddressLenght")));//设置地址长度
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject parameterObj = jsonArray.getJSONObject(i);
                PlcParameterInfo plcParameterInfo = new PlcParameterInfo(jsonfileobj.getStr("plcAddressBegin")); //参数实例
                String codeid = parameterObj.getStr("codeId");
                plcParameterInfo.setCodeId(codeid);
                plcParameterInfo.setAddressIndex(Integer.valueOf(parameterObj.getStr("addressIndex")));
                //plcParameterInfo.setRatio(Integer.valueOf(parameterObj.getStr("ratio")));
                plcParameterInfo.setAddressLength(Integer.valueOf(parameterObj.getStr("addressLenght")));
                plcParameterInfo.setUnit(parameterObj.getStr("unit"));
                plcParameterObject.addPlcParameter(plcParameterInfo);
            }
           // byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02};
           // byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
           // plcParameterObject.setPlcParameterList(getplcvlues);
            return plcParameterObject;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    //初始化bit
    public static PlcBitObject initbit(String jsonFilePath) {
        PlcBitObject plcBitObject = new PlcBitObject();
        try {
            FileReader fileReader = new FileReader(jsonFilePath);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuilder content = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line);
            }
            bufferedReader.close();
            fileReader.close();
            JSONObject jsonfileobj = new JSONObject(content.toString());
            JSONArray jsonArray = jsonfileobj.getJSONArray("parameteInfor");
            plcBitObject.setPlcAddressBegin(jsonfileobj.getStr("plcAddressBegin"));//设置起始位地址
            plcBitObject.setPlcAddressLength(Integer.valueOf(jsonfileobj.getStr("plcAddressLenght")));//设置地址长度
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject parameterObj = jsonArray.getJSONObject(i);
                PlcBitInfo plcBitInfo = new PlcBitInfo(jsonfileobj.getStr("plcAddressBegin")); //参数实例
                String codeid = parameterObj.getStr("codeId");
                plcBitInfo.setCodeId(codeid);
                plcBitInfo.setAddressIndex(Integer.valueOf(parameterObj.getStr("addressIndex")));
                plcBitObject.addPlcBit(plcBitInfo);
            }
            System.out.println("");
        } catch (IOException e) {
            e.printStackTrace();
        }
           //Boolean[] values1 = { false, true, true, true, false, false, true, false,
          //  false, true ,true };
   // List<Boolean> getplcvlues = new ArrayList<>(Arrays.asList(values1));
//        List<Boolean> getplcvlues = S7control.getinstance().ReadBits(plcBitObject.getPlcAddressBegin(), plcBitObject.getPlcAddressLength());
//        plcBitObject.setPlcBitList(getplcvlues);
        return plcBitObject;
    }
//
    public static void readAndUpdateBitValues(PlcBitObject plcBitObject) {
//        Boolean[] values1 = { false, true, true, true, false, false, true, false,
//          false, true ,true };
//         List<Boolean> getplcvlues = new ArrayList<>(Arrays.asList(values1));
        List<Boolean> getplcvlues = S7control.getinstance().ReadBits(plcBitObject.getPlcAddressBegin(), plcBitObject.getPlcAddressLength());
        plcBitObject.setPlcBitList(getplcvlues);
    }
    public static void readAndUpdateWordValues(PlcParameterObject plcParameterObject) {
        // byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02};
        byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
        plcParameterObject.setPlcParameterList(getplcvlues);
    }
}
CacheGlassModule/src/main/java/com/mes/entity/device/PLCAutoMes.java
New file
@@ -0,0 +1,95 @@
package com.mes.entity.device;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static com.mes.entity.device.InitUtil.readAndUpdateWordValues;
public class PLCAutoMes extends Thread {
    // // 用于存储应用程序的配置信息
    // private Configuration config;
    private static InitUtil initUtil;
    // public static PlcParameterObject PlcMesObject;
    // public static PlcParameterObject PlcReadObject;
    // public static PlcParameterObject PlcframeObject;
    // // 创建一个自定义的 S7 控制器消息处理器对象
    // MessageHandler customS7Control = new MessageHandler();
    // 单例实例
    private static PLCAutoMes instance;
    // private static String PlcMes = PLCAutoMes.class.getResource("/JsonFile/PlcMes.json").getPath();
    private static String PlcAlbania = PLCAutoMes.class.getResource("/JsonFile/PlcAlbania.json").getPath();
    // private static String PlcRead = PLCAutoMes.class.getResource("/JsonFile/PlcRead.json").getPath();
    // private static String Plcframe = PLCAutoMes.class.getResource("/JsonFile/Plcframe.json").getPath();
    // private static String PlcParameter = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcParameter.json").getPath();
    // private static String PlcSign = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcSign.json").getPath();
    // private static String PlcState = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcState.json").getPath();
    // private static String PlcAlarm = PLCAutoMes.class.getResource("/JsonFile/PlcAlarm.json").getPath();
    // private static String PlcTest = PLCAutoMes.class.getResource("/JsonFile/PlcTest.json").getPath();
    // 调用initword方法
    // public static PlcParameterObject plcParameterObject = initUtil.initword(PlcParameter);
    // public static PlcBitObject plcPlcTest = initUtil.initbit(PlcTest);
    // public static PlcBitObject  plcBitObject = initUtil.initbit(PlcSign);
    // public static PlcParameterObject  plcStateObject= initUtil.initword(PlcState);
    // public static PlcBitObject plcPlcAlarm = initUtil.initbit(PlcAlarm);
    public static PlcParameterObject PlcMesObject = InitUtil.initword(PlcAlbania);
    // public static PlcParameterObject PlcReadObject = initUtil.initword(PlcRead);
    // public static PlcParameterObject PlcframeObject = initUtil.initword(Plcframe);
    // 私有构造函数
    public PLCAutoMes() throws IOException {
        //config = new Configuration("config.properties");
        initUtil = new InitUtil();
    }
    // 获取单例实例
    public static synchronized PLCAutoMes getInstance() throws IOException {
        if (instance == null) {
            instance = new PLCAutoMes();
        }
        return instance;
    }
    @Override
    public void run() {
        while (this != null) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // System.out.println(jsonFilePath);
            //readAndUpdateWordValues(PlcReadObject);
            readAndUpdateWordValues(PlcMesObject);
            //readAndUpdateWordValues(PlcframeObject);
            // readAndUpdateWordValues(PlcframeObject);
            // readAndUpdateWordValues(plcStateObject);
            // int index = PlcMesObject.getPlcParameter("AddStart").getAddressIndex();
            // // System.out.println(index);
            // PlcMesObject.getPlcParameter("AddStart").getAddress(index);
            // // System.out.println(PlcMesObject.getPlcParameter("AddStart").getAddress(index));
            // List<String> addresses = new ArrayList<>();
            // addresses.add("FeedID");
            // addresses.add("AddStart");
            // // System.out.println(addresses);
            // // System.out.println(PlcMesObject.getPlcParameterValues(addresses));
            // List<String> addresses2 = new ArrayList<>();
            // addresses2.add("FeedID");
            // addresses2.add("FeedCarStatus");
            //System.out.println(PlcReadObject.getPlcParameterValues(addresses2));
        }
    }
}
CacheGlassModule/src/main/java/com/mes/entity/device/PlcBitInfo.java
New file
@@ -0,0 +1,77 @@
package com.mes.entity.device;
public  class PlcBitInfo {
        public PlcBitInfo(String startAddress) {
            this.startAddress = startAddress;
        }
        private String startAddress;
        // 参数标识
        private String codeId;
        // 参数名称
        private String name;
        // 读取 参数值
        private Boolean value;
        // 参数地址
        private int addressIndex;
        public String getCodeId() {
            return this.codeId;
        }
        public void setCodeId(String codeId) {
            this.codeId = codeId;
        }
        public String getName() {
            return this.name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Boolean getValue() {
            return this.value;
        }
        public void setValue(Boolean value) {
            this.value = value;
        }
        public int getAddressIndex() {
            return this.addressIndex;
        }
         /**
     * 获取地址
     *
     * @param index 索引地址
     */
        public String getAddress(int index) {
            String[] stringdatas = this.startAddress.trim().split("\\.");
            if (stringdatas.length < 2 )
                return null;
            int dbwindex = 0;
            int bitindex = 0;
             if (stringdatas.length == 3) {
                dbwindex = Integer.parseInt(stringdatas[1]);
                bitindex = Integer.parseInt(stringdatas[2]);
            } else
                return null;
              dbwindex+=index/8;
              bitindex+=index%8;
            return stringdatas[0]+"."+dbwindex+"."+bitindex;
        }
    public void setAddressIndex(int addressindex) {
            this.addressIndex = addressindex;
        }
    }
CacheGlassModule/src/main/java/com/mes/entity/device/PlcBitObject.java
New file
@@ -0,0 +1,142 @@
package com.mes.entity.device;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class PlcBitObject {
    // 该模块数据类型,数据起始位置
    private String plcAddressBegin;
    // 数据地址长度:第一参数到最后一个参数的长度
    private int plcAddressLength;
    private ArrayList<PlcBitInfo> plcBitList;
    /**
     * @return 数据区开始地址
     */
    public String getPlcAddressBegin() {
        return plcAddressBegin;
    }
    /**
     * @param plcAddressBegin 设置数据区开始地址
     */
    public void setPlcAddressBegin(String plcAddressBegin) {
        this.plcAddressBegin = plcAddressBegin;
    }
    /**
     * @return 数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public int getPlcAddressLength() {
        return plcAddressLength;
    }
    /**
     * @return 设置:数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public void setPlcAddressLength(int plcAddressLength) {
        this.plcAddressLength = plcAddressLength;
    }
    /**
     * @return 获取参数实例集合
     */
    public ArrayList<PlcBitInfo> getBitList() {
        return plcBitList;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeid 参数标识
     * @return 获取某个参数实例
     */
    public PlcBitInfo getPlcBit(String codeid) {
        if (plcBitList != null) {
            for (PlcBitInfo plcbitInfo : plcBitList) {
                if (plcbitInfo.getCodeId().equals(codeid))
                    return plcbitInfo;
            }
            return null;
        } else
            return null;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeid 参数标识
     * @return 获取某个参数实例
     */
    public List<Boolean> getPlcBitValues(List<String> codeids) {
        List<Boolean> arrayList = new ArrayList<>();
        if (plcBitList != null) {
            Map<String, Boolean> resultMap = new LinkedHashMap<>(); // 使用 LinkedHashMap 保留插入顺序
            for (PlcBitInfo plcBitInfo : plcBitList) {
                if (codeids.contains(plcBitInfo.getCodeId().toString())) {
                    resultMap.put(plcBitInfo.getCodeId().toString(), plcBitInfo.getValue());
                }
            }
            for (String codeId : codeids) { // 按照传入参数的顺序遍历
                Boolean value = resultMap.get(codeId);
                if (value != null) {
                    arrayList.add(value);
                } else {
                    arrayList.add(null); // 如果找不到对应的值,添加 null
                }
            }
        }
        return arrayList;
    }
    public List<String> getAddressListByCodeId(List<String> codeIdList) {
        List<String> addressList = new ArrayList<>();
        for (String codeId : codeIdList) {
            for (PlcBitInfo plcBitInfo : plcBitList) {
                if (plcBitInfo.getCodeId().equals(codeId)) {
                    int index = plcBitInfo.getAddressIndex();
                    String address = plcBitInfo.getAddress(index);
                    if (address != null) {
                        addressList.add(address);
                    }
                }
            }
        }
        return addressList;
    }
    /**
     * 添加参数实例
     *
     * @param param 参数实例
     */
    public void addPlcBit(PlcBitInfo param) {
        if (plcBitList != null)
            plcBitList.add(param);
        else {
            plcBitList = new ArrayList<PlcBitInfo>();
            plcBitList.add(param);
        }
    }
    /**
     * 根据PLC返回的数据 给参数实例赋值
     *
     * @param plcValueArray PLC读取回来的byte类型数据集合
     */
    public void setPlcBitList(List<Boolean> plcValueArray) {
        if (plcBitList != null) {
            for (PlcBitInfo plcbitInfo : plcBitList) {
                plcbitInfo.setValue(plcValueArray.get(plcbitInfo.getAddressIndex()));
            }
        }
    }
}
CacheGlassModule/src/main/java/com/mes/entity/device/PlcParameterInfo.java
New file
@@ -0,0 +1,128 @@
package com.mes.entity.device;
public  class PlcParameterInfo {
      public PlcParameterInfo(String startAddress) {
        this.startAddress = startAddress;
      }
        private String startAddress;
        // 参数标识
        private String codeId;
        // 参数名称
        private String name;
        // 读取 参数值
        private String value;
        // // 写入 参数值
        // private String writeValue;
        // 参数单位
        private String unit;
        // 参数值转换系数
        private int ratio;
        // 参数地址
        private int addressIndex;
        // 参数地址位长度
        private int addressLength;
        public String getCodeId() {
            return this.codeId;
        }
        public void setCodeId(String codeId) {
            this.codeId = codeId;
        }
        public String getName() {
            return this.name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getValue() {
            return this.value;
        }
        public void setValue(String value) {
            this.value = value;
        }
        // public String getWriteValue() {
        //     return this.writeValue;
        // }
        // public void setWriteValue(String writeValue) {
        //     this.writeValue = writeValue;
        // }
        public String getUnit() {
            return this.unit;
        }
        public void setUnit(String unit) {
            this.unit = unit;
        }
        public int getAddressIndex() {
            return this.addressIndex;
        }
        public void setAddressIndex(int addressindex) {
            this.addressIndex = addressindex;
        }
        public int getAddressLength() {
            return this.addressLength;
        }
        public void setAddressLength(int addresslength) {
            this.addressLength = addresslength;
        }
        public int getRatio() {
            return this.ratio;
        }
        public void setRatio(int ratio) {
            this.ratio = ratio;
        }
           /**
     * 获取地址
     *
     * @param index 索引地址
     */
    public String getAddress(int index) {
        String[] stringdatas = this.startAddress.trim().split("\\.");
        int addressLength=this.addressLength;
        if (addressLength < 2 ){
            return null;
        }
        if (addressLength == 2 ) {
            int wordindex = index;
            return stringdatas[0] + "." + wordindex;
        }
        if (addressLength == 14 ) {
            int wordindex = index;
            //int newIndex = wordindex + 13;
            return stringdatas[0] + "." + wordindex ;
        }
        return null;
    }
    public int getPlcAddress() {
        return addressIndex;
    }
    public String getAddress() {
       return getAddress(this.addressIndex);
    }
}
CacheGlassModule/src/main/java/com/mes/entity/device/PlcParameterObject.java
New file
@@ -0,0 +1,202 @@
package com.mes.entity.device;
import java.lang.reflect.Array;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class PlcParameterObject {
    // 该模块数据类型,数据起始位置
    private String plcAddressBegin;
    // 数据地址长度:第一参数到最后一个参数的长度
    private int plcAddressLength;
    private ArrayList<PlcParameterInfo> plcParameterList;
    /**
     * @return 数据区开始地址
     */
    public String getPlcAddressBegin() {
        return plcAddressBegin;
    }
    /**
     * @param plcAddressBegin 设置数据区开始地址
     */
    public void setPlcAddressBegin(String plcAddressBegin) {
        this.plcAddressBegin = plcAddressBegin;
    }
    /**
     * @return 数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public int getPlcAddressLength() {
        return plcAddressLength;
    }
    /**
     * @return 设置:数据区 读取所有数据所需的长度(以byte类型为基准)
     */
    public void setPlcAddressLength(int plcAddressLength) {
        this.plcAddressLength = plcAddressLength;
    }
    /**
     * @return 获取参数实例集合
     */
    public ArrayList<PlcParameterInfo> getPlcParameterList() {
        return plcParameterList;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeid 参数标识
     * @return 获取某个参数实例
     */
    public PlcParameterInfo getPlcParameter(String codeid) {
        if (plcParameterList != null) {
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                if (plcParameterInfo.getCodeId().equals(codeid))
                    return plcParameterInfo;
            }
            return null;
        } else
            return null;
    }
    /**
     * 根据参数标识 获取某个参数实例
     *
     * @param codeids 参数标识
     * @return 获取某个参数实例
     */
    public List<String> getPlcParameterValues(List<String> codeids) {
        List<String> arrayList = new ArrayList<>();
        if (plcParameterList != null) {
            Map<String, PlcParameterInfo> resultMap = new LinkedHashMap<>(); // 使用 LinkedHashMap 保留插入顺序
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                if (codeids.contains(plcParameterInfo.getCodeId())) {
                    resultMap.put(plcParameterInfo.getCodeId(), plcParameterInfo);
                }
            }
            for (String codeId : codeids) { // 按照传入参数的顺序遍历
                PlcParameterInfo plcParameterInfo = resultMap.get(codeId);
                if (plcParameterInfo != null) {
                    arrayList.add(plcParameterInfo.getValue());
                } else {
                    arrayList.add(null); // 如果找不到对应的值,添加 null
                }
            }
        }
        return arrayList;
    }
    public List<String> getAddressListByCodeId(List<String> codeIdList) {
        List<String> addressList = new ArrayList<>();
        for (String codeId : codeIdList) {
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                if (plcParameterInfo.getCodeId().equals(codeId)) {
                    int index = plcParameterInfo.getAddressIndex();
                    String address = plcParameterInfo.getAddress(index);
                    if (address != null) {
                        addressList.add(address);
                    }
                }
            }
        }
        return addressList;
    }
    /**
     * 添加参数实例
     *
     * @param param 参数实例
     */
    public void addPlcParameter(PlcParameterInfo param) {
        if (plcParameterList != null)
            plcParameterList.add(param);
        else {
            plcParameterList = new ArrayList<PlcParameterInfo>();
            plcParameterList.add(param);
        }
    }
    /**
     * 根据PLC返回的数据 给参数实例赋值
     *
     * @param plcValueArray PLC读取回来的byte类型数据集合
     */
    public void setPlcParameterList(byte[] plcValueArray) {
        if (plcParameterList != null) {
            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
                byte[] valueList = new byte[plcParameterInfo.getAddressLength()];
//                System.out.println(plcParameterInfo.getAddressLength());
                for (int i = 0; i < plcParameterInfo.getAddressLength(); i++) {
                    Array.setByte(valueList, i, plcValueArray[plcParameterInfo.getAddressIndex() + i]);
                }
                if (plcParameterInfo.getAddressLength()==2) {
                      plcParameterInfo.setValue(String.valueOf(byte2short(valueList)));
                }
                else if (plcParameterInfo.getAddressLength()==14) {
                    plcParameterInfo.setValue((byteToHexString(valueList)));
                }
                else
                {
                    String valuestr = new String(valueList);
                    plcParameterInfo.setValue(valuestr);
                }
            }
        }
    }
     /**
     * short类型转byte[]
     *
     * @param s short类型值
     */
    public static byte[] short2byte(short s){
        byte[] b = new byte[2];
        for(int i = 0; i < 2; i++){
            int offset = 16 - (i+1)*8; //因为byte占4个字节,所以要计算偏移量
            b[i] = (byte)((s >> offset)&0xff); //把16位分为2个8位进行分别存储
        }
        return b;
   }
     /**
     * byte[]类型转short
     *
     * @param b byte[]类型值
     */
   public static short byte2short(byte[] b){
       short l = 0;
       for (int i = 0; i < 2; i++) {
           l<<=8; //<<=和我们的 +=是一样的,意思就是 l = l << 8
           l |= (b[i] & 0xff); //和上面也是一样的  l = l | (b[i]&0xff)
       }
       return l;
   }
    public static String byteToHexString(byte[] bytes) {
        String str = new String(bytes, StandardCharsets.UTF_8);
        return str;
    }
}
CacheGlassModule/src/main/java/com/mes/mapper/SelectInfo.java
@@ -1,11 +1,12 @@
package com.mes.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.entity.EdgStorageCageDetails;
import com.mes.entity.GlassInfo;
import com.mes.entity.OrderTest;
import com.mes.entity.TaskCache;
import com.mes.entity.Tempered;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.*;
@@ -17,7 +18,61 @@
    //钢化按工程查询
    @Select("select * from `v_optimize_heat_layout` where project_no=#{projeceid} ")
    List<Tempered> SelectTempered(String projeceid);
    List<Tempered> SelectTemperedTerritory(String projeceid);
    // 切割版图按工程查询
    @Select("select * from optimize_detail where project_no=#{projeceid} ")
    List<Map> SelectCutTerritory(String projeceid);
    // 查询磨边信息
    @Select("select * from task_cache where task_type='2' and task_stauts='2' and end_cell=#{EndCell}")
    List<Map> SelectEdgInfo(String EndCell);
    // 查询笼子内空闲
    @Select("select 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 escd.* from edg_storage_cage as esc LEFT JOIN edg_storage_cage_details as escd on esc.slot=escd.slot order by esc.slot")
    List<EdgStorageCageDetails> SelectCachInfo();
    // 查询可进此片玻璃的栅格号
    @Select("select 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);
CacheGlassModule/src/main/java/com/mes/mapper/userInfo/SysMenuItemMapper.java
@@ -8,6 +8,9 @@
@Mapper
public interface SysMenuItemMapper {
     @Select("select  * from sys_menu_item")
     @Select("select * from `sys_menu_item` as a where a.state=1 order by a.menuId,a.listSort;")
     List<SysMenuItem> findAll() ;
}
CacheGlassModule/src/main/java/com/mes/mapper/userInfo/UserMapper.java
@@ -17,6 +17,7 @@
    User findOne(Integer id);
    @Select("select user_name FROM `user` where login_name=#{LoginName}  ")
    User findOneLoginName(String LoginName);
    @Select("select count(id) FROM `user` where login_name=#{userName} and password=#{password}  ")
CacheGlassModule/src/main/java/com/mes/service/CacheGlassService/Logic.java
@@ -1,10 +1,16 @@
package com.mes.service.CacheGlassService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mes.common.PlcTools.S7control;
import com.mes.entity.EdgStorageCageDetails;
import com.mes.entity.GlassInfo;
import com.mes.entity.TaskCache;
import com.mes.entity.device.PLCAutoMes;
import com.mes.entity.device.PlcParameterObject;
import com.mes.mapper.SelectInfo;
@@ -12,11 +18,12 @@
public class Logic {
    @Autowired
    private SelectInfo selectInfo;
    //识别逻辑
    //识别逻辑    不交互
    public void identify(String Number){
        //查询任务
        // PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
        // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),(short) 1);
        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存在
@@ -26,22 +33,111 @@
            //S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),(short) 2);
        }
    }
    //理片
    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=="1"){//进片请求
            processInto(Number);
        }else if(Result=="2"){//出片请求
            processOut();
        }else if(Result=="3"){//进出片请求
            if (!processOut()) {   //先出后进
                processInto(Number);
            }
        }
    }
    //理片 进
    public void process(String imagePath){
    public boolean processInto(String Number){
        //查询消息队列里的玻璃
        GlassInfo GlassInfo=selectInfo.SelectGlassId(Number);
        PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
        if(GlassInfo!=null){//存在此玻璃编号
            //同钢化版图内的栅格号
            List<EdgStorageCageDetails> 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进片
                EdgStorageCageDetails item=list.get(0);
                selectInfo.insertCacheTask(GlassInfo.getId()+"","0",item.getSlot()+"","1");
                S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),(short) 1);
                return true;
            }
        }else{
            // ID编号不存在   不处理/回复PLC  进行报警提示
        }
        //返回结果
        return false;
    }
    //理片 出
    public void processOut(String imagePath){
    public boolean processOut(){
        //查询任务
        //返回结果
        String A09=S7control.getinstance().ReadWord("DB14.56", 1).get(0)+"";
        String A10=S7control.getinstance().ReadWord("DB14.58", 1).get(0)+"";
        PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
        List<EdgStorageCageDetails> list=selectInfo.SelectCacheOut();
        boolean isOut=true;//其他情况条件 如:后续设备故障禁止理片出片 等
        if (list.size()>0&&isOut) {
            EdgStorageCageDetails item=list.get(0);
            if(A09=="0"&&A10=="1"){
                //出到  A09
                selectInfo.insertCacheTask(item.getGlassid()+"","0","09","2");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "1");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
                return true;
            }else if(A09=="1"&&A10=="0"){
                //出到  A10
                selectInfo.insertCacheTask(item.getGlassid()+"","0","10","2");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "2");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
                return true;
            }else if(A09=="0"&&A10=="0"){
                //都允许    A09/A10  上一片是否和此片玻璃尺寸尺寸相同
                String endcell="09";
                String SendEndcell="1";
                boolean If_=false;
                GlassInfo glassInfo09= selectInfo.SelectLastOutCacheInfo("09");
                GlassInfo glassInfo10= selectInfo.SelectLastOutCacheInfo("10");
                if(glassInfo10!=null&&glassInfo10.getWidth()==item.getWidth()&&glassInfo10.getHeight()==item.getHeight()){
                    endcell="10";
                    SendEndcell="2";
                }else if(glassInfo10!=null&&If_){
                    //其他条件
    }
    //磨边
    public void processMb(String imagePath){
        //查询任务
                selectInfo.insertCacheTask(item.getGlassid()+"","0",endcell,"2");
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell);
                S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1");
                return true;
            }
        }
        //返回结果
        return false;
    }
    //磨边   不交互  理片和磨边机自己交互
    public void processMb(String Number){
        //查询任务
        GlassInfo GlassInfo=selectInfo.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");
        }
        //返回结果
    }
@@ -63,6 +159,7 @@
        }
        return true;//返回 存在
    }
    //是否存在此编号玻璃 
    public boolean isExist(String Number){
        //查询是否存在
CacheGlassModule/src/main/java/com/mes/service/hangzhoumes/hangzhoumesService.java
New file
@@ -0,0 +1,41 @@
package com.mes.service.hangzhoumes;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.mes.entity.EdgStorageCageDetails;
import com.mes.entity.GlassInfo;
import com.mes.entity.Tempered;
import com.mes.mapper.SelectInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
@DS("hangzhoumes")
public class hangzhoumesService {
    @Autowired
    private SelectInfo SelectInfo;
    public GlassInfo getUserInfo(String process_id){
        return SelectInfo.SelectGlassId(process_id);
    }
    // //识别信息
    // public List<Map> SelectCutTerritory(String process_id){
    //     return SelectInfo.SelectCutTerritory(process_id);
    // }
    //理片缓存 笼内信息
    public List<EdgStorageCageDetails> SelectCageInfo(){
        return SelectInfo.SelectCachInfo();
    }
    //磨边小片信息
    public List<Map> SelectEdgInfo(String line){
        return SelectInfo.SelectEdgInfo(line);
    }
}
CacheGlassModule/src/main/java/com/mes/service/pp/SelectdppService.java
@@ -1,24 +1,14 @@
package com.mes.service.pp;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.mes.common.CacheUtil;
import com.mes.common.Result;
import com.mes.entity.GlassInfo;
import com.mes.entity.Tempered;
import com.mes.entity.userInfo.User;
import com.mes.mapper.SelectInfo;
import com.mes.mapper.userInfo.UserMapper;
import com.mes.controller.dto.UserDTO;
import com.mes.tools.TokenTools;
import org.apache.ibatis.jdbc.Null;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
@Service
@DS("pp")
@@ -31,8 +21,12 @@
        return SelectInfo.SelectGlassId(process_id);
    }
    public List<Tempered> getSelectTempered(String process_id){
        return SelectInfo.SelectTempered(process_id);
    public List<Tempered> SelectTemperedTerritory(String process_id){
        return SelectInfo.SelectTemperedTerritory(process_id);
    }
    //切割版图
    public List<Map> SelectCutTerritory(String process_id){
        return SelectInfo.SelectCutTerritory(process_id);
    }
    
CacheGlassModule/src/main/java/com/mes/service/userInfo/SysErrorService.java
@@ -7,7 +7,7 @@
import org.springframework.stereotype.Service;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class SysErrorService {
    private final SysErrorMapper sysErrorMapper;
CacheGlassModule/src/main/java/com/mes/service/userInfo/SysMenuItemService.java
@@ -9,7 +9,7 @@
import java.util.List;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class SysMenuItemService {
    @Autowired
    SysMenuItemMapper sysMenuItemMapper;
CacheGlassModule/src/main/java/com/mes/service/userInfo/SysMenuService.java
@@ -9,7 +9,7 @@
import java.util.List;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class SysMenuService {
    @Autowired
    private SysMenuMapper sysMenuMapper;
CacheGlassModule/src/main/java/com/mes/service/userInfo/UserService.java
@@ -18,7 +18,7 @@
import java.util.List;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class UserService {
    @Autowired
CacheGlassModule/src/main/resources/application.yml
@@ -7,21 +7,11 @@
spring:
  datasource:
    dynamic:
      primary: user_info #设置默认的数据源或者数据源组,默认值即为master
      primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        user_info:
          url: jdbc:mysql://10.153.19.150:3306/erp_user_info?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        sd:
          url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        mm:
          url: jdbc:mysql://10.153.19.150:3306/mm?serverTimezone=GMT%2b8
        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
CacheGlassModule/src/main/resources/banner.txt
New file
@@ -0,0 +1,32 @@
________                ________                 ___       _____________   ____
`MMMMMMMb.          68b `MMMMMMMb.               `MMb     dMM'`MMMMMMMMM  6MMMMb\
 MM    `Mb          Y89  MM    `Mb                MMM.   ,PMM  MM      \ 6M'    `
 MM     MM   ____   ___  MM     MM   _____        M`Mb   d'MM  MM        MM
 MM    .M9  6MMMMb  `MM  MM    .M9  6MMMMMb       M YM. ,P MM  MM    ,   YM.
 MMMMMMM(  6M'  `Mb  MM  MMMMMMM(  6M'   `Mb      M `Mb d' MM  MMMMMMM    YMMMMb
 MM    `Mb MM    MM  MM  MM    `Mb MM     MM      M  YM.P  MM  MM    `        `Mb
 MM     MM MMMMMMMM  MM  MM     MM MM     MM      M  `Mb'  MM  MM              MM
 MM     MM MM        MM  MM     MM MM     MM      M   YP   MM  MM              MM
 MM    .M9 YM    d9  MM  MM    .M9 YM.   ,M9 68b  M   `'   MM  MM      / L    ,M9
_MMMMMMM9'  YMMMM9  _MM__MMMMMMM9'  YMMMMM9  Y89 _M_      _MM__MMMMMMMMM MYMMMM9
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机      永无BUG                  //
CacheGlassModule/target/classes/application.yml
@@ -7,21 +7,11 @@
spring:
  datasource:
    dynamic:
      primary: user_info #设置默认的数据源或者数据源组,默认值即为master
      primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        user_info:
          url: jdbc:mysql://10.153.19.150:3306/erp_user_info?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        sd:
          url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        mm:
          url: jdbc:mysql://10.153.19.150:3306/mm?serverTimezone=GMT%2b8
        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
TemperingGlassModule/MES-Module (1).iml
New file
@@ -0,0 +1,139 @@
<?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>
  <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>
    <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>
TemperingGlassModule/MES-Module.iml
New file
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <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>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>
TemperingGlassModule/src/main/java/com/mes/mapper/userInfo/SysMenuItemMapper.java
@@ -2,11 +2,13 @@
import com.mes.entity.userInfo.SysMenuItem;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface SysMenuItemMapper {
     @Select("select  * from sys_menu_item as a where a.state=1 order by a.listSort")
     List<SysMenuItem> findAll() ;
}
TemperingGlassModule/src/main/java/com/mes/mapper/userInfo/UserMapper.java
@@ -16,9 +16,8 @@
    User findOne(Integer id);
    @Select("select user_name FROM `user` where login_name=#{LoginName}  ")
    @Select("select user_name FROM `user` where login_name=#{LoginName}")
    User findOneLoginName(String LoginName);
    @Select("select count(id) FROM `user` where login_name=#{userName} and password=#{password}  ")
    int  checkUser(@Param("userName") String userName,@Param("password") String password);
TemperingGlassModule/src/main/java/com/mes/service/userInfo/SysErrorService.java
@@ -7,7 +7,7 @@
import org.springframework.stereotype.Service;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class SysErrorService {
    private final SysErrorMapper sysErrorMapper;
TemperingGlassModule/src/main/java/com/mes/service/userInfo/SysMenuItemService.java
@@ -9,7 +9,7 @@
import java.util.List;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class SysMenuItemService {
    @Autowired
    SysMenuItemMapper sysMenuItemMapper;
TemperingGlassModule/src/main/java/com/mes/service/userInfo/SysMenuService.java
@@ -9,7 +9,7 @@
import java.util.List;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class SysMenuService {
    @Autowired
    private SysMenuMapper sysMenuMapper;
TemperingGlassModule/src/main/java/com/mes/service/userInfo/UserService.java
@@ -2,23 +2,18 @@
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.mes.common.CacheUtil;
import com.mes.common.Result;
import com.mes.controller.dto.UserDTO;
import com.mes.entity.userInfo.User;
import com.mes.mapper.userInfo.UserMapper;
import com.mes.controller.dto.UserDTO;
import com.mes.tools.TokenTools;
import org.apache.ibatis.jdbc.Null;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class UserService {
    @Autowired
TemperingGlassModule/src/main/resources/application.yml
@@ -7,26 +7,12 @@
spring:
  datasource:
    dynamic:
      primary: user_info #设置默认的数据源或者数据源组,默认值即为master
      primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        user_info:
          url: jdbc:mysql://10.153.19.150:3306/erp_user_info?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        sd:
          url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        mm:
          url: jdbc:mysql://10.153.19.150:3306/mm?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        pp:
          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
        hangzhoumes:
          url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
TemperingGlassModule/target/MES-Module-0.0.1-SNAPSHOT.jar.original
Binary files differ
TemperingGlassModule/target/maven-archiver/pom.properties
New file
@@ -0,0 +1,3 @@
artifactId=MES-Module
groupId=com.MES-Module
version=0.0.1-SNAPSHOT
TemperingGlassModule/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
New file
@@ -0,0 +1,54 @@
com\mes\controller\OrderTestController.class
com\mes\common\PlcTools\S7object2.class
com\mes\MesApplication.class
com\mes\controller\userInfo\SysMenuItemController.class
com\mes\exception\ServiceException.class
com\mes\entity\UpPattenUsage.class
com\mes\service\userInfo\SysErrorService.class
com\mes\config\MyCorsConfig$1.class
com\mes\common\Result.class
com\mes\entity\Engineering.class
com\mes\common\PlcTools\S7control.class
com\mes\entity\BigStorageCage.class
com\mes\service\IOrderService.class
com\mes\mapper\userInfo\UserMapper.class
com\mes\common\Constants.class
com\mes\entity\GlassFilms.class
com\mes\entity\BigStorageCageDetails.class
com\mes\entity\DownStorageCagedetails.class
com\mes\mapper\userInfo\SysMenuItemMapper.class
com\mes\controller\dto\UserDTO.class
com\mes\common\CacheUtil.class
com\mes\common\PlcTools\S7object.class
com\mes\config\InterceptorConfig.class
com\mes\service\userInfo\SysMenuItemService.class
com\mes\entity\OrderTest.class
com\mes\entity\UpWorkstation.class
com\mes\entity\userInfo\SysMenuItem.class
com\mes\entity\userInfo\User.class
com\mes\config\MyCorsConfig.class
com\mes\entity\GlassInfo.class
com\mes\tools\TokenTools.class
com\mes\service\impl\OrderServiceImpl.class
com\mes\exception\GlobalExceptionHandle.class
com\mes\service\userInfo\SysMenuService.class
com\mes\tools\WebSocketServer.class
com\mes\controller\userInfo\SysMenuController.class
com\mes\entity\DownWorkstation.class
com\mes\entity\userInfo\SysMenu.class
com\mes\config\AppRunnerConfig.class
com\mes\entity\DownStorageCage.class
com\mes\config\MybatisPlusConfig.class
com\mes\service\userInfo\UserService.class
com\mes\entity\DownGlassInfo.class
com\mes\entity\userInfo\SysError.class
com\mes\entity\EdgStorageCage.class
com\mes\config\WebSocketConfig.class
com\mes\config\SwaggerConfig.class
com\mes\controller\userInfo\UserController.class
com\mes\mapper\userInfo\SysMenuMapper.class
com\mes\entity\Tempering.class
com\mes\mapper\OrderTestMapper.class
com\mes\mapper\userInfo\SysErrorMapper.class
com\mes\entity\EdgStorageCageDetails.class
com\mes\common\interceptor\JwtInterceptor.class
TemperingGlassModule/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
New file
@@ -0,0 +1,53 @@
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\common\Constants.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\UpPattenUsage.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\DownGlassInfo.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\common\interceptor\JwtInterceptor.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\common\Result.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\config\WebSocketConfig.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\mapper\userInfo\SysErrorMapper.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\mapper\userInfo\UserMapper.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\service\userInfo\UserService.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\mapper\userInfo\SysMenuMapper.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\common\PlcTools\S7object.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\common\PlcTools\S7object2.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\config\AppRunnerConfig.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\Tempering.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\config\InterceptorConfig.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\config\SwaggerConfig.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\UpWorkstation.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\userInfo\User.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\EdgStorageCageDetails.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\OrderTest.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\BigStorageCageDetails.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\controller\dto\UserDTO.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\controller\userInfo\UserController.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\service\userInfo\SysMenuItemService.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\service\impl\OrderServiceImpl.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\mapper\OrderTestMapper.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\tools\TokenTools.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\BigStorageCage.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\userInfo\SysError.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\common\PlcTools\S7control.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\EdgStorageCage.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\controller\userInfo\SysMenuController.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\Engineering.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\controller\OrderTestController.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\DownWorkstation.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\service\userInfo\SysMenuService.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\GlassInfo.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\service\userInfo\SysErrorService.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\MesApplication.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\DownStorageCage.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\exception\GlobalExceptionHandle.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\GlassFilms.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\config\MybatisPlusConfig.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\config\MyCorsConfig.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\controller\userInfo\SysMenuItemController.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\common\CacheUtil.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\tools\WebSocketServer.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\DownStorageCagedetails.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\userInfo\SysMenu.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\exception\ServiceException.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\entity\userInfo\SysMenuItem.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\mapper\userInfo\SysMenuItemMapper.java
D:\xm4\HangZhouMes\TemperingGlassModule\src\main\java\com\mes\service\IOrderService.java
TemperingGlassModule/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
New file
@@ -0,0 +1 @@
com\mes\MesApplicationTests.class
TemperingGlassModule/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
New file
@@ -0,0 +1 @@
D:\xm4\HangZhouMes\TemperingGlassModule\src\test\java\com\mes\MesApplicationTests.java
TemperingGlassModule/target/surefire-reports/TEST-com.mes.MesApplicationTests.xml
New file
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="com.mes.MesApplicationTests" time="7.389" tests="1" errors="0" skipped="0" failures="0">
  <properties>
    <property name="sun.desktop" value="windows"/>
    <property name="awt.toolkit" value="sun.awt.windows.WToolkit"/>
    <property name="file.encoding.pkg" value="sun.io"/>
    <property name="java.specification.version" value="1.8"/>
    <property name="sun.cpu.isalist" value="amd64"/>
    <property name="sun.jnu.encoding" value="GBK"/>
    <property name="java.class.path" value="D:\xm4\HangZhouMes\TemperingGlassModule\target\test-classes;D:\xm4\HangZhouMes\TemperingGlassModule\target\classes;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.5.9\spring-boot-starter-web-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter\2.5.9\spring-boot-starter-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot\2.5.9\spring-boot-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.5.9\spring-boot-starter-logging-2.5.9.jar;C:\Users\SNG-012\.m2\repository\ch\qos\logback\logback-classic\1.2.10\logback-classic-1.2.10.jar;C:\Users\SNG-012\.m2\repository\ch\qos\logback\logback-core\1.2.10\logback-core-1.2.10.jar;C:\Users\SNG-012\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.1\log4j-to-slf4j-2.17.1.jar;C:\Users\SNG-012\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.1\log4j-api-2.17.1.jar;C:\Users\SNG-012\.m2\repository\org\slf4j\jul-to-slf4j\1.7.33\jul-to-slf4j-1.7.33.jar;C:\Users\SNG-012\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\SNG-012\.m2\repository\org\yaml\snakeyaml\1.28\snakeyaml-1.28.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.5.9\spring-boot-starter-json-2.5.9.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.12.6\jackson-datatype-jdk8-2.12.6.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.12.6\jackson-datatype-jsr310-2.12.6.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.12.6\jackson-module-parameter-names-2.12.6.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.5.9\spring-boot-starter-tomcat-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.56\tomcat-embed-core-9.0.56.jar;C:\Users\SNG-012\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.56\tomcat-embed-el-9.0.56.jar;C:\Users\SNG-012\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.56\tomcat-embed-websocket-9.0.56.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-web\5.3.15\spring-web-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-webmvc\5.3.15\spring-webmvc-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-aop\5.3.15\spring-aop-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-context\5.3.15\spring-context-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-expression\5.3.15\spring-expression-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.3.1\mybatis-spring-boot-starter-2.3.1.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.5.9\spring-boot-starter-jdbc-2.5.9.jar;C:\Users\SNG-012\.m2\repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-jdbc\5.3.15\spring-jdbc-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.3.1\mybatis-spring-boot-autoconfigure-2.3.1.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\mybatis\3.5.13\mybatis-3.5.13.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\mybatis-spring\2.1.1\mybatis-spring-2.1.1.jar;C:\Users\SNG-012\.m2\repository\com\alibaba\fastjson\1.2.70\fastjson-1.2.70.jar;C:\Users\SNG-012\.m2\repository\org\springframework\data\spring-data-commons\2.3.1.RELEASE\spring-data-commons-2.3.1.RELEASE.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-core\5.3.15\spring-core-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-jcl\5.3.15\spring-jcl-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-beans\5.3.15\spring-beans-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\slf4j\slf4j-api\1.7.33\slf4j-api-1.7.33.jar;C:\Users\SNG-012\.m2\repository\mysql\mysql-connector-java\8.0.20\mysql-connector-java-8.0.20.jar;C:\Users\SNG-012\.m2\repository\org\projectlombok\lombok\1.18.22\lombok-1.18.22.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.5.9\spring-boot-starter-test-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-test\2.5.9\spring-boot-test-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.5.9\spring-boot-test-autoconfigure-2.5.9.jar;C:\Users\SNG-012\.m2\repository\com\jayway\jsonpath\json-path\2.5.0\json-path-2.5.0.jar;C:\Users\SNG-012\.m2\repository\net\minidev\json-smart\2.4.7\json-smart-2.4.7.jar;C:\Users\SNG-012\.m2\repository\net\minidev\accessors-smart\2.4.7\accessors-smart-2.4.7.jar;C:\Users\SNG-012\.m2\repository\org\ow2\asm\asm\9.1\asm-9.1.jar;C:\Users\SNG-012\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;C:\Users\SNG-012\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;C:\Users\SNG-012\.m2\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;C:\Users\SNG-012\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.2\junit-jupiter-5.7.2.jar;C:\Users\SNG-012\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.2\junit-jupiter-api-5.7.2.jar;C:\Users\SNG-012\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\SNG-012\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\SNG-012\.m2\repository\org\junit\platform\junit-platform-commons\1.7.2\junit-platform-commons-1.7.2.jar;C:\Users\SNG-012\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.2\junit-jupiter-params-5.7.2.jar;C:\Users\SNG-012\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.2\junit-jupiter-engine-5.7.2.jar;C:\Users\SNG-012\.m2\repository\org\junit\platform\junit-platform-engine\1.7.2\junit-platform-engine-1.7.2.jar;C:\Users\SNG-012\.m2\repository\org\mockito\mockito-core\3.9.0\mockito-core-3.9.0.jar;C:\Users\SNG-012\.m2\repository\net\bytebuddy\byte-buddy\1.10.22\byte-buddy-1.10.22.jar;C:\Users\SNG-012\.m2\repository\net\bytebuddy\byte-buddy-agent\1.10.22\byte-buddy-agent-1.10.22.jar;C:\Users\SNG-012\.m2\repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;C:\Users\SNG-012\.m2\repository\org\mockito\mockito-junit-jupiter\3.9.0\mockito-junit-jupiter-3.9.0.jar;C:\Users\SNG-012\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\SNG-012\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-test\5.3.15\spring-test-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\xmlunit\xmlunit-core\2.8.4\xmlunit-core-2.8.4.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter-test\2.3.1\mybatis-spring-boot-starter-test-2.3.1.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-test-autoconfigure\2.3.1\mybatis-spring-boot-test-autoconfigure-2.3.1.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-tx\5.3.15\spring-tx-5.3.15.jar;C:\Users\SNG-012\.m2\repository\com\auth0\java-jwt\3.10.3\java-jwt-3.10.3.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.12.6\jackson-databind-2.12.6.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.12.6\jackson-annotations-2.12.6.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.12.6\jackson-core-2.12.6.jar;C:\Users\SNG-012\.m2\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\SNG-012\.m2\repository\org\assertj\assertj-core\3.19.0\assertj-core-3.19.0.jar;C:\Users\SNG-012\.m2\repository\cn\hutool\hutool-all\5.4.0\hutool-all-5.4.0.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\mybatis-plus-boot-starter\3.5.1\mybatis-plus-boot-starter-3.5.1.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\mybatis-plus\3.5.1\mybatis-plus-3.5.1.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\mybatis-plus-extension\3.5.1\mybatis-plus-extension-3.5.1.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\mybatis-plus-core\3.5.1\mybatis-plus-core-3.5.1.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\mybatis-plus-annotation\3.5.1\mybatis-plus-annotation-3.5.1.jar;C:\Users\SNG-012\.m2\repository\com\github\jsqlparser\jsqlparser\4.3\jsqlparser-4.3.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.5.9\spring-boot-autoconfigure-2.5.9.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\dynamic-datasource-spring-boot-starter\3.5.1\dynamic-datasource-spring-boot-starter-3.5.1.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.5.9\spring-boot-starter-aop-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\swagger\swagger-models\1.5.20\swagger-models-1.5.20.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\SNG-012\.m2\repository\com\google\guava\guava\20.0\guava-20.0.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\SNG-012\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\SNG-012\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\SNG-012\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\SNG-012\.m2\repository\com\github\xingshuangs\iot-communication\1.4.2\iot-communication-1.4.2.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.5.9\spring-boot-starter-cache-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-context-support\5.3.15\spring-context-support-5.3.15.jar;C:\Users\SNG-012\.m2\repository\io\netty\netty-all\4.1.36.Final\netty-all-4.1.36.Final.jar;"/>
    <property name="java.vm.vendor" value="Oracle Corporation"/>
    <property name="sun.arch.data.model" value="64"/>
    <property name="user.variant" value=""/>
    <property name="java.vendor.url" value="http://java.oracle.com/"/>
    <property name="user.timezone" value="Asia/Shanghai"/>
    <property name="java.vm.specification.version" value="1.8"/>
    <property name="os.name" value="Windows 10"/>
    <property name="user.country" value="CN"/>
    <property name="sun.java.launcher" value="SUN_STANDARD"/>
    <property name="sun.boot.library.path" value="C:\Program Files\Java\jdk1.8.0_121\jre\bin"/>
    <property name="sun.java.command" value="C:\Users\SNG-012\AppData\Local\Temp\surefire33896117267200105\surefirebooter1902636531692371884.jar C:\Users\SNG-012\AppData\Local\Temp\surefire33896117267200105 2024-03-07T11-50-56_835-jvmRun1 surefire967000318635874576tmp surefire_08363905452971083609tmp"/>
    <property name="surefire.test.class.path" value="D:\xm4\HangZhouMes\TemperingGlassModule\target\test-classes;D:\xm4\HangZhouMes\TemperingGlassModule\target\classes;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.5.9\spring-boot-starter-web-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter\2.5.9\spring-boot-starter-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot\2.5.9\spring-boot-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.5.9\spring-boot-starter-logging-2.5.9.jar;C:\Users\SNG-012\.m2\repository\ch\qos\logback\logback-classic\1.2.10\logback-classic-1.2.10.jar;C:\Users\SNG-012\.m2\repository\ch\qos\logback\logback-core\1.2.10\logback-core-1.2.10.jar;C:\Users\SNG-012\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.1\log4j-to-slf4j-2.17.1.jar;C:\Users\SNG-012\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.1\log4j-api-2.17.1.jar;C:\Users\SNG-012\.m2\repository\org\slf4j\jul-to-slf4j\1.7.33\jul-to-slf4j-1.7.33.jar;C:\Users\SNG-012\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\SNG-012\.m2\repository\org\yaml\snakeyaml\1.28\snakeyaml-1.28.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.5.9\spring-boot-starter-json-2.5.9.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.12.6\jackson-datatype-jdk8-2.12.6.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.12.6\jackson-datatype-jsr310-2.12.6.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.12.6\jackson-module-parameter-names-2.12.6.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.5.9\spring-boot-starter-tomcat-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.56\tomcat-embed-core-9.0.56.jar;C:\Users\SNG-012\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.56\tomcat-embed-el-9.0.56.jar;C:\Users\SNG-012\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.56\tomcat-embed-websocket-9.0.56.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-web\5.3.15\spring-web-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-webmvc\5.3.15\spring-webmvc-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-aop\5.3.15\spring-aop-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-context\5.3.15\spring-context-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-expression\5.3.15\spring-expression-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.3.1\mybatis-spring-boot-starter-2.3.1.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.5.9\spring-boot-starter-jdbc-2.5.9.jar;C:\Users\SNG-012\.m2\repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-jdbc\5.3.15\spring-jdbc-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.3.1\mybatis-spring-boot-autoconfigure-2.3.1.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\mybatis\3.5.13\mybatis-3.5.13.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\mybatis-spring\2.1.1\mybatis-spring-2.1.1.jar;C:\Users\SNG-012\.m2\repository\com\alibaba\fastjson\1.2.70\fastjson-1.2.70.jar;C:\Users\SNG-012\.m2\repository\org\springframework\data\spring-data-commons\2.3.1.RELEASE\spring-data-commons-2.3.1.RELEASE.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-core\5.3.15\spring-core-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-jcl\5.3.15\spring-jcl-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-beans\5.3.15\spring-beans-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\slf4j\slf4j-api\1.7.33\slf4j-api-1.7.33.jar;C:\Users\SNG-012\.m2\repository\mysql\mysql-connector-java\8.0.20\mysql-connector-java-8.0.20.jar;C:\Users\SNG-012\.m2\repository\org\projectlombok\lombok\1.18.22\lombok-1.18.22.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.5.9\spring-boot-starter-test-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-test\2.5.9\spring-boot-test-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.5.9\spring-boot-test-autoconfigure-2.5.9.jar;C:\Users\SNG-012\.m2\repository\com\jayway\jsonpath\json-path\2.5.0\json-path-2.5.0.jar;C:\Users\SNG-012\.m2\repository\net\minidev\json-smart\2.4.7\json-smart-2.4.7.jar;C:\Users\SNG-012\.m2\repository\net\minidev\accessors-smart\2.4.7\accessors-smart-2.4.7.jar;C:\Users\SNG-012\.m2\repository\org\ow2\asm\asm\9.1\asm-9.1.jar;C:\Users\SNG-012\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;C:\Users\SNG-012\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;C:\Users\SNG-012\.m2\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;C:\Users\SNG-012\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.2\junit-jupiter-5.7.2.jar;C:\Users\SNG-012\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.2\junit-jupiter-api-5.7.2.jar;C:\Users\SNG-012\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\SNG-012\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\SNG-012\.m2\repository\org\junit\platform\junit-platform-commons\1.7.2\junit-platform-commons-1.7.2.jar;C:\Users\SNG-012\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.2\junit-jupiter-params-5.7.2.jar;C:\Users\SNG-012\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.2\junit-jupiter-engine-5.7.2.jar;C:\Users\SNG-012\.m2\repository\org\junit\platform\junit-platform-engine\1.7.2\junit-platform-engine-1.7.2.jar;C:\Users\SNG-012\.m2\repository\org\mockito\mockito-core\3.9.0\mockito-core-3.9.0.jar;C:\Users\SNG-012\.m2\repository\net\bytebuddy\byte-buddy\1.10.22\byte-buddy-1.10.22.jar;C:\Users\SNG-012\.m2\repository\net\bytebuddy\byte-buddy-agent\1.10.22\byte-buddy-agent-1.10.22.jar;C:\Users\SNG-012\.m2\repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;C:\Users\SNG-012\.m2\repository\org\mockito\mockito-junit-jupiter\3.9.0\mockito-junit-jupiter-3.9.0.jar;C:\Users\SNG-012\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\SNG-012\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-test\5.3.15\spring-test-5.3.15.jar;C:\Users\SNG-012\.m2\repository\org\xmlunit\xmlunit-core\2.8.4\xmlunit-core-2.8.4.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter-test\2.3.1\mybatis-spring-boot-starter-test-2.3.1.jar;C:\Users\SNG-012\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-test-autoconfigure\2.3.1\mybatis-spring-boot-test-autoconfigure-2.3.1.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-tx\5.3.15\spring-tx-5.3.15.jar;C:\Users\SNG-012\.m2\repository\com\auth0\java-jwt\3.10.3\java-jwt-3.10.3.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.12.6\jackson-databind-2.12.6.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.12.6\jackson-annotations-2.12.6.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.12.6\jackson-core-2.12.6.jar;C:\Users\SNG-012\.m2\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\SNG-012\.m2\repository\org\assertj\assertj-core\3.19.0\assertj-core-3.19.0.jar;C:\Users\SNG-012\.m2\repository\cn\hutool\hutool-all\5.4.0\hutool-all-5.4.0.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\mybatis-plus-boot-starter\3.5.1\mybatis-plus-boot-starter-3.5.1.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\mybatis-plus\3.5.1\mybatis-plus-3.5.1.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\mybatis-plus-extension\3.5.1\mybatis-plus-extension-3.5.1.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\mybatis-plus-core\3.5.1\mybatis-plus-core-3.5.1.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\mybatis-plus-annotation\3.5.1\mybatis-plus-annotation-3.5.1.jar;C:\Users\SNG-012\.m2\repository\com\github\jsqlparser\jsqlparser\4.3\jsqlparser-4.3.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.5.9\spring-boot-autoconfigure-2.5.9.jar;C:\Users\SNG-012\.m2\repository\com\baomidou\dynamic-datasource-spring-boot-starter\3.5.1\dynamic-datasource-spring-boot-starter-3.5.1.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.5.9\spring-boot-starter-aop-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\swagger\swagger-models\1.5.20\swagger-models-1.5.20.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\SNG-012\.m2\repository\com\google\guava\guava\20.0\guava-20.0.jar;C:\Users\SNG-012\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\SNG-012\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\SNG-012\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\SNG-012\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\SNG-012\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\SNG-012\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\SNG-012\.m2\repository\com\github\xingshuangs\iot-communication\1.4.2\iot-communication-1.4.2.jar;C:\Users\SNG-012\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.5.9\spring-boot-starter-cache-2.5.9.jar;C:\Users\SNG-012\.m2\repository\org\springframework\spring-context-support\5.3.15\spring-context-support-5.3.15.jar;C:\Users\SNG-012\.m2\repository\io\netty\netty-all\4.1.36.Final\netty-all-4.1.36.Final.jar;"/>
    <property name="sun.cpu.endian" value="little"/>
    <property name="user.home" value="C:\Users\SNG-012"/>
    <property name="user.language" value="zh"/>
    <property name="java.specification.vendor" value="Oracle Corporation"/>
    <property name="java.home" value="C:\Program Files\Java\jdk1.8.0_121\jre"/>
    <property name="basedir" value="D:\xm4\HangZhouMes\TemperingGlassModule"/>
    <property name="file.separator" value="\"/>
    <property name="line.separator" value="&#10;"/>
    <property name="java.vm.specification.vendor" value="Oracle Corporation"/>
    <property name="java.specification.name" value="Java Platform API Specification"/>
    <property name="java.awt.graphicsenv" value="sun.awt.Win32GraphicsEnvironment"/>
    <property name="surefire.real.class.path" value="C:\Users\SNG-012\AppData\Local\Temp\surefire33896117267200105\surefirebooter1902636531692371884.jar"/>
    <property name="sun.boot.class.path" value="C:\Program Files\Java\jdk1.8.0_121\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_121\jre\classes"/>
    <property name="user.script" value=""/>
    <property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
    <property name="java.runtime.version" value="1.8.0_121-b13"/>
    <property name="user.name" value="SNG-012"/>
    <property name="path.separator" value=";"/>
    <property name="os.version" value="10.0"/>
    <property name="java.endorsed.dirs" value="C:\Program Files\Java\jdk1.8.0_121\jre\lib\endorsed"/>
    <property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
    <property name="file.encoding" value="GBK"/>
    <property name="java.vm.name" value="Java HotSpot(TM) 64-Bit Server VM"/>
    <property name="localRepository" value="C:\Users\SNG-012\.m2\repository"/>
    <property name="java.vendor.url.bug" value="http://bugreport.sun.com/bugreport/"/>
    <property name="java.io.tmpdir" value="C:\Users\SNG-012\AppData\Local\Temp\"/>
    <property name="idea.version" value="2021.1.3"/>
    <property name="java.version" value="1.8.0_121"/>
    <property name="user.dir" value="D:\xm4\HangZhouMes\TemperingGlassModule"/>
    <property name="os.arch" value="amd64"/>
    <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
    <property name="java.awt.printerjob" value="sun.awt.windows.WPrinterJob"/>
    <property name="sun.os.patch.level" value=""/>
    <property name="java.library.path" value="C:\Program Files\Java\jdk1.8.0_121\jre\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:\vm\bin\;D:\jdk17.0.8\bin;D:\apache-jmeter-5.4.1\bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;D:/benxiaohai/mysql8/mysql8/mysql8\bin;C:\Program Files\Java\jdk1.8.0_121\bin;C:\Program Files\Tomcat\apache-tomcat-8.0.39\bin;D:\下载\ADB;D;\github\platform-tools;C:\Program Files\python;C:\Program Files\python\Scripts;D:\BtSoft\panel\script;C:\Program Files\Google\Chrome\Application;C:\Program Files\apache-maven-3.9.1\bin;D:\微信web开发者工具\dll;C:\Pro;ram Files (x86)\NetSarang\Xshell 7\;C:\Program Files\Git\cmd;C:\Program Files\TortoiseGit\bin;D:\工作\apache-ant-1.9.16-bin\apache-ant-1.9.16\bin;D:\工作\Microsoft VS Code\bin;C:\Program Files (x86)\nodejs\;C:\Program Files\Tomcat2\apache-tomcat2\bin;C:\Program Files\Docker;C:\Program Files\Docker\Docker\resources\bin;D:\Erlang OTP\bin;D:\MQ\rabbitmq_server-3.12.12\sbin;D:\python\Scripts\;D:\python\;C:\Users\SNG-012\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Google\Chrome\Application;C:\Users\SNG-012\AppData\Roaming\npm;."/>
    <property name="java.vm.info" value="mixed mode"/>
    <property name="java.vendor" value="Oracle Corporation"/>
    <property name="java.vm.version" value="25.121-b13"/>
    <property name="java.ext.dirs" value="C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext;C:\Windows\Sun\Java\lib\ext"/>
    <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
    <property name="java.class.version" value="52.0"/>
  </properties>
  <testcase name="contextLoads" classname="com.mes.MesApplicationTests" time="0.225"/>
</testsuite>
TemperingGlassModule/target/surefire-reports/com.mes.MesApplicationTests.txt
New file
@@ -0,0 +1,4 @@
-------------------------------------------------------------------------------
Test set: com.mes.MesApplicationTests
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.389 s - in com.mes.MesApplicationTests
UI-Project/config.js
@@ -1,4 +1,5 @@
export default {
  serverUrl:"localhost:8080/mesModuleTools"
  serverUrl:"localhost:8080/mesModuleTools",
  serverUrl2:"localhost:8081/mesModuleTools"
  //serverUrl:"res.abeim.cn"
}
UI-Project/index.html
@@ -2,7 +2,7 @@
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <!-- <link rel="icon" href="/favicon.ico"> -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>北玻</title>
  </head>
UI-Project/package-lock.json
@@ -1,11 +1,11 @@
{
  "name": "northglass-erp",
  "name": "northglass-mes",
  "version": "0.0.0",
  "lockfileVersion": 2,
  "requires": true,
  "packages": {
    "": {
      "name": "northglass-erp",
      "name": "northglass-mes",
      "version": "0.0.0",
      "dependencies": {
        "@element-plus/icons-vue": "^2.1.0",
@@ -16,6 +16,7 @@
        "pinia": "^2.1.6",
        "pinia-plugin-persistedstate": "^3.2.0",
        "sortablejs": "^1.15.1",
        "sweetalert2": "^11.10.7",
        "vue": "^3.3.4",
        "vue-router": "^4.2.4",
        "vxe-table": "^4.5.15",
@@ -1405,6 +1406,11 @@
        "node": ">=0.8"
      }
    },
    "node_modules/sweetalert2": {
      "version": "11.10.7",
      "resolved": "https://registry.npmmirror.com/sweetalert2/-/sweetalert2-11.10.7.tgz",
      "integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg=="
    },
    "node_modules/to-fast-properties": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -2440,6 +2446,11 @@
        "frac": "~1.1.2"
      }
    },
    "sweetalert2": {
      "version": "11.10.7",
      "resolved": "https://registry.npmmirror.com/sweetalert2/-/sweetalert2-11.10.7.tgz",
      "integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg=="
    },
    "to-fast-properties": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
UI-Project/package.json
@@ -1,5 +1,5 @@
{
  "name": "northglass-erp",
  "name": "northglass-mes",
  "version": "0.0.0",
  "private": true,
  "scripts": {
@@ -16,6 +16,7 @@
    "pinia": "^2.1.6",
    "pinia-plugin-persistedstate": "^3.2.0",
    "sortablejs": "^1.15.1",
    "sweetalert2": "^11.10.7",
    "vue": "^3.3.4",
    "vue-router": "^4.2.4",
    "vxe-table": "^4.5.15",
UI-Project/src/assets/1.png
UI-Project/src/assets/11.png
UI-Project/src/assets/2.png
UI-Project/src/assets/3.png
UI-Project/src/assets/88.png
UI-Project/src/assets/9.png
UI-Project/src/assets/aaa.png
UI-Project/src/assets/background.jpg
UI-Project/src/assets/bigcar01.png
UI-Project/src/assets/dipan.png
UI-Project/src/assets/emi.png
UI-Project/src/assets/main.css
@@ -3,12 +3,13 @@
#app {
  margin: 0 auto;
  padding: 0;
  background-color: #D5EAFF;
  /* background-color: #D5EAFF; */
  font-weight: normal;
  height: 100%;
  width: 100%;
  min-width: 1536px;
  min-height: 730px;
  /* min-width: 1536px; */
  /* min-height: 730px; */
  /* background-image: url("../../src/assets/background.jpg"); */
}
a,
UI-Project/src/assets/s.png
UI-Project/src/assets/shangpianji .png
UI-Project/src/assets/shangpianji.png
UI-Project/src/assets/sz.png
UI-Project/src/assets/taimian.png
UI-Project/src/assets/user.png
UI-Project/src/assets/woshihuancun.png
UI-Project/src/assets/xmjc.png
UI-Project/src/assets/xmjclzh.png
UI-Project/src/components/ComputedTest.vue
File was deleted
UI-Project/src/components/basic/BasicTable.vue
File was deleted
UI-Project/src/components/basic/product/GlassType.vue
File was deleted
UI-Project/src/components/sd/product/GlassType.vue
File was deleted
UI-Project/src/layout/MainErpView.vue
@@ -75,56 +75,31 @@
</script>
<template>
  <div>
  <div id="all">
    <el-container>
      <el-header >
        <div style="height: 100%;width: 100%;display: flex">
        <div style="height: 100%;width: 100%;display: flex;background-color: #fff;">
          <img src="../assets/northGlass.ico" alt="" style="max-width: 100%;max-height: 100%">
          <h3 style="margin: 1rem  ;font-weight: bold;width: 20vw;"> 欢迎{{ user }}使用北玻ERP系统!</h3>
          <h3 style="margin: 1rem  ;font-weight: bold;width: 20vw;"> 欢迎{{ user }}使用北玻MES系统!</h3>
          <span style="height: 70%;width: 78vw;margin-top: 1rem;" >
            <el-button  class="sys-quit" @click="quit"  type="info" round>
            <el-button  class="sys-quit" @click="quit" round>
              <el-icon size="large"><SwitchButton  size=""/></el-icon>
            </el-button>
          </span>
        </div>
      </el-header>
      <div id="line"></div>
      <el-container >
        <el-aside width="160px" style="height: 97%; " >
<!--          <el-menu
              style=" border-radius:0.5rem;border: 0.01rem solid #409EFF;margin-bottom: 0.5rem"
              @open="handleOpen"
              ref="menu"
              active-color="#ffd04b"
              background-color="#409EFF"
              default-active="2"
              text-color="#fff">
            <el-sub-menu
                v-for="items in menuList"
                :index="items.id"
                :key="items.id">
              <template #title>
                <el-icon v-if="items.id==1"><Grid/></el-icon>
                <el-icon v-if="items.id==2"><Histogram/></el-icon>
                <el-icon v-if="items.id==3"><MessageBox/></el-icon>
                <span style="font-weight: bold;">{{items.menuName}}</span>
              </template>
              <router-link
                  v-show="items.id==menuItem.menuID"
                  v-for="menuItem in menuItemList"
                  :to="{path:menuItem.url}">
                <el-menu-item  >
                  {{ menuItem.itemName}}
                </el-menu-item>
              </router-link>
            </el-sub-menu>
          </el-menu>-->
        <el-aside width="160px" style="height: 99%; background-color: #fff;" >
          <div class="menu"  >
              <div v-for="items in menuList">
                <div class='menu_title' @click="openMenu(items.id)"  >{{items.menuName}}<span class='indicator' >▼</span></div>
                <div class='menu_title' @click="openMenu(items.id)"  >
              <!-- <span class='indicator' >⌵</span> -->
              <!-- <span class='indicator' >≡</span> -->
              <!-- <img src="../assets/9.png" alt="" style="max-width: 50%;max-height: 50%;"> -->
                  <span>☰</span>
              {{items.menuName}}
                </div>
                <ul class='enter-x-left' v-show="openFlag==items.id">
                  <li v-for="menuItem in menuItemList"
@@ -154,9 +129,13 @@
</template>
<style scoped>
#all{
  background-color: #eee;
  height: 100%;
}
.el-container{
  height: 100vh;
  width: 100vw
  width: 99vw
}
*{
@@ -167,7 +146,17 @@
  float: right;
  margin-right: 1rem;
  width: 5rem;
}
/* 横线 */
#line{
float:right;
width: 100%;
height: 1px;
/* margin-top: 0.5em; */
margin-bottom: 0.5em;
background:#d4c4c4;
position: relative;
text-align: center;
}
:deep(span){
  margin-right: 0;
@@ -181,17 +170,11 @@
  width: 99%;
  float: right;
  height: 99%;
  background-color: #fff;
}
/*------------*/
.menu div div{
/* .menu div div{
  width: 138px;
  height: 35px;
@@ -208,16 +191,12 @@
  border-bottom: 12px ;
  margin-bottom:4px;
  text-align: left;
  cursor: pointer;
  border-radius:8px;
  cursor: pointer; */
  /* border-radius:8px; */
  /*   outline: none; */
  background-color:#5CADFE;
  box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19);
}
  /* background-color:#5CADFE; */
  /* box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19); */
/* } */
.menu {
  width: 138px;
@@ -243,21 +222,21 @@
  height: 28px;
  line-height: 30px;
  background: rgb(128, 128, 128);
  /* background: rgb(128, 128, 128); */
  color: #000000;
  padding-left: 36px;
  cursor: pointer;
  overflow: hidden;
  text-align: left;
  border-radius:8px;
  /* border-radius:8px; */
  /*   outline: none; */
  background: #5CADFE;
  box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19);
  /* background: #5CADFE; */
  /* box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19); */
}
ul li:hover {
  background:#5CADFE ;
  /* background:#5CADFE ; */
  color: #ffffff;
}
@@ -268,7 +247,7 @@
}
ul li a:hover {
  color: #ffffff;
  color: #1087ff;
}
.item_divider {
@@ -282,6 +261,7 @@
  width: 138px;
  height: 35px;
  display: block;
  /* text-align: justify; */
  text-decoration: none;
  color: white;
  font-size: 14px;
@@ -289,12 +269,12 @@
}
.menu_title {
  width: 138px;
  height: 35px;
  line-height: 35px;
  background: #fafafa;
  color: rgb(128, 128, 128);
  font-size: 16px;
  width: 140px;
  height: 45px;
  line-height: 55px;
  /* background: #fafafa; */
  color: rgb(43, 42, 42);
  font-size: 17px;
  padding-left: 15px;
  transition: all 0.3s ease;
  cursor: pointer;
@@ -306,12 +286,12 @@
.menu_title:hover {
  /* background: #dedede; */
  color: #ffffff;
  color: #3b9af9;
}
.indicator {
  display: block;
  width: 50px;
  width: 40px;
  height: 35px;
  font-weight: bold;
  position: absolute;
@@ -344,8 +324,6 @@
.enter-x-left:nth-child(4){
  animation-delay: 0.4s;
}
@keyframes enter-x-left {
  to {
    opacity: 1;
UI-Project/src/router/index.js
@@ -34,812 +34,121 @@
            }
         ]
        },
          //sd模块
        {
          path: 'product',//产品
          name: 'product',
          component: () => import('../views/sd/product/Product.vue'),
          children:[
            {
              path: 'createProduct',
              name: 'createProduct',
              component: () => import('../views/sd/product/CreateProduct.vue')
            },
            {
              path: 'selectProduct',
              name: 'selectProduct',
              component: () => import('../views/sd/product/SelectProduct.vue')
            },
            {
              path: 'test',
              name: 'test',
              component: () => import('../views/sd/product/Test.vue')
            },
            {
              path: 'test1',
              name: 'test1',
              component: () => import('../views/sd/product/Test11.vue')
            },
            {
              path: 'testSort',
              name: 'testSort',
              component: () => import('../views/sd/product/testSort.vue')
            },
            {
              name: 'product',
              path: '',
              redirect:'/main/product/selectProduct'
            }
          ]
        },
        {
          path: 'order',//订单
          name: 'order',
          component: () => import('../views/sd/order/Order.vue'),
          children:[
            {
              path: 'selectOrder',
              name: 'selectOrder',
              component: () => import('../views/sd/order/SelectOrder.vue'),
            },
            {
              path: 'createOrder',
              name: 'createOrder',
              component: () => import('../views/sd/order/CreateOrder.vue'),
            },
            {
              path: 'updateOrderCraft',
              name: 'updateOrderCraft',
              component: () => import('../views/sd/order/UpdateOrderCraft.vue'),
            },
            {
              path: 'orderReport',
              name: 'orderReport',
              component: () => import('../views/sd/order/OrderReport.vue'),
            },
            {
              path: '',
              redirect:'/main/order/SelectOrder'
            }
          ]
        },
        {
          path: 'delivery',//发货
          name: 'delivery',
          component: () => import('../views/sd/delivery/Delivery.vue'),
          children: [
            {
              path: 'selectDelivery',
              name: 'selectDelivery',
              component: () => import('../views/sd/delivery/SelectDelivery.vue'),
            },
            {
              path: 'selectOrderList',
              name: 'selectOrderList',
              component: () => import('../views/sd/delivery/SelectOrderList.vue'),
            },
            {
              path: 'deliveryReport',
              name: 'deliveryReport',
              component: () => import('../views/sd/delivery/DeliveryReport.vue'),
            },
            {
              path: 'createDelivery',
              name: 'createDelivery',
              component: () => import('../views/sd/delivery/CreateDelivery.vue'),
            },
        /*----------- 上片机 ----------------*/
            {
              path: '',
              redirect:'/main/delivery/selectDelivery'
            }
          ]
        },
        path: 'Returns',
        name: 'Returns',
        component: () => import('../views/Returns/returns.vue'),
        children:[
        {
          path: 'returns',//退货
            path: '/Returns/returns',
          name: 'returns',
          component: () => import('../views/sd/returns/Returns.vue'),
          children: [
            {
              path: '',
              redirect:'/main/returns/selectReturns'
            component: () => import('../views/Returns/returns.vue')
            },
            {
              path: 'selectReturns',
              name: 'selectReturns',
              component: () => import('../views/sd/returns/SelectReturns.vue'),
            },
            {
              path: 'createReturns',
              name: 'createReturns',
              component: () => import('../views/sd/returns/CreateReturns.vue'),
            },
            {
              path: 'selectDeliveryList',
              name: 'selectDeliveryList',
              component: () => import('../views/sd/returns/SelectDeliveryList.vue'),
            },
            {
              path: 'returnsReport',
              name: 'returnsReport',
              component: () => import('../views/sd/returns/ReturnsReport.vue'),
            }
          ]
        },
      /*----------- 掰片/识别 ----------------*/
        {
          path: 'customer',//客户
          name: 'customer',
          component: () => import('../views/sd/customer/Customer.vue'),
      path: 'Identify',
      name: 'Identify',
      component: () => import('../views/Identify/identify.vue'),
          children: [
            {
              path: '',
              redirect:'/main/customer/selectCustomer'
          path: '/Identify/identify',
          name: 'identify',
          component: () => import('../views/Identify/identify.vue')
            },
            {
              path: 'selectCustomer',
              name: 'selectCustomer',
              component: () => import('../views/sd/customer/SelectCustomer.vue'),
            },
            {
              path: 'createCustomer',
              name: 'createCustomer',
              component: () => import('../views/sd/customer/CreateCustomer.vue'),
            }
          ]
        },
          //pp模块
    /*----------- 卧式缓存 ----------------*/
        {
          //工单管理
          path: 'workOrder',
          name: 'workOrder',
          component: () => import('../views/pp/workOrder/WorkOrder.vue'),
          children:[
            {
              path: 'selectAddWorkOrder',
              name: 'selectAddWorkOrder',
              component: () => import('../views/pp/workOrder/SelectAddWorkOrder.vue'),
            },
            {
              path: 'releaseWorkOrder',
              name: 'releaseWorkOrder',
              component: () => import('../views/pp/workOrder/ReleaseWorkOrder.vue'),
            },
            {
              path: 'addWorkOrder',
              name: 'addWorkOrder',
              component: () => import('../views/pp/workOrder/AddWorkOrder.vue'),
            },
            {
              path: 'selectWorkOrder',
              name: 'selectWorkOrder',
              component: () => import('../views/pp/workOrder/SelectWorkOrder.vue'),
            },
            {
              path: '',
              redirect:'/main/workOrder/SelectWorkOrder'
            }
          ]
        },
        {
          //流程卡管理
          path: 'processCard',
          name: 'processCard',
          component: () => import('../views/pp/processCard/ProcessCard.vue'),
          children:[
            {
              path: 'addProcessCard',
              name: 'addProcessCard',
              component: () => import('../views/pp/processCard/AddProcessCard.vue'),
            },
            {
              path: 'printFlowCard',
              name: 'printFlowCard',
              component: () => import('../views/pp/processCard/PrintFlowCard.vue'),
            },
            {
              path: 'selectAddProcess',
              name: 'selectAddProcess',
              component: () => import('../views/pp/processCard/SelectAddProcess.vue'),
            },
            {
              path: 'selectPrintFlowCard',
              name: 'selectPrintFlowCard',
              component: () => import('../views/pp/processCard/SelectPrintFlowCard.vue'),
            },
            {
              path: 'selectProcessCard',
              name: 'selectProcessCard',
              component: () => import('../views/pp/processCard/SelectProcessCard.vue'),
            },
            {
              path: 'processCardDetails',
              name: 'processCardDetails',
              component: () => import('../views/pp/processCard/ProcessCardDetails.vue'),
            },
            {
              path: 'splittingDetails',
              name: 'splittingDetails',
              component: () => import('../views/pp/processCard/SplittingDetails.vue'),
            },
            {
              path: 'printProcess',
              name: 'printProcess',
              component: () => import('../views/pp/processCard/PrintProcess.vue'),
            },
            {
              path: 'productionScheduling',
              name: 'productionScheduling',
              component: () => import('../views/pp/processCard/ProductionScheduling.vue'),
            },
            {
              path: '',
              redirect:'/main/processCard/SelectProcessCard'
            }
          ]
        },
        {
          //报工管理
          path: 'reportingWorks',
          name: 'reportingWorks',
          component: () => import('../views/pp/reportingWorks/ReportingWorks.vue'),
          children:[
            {
              path: 'selectReportingWorks',
              name: 'selectReportingWorks',
              component: () => import('../views/pp/reportingWorks/SelectReportingWorks.vue'),
            },
            {
              path: 'addReportingWork',
              name: 'addReportingWork',
              component: () => import('../views/pp/reportingWorks/AddReportingWork.vue'),
            },
            {
              path: 'qualityInspectionReview',
              name: 'qualityInspectionReview',
              component: () => import('../views/pp/reportingWorks/QualityInspectionReview.vue'),
            },
            {
              path: 'reportingWorkDetail',
              name: 'reportingWorkDetail',
              component: () => import('../views/pp/reportingWorks/ReportingWorkDetail.vue'),
            },
            {
              path: 'qualityInReviewDetail',
              name: 'qualityInReviewDetail',
              component: () => import('../views/pp/reportingWorks/QualityInReviewDetail.vue'),
            },
            {
              path: '',
              redirect:'/main/reportingWorks/SelectReportingWorks'
            }
          ]
        },
        {
          //补片管理
          path: 'replenish',
          name: 'replenish',
          component: () => import('../views/pp/Replenish/Replenish.vue'),
          children:[
            {
              path: 'addReplenish',
              name: 'addReplenish',
              component: () => import('../views/pp/Replenish/AddReplenish.vue'),
            },
            {
              path: 'printReplenishFlowCard',
              name: 'printReplenishFlowCard',
              component: () => import('../views/pp/Replenish/PrintReplenishFlowCard.vue'),
            },
            {
              path: 'selectReplenish',
              name: 'selectReplenish',
              component: () => import('../views/pp/Replenish/SelectReplenish.vue'),
            },
            {
              path: '',
              redirect:'/main/Replenish/SelectReplenish'
            }
          ]
        },
        {
          //返工管理
          path: 'rework',
          name: 'rework',
          component: () => import('../views/pp/Rework/Rework.vue'),
          children:[
            {
              path: 'addRework',
              name: 'addRework',
              component: () => import('../views/pp/Rework/AddRework.vue'),
            },
            {
              path: 'selectRework',
              name: 'selectRework',
              component: () => import('../views/pp/Rework/SelectRework.vue'),
            },
            {
              path: '',
              redirect:'/main/Rework/SelectRework'
            }
          ]
        },
        {
          //BOM管理
          path: 'BOM',
          name: 'BOM',
          component: () => import('../views/pp/BOM/BOM.vue'),
    path: 'Caching',
    name: 'Caching',
    component: () => import('../views/Caching/caching.vue'),
          children:[
            {
              path: 'benchmarkBOM',
              name: 'benchmarkBOM',
              component: () => import('../views/pp/BOM/BenchmarkBOM.vue'),
        path: '/Caching/caching',
        name: 'caching',
        component: () => import('../views/Caching/caching.vue')
            },
            {
              path: 'standardBOM',
              name: 'standardBOM',
              component: () => import('../views/pp/BOM/StandardBOM.vue'),
            },
            {
              path: 'orderBOM',
              name: 'orderBOM',
              component: () => import('../views/pp/BOM/OrderBOM.vue'),
            },
            {
              path: 'selectBOM',
              name: 'selectBOM',
              component: () => import('../views/pp/BOM/SelectBOM.vue'),
            },
            {
              path: 'orderBOMDetails',
              name: 'orderBOMDetails',
              component: () => import('../views/pp/BOM/OrderBOMDetails.vue'),
            },
            {
              path: 'standardBOMDetail',
              name: 'standardBOMDetail',
              component: () => import('../views/pp/BOM/StandardBOMDetail.vue'),
            },
            {
              path: '',
              redirect:'/main/BOM/SelectBOM'
            }
          ]
        },
  /*----------- 磨边(冷加工) ----------------*/
        {
          //设备管理
          path: 'machine',
          name: 'machine',
          component: () => import('../views/pp/machine/Machine.vue'),
  path: 'StockBasicData',
  name: 'StockBasicData',
  component: () => import('../views/StockBasicData/stockBasicData.vue'),
          children:[
            {
              path: 'selectMachine',
              name: 'selectMachine',
              component: () => import('../views/pp/machine/SelectMachine.vue'),
      path: '/StockBasicData/stockBasicData',
      name: 'stockBasicData',
      component: () => import('../views/StockBasicData/stockBasicData.vue')
            },
            {
              path: 'addMachine',
              name: 'addMachine',
              component: () => import('../views/pp/machine/AddMachine.vue'),
            },
            {
              path: 'maintenanceAndRepair',
              name: 'maintenanceAndRepair',
              component: () => import('../views/pp/machine/MaintenanceAndRepair.vue'),
            },
            {
              path: 'addMaintenanceAndRepair',
              name: 'addMaintenanceAndRepair',
              component: () => import('../views/pp/machine/AddMaintenanceAndRepair.vue'),
            },
            {
              path: '',
              redirect:'/main/machine/SelectMachine'
            }
          ]
        },
/*----------- 大理片笼 ----------------*/
        {
          //报表管理
          path: 'report',
          name: 'report',
          component: () => import('../views/pp/report/Report.vue'),
path: 'Slicecage',
name: 'Slicecage',
component: () => import('../views/Slicecage/slicecage.vue'),
          children:[
            {
              //设备产量
              path: 'equipmentOutput',
              name: 'equipmentOutput',
              component: () => import('../views/pp/report/EquipmentOutput.vue'),
    path: '/Slicecage/slicecage',
    name: 'slicecage',
    component: () => import('../views/Slicecage/slicecage.vue')
            },
            {
              //订单BOM
              path: 'orderBOMOutside',
              name: 'orderBOMOutside',
              component: () => import('../views/pp/report/OrderBOMOutside.vue'),
            },
            {
              //订单计划分解
              path: 'orderPlanDecomposition',
              name: 'orderPlanDecomposition',
              component: () => import('../views/pp/report/OrderPlanDecomposition.vue'),
            },
            {
              //工序待完成
              path: 'processToBeCompleted',
              name: 'processToBeCompleted',
              component: () => import('../views/pp/report/ProcessToBeCompleted.vue'),
            },
            {
              //生产进度
              path: 'productionSchedule',
              name: 'productionSchedule',
              component: () => import('../views/pp/report/ProductionSchedule.vue'),
            },
            {
              //流程卡进度
              path: 'processCardProgress',
              name: 'processCardProgress',
              component: () => import('../views/pp/report/ProcessCardProgress.vue'),
            },
            {
              //品质报表
              path: 'qualityReport',
              name: 'qualityReport',
              component: () => import('../views/pp/report/QualityReport.vue'),
            },
            {
              //原片领料报表
              path: 'rawMaterialRequisition',
              name: 'rawMaterialRequisition',
              component: () => import('../views/pp/report/RawMaterialRequisition.vue'),
            },
            {
              //分架明细
              path: 'splittingDetailsOutside',
              name: 'splittingDetailsOutside',
              component: () => import('../views/pp/report/SplittingDetailsOutside.vue'),
            },
            {
              //任务完成情况
              path: 'taskCompletionStatus',
              name: 'taskCompletionStatus',
              component: () => import('../views/pp/report/TaskCompletionStatus.vue'),
            },
            {
              //班组产量
              path: 'teamOutput',
              name: 'teamOutput',
              component: () => import('../views/pp/report/TeamOutput.vue'),
            },
            {
              //在制品报表
              path: 'workInProgress',
              name: 'workInProgress',
              component: () => import('../views/pp/report/WorkInProgress.vue'),
            },
            {
              //成品率报表
              path: 'yield',
              name: 'yield',
              component: () => import('../views/pp/report/Yield.vue'),
            },
            {
              //次破报表
              path: 'damageReport',
              name: 'damageReport',
              component: () => import('../views/pp/report/DamageReport.vue'),
            },
            // {
            //   path: '',
            //   redirect:'/main/report/ProductionSchedule'
            // }
          ]
        },
          //mm模块
/*----------- 钢化 ----------------*/
        {
          path: 'productStock',
          name: 'productStock',
          component: () => import('../views/mm/mainProductStock/ProductStock.vue'),
path: 'PurchaseReturn',
name: 'purchase',
component: () => import('../views/PurchaseReturn/purchase.vue'),
          children:[
            {
              // 成品库存
              path: 'productStockList',
              name: 'productStockList',
              component: () => import('../views/mm/mainProductStock/ProductStockList.vue'),
            },
            {
              // 成品入库
              path: 'createProductStock',
              name: 'createProductStock',
              component:()=>   import('../views/mm/mainProductStock/CreateProductStock.vue'),
            },
            {
              // 成品出库
              path: 'finishedProductOut',
              name: 'finishedProductOut',
              component:()=>import('../views/mm/mainProductStock/FinishedProductOut.vue')
            },
            {
              // 成品出库
              path: 'finishedProductReturn',
              name: 'finishedProductReturn',
              component:()=>import('../views/mm/mainProductStock/FinishedProductReturn.vue')
            },
            {
              // 订单调拨
              path: 'orderAllocation',
              name: 'orderAllocation',
              component:()=>import('../views/mm/mainProductStock/OrderAllocation.vue'),
            },
            {
              // 成品领出
              path: 'finishedGoodsIssue',
              name: 'finishedGoodsIssue',
              component:()=>import('../views/mm/mainProductStock/FinishedGoodsIssue.vue'),
            },
            {
              // 成品返工
              path: 'finishedProductRework',
              name: 'finishedProductRework',
              component:()=>import('../views/mm/mainProductStock/FinishedProductRework.vue'),
            },
            {
              // 调拨记录
              path: 'transferRecord',
              name: 'transferRecord',
              component:()=>import('../views/mm/mainProductStock/TransferRecord.vue'),
            },
            {
              // 领出记录
              path: 'takeOutRecord',
              name: 'takeOutRecord',
              component:()=>import('../views/mm/mainProductStock/TakeOutRecord.vue'),
            },
            {
              // 返工记录
              path: 'reworkRecord',
              name: 'reworkRecord',
              component:()=>import('../views/mm/mainProductStock/ReworkRecord.vue'),
            },
            {
              path: '',
              redirect:'/main/productStock/ProductStockList'
            }
          ]
        },
        {
          // 物料资料
          path:'ingredients',
          name:'ingredients',
          component: () => import('../views/mm/mainIngredient/Ingredients.vue'),
          children:[
            {
              path: 'selectIngredients',
              name: 'selectIngredients',
              component:()=>import('../views/mm/mainIngredient/SelectIngredients.vue')
            },
            {
              path: 'createIngredients',
              name: 'createIngredients',
              component:()=>import('../views/mm/mainIngredient/CreateIngredients.vue')
            },
            {
              path: '',
              redirect:'/main/ingredients/SelectIngredients'
            }
          ]
        },
        {
          // 物料库存
          path:'ingredientsStock',
          name:'ingredientsStock',
          component: () => import('../views/mm/mainIngredientStock/IngredientsStock.vue'),
          children:[
            {
              path: 'selectIngredientsStock',
              name: 'selectIngredientsStock',
              component:()=>import('../views/mm/mainIngredientStock/SelectIngredientsStock.vue')
            },
            {
              path: 'accessoriesMonthlySettlement',
              name: 'accessoriesMonthlySettlement',
              component:()=>import('../views/mm/mainIngredientStock/AccessoriesMonthlySettlement.vue')
            },
            {
              path: 'originalMonthlySettlement',
              name: 'originalMonthlySettlement',
              component:()=>import('../views/mm/mainIngredientStock/OriginalMonthlySettlement.vue')
            },
            //   物料出库
            {
              path: 'materialOutbound',
              name: 'materialOutbound',
              component:()=>import('../views/mm/mainIngredientStock/MaterialOutbound.vue')
            },
              //出库新增
            {
              path:'createOutBound',
              name:'createOutBound',
              component:()=>import('../views/mm/mainIngredientStock/CreateOutBound.vue')
            },
            //返库
            {
              path:'returnToStorage',
              name:'returnToStorage',
              component:()=>import('../views/mm/mainIngredientStock/ReturnToStorage.vue')
            },
            //返库新增
            {
              path:'returnToStorageCreate',
              name:'returnToStorageCreate',
              component:()=>import('../views/mm/mainIngredientStock/ReturnToStorageCreate.vue')
            },
            {
              path: '',
              redirect:'/main/ingredientsStock/SelectIngredientsStock'
            }
          ]
        },
        {
          // 供应商管理!!!
          path:'trader',
          name:'trader',
          component: () => import('../views/mm/mainTrader/Trader.vue'),
          children:[
            {
              path: 'selectTrader',
              name: 'selectTrader',
              component:()=>import('../views/mm/mainTrader/SelectTrader.vue')
            },
            {
              path: 'createTrader',
              name: 'createTrader',
              component:()=>import('../views/mm/mainTrader/CreateTrader.vue')
            },
            {
              path: '',
              redirect:'/main/trader/SelectTrader'
            }
          ]
        },
        /*------------- sunshiqiang Add --*/
        {
          /*----------- 仓储报表 ----------------*/
          path: 'stockReport',
          name: 'stockReport',
          component: () => import('../views/mm/stockReport/stockReport.vue'),
          children:[
            {
              path: 'WarehouseReport',
              name: 'WarehouseReport',
              component: () => import('../views/mm/stockReport/WarehouseReport.vue'),
            }, {
              path: 'StockMonthReport',
              name: 'StockMonthReport',
              component: () => import('../views/mm/stockReport/StockMonthReport.vue'),
            }, {
              path: 'SubsidiaryMonthReport',
              name: 'SubsidiaryMonthReport',
              component: () => import('../views/mm/stockReport/SubsidiaryMonthReport.vue'),
            },
            /*----------- 新增 ----------------*/
            {
              path: 'StockWarehouseReport',
              name: 'StockWarehouseReport',
              component: () => import('../views/mm/stockReport/StockWarehouseReport.vue'),
            }, {
              path: '',
              redirect: '/main/stockReport/WarehouseReport'
            }
          ]
        },
        {
          /*----------- 采购订单 ----------------*/
          path: 'purchaseOrder',
          name: 'purchaseOrder',
          component: () => import('../views/mm/purchaseOrder/PurchaseOrder.vue'),
          children: [
            {
              path: 'SelectPurchaseOrder',
              name: 'SelectPurchaseOrder',
              component: () => import('../views/mm/purchaseOrder/Select.vue'),
            }, {
              path: 'CreatePurchaseOrder',
              name: 'CreatePurchaseOrder',
              component: () => import('../views/mm/purchaseOrder/Create.vue')
            },
            /*----------- 新增 ----------------*/
            {
              path: 'PaymentPurchaseOrder',
              name: 'PaymentPurchaseOrder',
              component: () => import('../views/mm/purchaseOrder/Payment.vue')
            },
            /*----------- 退货 ----------------*/
            {
              path: 'ReturnPurchaseOrder',
              name: 'ReturnPurchaseOrder',
              component: () => import('../views/mm/purchaseOrder/Return.vue')
            },
            /*----------- 入库 ----------------*/
            {
              path: 'StoragePurchaseOrder',
              name: 'StoragePurchaseOrder',
              component: () => import('../views/mm/purchaseOrder/Storage.vue')
            },
            {
              path: '',
              redirect: '/main/purchaseOrder/SelectPurchaseOrder'
            }
          ]
        },
        {
          /*----------- 采购入库 ----------------*/
          path: 'purchaseStorage',
          name: 'purchaseStorage',
          component: () => import('../views/mm/purchaseStorage/PurchaseStorage.vue'),
          children: [
            {
              path: 'SelectPurchaseStorage',
              name: 'SelectPurchaseStorage',
              component: () => import('../views/mm/purchaseStorage/Select.vue'),
            },
            {
              path: '',
              redirect: '/main/purchaseStorage/SelectPurchaseStorage'
            }
          ]
        },
        {
          /*----------- 采购退货 ----------------*/
          path: 'purchaseReturn',
    path: '/PurchaseReturn/purchaseReturn',
          name: 'purchaseReturn',
          component: () => import('../views/mm/purchaseReturn/PurchaseReturn.vue'),
          children: [
            {
              path: 'SelectPurchaseReturn',
              name: 'SelectPurchaseReturn',
              component: () => import('../views/mm/purchaseReturn/Select.vue'),
    component: () => import('../views/PurchaseReturn/purchaseReturn.vue')
            },
            {
              path: '',
              redirect: '/main/purchaseReturn/SelectPurchaseReturn'
    path: '/PurchaseReturn/purchaseStorage',
    name: 'purchaseStorage',
    component: () => import('../views/PurchaseReturn/purchaseStorage.vue')
  },
]
},
          /*----------- 下片台 ----------------*/
        {
          path: 'UnLoadGlass',
          name: 'UnLoadGlass',
          component: () => import('../views/UnLoadGlass/UnLoadGlass.vue'),
          children:[
            {
              path: '/UnLoadGlass/loadmachinerack',
              name: 'loadmachinerack',
              component: () => import('../views/UnLoadGlass/loadmachinerack.vue')
            },
            {
              path: '/UnLoadGlass/loadmachineracktwo',
              name: 'loadmachineracktwo',
              component: () => import('../views/UnLoadGlass/loadmachineracktwo.vue')
            },
            {
              path: '/UnLoadGlass/Landingindication',
              name: 'Landingindication',
              component: () => import('../views/UnLoadGlass/Landingindication.vue')
            },
            {
              path: '/UnLoadGlass/Landingindicationtwo',
              name: 'Landingindicationtwo',
              component: () => import('../views/UnLoadGlass/Landingindicationtwo.vue')
            }
          ]
        },
        {
          path: '',
          redirect:'/main/order'
          redirect:'/Slicecage/slicecage'
        }
      ]
    },
UI-Project/src/utils/unloadrequest.js
New file
@@ -0,0 +1,49 @@
import axios from 'axios'
import config from '../../config';
import useUserInfoStore from '@/stores/userInfo'
const userStore=useUserInfoStore()
const unloadrequest = axios.create({
    baseURL: `http://${config.serverUrl2}`,  // 注意!! 这里是全局统一加上了 后端接口前缀 前缀,后端必须进行跨域配置!
    timeout: 5000
})
//
// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token,对请求参数统一加密
unloadrequest.interceptors.request.use(config => {
    config.headers['Content-Type'] = 'application/json;charset=utf-8';
    if(userStore.user){
        config.headers['token'] = userStore.user.token;
    }
      // 设置请求头
    return config
}, error => {
    return Promise.reject(error)
});
// response 拦截器
// 可以在接口响应后统一处理结果
unloadrequest.interceptors.response.use(
    response => {
        let res = response.data;
        // 如果是返回的文件
        if (response.config.responseType === 'blob') {
            return res
        }
        // 兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }
        return res;
    },
    error => {
        console.log('err' + error) // for debug
        return Promise.reject(error)
    }
)
export default unloadrequest
UI-Project/src/utils/webSocket.js
@@ -6,7 +6,7 @@
var serverPort = "/ws"; // webSocket连接端口
var wsuri = "ws://127.0.0.1:12345/ws";
var wsuri = "ws://localhost:8081/mesModuleTools";
function createWebSocket(callback) {
UI-Project/src/views/Caching/caching.vue
New file
@@ -0,0 +1,766 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const tableData = [
  {
    id: '1',
    long: '1005',
    wide: '183.6',
    thick: '1991',
    type: '1200',
    typea: '1',
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '1200'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '1200'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '1200'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  }
]
const tableDataa = [
  {
    ida: '3',
    longa: '1005',
    widea: '183.6',
    thicka: '1991',
  },
  {
    ida: '4',
    longa: '105',
    widea: '183',
    thicka: '191',
  }
]
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '删除成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '删除失败',
      })
    })
}
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
})
</script>
<template>
  <div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 240px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="玻璃ID" min-width="80" />
          <el-table-column prop="long" align="center" label="位置" min-width="120" />
          <el-table-column prop="wide" align="center" label="宽" min-width="120" />
          <el-table-column prop="type" align="center" label="长" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">报缺</el-button>
            </template>
        </el-table-column>
        </el-table>
      </div>
    </el-card>
  </div>
  <div id="awatch">
    <img src="../../assets/woshihuancun.png" alt="" style="width: 60%;height: 90%;margin-left: 260px;margin-top: 20px;">
</div>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#message{
  text-align: center;
  align-items: center;
  color: black;
   width: 200px;
   height: 100px;
   background-color: #337ecc;
   margin-left: 28%;
}
#awatch{
  height: 460px;
  /* margin-top: -60px; */
}
</style>
UI-Project/src/views/HomeView.vue
@@ -3,21 +3,21 @@
import { sendSock, createWebSocket, closeSock } from "@/utils/webSocket"
function global_callback(msg) {
  console.log("websocket的回调函数收到服务器信息:" + JSON.stringify(msg));
  // console.log("收到服务器信息:" + msg);
}
function close(){
 closeSock();
// function global_callback(msg) {
//   console.log("websocket的回调函数收到服务器信息:" + JSON.stringify(msg));
//   // console.log("收到服务器信息:" + msg);
// }
// function close(){
//  closeSock();
}
function sendMessage(){
  sendSock("123")
}
function createSocket(){
  createWebSocket(global_callback);
}
</script>
// }
// function sendMessage(){
//   sendSock("123")
// }
// function createSocket(){
//   createWebSocket(global_callback);
// }
// </script>
<template>
UI-Project/src/views/Identify/identify.vue
New file
@@ -0,0 +1,174 @@
<template>
  <el-card style="margin-left: 10px; margin-top: 10px; margin-right: 10px;" v-loading="loading">
    <div style="display: flex;">
      <div style="margin-left: 400px; font-size: 20px;">工程号:P20240305001 </div>
      <div style="margin-left: 150px; font-size: 20px;">版图编号:1</div>
    </div>
    <svg width="100%" height="690" xmlns="http://www.w3.org/2000/svg" style="margin-top: -40px;">
      <defs>
            <marker id="arrow" markerUnits="strokeWidth" markerWidth="12" markerHeight="12" viewBox="0 0 12 12" refX="6"
                refY="6" orient="auto">
                <path d="M2,2 L10,6 L2,10 L2,2" style="fill: #911005;" />
            </marker>
        </defs>
      <g v-for="(rack, index) in racks" :key="index">
        <rect
          :x="rack.x"
          :y="rack.y"
          :width="rack.width"
          :height="rack.height"
          :fill="rack.fillColor"
          :data-index="index"
          class="rack-rect"
          style="stroke:#c8c9cc;stroke-width:3;"
          @click="showRectInfo(rack)"
        />
        <line x1='510' y1='309' x2='260' y2='310' stroke='#911005' stroke-width='2' marker-end='url(#arrow)'>
        </line>
        <line x1='850' y1='309' x2='1100' y2='310' stroke='#911005' stroke-width='2' marker-end='url(#arrow)'>
        </line>
        <line x1='510' y1='409' x2='260' y2='410' stroke='#911005' stroke-width='2' marker-end='url(#arrow)'>
        </line>
        <line x1='1200' y1='650' x2='1200' y2='470' stroke='#911005' stroke-width='2' marker-end='url(#arrow)'>
        </line>
        <text x="370" y="240" dominant-baseline="middle" text-anchor="middle">NG2024030501A-01</text>
        <text x="370" y="260" dominant-baseline="middle" text-anchor="middle">500*300</text>
        <text x="970" y="240" dominant-baseline="middle" text-anchor="middle">NG2024030501A-02</text>
        <text x="970" y="260" dominant-baseline="middle" text-anchor="middle">500*300</text>
        <text x="600" y="500" dominant-baseline="middle" text-anchor="middle">NG2024030501A-03</text>
        <text x="600" y="520" dominant-baseline="middle" text-anchor="middle">800*450</text>
        <text x="1280" y="520" dominant-baseline="middle" text-anchor="middle">NG2024030501A-04</text>
        <text x="1280" y="540" dominant-baseline="middle" text-anchor="middle">400*300</text>
        <g v-for="(item, itemIndex) in rack.items" :key="itemIndex">
          <rect
            :x="calculateItemXPosition(rack, item, itemIndex)"
            :y="calculateItemYPosition(rack, item, itemIndex)"
            :width="item.width"
            :height="item.height"
            :fill="item.fillColor"
          />
        </g>
      </g>
    </svg>
  </el-card>
</template>
<script>
import Swal from 'sweetalert2'
export default {
  data() {
    return {
      loading: false,
      racks: [
        {
          x: 70, y: 126, width: 600, height: 240, fillColor: '#93d2f3',
          items: [
            { position: 'top-left', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456',y: '20'},
            { position: 'bottom-left', width: 40, height: 30, fillColor: '#ffffff', content: 'NG1234567' },
            { position: 'bottom-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG12345678' }
          ]
        },
        {
          x: 685, y: 126, width: 600, height: 240,  fillColor: '#93d2f3',
          items: [
            { position: 'bottom-left', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'bottom-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'top-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG1234567' }
          ]
        },
        {
          x: 70, y: 380, width: 1100, height: 260, fillColor: '#81b337',
          items: [
            { position: 'top-left', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'bottom-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'top-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG1234567' }
          ]
        },
        {
          x: 1185, y: 380, width: 200, height: 300,fillColor: '#81b337',
          items: [
            { position: 'bottom-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'top-right',width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'top-left', width: 40, height: 30, fillColor: '#ffffff', content: 'NG1234567' },
          ]
        }
        // Add more racks and items here as needed
      ],
    };
  },
  methods: {
    calculateItemXPosition(rack, item, index) {
      if (item.position === 'top-right' || item.position === 'bottom-right') {
        return Math.min(rack.x + rack.width - item.width, rack.x + rack.width);
      } else {
        return rack.x;
      }
    },
    calculateItemYPosition(rack, item, index) {
      if (item.position === 'bottom-left' || item.position === 'bottom-right') {
        return Math.min(rack.y + rack.height - item.height, rack.y + rack.height);
      } else {
        return rack.y;
      }
    },
    showCustomAlert(content) {
      Swal.fire({
    // type: 'warning', // 弹框类型
    title: '该片玻璃状态', //标题
    // text: "注销后将无法恢复,请谨慎操作!", //显示内容
    confirmButtonColor: '#3085d6',// 确定按钮的 颜色
    confirmButtonText: '人工拿走',// 确定按钮的 文字
    showCancelButton: true, // 是否显示取消按钮
    cancelButtonColor: '#d33', // 取消按钮的 颜色
    cancelButtonText: "破损", // 取消按钮的 文字
    // focusCancel: true, // 是否聚焦 取消按钮
    reverseButtons: true  // 是否 反转 两个按钮的位置 默认是  左边 确定  右边 取消
}).then((isConfirm) => {
    try {
        //判断 是否 点击的 确定按钮
        if (isConfirm.value) {
            Swal.fire("人工拿走", "点击了人工拿走", "success");
        }
        else {
            Swal.fire("破损", "点击了破损", "error");
        }
    } catch (e) {
        alert(e);
    }
});
    },
    showRectInfo(rectInfo) {
      const contents = rectInfo.items.map(item => item.content).join(', ');
      this.$nextTick(() => {
        this.showCustomAlert(contents);
      });
    },
  }
};
</script>
<style scoped>
.glass-rack {
  width: 100%;
  height: 80vh;
}
.rack-rect:hover {
  cursor: pointer;
}
.custom-popover-class {
  background-color: lightgrey;
  color: black;
  border: 1px solid black;
}
</style>
UI-Project/src/views/LoginView.vue
@@ -98,11 +98,19 @@
<template>
  <div class="mainDiv" >
    <div id="main-login">
      <div id="img-div">
        <img id="img-pic" src="@/assets/img.png" alt="">
      <!-- <img
        style="width: 100%; height: 99vh"
        src="../../src/assets/background.jpg"
      /> -->
      <div>
      <div style="position: absolute; left: 8vw; top: 6vw; ">
        <img src="../../src/assets/3.png">
      </div>
       <div style="position: absolute; left: 15vw; top: 22vw; font-size: 55px;color: rgba(29, 33, 41, 1);">
        北玻MES系统
      </div>
      </div>
      <div id="div-login">
        <h2>北玻自动化ERP管理系统</h2>
        <el-form
            @submit.native.prevent
            ref="ruleFormRef"
@@ -110,41 +118,50 @@
            status-icon
            :rules="rules"
        >
          <el-form-item label="用户:" prop="userId">
        <div id="center">
            <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">账号</div>
          <el-form-item prop="userId">
            <el-input
            style="width: 340px;"
                v-model="userForm.userId"
                type="text"
                autocomplete="off"
                :prefix-icon="Avatar"
                placeholder="请输入你的账号"
                placeholder="请输入账号"
            />
          </el-form-item>
          <el-form-item label="密码:" prop="pass">
            <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">密码</div>
          <el-form-item prop="pass">
            <el-input
            style="width: 340px;"
                v-model="userForm.pass"
                type="password"
                autocomplete="off"
                :prefix-icon="Lock"
                placeholder="请输入你的密码"
                show-password
                placeholder="请输入密码"
            />
          </el-form-item>
          <el-form-item id="submitForm">
            <el-button
                :loading="registerLoadings"
                type="primary"
                @click="register"
            >注册
            </el-button>
            <el-button
                :loading="loginLoadings"
                type="primary"
                native-type="submit"
                @click="submitForm(ruleFormRef)"
                @keyup.enter.native="keyDown(e)"
                plain
            >登录
            </el-button>
            <el-button
                :loading="registerLoadings"
                type="primary"
                @click="register"
                plain
            >注册
            </el-button>
          </el-form-item>
        </div>
        </el-form>
      </div>
    </div>
@@ -154,16 +171,15 @@
<style scoped>
.mainDiv{
  //background-color: #1890FF;
  overflow: hidden;
  min-width: 718px;
  background-image: url("../../src/assets/background.jpg");
}
#main-login{
  margin: 150px auto 0 auto;
  height: 60vh;
  width: 70vw;
  //background-color: #f2f2f2;
  height: 70vh;
  width: 80vw;
}
#img-div{
  width: 55%;
@@ -179,23 +195,22 @@
}
#div-login{
  margin-top: 5%;
  /* margin-top: 20%; */
  /* margin-left: 650px; */
  background-color: #fff;
  float: right;
  width: 40%;
  height: 80%;
  border-radius: 12px;
  height: 60%;
  min-width: 318px;
  border-radius: 4px;
  box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19);
}
h2{
  color: #1890FF;
  width: 100%;
  text-align: center;
  margin-top: 20%;
#center{
  margin-top: -30px;
}
.el-form{
  width: 50%;
  margin: 5% auto auto;
  width: 60%;
  margin: 20% auto auto;
}
#submitForm {
  display: flex;
UI-Project/src/views/PurchaseReturn/purchase.vue
New file
@@ -0,0 +1,49 @@
<script setup>
import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue"
import {useRouter} from "vue-router";
let indexFlag=$ref(1)
function changeRouter(index){
  indexFlag=index
}
</script>
<template>
  <!-- <div id="main-div"> -->
    <div id="main-body">
      <router-view  />
    </div>
  <!-- </div> -->
</template>
<style scoped>
#main-div{
  width: 100%;
  height: 100%;
}
#div-title{
  height: 2%;
  width: 100%;
}
#searchButton{
  margin-top: -5px;
  margin-left: 1rem;
}
/* #searchButton1{
//margin-left: 10rem;
} */
/*main-body样式*/
#main-body{
  width: 100%;
  height: 95%;
  /* margin-top: 1%; */
}
#select{
  margin-left:0.5rem;
}
:deep(.indexTag .el-breadcrumb__inner){
  color: #5CADFE !important;
}
</style>
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
New file
@@ -0,0 +1,174 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
import { ref } from 'vue'
const dialogFormVisible = ref(true)
const dialogFormVisiblea = ref(false)
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
    }
  ],
})
</script>
<template>
  <div style="margin-top: 10px;">
     <el-button style="margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false">摆片版图</el-button>
    <el-button  id="searchButton" type="success" @click="dialogFormVisiblea = true;dialogFormVisible = false">已出炉玻璃</el-button>
<div v-if="dialogFormVisible" >
    <el-card style="margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
      <div style="display: flex;margin-bottom: 20px;">
      <div style="margin-left: 400px;font-size: 20px;">工程号:P20240305001 </div>
      <div style="margin-left: 150px;font-size: 20px;">版图编号:1</div>
    </div>
    <div>
            <div id="boxa" style="width: 400px;height: 120px;margin-left: 260px;">
              <div style="margin-top: 35px;"> NG202405060798A01-1</div>
            <div> 500×1500</div>
          </div>
            <div id="boxa" style="width: 400px;height: 120px;">
              <div style="margin-top: 35px;"> NG202405060798A01-1</div>
            <div> 500×1500</div>
          </div>
    </div>
    <div style="margin-top: 20px;">
            <div id="boxa" style="width: 400px;height: 120px;margin-left: 260px;">
              <div style="margin-top: 35px;"> NG202405060798A01-1</div>
            <div> 500×1500</div>
          </div>
            <div id="boxb" style="width: 400px;height: 120px;">
              <div style="margin-top: 35px;"> NG202405060798A01-1</div>
            <div> 500×1500</div>
          </div>
    </div>
    </el-card>
    </div>
<div v-if="dialogFormVisiblea">
    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
      <el-scrollbar height="630px">
      <div id="home-card">
      <div id="home-item" v-for="n in 20" :key="n">
            <div id="box" style="width: 100px;height: 165px;">100*65</div>
            <div id="box" style="width: 107px;height: 150px;">107*60</div>
            <div id="box" style="width: 107px;height: 155px;">109*60</div>
      </div>
    </div>
  </el-scrollbar>
    </el-card>
</div>
  </div>
</template>
<style scoped>
#boxa{
  border: 1px solid rgb(119, 116, 116);
  background-color:  #529b2e;
  text-align: center;
  display: inline-block;
    /* align-items:center; */
    /* justify-content:center; */
  margin-left: 20px;
}
#boxb{
  border: 1px solid rgb(119, 116, 116);
  background-color:  #a0cfff;
  /* display:flex; */
  text-align: center;
  display: inline-block;
    align-items:center;
    justify-content:center;
  margin-left: 20px;
}
#box{
  border: 1px solid black;
  background-color:  #337ecc;
  display:flex;
    align-items:center;
    justify-content:center;
}
#home-card {
    width: 100%;
    overflow: hidden;
    padding: 10px 0px;
    display: flex;
    flex-wrap: wrap;
    #home-item {
      border-style: solid;
      border-width: 1px;
      border-color: #E4E4E4;
      width: calc(34% - 20px);
      padding: 20px 0px 20px 20px;
      margin-right: 10px;
      margin-bottom: 10px;
      display: flex;
      justify-content: center;
      /* align-items: center; */
      background: #fff;
      #home-img {
        display: inline-block;
        width: 160px;
        height: 60px;
        margin: 0;
        padding: 0;
      }
      #home-right {
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: flex-start;
        margin-left: 10px;
        #home-num {
          font-size: 40px;
          margin: 5px 0;
        }
      }
    }
  }
</style>
UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
New file
@@ -0,0 +1,90 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
import { ref } from 'vue'
const dialogFormVisible = ref(true)
const dialogFormVisiblea = ref(false)
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
    }
  ],
})
</script>
<template>
  <div style="margin-top: 10px;">
<div>
    <el-card style="margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
      <div style="display: flex;margin-top: 20px;">
      <div style="margin-left: 400px;font-size: 20px;">工程号:P20240305001 </div>
      <div style="margin-left: 150px;font-size: 20px;">版图编号:1</div>
    </div>
    <div>
            <div id="boxa" style="width: 700px;height: 220px;margin-left: 260px;">
              <div style="margin-top: 85px;"> NG202405060798A01-1</div>
            <div> 500×1500</div>
          </div>
    </div>
    </el-card>
    </div>
  </div>
</template>
<style scoped>
#boxa{
  border: 1px solid rgb(119, 116, 116);
  background-color:  #529b2e;
  text-align: center;
  display: inline-block;
  margin-left: 20px;
  margin-top: 70px;
  margin-bottom: 50px;
}
</style>
UI-Project/src/views/RegisterView.vue
@@ -4,7 +4,8 @@
  import type { FormProps,FormInstance, FormRules } from 'element-plus'
  import {ElMessage,ElMessageBox} from "element-plus";
  import request from "@/utils/request";
  import {Avatar, UserFilled} from "@element-plus/icons-vue";
import { Lock,Avatar } from '@element-plus/icons-vue'
  // import {Avatar, UserFilled} from "@element-plus/icons-vue";
  const router = useRouter()
  const route = useRoute()
@@ -101,6 +102,12 @@
      }
    })
  }
  const toLogin = () => {
              router.push({
                path:'/login',
              })
  }
@@ -108,76 +115,141 @@
</script>
<template>
  <h2 style="color: #1890FF">
    <span>
      <el-icon><UserFilled /></el-icon>
      <p>北玻ERP用户注册</p>
    </span>
  </h2>
  <div id="main-div">
    <div id="register">
  <div class="mainDiv" >
    <div id="main-login">
     <div>
      <div style="position: absolute; left: 8vw; top: 6vw; ">
        <img src="../../src/assets/3.png">
      </div>
       <div style="position: absolute; left: 15vw; top: 22vw; font-size: 55px;color: rgba(29, 33, 41, 1);">
        北玻MES系统
      </div>
    </div>
    <div id="div-login">
      <el-form
          :label-position="labelPosition"
          label-width="100px"
          :model="register"
            @submit.native.prevent
          ref="ruleFormRef"
            :model="register"
          status-icon
          :rules="rules"
            label-width="75px"
      >
        <el-form-item label="姓名:" prop="userName">
          <el-input v-model="register.userName" />
          <div id="title">注册新用户</div>
        <div id="center">
            <!-- <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">姓名</div> -->
          <el-form-item prop="userName" label="姓名:">
            <el-input
            style="width: 200px;"
                v-model="register.userName"
                type="text"
                autocomplete="off"
                :prefix-icon="Avatar"
                placeholder="请输入姓名"
            />
        </el-form-item>
<!--        <el-form-item label="登陆名:" prop="loginName">-->
<!--          <el-input v-model="register.loginName" />-->
<!--        </el-form-item>-->
        <el-form-item label="密码:" prop="passWord">
          <el-input type="password" v-model="register.passWord" />
            <!-- <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">密码</div> -->
          <el-form-item prop="passWord" label="密码:">
            <el-input
            style="width: 200px;"
                v-model="register.passWord"
                type="password"
                autocomplete="off"
                :prefix-icon="Lock"
                placeholder="请输入密码"
                show-password
            />
        </el-form-item>
        <el-form-item label="确认密码:" prop="confirmPassword">
          <el-input type="password" v-model="register.confirmPassword" />
            <!-- <div style="color: rgba(78, 89, 105, 1);margin-bottom: 10px;">确认密码</div> -->
          <el-form-item prop="confirmPassword" label="确认密码:">
            <el-input
            style="width: 200px;"
                v-model="register.confirmPassword"
                type="password"
                :prefix-icon="Lock"
                autocomplete="off"
                show-password
                placeholder="请确认密码"
            />
        </el-form-item>
        <el-form-item >
          <el-form-item id="submitForm">
          <el-button
              :loading="loginLoadings"
              type="primary"
              @click="submitForm(ruleFormRef)"
          >注册
                plain
            >确认注册
          </el-button>
            <el-button
                type="primary"
                @click="toLogin"
                plain
            >取消
            </el-button>
        </el-form-item>
        </div>
      </el-form>
    </div>
  </div>
</div>
</template>
<style scoped>
#main-div{
  //overflow: hidden;
/* #main-div{
  position: absolute;
  left:50%;
  top:50%;
  left:75%;
  top:45%;
  transform: translate(-50%, -50%);
}
h2{
  text-align: center;
  width: 100vw;
  margin-top: 10vh;
}
#register{
  background-color: #FAFAFA;
  width: 50vw;
  height: 50vh;
  border-radius: 12px;
} */
/* #register{
  background-color: #fff;
  width: 32vw;
  height: 35vh;
  box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19);
  display:flex;
  align-items:center;
  justify-content:center;
  min-height: 280px;
}
.el-form{
} */
/* .el-form{
  max-width: 300px;
} */
#div-login{
  margin-top: 5%;
  /* margin-top: 20%; */
  /* margin-left: 650px; */
  background-color: #fff;
  border-radius: 4px;
  float: right;
  width: 40%;
  height: 60%;
  min-width: 318px;
  box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19);
}
#center{
  margin-top: 45px;
  margin-left: 100px;
}
.mainDiv{
  overflow: hidden;
  min-width: 718px;
  background-image: url("../../src/assets/background.jpg");
}
#main-login{
  margin: 150px auto 0 auto;
  height: 70vh;
  width: 80vw;
}
#submitForm{
  margin-top: 30px;
  margin-left: -10px;
}
#title{
  font-size: 25px;
  text-align: center;
  margin-top: 10px;
}
</style>
UI-Project/src/views/Returns/CreateReturns.vue
UI-Project/src/views/Returns/ReturnsReport.vue
UI-Project/src/views/Returns/SelectDeliveryList.vue
UI-Project/src/views/Returns/SelectReturns.vue
New file
@@ -0,0 +1,273 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const dialogFormVisible = ref(false)
const dialogFormVisiblea = ref(false)
const tableData = [
  {
    id: '1',
    long: '1005',
    wide: '183.6',
    thick: '1991'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191'
  }
]
const tableDataa = [
  {
    long: '1005',
    wide: '183.6',
    thick: '1991',
    station: '1'
  },
  {
    long: '105',
    wide: '183',
    thick: '191',
    station: '2'
  }
]
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '删除成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '删除失败',
      })
    })
}
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },//表头参数
  // columns:[
  //   {type:'expand',slots: { content:'content' },width: 50},
  //   // {title: '操作', width: 110, slots: { default: 'button_slot' }},
  //   {type: 'seq', title: '自序', width: 80 },
  //   // {title: '审核', width: 40, slots: { default: 'state' }},
  //   {title: 'id', width: 140, slots: { default: 'state' }},
  //   {title: '长', width: 160, slots: { default: 'state' }},
  //   {title: '宽', width: 160, slots: { default: 'state' }},
  //   {title: '厚', width: 160, slots: { default: 'state' }},
  //   // {field: '3',width:120,  title: '退货单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
  // ],
  //表头按钮
  // toolbarConfig: {
  //   buttons: [],
  //   import: false,
  //   export: true,
  //   print: true,
  //   zoom: true,
  //   custom: true
  // },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
  //table body实际数据
  // footerMethod ({ columns, data }) {//页脚函数
  //   return[
  //     columns.map((column, columnIndex) => {
  //       if (columnIndex === 0) {
  //         return '合计:'
  //       }
  //       // if (props.tableProp.footList.includes(column.field)) {
  //       //   return sumNum(data, column.field)
  //       // }
  //       return ''
  //     })
  //   ]
  // }
})
</script>
<template>
  <div>
    <!-- <el-date-picker
        v-model="value1"
        type="daterange"
        start-placeholder="开始时间"
        end-placeholder="结束时间"
    /> -->
    <!-- <el-button style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">查询</el-button> -->
    <el-button style="margin-top: -5px;margin-left: 5px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">上片输入</el-button>
    <el-button style="margin-top: -5px"  id="searchButton" type="primary" @click="dialogFormVisiblea = true">原片信息</el-button>
    <!-- <el-button style="margin-top: -5px"  id="searchButton" type="danger">人工拿走</el-button> -->
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto">
        <el-table height="100%" ref="table" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="id" min-width="80" />
          <el-table-column prop="long" align="center" label="长" min-width="120" />
          <el-table-column prop="wide" align="center" label="宽" min-width="120" />
          <el-table-column prop="thick" align="center" label="厚" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <el-button size="mini" type="text" plain @click="open">人工拿111走</el-button>
            </template>
        </el-table-column>
        </el-table>
      </div>
    </el-card>
  </div>
  <el-dialog v-model="dialogFormVisible" top="21vh" width="40%" title="上片输入" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form >
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="工位:" :required="true" style="width: 14vw">
                <el-input  autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="长:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              </el-form-item></div>
              </div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="宽:" :required="true" style="width: 13.2vw;margin-left: 14px;">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="厚:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        </el-form>
            </el-form>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="dialogFormVisible = false">
          确认
        </el-button>
        <el-button @click="dialogFormVisible = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" title="原片信息">
    <el-table height="100%" ref="table" :data="tableDataa" @row-click="handle">
      <el-table-column
        prop="long"
        align="center"
        label="长"
        min-width="120"
      />
      <el-table-column
        prop="wide"
        align="center"
        label="宽"
        min-width="120"
      />
      <el-table-column
        prop="thick"
        align="center"
        label="厚"
        min-width="120"
      />
      <el-table-column
        prop="station"
        align="center"
        label="工位"
        min-width="120"
      />
    </el-table>
    <div style="text-align: center; height: 22px; margin-top: 30px;">
        <el-button @click="dialogFormVisiblea = false">关闭</el-button>
      </div>
  </el-dialog>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
</style>
UI-Project/src/views/Returns/returns.vue
New file
@@ -0,0 +1,426 @@
<script lang="ts" setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
import type { TableColumnCtx } from 'element-plus'
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const dialogFormVisible = ref(false)
const add = ref(false)
const adda = ref(false)
const value = ref('')
interface User {
  id: string
  name: string
  amount1: string
  amount2: string
  amount3: number
}
interface SpanMethodProps {
  row: User
  column: TableColumnCtx<User>
  rowIndex: number
  columnIndex: number
}
const objectSpanMethod = ({
  row,
  column,
  rowIndex,
  columnIndex,
}: SpanMethodProps) => {
  if (columnIndex === 0) {
    if (rowIndex % 2 === 0) {
      return {
        rowspan: 2,
        colspan: 1,
      }
    } else {
      return {
        rowspan: 0,
        colspan: 0,
      }
    }
  }
}
const options = [
  {
    value: 'Option1',
    label: 'P202561456',
  },
  {
    value: 'Option2',
    label: 'P202561456',
  },
  {
    value: 'Option3',
    label: 'P202561456',
  },
  {
    value: 'Option4',
    label: 'P202561456',
  },
  {
    value: 'Option5',
    label: 'P202561456',
  },
]
const tableData: User[] = [
  {
    id: 'P202561456',
    long: '1005',
    wide: '183.6',
    thick: '1991',
  },
  {
    id: 'P202561456',
    long: '105',
    wide: '183',
    thick: '191',
  }
]
const tableDataa = [
  {
    long: '1005',
    wide: '183.6',
    thick: '1991',
    station: '1'
  },
  {
    long: '105',
    wide: '183',
    thick: '191',
    station: '1'
  }
]
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '删除成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '删除失败',
      })
    })
}
const getTableRow = (type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      // router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
      state: true
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
})
</script>
<template>
  <div>
    <div id="dotClass">
      <div>打标机就绪状态:</div>
      <i style="margin-top: 2px; background-color: green;width:18px;  height:18px;  border-radius: 50%;  display: block"></i>
    <el-button style="margin-left: 30px;margin-top: -3px;">手动确认</el-button>
    <div style="margin-left: 70px;">切割机就绪状态:</div>
     <i style="margin-top: 2px; background-color: #911005 ;width:18px;  height:18px;  border-radius: 50%;  display: block"></i>
    <el-button style="margin-left: 30px;margin-top: -3px;" >手动确认</el-button>
   </div>
    <el-button style="margin-top: 5px;margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">选择工程</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="primary">开始上片</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" >暂停</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="danger" >停止任务</el-button>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto">
        <!-- <el-table height="100%" ref="table" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="工程号" min-width="80" />
          <el-table-column prop="long" align="center" label="原片宽" min-width="120" />
          <el-table-column prop="wide" align="center" label="原片长" min-width="120" />
          <el-table-column prop="thick" align="center" label="膜系" min-width="120" />
          <el-table-column prop="thick" align="center" label="数量" min-width="120" />
          <el-table-column
            align="center"
            label="状态"
            min-width="80"
          >
          <el-tag type="success">就绪</el-tag>
          </el-table-column>
        </el-table> -->
    <el-table
    height="100%"
     ref="table"
     :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
      :data="tableData"
      :span-method="objectSpanMethod"
    >
      <el-table-column prop="id" label="工程号" width="200" align="center"/>
      <el-table-column prop="long" label="原片宽" align="center"/>
      <el-table-column prop="wide" label="原片长" align="center"/>
      <el-table-column prop="thick" label="膜系" align="center"/>
      <el-table-column prop="thick" label="数量" align="center"/>
      <el-table-column prop="wide" label="厚度" align="center"/>
      <el-table-column
            align="center"
            label="状态"
            min-width="80"
          >
          <el-tag type="success">就绪</el-tag>
          <!-- <el-tag type="danger">未就绪</el-tag> -->
          </el-table-column>
    </el-table>
      </div>
    </el-card>
      <div id="parent">
        <img src="../../assets/shangpianji .png" alt="" style="max-width: 20%;max-height: 20%;margin-top: 20px;margin-left: 130px;">
        <el-button style="margin-top: -830px;margin-left: -40px;"  size="mini" id="searchButton" @click="add = true">添加原片</el-button>
        <el-button style="margin-top: -10px;margin-left: -80px;"  size="mini" id="searchButton"  @click="adda = true">添加原片</el-button>
        <!-- <div id="overlay" v-show="state"></div> -->
        <!-- <div id="overlaya" v-show="statea"></div> -->
      </div>
        </div>
  <el-dialog v-model="dialogFormVisible" top="24vh" width="30%" title="工程" >
    <div style="margin-left: 50px;margin-bottom: 10px;">
      <el-form-item label="工程号:" :required="true">
        <el-select
    v-model="value"
    clearable
    placeholder="请选择工程"
    style="width: 300px"
  >
    <el-option
      v-for="item in options"
      :key="item.value"
      :label="item.label"
      :value="item.value"
    />
  </el-select>
              </el-form-item>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="dialogFormVisible = false">
          确认
        </el-button>
        <el-button @click="dialogFormVisible = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="add" top="23vh" width="45%" title="添加原片" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form label-width="70px" label-position="right">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="长:" :required="true" style="width: 14vw">
                <el-input  autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="宽:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              </el-form-item></div>
              </div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="膜系:" :required="true" style="width: 14vw;">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="厚度:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="数量:" :required="true" style="width: 14vw;">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        </el-form>
            </el-form>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="getTableRow('edit')">
          确认
        </el-button>
        <el-button @click="add = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="adda" top="23vh" width="45%" title="添加原片" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" >
      <el-form label-width="70px" label-position="right">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="长:" :required="true" style="width: 14vw">
                <el-input  autocomplete="off" style="width: 180px" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="宽:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" style="width: 180px" />
              </el-form-item></div>
              </div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="膜系:" :required="true" style="width: 14vw;">
                <el-input autocomplete="off" style="width: 180px" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="厚度:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" style="width: 180px" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="数量:" :required="true" style="width: 14vw;">
                <el-input autocomplete="off" style="width: 180px" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        </el-form>
            </el-form>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="adda = false">
          确认
        </el-button>
        <el-button @click="adda = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#dotClass {
  display: flex;
  margin-left: 20px;
  size: 50px;
  margin-top: 20px;
  margin-bottom: 20px;
}
#parent{
  position: relative;
}
#overlay{
  position: absolute;
  z-index: 1;
  width: 212px;
  height: 15px;
  background-color: #529b2e;
  margin-top: -407px;
  margin-left: 171px;
}
#overlaya{
  position: absolute;
  z-index: 1;
  width: 212px;
  height: 15px;
  background-color: #529b2e;
  margin-top: -40px;
  margin-left: 167px;
}
</style>
UI-Project/src/views/Slicecage/slicecage.vue
New file
@@ -0,0 +1,568 @@
<script lang="ts" setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const dialogFormVisible = ref(false)
const dialogFormVisiblea = ref(false)
const dialogFormVisibleb = ref(false)
const currentPage4 = ref(4)
const pageSize4 = ref(100)
// const tableData = [
//   {
//     id: '1',
//     long: '1005',
//     wide: '183.6',
//     thick: '1991',
//     type: '1234567',
//     typea: '1',
//   },
// ]
// const tableDatab = [
//   {
//     idb: '2',
//     longb: '105',
//     wideb: '183',
//     typeb: '123456',
//   }
// ]
const tableDataa = [
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
  {
    ida: '3',
    typea: '1991',
  },
]
const dialogForm = () => {
  ElMessageBox.confirm(
    '确定要急停吗?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '否',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '急停成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '急停失败',
      })
    })
}
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
})
</script>
<template>
  <div style="height: 700px;">
    <!-- <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">手动进片</el-button> -->
    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true">订单信息</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="success" @click="dialogFormVisibleb = true">出片队列</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="danger">终止进片</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="danger">终止出片</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="danger"  @click="dialogForm">软急停</el-button>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="出片玻璃ID" min-width="80" />
          <el-table-column prop="long" align="center" label="笼子" min-width="120" />
          <el-table-column prop="wide" align="center" label="格子" min-width="120" />
          <el-table-column prop="type" align="center" label="工程号" min-width="120" />
          <el-table-column prop="type" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="type" align="center" label="钢化版图号" min-width="120" />
          <el-table-column prop="type" align="center" label="尺寸" min-width="120" />
          <el-table-column prop="type" align="center" label="结束任务" min-width="120" />
        </el-table>
      </div>
    </el-card>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 3px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="idb" align="center" label="进片玻璃ID" min-width="80" />
          <el-table-column prop="longb" align="center" label="笼子" min-width="120" />
          <el-table-column prop="wideb" align="center" label="格子" min-width="120" />
          <el-table-column prop="typeb" align="center" label="工程号" min-width="120" />
          <el-table-column prop="typeb" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="typeb" align="center" label="钢化版图号" min-width="120" />
          <el-table-column prop="typeb" align="center" label="尺寸" min-width="120" />
          <el-table-column prop="typeb" align="center" label="结束任务" min-width="120" />
        </el-table>
      </div>
    </el-card>
    <div style="padding: 10px;display: flex;height:110px;">
                <div v-for="n in 9" :key="n" id="occupy">
                    <el-col style="text-align:left;font-weight: bold;">#1</el-col>
                    <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;">
                        <span id="biao">使用率</span><span id="zhi">33%</span>
                    </el-col>
                    <hr style="width:80%;margin: 0 auto;" />
                    <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;">
                        <span id="biao">空间(片数)</span><span id="zhi">555</span>
                    </el-col>
                </div>
    </div>
    <div id="awatch">
  <img src="../../assets/xmjc.png" alt="" style="width: 70%;height: 100%;margin-left: 160px;">
</div>
  </div>
<el-dialog v-model="dialogFormVisible" top="12vh" width="85%" title="请确认玻璃信息" >
  <div style="margin-left: 50px;margin-bottom: 10px;">
    <div style="display: flex;">
    <p style="margin-top: 4px;">确认状态:</p>
    <el-button style="margin-left: 10px;size: mini;" type="success">允许</el-button>
    <el-button style="margin-left: 10px;size: mini;" type="danger">不允许</el-button>
    <p style="margin-left: 60px;margin-top: 4px;">当前状态:</p>
    <div style="margin-top: 4px; margin-left: 10px;">手动</div>
    <el-button style="margin-left: 10px;size: mini;" type="primary">切换</el-button>
    <el-input  placeholder="请输入玻璃id" style="width: 180px;size: mini;margin-left: 60px;"></el-input>
    <el-button style="margin-left: 10px;size: mini;" type="primary">添加</el-button>
    <p style="margin-left: 60px;margin-top: 4px;">玻璃id:</p>
    <el-input  style="width: 180px;size: mini;margin-left: 30px;"></el-input>
  </div>
    <div style="display: flex;">
      <p style="margin-left: 290px;margin-top: 20px;font-weight: bold;">上片位</p>
      <p style="margin-left: 630px;margin-top: 20px;font-weight: bold;">扫码位</p>
    </div>
    <div style="display: flex;">
    <div style="margin-top: 20px;">
      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">当前信息</p>
      <el-form label-position="right" label-width="90px">
      <el-form-item style="width: 20vw" label="玻璃id:">
      <el-input style="width: 180px" size="mini" placeholder="请输入玻璃id"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="订单编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入订单编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="列表编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入列表编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="箱子编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入箱子编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="长:">
      <el-input style="width: 180px" size="mini" placeholder="请输入长"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="宽:">
      <el-input style="width: 180px" size="mini" placeholder="请输入宽"></el-input>
       </el-form-item>
      </el-form>
      </div>
    <div style="margin-top: 20px;">
      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">修改信息</p>
      <el-form label-position="right" label-width="90px">
      <el-form-item style="width: 20vw" label="玻璃id:">
      <el-input style="width: 180px" size="mini" placeholder="请输入玻璃id"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="订单编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入订单编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="列表编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入列表编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="箱子编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入箱子编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="长:">
      <el-input style="width: 180px" size="mini" placeholder="请输入长"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="宽:">
      <el-input style="width: 180px" size="mini" placeholder="请输入宽"></el-input>
       </el-form-item>
      </el-form>
      </div>
    <div style="margin-top: 20px;">
      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">修改信息</p>
      <el-form label-position="right" label-width="90px">
      <el-form-item style="width: 20vw" label="玻璃id:">
      <el-input style="width: 180px" size="mini" placeholder="请输入玻璃id"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="订单编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入订单编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="列表编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入列表编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="箱子编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入箱子编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="长:">
      <el-input style="width: 180px" size="mini" placeholder="请输入长"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="宽:">
      <el-input style="width: 180px" size="mini" placeholder="请输入宽"></el-input>
       </el-form-item>
      </el-form>
      </div>
    <div style="margin-top: 20px;">
      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">当前信息</p>
      <el-form label-position="right" label-width="90px">
      <el-form-item style="width: 20vw" label="玻璃id:">
      <el-input style="width: 180px" size="mini" placeholder="请输入玻璃id"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="订单编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入订单编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="列表编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入列表编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="箱子编号:">
      <el-input style="width: 180px" size="mini" placeholder="请输入箱子编号"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="长:">
      <el-input style="width: 180px" size="mini" placeholder="请输入长"></el-input>
       </el-form-item>
      <el-form-item style="width: 20vw" label="宽:">
      <el-input style="width: 180px" size="mini" placeholder="请输入宽"></el-input>
       </el-form-item>
      </el-form>
      </div>
    </div>
        </div>
  <template #footer>
    <div id="dialog-footer">
      <el-button type="primary" @click="dialogFormVisible = false">
        确认
      </el-button>
      <el-button @click="dialogFormVisible = false">取消</el-button>
    </div>
  </template>
</el-dialog>
<el-dialog v-model="dialogFormVisiblea" top="10vh" width="85%" title="订单信息" >
  <el-input  placeholder="请输入工程号" style="width: 180px;size: mini;"></el-input>
    <el-button style="margin-left: 10px;size: mini;" type="primary">查询</el-button>
    <el-table  ref="table" style="margin-top: 20px;height: 500px;"
        @selection-change="handleSelectionChange"
        :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="ida" align="center" label="玻璃id" min-width="80" />
          <el-table-column prop="typea" align="center" label="工程号" min-width="120" />
          <el-table-column prop="typea" align="center" label="长" min-width="120" />
          <el-table-column prop="typea" align="center" label="宽" min-width="120" />
          <el-table-column prop="typea" align="center" label="厚" min-width="120" />
        </el-table>
        <div id="demo-pagination-block">
    <el-pagination
    style="margin-left: 850px;"
      v-model:current-page="currentPage4"
      v-model:page-size="pageSize4"
      :page-sizes="[100, 200, 300, 400]"
      :small="small"
      :disabled="disabled"
      :background="background"
      layout="total, sizes, prev, pager, next, jumper"
      :total="400"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
</el-dialog>
<el-dialog v-model="dialogFormVisibleb" top="10vh" width="85%" title="出片队列" >
  <div style="display: flex;">
  <p style="margin-top: 4px;">队列状态:</p>
  <p style="margin-top: 4px;">开始</p>
    <el-button style="margin-left: 10px;size: mini;" type="danger">停止</el-button>
    <el-button style="margin-left: 10px;size: mini;" type="primary">添加</el-button>
  </div>
    <el-table  ref="table" style="margin-top: 20px;height: 500px;"
        @selection-change="handleSelectionChange"
        :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="铝框id" min-width="80" />
          <el-table-column prop="type" align="center" label="玻璃id" min-width="120" />
          <el-table-column prop="type" align="center" label="订单编号" min-width="120" />
          <el-table-column prop="type" align="center" label="列表编号" min-width="120" />
          <el-table-column prop="type" align="center" label="箱子编号" min-width="120" />
          <el-table-column prop="type" align="center" label="长" min-width="120" />
          <el-table-column prop="type" align="center" label="宽" min-width="120" />
          <el-table-column prop="type" align="center" label="玻璃状态" min-width="120" />
          <el-table-column prop="type" align="center" label="顺序" min-width="120" />
          <el-table-column prop="type" align="center" label="完成" min-width="120" />
          <el-table-column prop="type" align="center" label="操作" min-width="120" />
        </el-table>
</el-dialog>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#message{
  text-align: center;
  align-items: center;
  color: black;
   width: 200px;
   height: 100px;
   background-color: #337ecc;
   margin-left: 28%;
}
#awatch{
  height: 450px;
}
#occupy {
    height: 100%;
    width: 10%;
    background-color: white;
    margin: 0px 8px 0px 8px;
    border: 1px #EBEEF5 solid;
    text-align: center;
    padding: 5px;
}
#biao {
    font-size: 12px;
}
#zhi {
    font-size: 18px;
    font-weight: bold;
}
#demo-pagination-block + #demo-pagination-block {
  margin-top: 10px;
}
#demo-pagination-block #demonstration {
  margin-bottom: 16px;
}
::-webkit-scrollbar {
     width: 0 !important;
   }
   ::-webkit-scrollbar {
     width: 0 !important;height: 0;
   }
</style>
UI-Project/src/views/StockBasicData/Create.vue
New file
@@ -0,0 +1,724 @@
<template>
  <el-header height="auto">
    <el-descriptions
        class="margin-top"
        title=""
        :column="4"
        :size="'default'"
        border
        :rules="rules"
        :model="ruleForm"
    >
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy" prop="name">
        <template #label>
          <span style="color:red">*</span>
          采购类型
        </template>
<!--        <el-select v-model="form.buyType" class="m-2" placeholder="选择采购类型" clearable>-->
        <el-select v-model="ruleForm.name" class="m-2" placeholder="选择采购类型" clearable>
          <el-option
              v-for="item in CGTypeOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
          />
        </el-select>
      </el-descriptions-item >
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          <span style="color:red">*</span>
          采购组织
        </template>
        <el-input v-model="ruleForm.name" placeholder="采购组织" clearable prop="name"></el-input>
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          <span style="color:red">*</span>
          供应商
        </template>
        <el-cascader
            placeholder="选择供应商"
            :options="buyerOptions"
            filterable
            clearable
            empty-text="empty-text"
            :v-model="form.supplier"
        >
        </el-cascader>
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          <span style="color:red">*</span>
          采购部门
        </template>
        <el-select v-model="cgBuMen" class="m-2" placeholder="选择采购部门" clearable>
          <el-option
              v-for="item in CGBuMenOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
          />
        </el-select>
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          <span style="color:red">*</span>
          采购员
        </template>
        <el-select v-model="form.buyer" class="m-2" placeholder="选择采购员" clearable>
          <el-option
              v-for="item in BuyerOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
          />
        </el-select>
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy"
      >
        <template #label>
          <span style="color:red">*</span>
          制表日期
        </template>
        <el-date-picker
            v-model="form.date"
            type="date"
            placeholder="选择制表日期"
        />
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy"></el-descriptions-item>
    </el-descriptions>
  </el-header>
  <el-main style="padding-top: 5px;height:100%">
    <!--    <el-button class="mt-4" style="width: 10%" @click="onAddItem"
        >添加
        </el-button>-->
    <vxe-grid
        max-height="500"
        @filter-change="filterChanged"
        class="mytable-scrollbar"
        ref="xGrid"
        v-bind="gridOptions"
        @="gridEvents"
    >
      <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
      <!--      下拉显示所有信息插槽-->
      <template #content="{ row}">
        <ul class="expand-wrapper">
          <li v-for="(item,key,index) in row">
            <span style="font-weight: bold">{{ key + ':  ' }}</span>
            <span>{{ item }}</span>
          </li>
        </ul>
      </template>
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button>
        <!--          <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>-->
        <!--          <el-button @click="cellClickEvent" link type="primary" size="small">详情</el-button>-->
      </template>
      <template #num1_filter="{ column, $panel }">
        <div>
          <div v-for="(option, index) in column.filters" :key="index">
            <el-input v-model="option.data" @input="changeFilterEvent($event, option, $panel)" />
          </div>
        </div>
      </template>
    </vxe-grid>
  </el-main>
</template>
<script lang="ts" setup>
import {ref, reactive} from 'vue'
import {useRouter} from "vue-router";
import {ElMessage, ElMessageBox} from "element-plus";
let router = useRouter()
//组件接收参数
const gridOptions = reactive({
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮
  id: 'CustomerList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY: {enabled: true},//开启虚拟滚动
  showOverflow: true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  columns: [
    //{title: '操作', width: '8%', slots: {default: 'button_slot'}, fixed: "left"},
    {type: 'seq', fixed: "left", title: ' ', width: 50},
    {type: 'checkbox', fixed: "left", title: '', width: 50},
    //{type: 'expand', title: '详情', fixed: "left", slots: {content: 'content'}, width: 50},
    {
      field: 'cgdh',
      width: '10%',
      title: '物料编码',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'cgzt',
      width: '10%',
      title: '物料名称',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'gys',
      width: '10%',
      title: '产地',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'w',
      width: '8%',
      title: '宽度', /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'g',
      width: '8%',
      title: '高度', /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true,
      type: 'number'
    },
    {
      field: 'h',
      width: '8%',
      title: '厚度', /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'xh',
      width: '8%',
      title: '型号',/*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'dw',
      width: '8%',
      title: '单位', /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'sl',
      width: '8%',
      title: '数量', /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'sl',
      width: '8%',
      title: '操作数量', /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}}
    },
    {
      field: 'sl',
      width: '12%',
      title: '箱数',    /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'je',
      width: '8%',
      title: '单片面积', /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'je',
      width: '12%',
      title: '单价',   /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: '6',
      width: '8%',
      title: '总数量',   /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'sl',
      width: '8%',
      title: '总面积', /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'yl',
      width: '10%',
      title: '总金额',/*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    },
    {
      field: 'yl',
      width: '10%',
      title: '备注', /*filters: [{data: ''}], slots: {filter: 'num1_filter'},*/
      editRender: {name: 'input', attrs: {placeholder: ''}},
      sortable: true
    }
  ],//表头参数
  toolbarConfig: {
    buttons: [
      {type: 'text'},
      {
        'name': '新增',
        'code': 'Add',
      },
      {
        'name': '移除',
        'code': 'Remove'
      },
      {
        'name': '保存订单',
        status: 'primary',
        'code': 'Save'
      }, {
        'name': '入库',
        status: 'primary',
        'code': 'Storage'
      }/*,
      {
        'name': '退货',
        status: 'primary',
        'code': 'Return'
      },
      {
        'name': '返回查询',
        'code':'GoSelect'
      }*/],
    import: false,
    export: true,
    print: true,
    zoom: true,
    custom: true,
    tools: [],
  },//表头按钮
  /*data: [{},{},{},{},{},{}],//table body实际数据*/
  data: [{}, {}, {}],//table body实际数据
  mergeFooterItems: [
    {row: 0, col: 0, rowspan: 1, colspan: 3}
  ],//合并脚
  footerMethod({columns, data}) {//页脚函数
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
        }
        /* if (props.tableProp.footList.includes(column.field)) {
           return sumNum(data, column.field)
         }*/
        return ''
      })
    ]
  },
})
const xGrid = ref()
const gridEvents = {
  toolbarButtonClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
//新增
        case 'Add': {
          const record = {
            checked: false
          }
          $grid.insertAt(record, 0).then(({row}) => {
            $grid.setEditRow(row)
          })
          break
        }
//移除
        case 'Remove': {
          if ($grid.getCheckboxRecords().length === 0) {
            MessageShow('请选择至少一条数据','warning');
            return
          } else {
            MessageConfirmShow('移除','是否确认移除选中的' + $grid.getCheckboxRecords().length + '条数据!');
          }
          break
        }
//保存
        case 'Save': {
          /*if (form.buyItem === null || form.buyItem === '') {
            MessageShow('采购组织不可为空','warning');
            return;
          }
*/
          //选中数据
          /* const $table = this.$refs.xTable
           const selectRecords = $table.getCheckboxRecords()*/
//+$grid.rows.number
          if ($grid.getCheckboxRecords().length === 0) {
            MessageShow('请选择至少一条数据','warning');
            return
          } else {
            MessageConfirmShow('保存订单','是否确定保存当前订单信息');
          }
          break
        }
//入库
        case 'Storage': {
          if ($grid.getCheckboxRecords().length === 0) {
            MessageShow('请选择至少一条数据','warning');
            return
          } else {
            MessageConfirmShow('入库','您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认入库?')
          }
          break
        }
//退库
        case 'Return': {
          if ($grid.getCheckboxRecords().length === 0) {
            MessageShow('请选择至少一条数据','warning');
            return
          } else {
          }
          break
        }
      }
    }
  },
  toolbarToolClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'myPrint': {
          $grid.print()
          break
        }
      }
    }
  },
}
import type { FormInstance, FormRules } from 'element-plus'
interface RuleForm {
  name: string
  region: string
  count: string
  date1: string
  date2: string
  delivery: boolean
  type: string[]
  resource: string
  desc: string
}
const ruleFormRef = ref<FormInstance>()
const ruleForm = reactive<RuleForm>({
  name: '',
  region: '',
  count: '',
  date1: '',
  date2: '',
  delivery: false,
  type: [],
  resource: '',
  desc: '',
})
const rules = reactive<FormRules<RuleForm>>({
  name: [
    { required: true, message: 'Please input Activity name', trigger: 'blur' },
    { min: 3, max: 5, message: 'Length should be 3 to 5', trigger: 'blur' },
  ],
  region: [
    {
      required: true,
      message: 'Please select Activity zone',
      trigger: 'change',
    },
  ],
  count: [
    {
      required: true,
      message: 'Please select Activity count',
      trigger: 'change',
    },
  ],
  date1: [
    {
      type: 'date',
      required: true,
      message: 'Please pick a date',
      trigger: 'change',
    },
  ],
  date2: [
    {
      type: 'date',
      required: true,
      message: 'Please pick a time',
      trigger: 'change',
    },
  ],
  type: [
    {
      type: 'array',
      required: true,
      message: 'Please select at least one activity type',
      trigger: 'change',
    },
  ],
  resource: [
    {
      required: true,
      message: 'Please select activity resource',
      trigger: 'change',
    },
  ],
  desc: [
    { required: true, message: 'Please input activity form', trigger: 'blur' },
  ],
})
const form = reactive({
  name: '',
  region: '',
  date: '',
  delivery: false,
  type: [],
  resource: '',
  desc: '',
  supplier: '',
  buyer: '',
  buyItem: '',
  buyType: ''
})
//供应商
const buyerOptions = [
  {value: '0', label: '供应商1'},
  {value: '1', label: '供应商2'},
  {value: '2', label: '供应商3'},
  {value: '3', label: '供应商4'},
  {value: '4', label: '供应商5'},
  {value: '5', label: '供应商6'},
]
const value = ref('')
const cgBuMen = ref('')
//采购类型
const CGTypeOptions = [
  {
    value: '1',
    label: '标准类型',
  },
  {
    value: '2',
    label: '非标准类型',
  },
  {
    value: '3',
    label: '追加采购',
  },
]
//采购部门
const CGBuMenOptions = [
  {
    value: '0',
    label: '采购华北部',
  },
  {
    value: '1',
    label: '采购东南部',
  },
  {
    value: '2',
    label: '采购西北部',
  },
  {
    value: '3',
    label: '采购中原部',
  },
  {
    value: '4',
    label: '采购外国部',
  },
]
//采购人
const BuyerOptions = [
  {
    value: '0',
    label: '采购员1',
  },
  {
    value: '1',
    label: '采购员2',
  },
  {
    value: '2',
    label: '采购员3',
  },
  {
    value: '3',
    label: '采购员4',
  },
  {
    value: '4',
    label: '采购员5',
  },
]
//页面逻辑代码执行
function logicExecute(type){
  const $grid = xGrid.value
  switch (type) {
    case '入库':
      //入库逻辑代码TODO
      MessageShow('入库成功!', 'success');
      break;
    case '退货':
      //退货逻辑代码TODO
      MessageShow('退货成功!', 'success');
      break;
    case '保存订单':
      //保存订单逻辑代码TODO
      const submitForm = async (formEl: FormInstance | undefined) => {
        if (!formEl) return
        await formEl.validate((valid, fields) => {
          if (valid) {
            console.log('submit!')
          } else {
            console.log('error submit!', fields)
          }
        })
      }
      MessageShow('订单保存成功!', 'success');
      break;
    case '移除':
      $grid.removeCheckboxRow();
      break;
    default:
      MessageShow('未知操作!', 'error');
      break;
  }
  return true;
}
//提示信息
const MessageShow = (content, type ) => {
  ElMessage({
    message: content,
    type: type,
    showClose: true,
  })
}
//操作确认类信息:操作类型,提示内容,提示标头,提示类型
const MessageConfirmShow = (czType, content, title='操作确认提示', type='warning') => {
  ElMessageBox.confirm(
      content,
      title,
      {
        cancelButtonText: '取消',
        confirmButtonText: '确定',
        type: type,
        center: true,
      }
  )
      //点击了确定
      .then(() => {
        return logicExecute(czType);
      })
      //点击了取消
      .catch(() => {
        return false;
      })
}
</script>
<style scoped>
:deep(.el-descriptions__table .label-diy) {
  text-align: center;
  width: 100px;
  /*font-size: large;*/
}
</style>
UI-Project/src/views/StockBasicData/Details.vue
New file
@@ -0,0 +1,453 @@
<template>
  <el-header height="auto">
    <el-descriptions
        class="margin-top"
        title=""
        :column="4"
        :size="'default'"
        border
    >
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          操作单号
        </template>
        <el-input v-model="form.buyItem" placeholder="单号" disabled></el-input>
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          采购类型
        </template>
        <el-input v-model="form.buyItem" placeholder="采购类型" disabled></el-input>
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          采购部门
        </template>
        <el-input v-model="form.buyItem" placeholder="采购部门" disabled></el-input>
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          供应商
        </template>
        <el-input v-model="form.buyItem" placeholder="供应商" disabled></el-input>
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          采购员
        </template>
        <el-input v-model="form.buyItem" placeholder="采购员" disabled></el-input>
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          采购组织
        </template>
        <el-input v-model="form.buyItem" placeholder="采购组织" disabled></el-input>
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy">
        <template #label>
          制表日期
        </template>
        <el-date-picker
            v-model="form.date"
            type="date"
            placeholder="选择制表日期"
        />
      </el-descriptions-item>
      <el-descriptions-item label-class-name="label-diy" class-name="content-diy"></el-descriptions-item>
    </el-descriptions>
  </el-header>
  <el-main style="padding-top: 5px;height:100%">
    <vxe-grid
        max-height="500"
        @filter-change="filterChanged"
        ref="xGrid"
        v-bind="gridOptions"
        v-on="gridEvents"
    >
      <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
      <!--      下拉显示所有信息插槽-->
      <template #content="{ row}">
        <ul class="expand-wrapper">
          <li v-for="(item,key,index) in row">
            <span style="font-weight: bold">{{ key + ':  ' }}</span>
            <span>{{ item }}</span>
          </li>
        </ul>
      </template>
    </vxe-grid>
  </el-main>
</template>
<script setup>
import {ref, reactive} from 'vue'
let router = useRouter()
import {useRouter} from "vue-router";
import { ElMessage, ElMessageBox} from "element-plus";
const value = ref('')
//组件接收参数
const gridOptions = reactive({
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮
  id: 'CustomerList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  //开启虚拟滚动
  scrollY: {enabled: true},
  showOverflow: true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  //筛选配置项
  filterConfig: {
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  //表头参数、列名
  columns: [
    {type: 'seq', fixed: "left", title: ' ', width: 50},
    {type: 'checkbox', fixed: "left", title: '', width: 50},
    {
      field: 'cgdh',
      width: '10%',
      title: '物料编码',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'cgzt',
      width: '10%',
      title: '物料名称',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'gys',
      width: '10%',
      title: '产地',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'w',
      width: '8%',
      title: '宽度',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'g',
      width: '8%',
      title: '高度',
      filters: [{data: ''}],
      sortable: true,
    },
    {
      field: 'h',
      width: '8%',
      title: '厚度',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'xh',
      width: '8%',
      title: '型号',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'dw',
      width: '8%',
      title: '单位',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'sl',
      width: '8%',
      title: '数量',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'czsl',
      width: '8%',
      title: '操作数量',
      type: 'number',
      editRender: {name: 'input', type: 'number', attrs: {placeholder: ''}}
    },
    {
      field: 'sl',
      width: '12%',
      title: '箱数',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'je',
      width: '8%',
      title: '单片面积',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'je',
      width: '12%',
      title: '单价',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'sl',
      width: '8%',
      title: '总面积',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'yl',
      width: '10%',
      title: '总金额',
      filters: [{data: ''}],
      sortable: true
    },
    {
      field: 'yl',
      width: '10%',
      title: '备注',
      filters: [{data: ''}],
      sortable: true
    }
  ],
  //表头按钮
  toolbarConfig: {
    buttons: [
      {type: 'text'},
      {
        'name': '保存订单',
        status: 'primary',
        'code': 'Save'
      }, {
        'name': '入库',
        status: 'primary',
        'code': 'Storage'
      },
      {
        'name': '退货',
        status: 'primary',
        'code': 'Return'
      },
      {
        'name': '取消',
        status: '',
        'code': 'Cancel'
      }],
    import: false,
    export: true,
    print: true,
    zoom: true,
    custom: true,
    tools: [],
  },
  //table body实际数据
  data: [{}, {}, {}],
  //脚合并
  mergeFooterItems: [
    {row: 0, col: 0, rowspan: 1, colspan: 3}
  ],
  //合并脚
  footerMethod({columns, data}) {//页脚函数
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
        }
        /* if (props.tableProp.footList.includes(column.field)) {
           return sumNum(data, column.field)
         }*/
        return ''
      })
    ]
  },
})
const xGrid = ref()
const gridEvents = {
  toolbarButtonClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
//保存
        case 'Save': {
          MessageAlertShow('点击了保存订单','操作提示');
          //MessageShow('点击了保存订单!', 'error');
          break;
        }
//取消,返回查询页面
        case 'Cancel': {
          // router.push({path: '/main/purchaseOrder/StoragePurchaseOrder'})
          break
        }
//入库
        case 'Storage': {
          if ($grid.getCheckboxRecords().length === 0) {
            MessageShow('请选择至少一条数据!', 'warning');
            return
          } else {
            MessageConfirmShow('入库', '是否确认对选中的' + $grid.getCheckboxRecords().length + '物料进行入库操作!');
          }
          break
        }
//退货
        case 'Return': {
          if ($grid.getCheckboxRecords().length === 0) {
            MessageShow('请选择至少一条数据!', 'warning');
            return
          } else {
            MessageConfirmShow('退货', '是否确认对选中的' + $grid.getCheckboxRecords().length + '物料进行退货操作!');
          }
          break
        }
      }
    }
  },
  toolbarToolClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'myPrint': {
          $grid.print()
          break
        }
      }
    }
  },
}
//表单数据
const form = reactive({
  name: '',
  region: '',
  date: '',
  delivery: false,
  type: [],
  resource: '',
  desc: '',
  supplier: '',
  buyer: '',
  buyItem: '',
  buyType: ''
})
//页面逻辑代码执行
function logicExecute(type){
  const $grid = xGrid.value
  switch (type) {
    case '入库':
      //入库逻辑代码TODO
      MessageShow('入库成功!', 'success');
      break;
    case '退货':
      //退货逻辑代码TODO
      MessageShow('退货成功!', 'success');
      break;
    default:
      MessageShow('未知操作!', 'error');
      break;
  }
  return true;
}
//提示信息
//信息内容,显示方式,显示标题,类型
const MessageShow = (content,type='success') => {
    ElMessage({
      message: content,
      type: type,
      showClose: true,
    })
}
//操作确认类信息:操作类型,提示内容,提示标头,提示类型
const MessageConfirmShow = (czType, content, title='操作确认提示', type='warning') => {
  ElMessageBox.confirm(
      content,
      title,
      {
        cancelButtonText: '取消',
        confirmButtonText: '确定',
        type: type,
        center: true,
      }
  )
      //点击了确定
      .then(() => {
        return logicExecute(czType);
      })
      //点击了取消
      .catch(() => {
        return false;
      })
}
//弹窗信息
const MessageAlertShow=(content,title,type='info')=>{
  ElMessageBox.alert(content, title, {
    // 禁止自动对焦
    //autofocus: false,
    confirmButtonText: 'OK',
    /*callback: (action: Action) => {
      MessageShow(`action: ${action}`,type)
    },*/
  })
}
</script>
<style scoped>
:deep(.el-descriptions__table .label-diy) {
  text-align: center;
  width: 100px;
  /*  font-size: large;*/
}
</style>
UI-Project/src/views/StockBasicData/Payment.vue
New file
@@ -0,0 +1,354 @@
<template>
  <el-container>
    <el-header class="m-header" style="height: auto">
      <el-row :gutter="10" style="margin-bottom: 5px">
        <el-col :span="7">
          <el-date-picker
              v-model="datevalue"
              type="daterange"
              unlink-panels
              range-separator="到"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              :shortcuts="shortcuts"
              :size="size"
              format="YYYY/MM/DD"
              value-format="YYYY-MM-DD"
          />
        </el-col>
        <el-col :span="2">
          <el-button
              id="select"
              type="primary"
              :icon="Search"
              @click="autoAddRow">查询
          </el-button>
        </el-col>
      </el-row>
    </el-header>
    <el-main style="padding-top: 5px">
      <vxe-grid
          max-height="600"
          @filter-change="filterChanged"
          class="mytable-scrollbar"
          ref="xGrid"
          v-bind="PayOptions"
          @="gridEvents"
      >
        <!--      下拉显示所有信息插槽-->
        <template #content="{ row }">
          <ul class="expand-wrapper">
            <li  v-for="(item,index) in gridOptions.columns" v-show="item.field!==undefined ">
              <span style="font-weight: bold">{{item.title+':  '}}</span>
              <span>{{ row[item.field] }}</span>
            </li>
          </ul>
        </template>
        <!--左边固定显示的插槽-->
        <template #button_slot="{ row }">
          <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button>
          <!--          <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>-->
          <!--          <el-button @click="cellClickEvent" link type="primary" size="small">详情</el-button>-->
        </template>
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
            </div>
          </div>
        </template>
      </vxe-grid>
    </el-main>
  </el-container>
</template>
<script setup>
import {ref} from 'vue'
import {Search} from "@element-plus/icons-vue";
import 'dayjs/locale/zh-cn'
import {VXETable} from "vxe-table";
import {reactive} from "vue";
import {useRouter} from 'vue-router'
import {ElMessage, ElMessageBox} from "element-plus";
const datevalue = ref('')//时间
//组件接收参数
const PayOptions = reactive({
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮
  id: 'CustomerList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY: {enabled: true},//开启虚拟滚动
  showOverflow: true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  columns: [
    /* {title: '操作', width: '8%', slots: {default: 'button_slot'}, fixed: "left"},*/
    {type: 'expand', title: '', fixed: "left", slots: {content: 'content'}, width: '5%'},//详情
    {type: 'checkbox', fixed: "left", title: '', width: '5%'},
    {type: 'seq', fixed: "left", title: ' ', width: '5%'},
    {
      field: 'cgdh',
      width: '10%',
      title: '采购单号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'cgzt', width: '10%', title: '月份', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'gys',
      width: '10%',
      title: '供应商',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'wlbh',
      width: '10%',
      title: '期初金额',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'wlmc',
      width: '10%',
      title: '本期应付',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'w',
      width: '10%',
      title: '本期已付',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'g',
      width: '10%',
      title: '期末余额',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'h', width: '9%', title: '税率', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '6', width: '10%', title: '备注', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}
  ],//表头参数
  toolbarConfig: {
    buttons: [{type: 'text'}, {
      'name': '应付确认',
      status: 'primary',
      'code': 'Sure',
    }],
    import: false,
    export: true,
    print: true,
    zoom: true,
    custom: true,
    style: 'paddling-left:10px'
  },//表头按钮
  data: [{}, {}, {}, {}],//table body实际数据
  mergeFooterItems: [
    {row: 0, col: 0, rowspan: 1, colspan: 3}
  ],//合并脚
  footerMethod({columns, data}) {//页脚函数
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
        }
        /* if (props.tableProp.footList.includes(column.field)) {
           return sumNum(data, column.field)
         }*/
        return ''
      })
    ]
  },
})
const xGrid = ref()
const gridEvents = {
  toolbarButtonClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
          //应付确认
        case 'Sure': {
          if ($grid.getCheckboxRecords().length === 0) {
            MessageShow("请选择至少一条数据!", 'warning');
            return
          } else {
            MessageConfirmShow("确认应付", '您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认应付?')
          }
          break
        }
      }
    }
  },
  toolbarToolClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'myPrint': {
          $grid.print()
          break
        }
      }
    }
  },
}
const shortcuts = [
  {
    text: '近一周',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
      return [start, end]
    },
  },
  {
    text: '近一个月',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
      return [start, end]
    },
  },
  {
    text: '近三个月',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
      return [start, end]
    },
  },
]
//页面逻辑代码执行
function logicExecute(type){
  const $grid = xGrid.value
  switch (type) {
    case '确认应付':
      //入库逻辑代码TODO
      MessageShow('操作成功!', 'success');
      break;
    default:
      MessageShow('未知操作!', 'error');
      break;
  }
  return true;
}
//提示信息
//信息内容,显示方式,显示标题,类型
const MessageShow = (content, type = 'success') => {
  ElMessage({
    message: content,
    type: type,
    showClose: true,
  })
}
//操作确认类信息:操作类型,提示内容,提示标头,提示类型
const MessageConfirmShow = (czType, content, title = '操作确认提示', type = 'warning') => {
  ElMessageBox.confirm(
      content,
      title,
      {
        cancelButtonText: '取消',
        confirmButtonText: '确定',
        type: type,
        center: true,
      }
  )
      //点击了确定
      .then(() => {
        return  logicExecute(czType);
      })
      //点击了取消
      .catch(() => {
        return false;
      })
}
//弹窗信息
const MessageAlertShow = (content, title, type = 'info') => {
  ElMessageBox.alert(content, title, {
    // 禁止自动对焦
    //autofocus: false,
    confirmButtonText: 'OK',
    /*callback: (action: Action) => {
      MessageShow(`action: ${action}`,type)
    },*/
  })
}
</script>
<style scoped>
.el-row {
  margin-bottom: 20px;
}
.el-row:last-child {
  margin-bottom: 0;
}
.el-col {
  border-radius: 4px;
}
.m-header {
  height: 32px;
}
</style>
UI-Project/src/views/StockBasicData/Return.vue
New file
@@ -0,0 +1,593 @@
<template>
  <el-container>
    <el-header class="m-header" style="height: auto">
      <el-row :gutter="10" style="margin-bottom: 5px">
        <el-col :span="7">
          <el-date-picker
              v-model="datevalue"
              type="daterange"
              unlink-panels
              range-separator="到"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              :shortcuts="shortcuts"
              :size="size"
              format="YYYY/MM/DD"
              value-format="YYYY-MM-DD"
          />
        </el-col>
        <el-col :span="2">
          <el-button
              id="select"
              type="primary"
              :icon="Search"
              @click="BtnSearchPurchaseOrder">查询
          </el-button>
        </el-col>
      </el-row>
    </el-header>
    <el-main style="padding-top: 5px;height:100%">
      <vxe-grid
          max-height="600"
          @filter-change="filterChanged"
          class="mytable-scrollbar"
          ref="xGrid"
          v-bind="gridOptions"
          v-on="gridEvents"
          @cell-dblclick="cellClickEvent"
      >
        <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
        <!--      下拉显示所有信息插槽-->
        <template #content="{ row }">
          <ul class="expand-wrapper">
            <li v-for="(item,index) in gridOptions.columns" v-show="item.field!==undefined ">
              <span style="font-weight: bold">{{ item.title + ':  ' }}</span>
              <span>{{ row[item.field] }}</span>
            </li>
          </ul>
        </template>
        <!--左边固定显示的插槽-->
        <template #button_slot="{ row }">
          <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button>
          <!--          <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>-->
          <!--          <el-button @click="cellClickEvent" link type="primary" size="small">详情</el-button>-->
        </template>
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
            </div>
          </div>
        </template>
      </vxe-grid>
      <!--      详情框 部分1-->
      <vxe-modal v-model="showDetails" title="查看详情" width="600" height="80%" :mask="false" :lock-view="false"
                 resize>
        <el-container>
          <el-header height="35px"
                     style="margin: 0;padding: 0">
            <el-input v-model="showCGDH" placeholder="采购单号" disabled>
              <template #prepend>采购单号:</template>
            </el-input>
          </el-header>
          <el-main>
            <template #default>
              <vxe-table
                  border="default"
                  auto-resize
                  show-overflow
                  max-height="400"
                  :row-config="{isHover: true}"
                  :show-header="false"
                  :sync-resize="showDetails"
                  :data="detailData"
              >
                <vxe-column field="label" width="30%" class-name="v-column-label"></vxe-column>
                <vxe-column field="value"></vxe-column>
              </vxe-table>
            </template>
          </el-main>
          <el-footer height="40px">
            <el-row>
              <el-col :offset="20" :span="4">
                <el-button
                    id="Sure"
                    type="primary"
                    @click="SureReturn"
                >确认退货
                </el-button>
              </el-col>
            </el-row>
          </el-footer>
        </el-container>
      </vxe-modal>
      <!--      详情框 部分1 结束-->
    </el-main>
  </el-container>
</template>
<script setup>
import {ref} from "vue";
import {reactive} from "vue";
import {useRouter} from 'vue-router'
import {Search} from "@element-plus/icons-vue";
import dayjs from "dayjs";
import {ElMessage, ElMessageBox} from "element-plus";
let router = useRouter()
const getTableRow = (row, type) => {
  switch (type) {
    case 'edit' : {
      //alert('我接收到子组件传送的编辑信息')
      // router.push({path: '/main/purchaseOrder/DetailsPurchaseOrder', query: {id: row.id}})
      break
    }
    case 'delete': {
      alert('我接收到子组件传送的删除信息' + row.id)
      break
    }
  }
}
const xGrid = ref()
const gridEvents = {
  toolbarButtonClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'Sure': {
          if ($grid.getCheckboxRecords().length === 0) {
            MessageShow('请选择至少一条数据!', 'warning');
            return
          } else {
            MessageConfirmShow('确定', '您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认退货?')
          }
          break
        }
        case 'Log': {
          MessageAlertShow('点击了退货记录!', '操作提示');
          break
        }
      }
    }
  },
  toolbarToolClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'myPrint': {
          $grid.print()
          break
        }
      }
    }
  },
}
//查询按钮方法
const BtnSearchPurchaseOrder = () => {
  //开始时间,结束时间获取
  //MessageShow("开始时间"+datevalue._rawValue[0]+"\r\n结束时间\r\n"+datevalue._rawValue[1]);
  for (let i = 1; i < 6; i++) {
    const randomInt = Math.floor(Math.random() * 999) + 1000;//4位数随机数
    const randomSumInt = Math.floor(Math.random() * 99) + 10;//2位数随机数
    const randomOrderInt = Math.floor(Math.random() * 99) + 100;//3位数随机数
    const t = i % 2 === 0 ? 5 : 6;
    const s = i % 2 === 0 ? '入库' : i % 3 === 0 ? '退货' : '部分入库';
    const thdh = i % 2 === 0 ? '' : i % 3 === 0 ? 'THID' + randomOrderInt : '';
    const CGNo = 'NGCG231200' + randomOrderInt;//采购编号
    const wlNo = 'NGWL1000' + randomInt;
    const xh = 'NGXH' + randomSumInt;
    const wlmc = 'WLMC' + randomInt;
    const gys = '供应商' + randomSumInt;
    const xhdh = 'NG231200' + randomOrderInt;
    const w = i % 2 === 0 ? '3300' : i % 3 === 0 ? '3660' : i % 4 === 0 ? '2250' : '2580';
    const h = i % 2 === 0 ? '2440' : i % 3 === 0 ? '2440' : i % 4 === 0 ? '2000' : '2300';
    const dw = i % 2 === 0 ? '片' : i % 3 === 0 ? '平米' : i % 4 === 0 ? '包' : '吨';
    now.setDate(now.getDate() + 1);
    gridOptions.data.push({
      cgdh: CGNo,
      thdh: thdh,
      h: t,
      xh: xh,
      wlbh: wlNo,
      wlmc: wlmc,
      gys: gys,
      w: w,
      g: h,
      dw: dw,
      cgzt: s,
      rq: dayjs(now).format('YYYY-MM-DD'),
      yl: randomSumInt,
      sl: randomOrderInt,
      xsdh: xhdh,
      je: randomInt,
      6: '139xxxxxxxx',
    })
  }
}
//组件接收参数
const gridOptions = reactive({
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮
  id: 'CustomerList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY: {enabled: true},//开启虚拟滚动
  showOverflow: true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  columns: [
    {type: 'expand', title: '', fixed: "left", slots: {content: 'content'}, width: 50},//详情
    {title: '操作', width: '8%', slots: {default: 'button_slot'}, fixed: "left"},
    {type: 'checkbox', fixed: "left", title: '', width: 50},
    {type: 'seq', fixed: "left", title: ' ', width: 50},
    {
      field: 'thdh',
      width: '10%',
      title: '退货单号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'cgdh',
      width: '10%',
      title: '采购单号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'cgzt', width: '10%', title: '状态', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'gys',
      width: '10%',
      title: '供应商',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'wlbh',
      width: '10%',
      title: '物料编号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'wlmc',
      width: '10%',
      title: '物料名称',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'w', width: '8%', title: '宽度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'g', width: '8%', title: '高度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'h', width: '8%', title: '厚度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'xh', width: '8%', title: '型号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'dw', width: '8%', title: '单位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: '6',
      width: '12%',
      title: '不含税单价',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'sl', width: '8%', title: '数量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'sl',
      width: '12%',
      title: '已采购数量',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'je', width: '8%', title: '金额', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'je',
      width: '12%',
      title: '不含税金额',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: '6', width: '8%', title: '税率', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'sl', width: '8%', title: '库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'yl', width: '10%', title: '周用量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'yl', width: '10%', title: '月用量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'cgzt',
      width: '10%',
      title: '单据状态',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'xsdh',
      width: '10%',
      title: '销售单号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'rq',
      width: '10%',
      title: '制单日期',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: '6', width: '10%', title: '制单人', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: '6',
      width: '10%',
      title: '采购部门',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: '6',
      width: '10%',
      title: '采购组织',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: '6', width: '10%', title: '备注', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}
  ],//表头参数
  toolbarConfig: {
    buttons: [{type: 'text'}, {
      'name': '退货记录',
      'code': 'Log'
    },
      {
        'name': '确认退货',
        status: 'primary',
        'code': 'Sure'
      }],
    import: false,
    export: true,
    print: true,
    zoom: true,
    custom: true,
    style: 'paddling-left:10px'
  },//表头按钮
  data: [],//table body实际数据
  mergeFooterItems: [
    {row: 0, col: 0, rowspan: 1, colspan: 4}
  ],//合并脚
  footerMethod({columns, data}) {//页脚函数
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
        }
        /* if (props.tableProp.footList.includes(column.field)) {
           return sumNum(data, column.field)
         }*/
        return ''
      })
    ]
  },
})
//详情框 部分2
const showCGDH = ref();
const showDetails = ref(false);
let detailData = [];
const cellClickEvent = ({row}) => {
  if (isQueryColumnId === false) {
    queryColumnId();
  }
  detailData = list.map(field => {
    return {label: queryColumnsTitle(field), value: row[field]}
  })
  showDetails.value = true;
  showCGDH.value = row['cgdh'];
}
//获取表列
let list = [];
let columnIndex = 4;//列标头从第几列开始的
let isQueryColumnId = false;
const queryColumnId = () => {
  while (columnIndex < gridOptions.columns.length) {
    list.push(gridOptions.columns[columnIndex].field);
    columnIndex++;
  }
  isQueryColumnId = true;
  return list;
}
//获取表列名
function queryColumnsTitle(cn) {
  let i = 0;
  while (i < gridOptions.columns.length + 1) {
    if (gridOptions.columns[i].field === cn) {
      return gridOptions.columns[i].title;
    }
    i++;
  }
}
// 详情框部分2 结束
const SureReturn = () => {
  MessageConfirmShow('退货', '是否确认退货?')
}
//详情框 部分2 结束
const now = new Date()
//时间快捷选择
const datevalue = ref('')
const shortcuts = [
  {
    text: '近一周',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
      return [start, end]
    },
  },
  {
    text: '近一个月',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
      return [start, end]
    },
  },
  {
    text: '近三个月',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
      return [start, end]
    },
  },
]
//页面逻辑代码执行
function logicExecute(type) {
  const $grid = xGrid.value
  switch (type) {
    case '确定':
      //多选退货逻辑代码TODO
      MessageShow('操作成功!', 'success');
      break;
    case '退货':
      //单退货逻辑代码TODO
      MessageShow('操作成功!', 'success');
      break;
    default:
      MessageShow('未知操作!', 'error');
      break;
  }
  return true;
}
//提示信息
//信息内容,显示方式,显示标题,类型
const MessageShow = (content, type = 'success') => {
  ElMessage({
    message: content,
    type: type,
    showClose: true,
  })
}
//操作确认类信息:操作类型,提示内容,提示标头,提示类型
const MessageConfirmShow = (czType, content, title = '操作确认提示', type = 'warning') => {
  ElMessageBox.confirm(
      content,
      title,
      {
        cancelButtonText: '取消',
        confirmButtonText: '确定',
        type: type,
        center: true,
      }
  )
      //点击了确定
      .then(() => {
        logicExecute(czType);
        return true;
      })
      //点击了取消
      .catch(() => {
        return false;
      })
}
//弹窗信息
const MessageAlertShow = (content, title, type = 'info') => {
  ElMessageBox.alert(content, title, {
    // 禁止自动对焦
    //autofocus: false,
    confirmButtonText: 'OK',
    /*callback: (action: Action) => {
      MessageShow(`action: ${action}`,type)
    },*/
  })
}
</script>
<style scoped>
:deep(.v-column-label div span) {
  font-weight: bold;
}
</style>
UI-Project/src/views/StockBasicData/Select.vue
New file
@@ -0,0 +1,486 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const dialogFormVisible = ref(false)
const dialogFormVisiblea = ref(false)
const box = ref(true)
const boxa = ref(false)
const boxb = ref(false)
// const tableData = [
//   {
//     id: '1',
//     long: '1005',
//     wide: '183.6',
//     thick: '1991',
//     type: '5',
//     typea: '1',
//   },
//   {
//     id: '2',
//     long: '105',
//     wide: '183',
//     thick: '191',
//     typea: '1',
//     type: '5'
//   },
//   {
//     id: '2',
//     long: '105',
//     wide: '183',
//     thick: '191',
//     typea: '1',
//     type: '5'
//   },
// ]
const tableData = ref([
{
    id: '2',
    ida: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    typeb: '1',
    typec: '1',
    type: '5'
  },
  {
    id: '12',
    ida: '12',
    long: '1105',
    wide: '1183',
    thick: '1911',
    typea: '11',
    typeb: '11',
    typec: '11',
    type: '15'
  },
])
// 新增一行
const addTableData = ()=>{
  const newRow = {
    id: null,
    id: null,
    long: null,
    wide: null,
    thick: null,
    typea: null,
    type: null,
    typeb: null,
    typec: null,
  }
  tableData.value.push(newRow)
}
// 删除
const deleteTableData = (row) =>{
  const index = tableData.value.indexOf(row);
  if (index !== -1) {
    tableData.value.splice(index, 1);
  }
}
const tableDataa = [
  {
    ida: '3',
    longa: '1005',
    widea: '183.6',
    thicka: '1991',
  },
  {
    ida: '4',
    longa: '105',
    widea: '183',
    thicka: '191',
  }
]
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '删除成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '删除失败',
      })
    })
}
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const selectedRows = ref([]);
const handleSelectionChange = (selection) => {
  selectedRows.value = selection;
};
const showMessage = () => {
  if (selectedRows.value.length === 0) {
    ElMessage('请至少选择一个选项')
  } else{
    ElMessage({
    message: '出片成功!',
    type: 'success',
  })
  }
};
const pick = () => {
  if (selectedRows.value.length === 0) {
    ElMessage('请至少选择一个选项')
  } else{
    ElMessage({
    message: '破损成功!',
    type: 'success',
  })
  }
};
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
})
</script>
<template>
  <div>
     <el-button style="margin-top: 5px;margin-left: 5px;"   id="searchButton" type="primary" @click="showMessage">出片</el-button>
    <el-button style="margin-top: 5px"  id="searchButton" type="primary" @click="pick">破损</el-button>
    <!-- <el-button style="margin-top: 5px"  id="searchButton" type="primary" @click="dialogFormVisible = true">添加</el-button> -->
    <el-button style="margin-top: 5px"  id="searchButton" type="primary"  @click="addTableData" >添加</el-button>
    <el-button style="margin-top: 5px"  id="searchButton" @click="boxb = true;box = false" >合并</el-button>
    <el-button style="margin-top: 5px"  id="searchButton" @click="box = true;boxb = false" >单片</el-button>
    <div v-if="box">
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 450px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
    <el-table-column type="selection" width="55"  />
    <el-table-column prop="id" align="center" label="栅格号" min-width="80" >
      <template #default="scope">
        <el-input v-model="scope.row.id" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="ida" align="center" label="id" min-width="80">
            <template #default="scope">
        <el-input v-model="scope.row.ida" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="long" align="center" label="长" min-width="100" >
            <template #default="scope">
        <el-input v-model="scope.row.long" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="wide" align="center" label="宽" min-width="100">
            <template #default="scope">
        <el-input v-model="scope.row.wide" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="type" align="center" label="厚度" min-width="100">
            <template #default="scope">
        <el-input v-model="scope.row.type" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="typea" align="center" label="膜系" min-width="100" >
            <template #default="scope">
        <el-input v-model="scope.row.typea" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="typeb" align="center" label="出片顺序" min-width="120" >
            <template #default="scope">
        <el-input v-model="scope.row.typeb" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="typec" align="center" label="流程卡号" min-width="150">
            <template #default="scope">
        <el-input v-model="scope.row.typec" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="thick" align="center" label="其他" min-width="120" >
            <template #default="scope">
        <el-input v-model="scope.row.thick" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default="scope">
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">详情</el-button>
        <el-button @click="deleteTableData(scope.row)" link icon="Delete" type="primary">删除</el-button>
            </template>
        </el-table-column>
  </el-table>
</div>
    </el-card>
  </div>
  <div v-if="boxb">
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 450px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
    <el-table-column type="selection" width="55"  />
    <el-table-column prop="id" align="center" label="栅格" min-width="80">
      <template #default="scope">
        <el-input v-model="scope.row.id" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="ida" align="center" label="id" min-width="80">
            <template #default="scope">
        <el-input v-model="scope.row.ida" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="long" align="center" label="长" min-width="120" >
            <template #default="scope">
        <el-input v-model="scope.row.long" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="wide" align="center" label="宽" min-width="120">
            <template #default="scope">
        <el-input v-model="scope.row.wide" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="type" align="center" label="厚度" min-width="120">
            <template #default="scope">
        <el-input v-model="scope.row.type" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="typea" align="center" label="膜系" min-width="120" >
            <template #default="scope">
        <el-input v-model="scope.row.typea" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="typeb" align="center" label="出片顺序" min-width="120" >
            <template #default="scope">
        <el-input v-model="scope.row.typeb" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="typec" align="center" label="流程卡号" min-width="120">
            <template #default="scope">
        <el-input v-model="scope.row.typec" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column prop="thick" align="center" label="其他" min-width="120" >
            <template #default="scope">
        <el-input v-model="scope.row.thick" size="small"></el-input>
      </template>
      </el-table-column>
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default="scope">
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">详情</el-button>
        <el-button @click="deleteTableData(scope.row)" link icon="Delete" type="primary">删除</el-button>
            </template>
        </el-table-column>
  </el-table>
      </div>
    </el-card>
  </div>
  </div>
  <el-dialog v-model="dialogFormVisible" top="21vh" width="40%" title="添加" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form >
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="栅格号:" :required="true" style="width: 14vw">
                <el-input  autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="id:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              </el-form-item></div>
              </div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="长:" :required="true" style="width: 13.2vw;margin-left: 14px;">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="宽:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="厚度:" :required="true" style="width: 13.2vw;margin-left: 14px;">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="膜系:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="出片顺序:" :required="true" style="width: 13.2vw;margin-left: 14px;">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="流程卡号" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="其他:" :required="true" style="width: 13.2vw;margin-left: 14px;">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        </el-form>
            </el-form>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="dialogFormVisible = false">
          确认
        </el-button>
        <el-button @click="dialogFormVisible = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" title="原片信息">
    <el-table height="100%" ref="table" :data="tableDataa" @row-click="handle">
      <el-table-column
        prop="long"
        align="center"
        label="长"
        min-width="120"
      />
      <el-table-column
        prop="wide"
        align="center"
        label="宽"
        min-width="120"
      />
      <el-table-column
        prop="thick"
        align="center"
        label="厚"
        min-width="120"
      />
      <el-table-column
        prop="station"
        align="center"
        label="工位"
        min-width="120"
      />
    </el-table>
    <div style="text-align: center; height: 22px; margin-top: 30px;">
        <el-button @click="dialogFormVisiblea = false">关闭</el-button>
      </div>
  </el-dialog>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#message{
  text-align: center;
  align-items: center;
  color: black;
   width: 200px;
   height: 100px;
   background-color: #337ecc;
   margin-left: 28%;
}
#box{
  position: relative;
  #icon{
    position: absolute;
    bottom:10px;
    right: 19px;
  }
}
</style>
UI-Project/src/views/StockBasicData/Storage.vue
New file
@@ -0,0 +1,603 @@
<template>
  <el-container>
    <el-header class="m-header" style="height: auto">
      <el-row :gutter="10" style="margin-bottom: 5px">
        <el-col :span="7">
          <el-date-picker
              v-model="datevalue"
              type="daterange"
              unlink-panels
              range-separator="到"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              :shortcuts="shortcuts"
              format="YYYY/MM/DD"
              value-format="YYYY-MM-DD"
          />
        </el-col>
        <el-col :span="2">
          <el-button
              id="select"
              type="primary"
              :icon="Search"
              @click="BtnSearchPurchaseOrder">查询
          </el-button>
        </el-col>
      </el-row>
    </el-header>
    <el-main style="padding-top: 5px;height:100%">
      <vxe-grid
          max-height="600"
          @filter-change="filterChanged"
          class="mytable-scrollbar"
          ref="xGrid"
          v-bind="gridOptions"
          v-on="gridEvents"
          @cell-dblclick="cellClickEvent"
      >
        <!--      下拉显示所有信息插槽-->
        <template #content="{ row }">
          <ul class="expand-wrapper">
            <li v-for="(item,index) in gridOptions.columns" v-show="item.field!==undefined ">
              <span style="font-weight: bold">{{ item.title + ':  ' }}</span>
              <span>{{ row[item.field] }}</span>
            </li>
          </ul>
        </template>
        <!--左边固定显示的插槽-->
        <template #button_slot="{ row }">
          <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button>
          <el-button @click="getTableRow(row,'look')" link type="primary" size="small">查看</el-button>
          <!--          <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>-->
          <!--          <el-button @click="cellClickEvent" link type="primary" size="small">详情</el-button>-->
        </template>
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
            </div>
          </div>
        </template>
      </vxe-grid>
      <!--      详情框 部分1-->
      <vxe-modal v-model="showDetails" title="查看详情" width="600" height="80%" :mask="false" :lock-view="false"
                 resize>
        <el-container>
          <el-header height="35px"
                     style="margin: 0;padding: 0">
            <el-input v-model="showCGDH" placeholder="采购单号" disabled>
              <template #prepend>采购单号:</template>
            </el-input>
          </el-header>
          <el-main>
            <template #default>
              <vxe-table
                  border="inner"
                  auto-resize
                  show-overflow
                  max-height="400"
                  :row-config="{isHover: true}"
                  :show-header="false"
                  :sync-resize="showDetails"
                  :data="detailData">
                <vxe-column field="label" width="30%" class-name="v-column-label"></vxe-column>
                <vxe-column field="value"></vxe-column>
              </vxe-table>
            </template>
          </el-main>
          <el-footer height="40px">
            <el-row>
              <el-col :offset="20" :span="4">
                <el-button
                    id="Sure"
                    type="primary"
                    @click="SureStorage"
                >确认入库
                </el-button>
              </el-col>
            </el-row>
          </el-footer>
        </el-container>
      </vxe-modal>
      <!--      详情框 部分1 结束-->
    </el-main>
  </el-container>
</template>
<script setup>
import {ref} from "vue";
import {reactive} from "vue";
import {useRouter} from 'vue-router'
import {Search} from "@element-plus/icons-vue";
import dayjs from "dayjs";
import {VXETable} from "vxe-table";
import {ElMessage, ElMessageBox} from "element-plus";
let router = useRouter()
const getTableRow = (row, type) => {
  switch (type) {
    case 'edit' : {
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/purchaseOrder/DetailsPurchaseOrder', query: {id: row.id}});
      break
    }
    case 'look': {
      /*this.detailData = ['name', 'nickname', 'role', 'sex', 'age', 'amount', 'address'].map(field => {
        return { label: field, value: row[field] }
      })*/
      //this.showDetails = true
      break
    }
    case 'delete': {
      alert('我接收到子组件传送的删除信息' + row.id)
      break
    }
  }
}
const xGrid = ref()
const gridEvents = {
  toolbarButtonClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'Sure': {
          if ($grid.getCheckboxRecords().length === 0) {
            MessageShow('请选择至少一条数据', 'warning');
            //openAlert({type: 'message', content: '请选择至少一条数据', status: 'warning'})
            //VXETable.modal.message( '请选择一条数据!')
            return
          } else {
            const type = VXETable.modal.confirm('您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认入库?');
            //openAlert({type:'alert', content: '成功入库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' })
            //VXETable.modal.message( '请选择一条数据!')
            return
          }
          break
        }
        case 'Log': {
          //openAlert({type: 'alert', content: '点击了退货记录', status: 'success'})
          MessageConfirmShow("退货记录", "点击了退货记录", "", 'success')
          break
        }
      }
    }
  },
  toolbarToolClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'myPrint': {
          $grid.print()
          break
        }
      }
    }
  },
}
const openAlert = (options) => {
  if (options.type === 'message') {
    VXETable.modal.message(options)
  } else {
    VXETable.modal.alert(options)
  }
}
const closeAlert = (id) => {
  VXETable.modal.close(id)
}
//查询调用事件
const BtnSearchPurchaseOrder = () => {
  //开始时间,结束时间获取
  //MessageShow(datevalue._rawValue[0]+"\r\n时间2\r\n"+datevalue._rawValue[1]);
  for (let i = 1; i < 6; i++) {
    const randomInt = Math.floor(Math.random() * 999) + 1000;//4位数随机数
    const randomSumInt = Math.floor(Math.random() * 99) + 10;//2位数随机数
    const randomOrderInt = Math.floor(Math.random() * 99) + 100;//3位数随机数
    const t = i % 2 === 0 ? 5 : 6;
    const s = i % 2 === 0 ? '入库' : i % 3 === 0 ? '待审核' : '已采购';
    const rkdh = i % 2 === 0 ? 'RKID' + randomOrderInt : i % 3 === 0 ? '' : '';
    const CGNo = 'NGCG231200' + randomOrderInt;//采购编号
    const wlNo = 'NGWL1000' + randomInt;
    const xh = 'NGXH' + randomSumInt;
    const wlmc = 'WLMC' + randomInt;
    const gys = '供应商' + randomSumInt;
    const xhdh = 'NG231200' + randomOrderInt;
    const w = i % 2 === 0 ? '3300' : i % 3 === 0 ? '3660' : i % 4 === 0 ? '2250' : '2580';
    const h = i % 2 === 0 ? '2440' : i % 3 === 0 ? '2440' : i % 4 === 0 ? '2000' : '2300';
    const dw = i % 2 === 0 ? '片' : i % 3 === 0 ? '平米' : i % 4 === 0 ? '包' : '吨';
    now.setDate(now.getDate() + 1);
    gridOptions.data.push({
      cgdh: CGNo,
      rkdh: rkdh,
      h: t,
      xh: xh,
      wlbh: wlNo,
      wlmc: wlmc,
      gys: gys,
      w: w,
      g: h,
      dw: dw,
      cgzt: s,
      rq: dayjs(now).format('YYYY-MM-DD'),
      yl: randomSumInt,
      sl: randomOrderInt,
      xsdh: xhdh,
      je: randomInt,
      6: '139xxxxxxxx',
    })
  }
}
//组件接收参数
const gridOptions = reactive({
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮
  id: 'CustomerList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY: {enabled: true},//开启虚拟滚动
  showOverflow: true,
  //showDetails: false,//弹窗 是否显示
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  columns: [
    {type: 'expand', title: '', fixed: "left", slots: {content: 'content'}, width: 50},//详情
    {title: '操作', width: '8%', slots: {default: 'button_slot'}, fixed: "left"},
    {type: 'checkbox', fixed: "left", title: '', width: 50},
    {type: 'seq', fixed: "left", title: ' ', width: 50},
    {
      field: 'rkdh',
      width: '10%',
      title: '入库单号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'cgdh',
      width: '10%',
      title: '采购单号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'cgzt', width: '10%', title: '状态', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'gys',
      width: '10%',
      title: '供应商',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'wlbh',
      width: '10%',
      title: '物料编号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'wlmc',
      width: '10%',
      title: '物料名称',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'w', width: '8%', title: '宽度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'g', width: '8%', title: '高度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'h', width: '8%', title: '厚度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'xh', width: '8%', title: '型号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'dw', width: '8%', title: '单位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: '6',
      width: '12%',
      title: '不含税单价',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'sl', width: '8%', title: '数量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'sl',
      width: '12%',
      title: '已采购数量',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'je', width: '8%', title: '金额', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'je',
      width: '12%',
      title: '不含税金额',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: '6', width: '8%', title: '税率', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'sl', width: '8%', title: '库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'yl', width: '10%', title: '周用量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'yl', width: '10%', title: '月用量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'cgzt',
      width: '10%',
      title: '单据状态',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'xsdh',
      width: '10%',
      title: '销售单号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'rq',
      width: '10%',
      title: '制单日期',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: '6', width: '10%', title: '制单人', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: '6',
      width: '10%',
      title: '采购部门',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: '7',
      width: '10%',
      title: '采购组织',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: '8', width: '10%', title: '备注', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}
  ],//表头参数
  toolbarConfig: {
    buttons: [{type: 'text'/*,name:'订单入库'*/}, {
      'name': '入库记录',
      'code': 'Log'
    },
      {
        'name': '确认入库',
        status: 'primary',
        'code': 'Sure'
      }],
    import: false,
    export: true,
    print: true,
    zoom: true,
    custom: true,
    style: 'paddling-left:10px'
  },//表头按钮
  data: [],//table body实际数据
  mergeFooterItems: [
    {row: 0, col: 0, rowspan: 1, colspan: 4}
  ],//合并脚
  footerMethod({columns, data}) {//页脚函数
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
        }
        /* if (props.tableProp.footList.includes(column.field)) {
           return sumNum(data, column.field)
         }*/
        return ''
      })
    ]
  },
})
//详情框 部分2
const showCGDH = ref();
const showDetails = ref(false);
let detailData = [];
const cellClickEvent = ({row}) => {
  if(isQueryColumnId===false){
    queryColumnId();
  }
  detailData = list.map(field => {
    return {label: queryColumnsTitle(field), value: row[field]}
  })
  showDetails.value = true;
  showCGDH.value = row['cgdh'];
}
//获取表列
let list = [];
let columnIndex = 4;//列标头从第几列开始的
let isQueryColumnId = false;
const queryColumnId = () => {
  while (columnIndex < gridOptions.columns.length) {
    list.push(gridOptions.columns[columnIndex].field);
    columnIndex++;
  }
  isQueryColumnId = true;
  return list;
}
//获取表列名
function queryColumnsTitle(cn) {
  let i = 0;
  while (i < gridOptions.columns.length + 1) {
    if (gridOptions.columns[i].field === cn) {
      return gridOptions.columns[i].title;
    }
    i++;
  }
}
//详情框 部分2 结束
const SureStorage = () => {
  MessageShow('确认入库成功');
}
const now = new Date()
//时间快捷选择
const datevalue = ref('')
const shortcuts = [
  {
    text: '近一周',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
      return [start, end]
    },
  },
  {
    text: '近一个月',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
      return [start, end]
    },
  },
  {
    text: '近三个月',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
      return [start, end]
    },
  },
]
//页面逻辑代码执行
function logicExecute(type) {
  const $grid = xGrid.value
  switch (type) {
    case '入库':
      //入库逻辑代码TODO
      MessageShow('入库成功!', 'success');
      break;
    case '退货':
      //退货逻辑代码TODO
      MessageShow('退货成功!', 'success');
      break;
    default:
      MessageShow('未知操作!', 'error');
      break;
  }
  return true;
}
//提示信息
const MessageShow = (content, type = 'success') => {
  ElMessage({
    message: content,
    type: type,
    showClose: true,
  })
}
//操作确认类信息:操作类型,提示内容,提示标头,提示类型
const MessageConfirmShow = (czType, content, title = '操作确认提示', type = 'warning') => {
  ElMessageBox.confirm(
      content,
      title,
      {
        cancelButtonText: '取消',
        confirmButtonText: '确定',
        type: type,
        center: true,
      }
  )
      //点击了确定
      .then(() => {
        return logicExecute(czType);
      })
      //点击了取消
      .catch(() => {
        return false;
      })
}
</script>
<style scoped>
:deep(.v-column-label div span) {
  font-weight: bold;
}
</style>
UI-Project/src/views/StockBasicData/stockBasicData.vue
New file
@@ -0,0 +1,169 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const tableData = [
  {
    id: '1',
    long: '1005',
    wide: '183.6',
    thick: '1991',
    type: '待识别',
    typea: '1',
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
]
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '删除成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '删除失败',
      })
    })
}
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
})
</script>
<template>
  <div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="id" min-width="80" />
          <el-table-column prop="long" align="center" label="长" min-width="120" />
          <el-table-column prop="wide" align="center" label="宽" min-width="120" />
          <el-table-column prop="wide" align="center" label="厚度" min-width="120" />
          <el-table-column prop="wide" align="center" label="膜系" min-width="120" />
          <el-table-column prop="wide" align="center" label="出片顺序" min-width="120" />
          <el-table-column prop="wide" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="wide" align="center" label="其他" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">破损</el-button>
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">删除</el-button>
            </template>
        </el-table-column>
        </el-table>
      </div>
    </el-card>
  </div>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#message{
  text-align: center;
  align-items: center;
  color: black;
   width: 200px;
   height: 100px;
   background-color: #337ecc;
   margin-left: 28%;
}
#awatch{
  height: 450px;
}
#main-body{
  margin-top: -20px;
  margin-left: 300px;
}
#main-bodya{
  margin-top: -10px;
  margin-left: 100px;
}
</style>
UI-Project/src/views/TL/Temperedlayout/Temperedlayout.vue
@@ -8,7 +8,6 @@
import deepClone from "@/utils/deepClone";
import { ElMessage } from "element-plus";
import { useRouter } from "vue-router";
import GlassType from '@/components/basic/product/GlassType.vue'
const router = useRouter()
@@ -24,7 +23,8 @@
export default {
  mounted() {
    //获取数据
    request.get("/Temper/Tindex").then((res) => {
    var data="ProcessId="+"P24032508";
    request.get("/TidyUpGlassModule/SelectTerritoryInfo?"+data).then((res) => {
      if (res.code == 200) {
        var StoveCount=0;
        var temperid;
@@ -161,11 +161,8 @@
<template>
  <div ref="content">
    <canvas ref="mycanvas"></canvas>
  </div>
  <canvas ref="mycanvas" >
  </canvas>
</template>
<style scoped>
UI-Project/src/views/UnLoadGlass.rar
Binary files differ
UI-Project/src/views/UnLoadGlass.zip
Binary files differ
UI-Project/src/views/UnLoadGlass/Landingindication.vue
New file
@@ -0,0 +1,118 @@
<template>
  <div class="glass-rack">
    <div >
      <svg width="500" height="500" xmlns="http://www.w3.org/2000/svg">
        <g stroke="null" id="Layer_1">
          <!-- 使用 v-for 循环渲染数据 -->
          <g v-for="(rack, index) in racks" :key="index">
            <rect
              :x="rack.x"
              :y="rack.y"
              :width="rack.width"
              :height="rack.height"
              :fill="rack.fillColor"
          :data-index="index"
          class="rack-rect"
          @click="showRectInfo(rack)"
            />
            <rect
              :x="calculateItemXPosition(rack, rack.item, index)"
              :y="calculateItemYPosition(rack, rack.item, index)"
              :width="rack.item.width"
              :height="rack.item.height"
              :fill="rack.item.fillColor"
            />
            <text :x="rack.x + rack.width / 2" :y="rack.y - 10" text-anchor="middle">{{ index + 1 }}号工位</text>
            <text :x="rack.x + rack.width / 2" :y="rack.y + rack.height + 20" text-anchor="middle">{{ rack.item.content }}</text>
          </g>
        </g>
      </svg>
    </div>
  </div>
</template>
<script>
import Swal from 'sweetalert2'
export default {
  data() {
    return {
      racks: [
        { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } },
        { x: 50, y: 270, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 20, width: 10, fillColor: 'yellow', content: 'NG1234567' } },
        { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 30, width: 20, fillColor: 'yellow', content: 'NG12345678' } },
        { x: 280, y: 270, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 35, width: 23, fillColor: 'yellow', content: 'NG123456910' } },
        { x: 140, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 30, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
      ]
    };
  },
  methods: {
    // 计算内部物品的 x 坐标位置
    calculateItemXPosition(rack, item, index) {
      if (index === 0 || index === 1) {  // 如果是第一或第二个物品
        return rack.x;  // 返回左边界 x 坐标
      } else if (index === 2 || index === 3) {  // 如果是第三或第四个物品
        return rack.x + rack.width - item.width;  // 返回右边界 x 坐标
      } else {
        return rack.x + (rack.width - item.width) / 2;  // 返回水平居中的 x 坐标
      }
    },
    // 计算内部物品的 y 坐标位置
    calculateItemYPosition(rack, item, index) {
      if (index === 0 || index === 1) {  // 如果是第一或第二个物品
        return rack.y + (rack.height - item.height) / 2;  // 返回垂直居中的 y 坐标
      } else if (index === 2 || index === 3) {  // 如果是第三或第四个物品
        return rack.y + (rack.height - item.height) / 2;  // 返回垂直居中的 y 坐标
      } else {
        return rack.y + rack.height - item.height;  // 返回底部对齐的 y 坐标
      }
    },
    showCustomAlert(content) {
      var str="架号   :      111\n" +
        "长     :      111\n" +
        "宽     :      111\n" +
        "厚     :      111\n"+
        "玻璃ID :      111\n"+
        "膜系   :      111\n";
Swal.fire({
  title: '玻璃信息',
  html: '<pre>' + str + '</pre>',
  customClass: {
    popup: 'format-pre'
  }
});
  },
    showRectInfo( rectInfo) {
  const content = rectInfo.item.content;
  this.$nextTick(() => {
    this.showCustomAlert(content);
  });
},
  }
};
</script>
<style scoped>
.glass-rack {
  margin-left: 20px;
  width: 500px;
  margin-top: 10px;
  /* background-color: antiquewhite; */
}
.rack-rect:hover {
  cursor: pointer;
}
.custom-popover-class {
  background-color: lightgrey;
  color: black;
  border: 1px solid black;
}
.format-pre pre {
  background: #49483e;
  color: #f7f7f7;
  padding: 10px;
  font-size: 14px;
}
</style>
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
New file
@@ -0,0 +1,114 @@
<template>
  <div class="glass-rack">
    <div>
      <svg width="500" height="500" xmlns="http://www.w3.org/2000/svg">
        <g stroke="null" id="Layer_1">
          <!-- 使用 v-for 循环渲染数据 -->
          <g v-for="(rack, index) in racks" :key="index">
            <rect
              :x="rack.x"
              :y="rack.y"
              :width="rack.width"
              :height="rack.height"
              :fill="rack.fillColor"
          :data-index="index"
          class="rack-rect"
          @click="showRectInfo(rack)"
            />
            <rect
              :x="calculateItemXPosition(rack, rack.item, index)"
              :y="calculateItemYPosition(rack, rack.item, index)"
              :width="rack.item.width"
              :height="rack.item.height"
              :fill="rack.item.fillColor"
            />
            <text :x="rack.x + rack.width / 2" :y="rack.y - 10" text-anchor="middle">{{ index + 6 }}号工位</text>
            <text :x="rack.x + rack.width / 2" :y="rack.y + rack.height + 20" text-anchor="middle">{{ rack.item.content }}</text>
          </g>
        </g>
      </svg>
    </div>
  </div>
</template>
<script>
import Swal from 'sweetalert2'
export default {
  data() {
    return {
      racks: [
        { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } },
        { x: 50, y: 270, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 20, width: 10, fillColor: 'yellow', content: 'NG1234567' } },
        { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 30, width: 20, fillColor: 'yellow', content: 'NG12345678' } },
        { x: 280, y: 270, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 35, width: 23, fillColor: 'yellow', content: 'NG123456910' } },
        { x: 140, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 30, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
      ]
    };
  },
  methods: {
    calculateItemXPosition(rack, item, index) {
      if (index === 0 || index === 1) {
        return rack.x;
      } else if (index === 2 || index === 3) {
        return rack.x + rack.width - item.width;
      } else {
        return rack.x + (rack.width - item.width) / 2;
      }
    },
    calculateItemYPosition(rack, item, index) {
      if (index === 0 || index === 1) {
        return rack.y + (rack.height - item.height) / 2;
      } else if (index === 2 || index === 3) {
        return rack.y + (rack.height - item.height) / 2;
      } else {
        return rack.y + rack.height - item.height;
      }
    },
    showCustomAlert(content) {
      var str="架号   :      111\n" +
        "长     :      111\n" +
        "宽     :      111\n" +
        "厚     :      111\n"+
        "玻璃ID :      111\n"+
        "膜系   :      111\n";
Swal.fire({
  title: '玻璃信息',
  html: '<pre>' + str + '</pre>',
  customClass: {
    popup: 'format-pre'
  }
});
  },
    showRectInfo( rectInfo) {
  const content = rectInfo.item.content;
  this.$nextTick(() => {
    this.showCustomAlert(content);
  });
},
  }
};
</script>
<style scoped>
.glass-rack {
  margin-left: 20px;
  width: 500px;
}
.rack-rect:hover {
  cursor: pointer;
}
.custom-popover-class {
  background-color: lightgrey;
  color: black;
  border: 1px solid black;
}
.format-pre pre {
  background: #49483e;
  color: #f7f7f7;
  padding: 10px;
  font-size: 14px;
}
</style>
UI-Project/src/views/UnLoadGlass/UnLoadGlass.vue
File was renamed from UI-Project/src/views/sd/customer/Customer.vue
@@ -10,13 +10,13 @@
<template>
  <div id="main-div">
    <div id="div-title">
    <!-- <div id="div-title">
      <el-breadcrumb :separator-icon="ArrowRight">
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/customer/selectCustomer' }">客户首页</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/customer/CreateCustomer' }">新增</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/UnLoadGlass/loadmachinerack' }">下片管理</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/UnLoadGlass/loadmachinerack' }">下片信息</el-breadcrumb-item>
        <el-breadcrumb-item v-show="false" :to="{ path: '/main/product/test1' }">测试</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
    </div> -->
    <div id="main-body">
      <router-view  />
@@ -37,14 +37,14 @@
  margin-top: -5px;
  margin-left: 1rem;
}
#searchButton1{
/* #searchButton1{
//margin-left: 10rem;
}
} */
/*main-body样式*/
#main-body{
  width: 100%;
  height: 95%;
  margin-top: 1%;
  /* margin-top: 1%; */
}
#select{
  margin-left:0.5rem;
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
New file
@@ -0,0 +1,193 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
const dialogFormVisiblea = ref(false)
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import Landingindication from "./Landingindication.vue";
// import Landingindicationtwo from "./Landingindicationtwo.vue";
const tableData = [
  {
    id: '1',
    long: '1005',
    wide: '183.6',
    thick: '1991',
    state: '未启用',
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    state: '未启用'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    state: '未启用'
  },
]
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '删除成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '删除失败',
      })
    })
}
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
})
</script>
<template>
  <div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="下片位" min-width="80" />
          <el-table-column prop="long" align="center" label="架号" min-width="120" />
          <el-table-column prop="wide" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="wide" align="center" label="总数量" min-width="120" />
          <el-table-column prop="wide" align="center" label="已落架数量" min-width="120" />
          <el-table-column prop="state" align="center" label="启用状态" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <el-button size="mini" type="text" plain v-show="state !== '已启用' " @click="dialogFormVisiblea = true">绑定架子</el-button>
              <el-button size="mini" type="text" plain  @click="dialogFormVisible = true">清空</el-button>
            </template>
        </el-table-column>
        </el-table>
      </div>
    </el-card>
  </div>
  <div style="display: flex;">
  <div id="main-body">
      <Landingindication></Landingindication>
    </div>
  <!-- <div id="main-bodya">
    <Landingindicationtwo></Landingindicationtwo>
    </div> -->
    </div>
    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="30%" title="绑定架子" >
    <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form  label-width="100px" label-position="right">
              <el-form-item label="架号:" :required="true" style="width: 18vw">
                <el-input  autocomplete="off"/>
              </el-form-item>
              <el-form-item label="流程卡号:" :required="true" style="width: 18vw;">
                <el-input autocomplete="off" />
              </el-form-item>
        </el-form>
            </el-form>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="dialogFormVisiblea = false">
          确认
        </el-button>
        <el-button @click="dialogFormVisiblea = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#message{
  text-align: center;
  align-items: center;
  color: black;
   width: 200px;
   height: 100px;
   background-color: #337ecc;
   margin-left: 28%;
}
#awatch{
  height: 450px;
}
#main-body{
  margin-top: -20px;
  margin-left: 450px;
}
</style>
UI-Project/src/views/UnLoadGlass/loadmachineracktwo.vue
New file
@@ -0,0 +1,193 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
const dialogFormVisiblea = ref(false)
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
// import Landingindication from "./Landingindication.vue";
import Landingindicationtwo from "./Landingindicationtwo.vue";
const tableData = [
  {
    id: '1',
    long: '1005',
    wide: '183.6',
    thick: '1991',
    state: '未启用',
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    state: '未启用'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    state: '未启用'
  },
]
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '删除成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '删除失败',
      })
    })
}
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
})
</script>
<template>
  <div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="下片位" min-width="80" />
          <el-table-column prop="long" align="center" label="架号" min-width="120" />
          <el-table-column prop="wide" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="wide" align="center" label="总数量" min-width="120" />
          <el-table-column prop="wide" align="center" label="已落架数量" min-width="120" />
          <el-table-column prop="state" align="center" label="启用状态" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <el-button size="mini" type="text" plain v-show="state !== '已启用' " @click="dialogFormVisiblea = true">绑定架子</el-button>
              <el-button size="mini" type="text" plain  @click="dialogFormVisible = true">清空</el-button>
            </template>
        </el-table-column>
        </el-table>
      </div>
    </el-card>
  </div>
  <div style="display: flex;">
  <!-- <div id="main-body">
      <Landingindication></Landingindication>
    </div> -->
  <div id="main-body">
    <Landingindicationtwo></Landingindicationtwo>
    </div>
    </div>
    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="30%" title="绑定架子" >
    <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form  label-width="100px" label-position="right">
              <el-form-item label="架号:" :required="true" style="width: 18vw">
                <el-input  autocomplete="off"/>
              </el-form-item>
              <el-form-item label="流程卡号:" :required="true" style="width: 18vw;">
                <el-input autocomplete="off" />
              </el-form-item>
        </el-form>
            </el-form>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="dialogFormVisiblea = false">
          确认
        </el-button>
        <el-button @click="dialogFormVisiblea = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#message{
  text-align: center;
  align-items: center;
  color: black;
   width: 200px;
   height: 100px;
   background-color: #337ecc;
   margin-left: 28%;
}
#awatch{
  height: 450px;
}
#main-body{
  margin-top: -10px;
  margin-left: 450px;
}
</style>
UI-Project/src/views/mm/mainIngredient/CreateIngredients.vue
File was deleted
UI-Project/src/views/mm/mainIngredient/Ingredients.vue
File was deleted
UI-Project/src/views/mm/mainIngredient/SelectIngredients.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/AccessoriesMonthlySettlement.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/CreateOutBound.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/IngredientsStock.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/MaterialOutbound.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/OriginalMonthlySettlement.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/ReturnToStorage.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/ReturnToStorageCreate.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/SelectIngredientsStock.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/CreateProductStock.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/FinishedGoodsIssue.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/FinishedProductOut.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/FinishedProductReturn.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/FinishedProductRework.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/OrderAllocation.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/ProductStock.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/ProductStockList.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/ReworkRecord.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/TakeOutRecord.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/TransferRecord.vue
File was deleted
UI-Project/src/views/mm/mainTrader/CreateTrader.vue
File was deleted
UI-Project/src/views/mm/mainTrader/SelectTrader.vue
File was deleted
UI-Project/src/views/mm/mainTrader/Trader.vue
File was deleted
UI-Project/src/views/mm/purchaseOrder/PurchaseOrder.vue
@@ -1,121 +1,39 @@
<template>
  <div class="common-layout">
    <el-container>
      <el-header style="height: 30px">
        <el-breadcrumb :separator-icon="ArrowRight">
          <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''"
                              :to="{path:'/main/purchaseOrder/SelectPurchaseOrder'}">查询采购订单
      <!-- <el-header style="height: 30px"> -->
        <!-- <el-breadcrumb :separator-icon="ArrowRight">
          <el-breadcrumb-item>采购与物资</el-breadcrumb-item>
          <el-breadcrumb-item> 采购退货
          </el-breadcrumb-item>
          <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''"
                              :to="{path:'/main/purchaseOrder/CreatePurchaseOrder'}">创建采购订单
          <el-breadcrumb-item :to="{path:'/main/purchaseReturn/SelectPurchaseReturn'}"> 查询
          </el-breadcrumb-item>
          <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''"
                              :to="{path:'/main/purchaseOrder/StoragePurchaseOrder'}">采购入库
          <el-breadcrumb-item >
          </el-breadcrumb-item>
          <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''"
                              :to="{path:'/main/purchaseOrder/ReturnPurchaseOrder'}">采购退货
          </el-breadcrumb-item>
          <el-breadcrumb-item @click="changeRouter(5)" :class="indexFlag===5?'indexTag':''"
                              :to="{path:'/main/purchaseOrder/PaymentPurchaseOrder'}">应付采购订单
          </el-breadcrumb-item>
          <el-breadcrumb-item @click="changeRouter(6)" :class="indexFlag===6?'indexTag':''"
                              :to="{path:'/main/purchaseOrder/CreateHeader'}">创建头模拟
          </el-breadcrumb-item>
          <el-breadcrumb-item style="display: none"></el-breadcrumb-item>
        </el-breadcrumb>
      </el-header>
      <el-main style="padding: 0">
        </el-breadcrumb> -->
      <!-- </el-header> -->
      <el-main style="padding: 0;width: 99%;height: 100%;">
        <router-view/>
      </el-main>
      <!--     <el-footer>Footer</el-footer>-->
    </el-container>
  </div>
</template>
<script setup>
import {nextTick, ref} from 'vue'
import {ArrowRight, Search} from "@element-plus/icons-vue";
import {ElMessage, ElMessageBox} from "element-plus";
let indexFlag = $ref(1)
import {ArrowRight} from "@element-plus/icons-vue";
function changeRouter(index) {
  indexFlag = index
}
/*
//提示信息
//信息内容,显示方式,显示标题,类型
const MessageShow = (content, type = 'success') =>{
  ElMessage({
    message: content,
    type: type,
    showClose: true,
  })
}
//操作确认类信息:操作类型,提示内容,提示标头,提示类型
const MessageConfirmShow = (czType, content, title = '操作确认提示', type = 'warning') => {
  ElMessageBox.confirm(
      content,
      title,
      {
        cancelButtonText: '取消',
        confirmButtonText: '确定',
        type: type,
        center: true,
      }
  )
      //点击了确定
      .then(() => {
        switch (czType) {
          case '确定':
            //多选退货逻辑代码TODO
            MessageShow('操作成功!', 'success');
            break;
          case '退货':
            //单退货逻辑代码TODO
            MessageShow('操作成功!', 'success');
            break;
          default:
            MessageShow('未知操作!', 'error');
            break;
        }
        return true;
      })
      //点击了取消
      .catch(() => {
        return false;
      })
}
//弹窗信息
const MessageAlertShow = (content, title, type = 'info') => {
  ElMessageBox.alert(content, title, {
    // 禁止自动对焦
    //autofocus: false,
    confirmButtonText: 'OK',
    /!*callback: (action: Action) => {
      MessageShow(`action: ${action}`,type)
    },*!/
  })
}
*/
</script>
<style scoped>
:deep(.indexTag .el-breadcrumb__inner) {
  color: #5CADFE !important;
  font-weight: 900;
}
</style>
UI-Project/src/views/mm/purchaseOrder/Select.vue
@@ -1,251 +1,747 @@
<template>
  <el-container>
    <el-header class="m-header" style="height: auto">
      <el-row :gutter="10" style="margin-bottom: 5px">
        <el-col :span="7">
          <el-date-picker
              v-model="datevalue"
              type="daterange"
              unlink-panels
              range-separator="到"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              :shortcuts="shortcuts"
              :size="size"
              format="YYYY/MM/DD"
              value-format="YYYY-MM-DD"
          />
        </el-col>
        <el-col :span="2">
          <el-button
              id="select"
              type="primary"
              :icon="Search"
              @click="BtnSearchPurchaseOrder">查询
          </el-button>
        </el-col>
      </el-row>
    </el-header>
    <el-main style="padding-top: 5px;height:100%">
      <vxe-grid
          max-height="600"
          @filter-change="filterChanged"
          class="mytable-scrollbar"
          ref="xGrid"
          v-bind="gridOptions"
          v-on="gridEvents"
          @cell-dblclick="cellClickEvent"
      >
        <!--      下拉显示所有信息插槽-->
        <template #content="{ row }">
          <ul class="expand-wrapper">
            <li  v-for="(item,index) in gridOptions.columns" v-show="item.field!==undefined ">
              <span style="font-weight: bold">{{item.title+':  '}}</span>
              <span>{{ row[item.field] }}</span>
            </li>
          </ul>
        </template>
        <!--左边固定显示的插槽-->
        <template #button_slot="{ row }">
          <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button>
          <!--          <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>-->
          <!--          <el-button @click="cellClickEvent" link type="primary" size="small">详情</el-button>-->
        </template>
        <template #num1_filter="{ column, $panel }">
          <div>
            <div v-for="(option, index) in column.filters" :key="index">
              <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
            </div>
          </div>
        </template>
      </vxe-grid>
      <!--      详情框 部分1-->
      <vxe-modal v-model="showDetails" title="查看详情" width="600" height="80%" :mask="false" :lock-view="false"
                 resize>
        <el-container>
          <el-header height="35px"
                     style="margin: 0;padding: 0">
            <el-input v-model="showCGDH" placeholder="采购单号" disabled>
              <template #prepend>采购单号:</template>
            </el-input>
          </el-header>
          <el-main>
            <template #default>
              <vxe-table
                  border="inner"
                  auto-resize
                  show-overflow
                  max-height="400"
                  :row-config="{isHover: true}"
                  :show-header="false"
                  :sync-resize="showDetails"
                  :data="detailData">
                <vxe-column field="label" width="30%" class-name="v-column-label"></vxe-column>
                <vxe-column field="value"></vxe-column>
              </vxe-table>
            </template>
          </el-main>
          <el-footer height="40px">
            <el-row>
              <el-col :offset="20" :span="4">
                <el-button
                    id="Sure"
                    type="primary"
                    @click="logicExecute('编辑')"
                >编辑
                </el-button>
              </el-col>
            </el-row>
          </el-footer>
        </el-container>
      </vxe-modal>
      <!--      详情框 部分1 结束-->
    </el-main>
  </el-container>
</template>
<script setup>
import {ref} from "vue";
import {reactive} from "vue";
import {useRouter} from 'vue-router'
import {Search} from "@element-plus/icons-vue";
import dayjs from "dayjs";
import {ElMessage} from "element-plus";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
let router = useRouter()
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const dialogFormVisible = ref(false)
const dialogFormVisiblea = ref(false)
const box = ref(true)
const boxa = ref(false)
const boxb = ref(false)
const tableData = [
  {
    id: '1',
    long: '1005',
    wide: '183.6',
    thick: '1991',
    type: '待识别',
    typea: '1',
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  }
]
const tableDataa = [
  {
    ida: '3',
    longa: '1005',
    widea: '183.6',
    thicka: '1991',
  },
  {
    ida: '4',
    longa: '105',
    widea: '183',
    thicka: '191',
  }
]
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '删除成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '删除失败',
      })
    })
}
const getTableRow = (row, type) => {
  switch (type) {
    case 'edit' : {
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/purchaseOrder/CreatePurchaseOrder', query: {id: row.id}})
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete': {
      alert('我接收到子组件传送的删除信息' + row.id)
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const xGrid = ref()
const gridEvents = {
  toolbarButtonClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'Add': {//新增
          router.push({path: '/main/purchaseOrder/CreatePurchaseOrder'})
          break
        }
        case 'AddNo': {//无单新增
          MessageShow('点击了无单新增', 'success');
          break
const dialogForm = () => {
  ElMessageBox.confirm(
    '是否切换版图?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
        }
      }
    }
  },
  toolbarToolClick({code}) {
    const $grid = xGrid.value
    if ($grid) {
      switch (code) {
        case 'myPrint': {
          $grid.print()
          break
        }
      }
    }
  },
}
const BtnSearchPurchaseOrder = () => {
  for (let i = 1; i < 6; i++) {
    const randomInt = Math.floor(Math.random() * 999) + 1000;//4位数随机数
    const randomSumInt = Math.floor(Math.random() * 99) + 10;//2位数随机数
    const randomOrderInt = Math.floor(Math.random() * 99) + 100;//3位数随机数
    const t = i % 2 === 0 ? 5 : 6;
    const s = i % 2 === 0 ? '入库' : i % 3 === 0 ? '待审核' : i % 5 === 0 ? '已采购' : '退库';
    const CGNo = 'NGCG231200' + randomOrderInt;//采购编号
    const wlNo = 'NGWL1000' + randomInt;
    const xh = 'NGXH' + randomSumInt;
    const wlmc = 'WLMC' + randomInt;
    const gys = '供应商' + randomSumInt;
    const xhdh = 'NG231200' + randomOrderInt;
    const w = i % 2 === 0 ? '3300' : i % 3 === 0 ? '3660' : i % 4 === 0 ? '2250' : '2580';
    const h = i % 2 === 0 ? '2440' : i % 3 === 0 ? '2440' : i % 4 === 0 ? '2000' : '2300';
    const dw = i % 2 === 0 ? '片' : i % 3 === 0 ? '平米' : i % 4 === 0 ? '包' : '吨';
    now.setDate(now.getDate() + 1);
    gridOptions.data.push({
      cgdh: CGNo,
      h: t,
      xh: xh,
      wlbh: wlNo,
      wlmc: wlmc,
      gys: gys,
      w: w,
      g: h,
      dw: dw,
      cgzt: s,
      rq: dayjs(now).format('YYYY-MM-DD'),
      yl: randomSumInt,
      sl: randomOrderInt,
      xsdh: xhdh,
      je: randomInt,
      6: '139xxxxxxxx',
  )
  .then(() => {
    // this.boxa = true
    // this.box = false
    })
  }
const selectedRows = ref([]);
const handleSelectionChange = (selection) => {
  selectedRows.value = selection;
};
const showMessage = () => {
  if (selectedRows.value.length === 0) {
    ElMessage('请至少选择一个选项')
  } else{
    ElMessage({
    message: '重新识别成功!',
    type: 'success',
  })
}
};
const pick = () => {
  if (selectedRows.value.length === 0) {
    ElMessage('请至少选择一个选项')
  } else{
    ElMessage({
    message: '人工匹配成功!',
    type: 'success',
  })
//页面逻辑代码执行
function logicExecute(type) {
  const $grid = xGrid.value
  switch (type) {
    case '编辑':
      //MessageShow('操作成功!', 'success');
      //编辑逻辑代码TODO
      router.push({path: '/main/purchaseOrder/CreatePurchaseOrder'})
      break;
    case '退货':
      //单退货逻辑代码TODO
      MessageShow('操作成功!', 'success');
      break;
    default:
      MessageShow('未知操作!', 'error');
      break;
  }
  return true;
};
const remove = () => {
  if (selectedRows.value.length === 0) {
    ElMessage('请至少选择一个选项')
  } else{
    ElMessage({
    message: '操作成功!',
    type: 'success',
  })
}
};
//组件接收参数
const gridOptions = reactive({
  border: "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe: true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮
  id: 'CustomerList',
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
@@ -267,296 +763,155 @@
    mode: 'row',
    showStatus: true
  },
  columns: [
    {type: 'expand', title: '', fixed: "left", slots: {content: 'content'}, width: 50},//详情
    {title: '操作', width: '8%', slots: {default: 'button_slot'}, fixed: "left"},
    /* {type: 'checkbox',fixed:"left", title: '', width: 50 },*/
    {type: 'seq', fixed: "left", title: ' ', width: 50},
  data:  [
    {
      field: 'cgdh',
      width: '10%',
      title: '采购单号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'cgzt', width: '10%', title: '状态', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'gys',
      width: '10%',
      title: '供应商',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'wlbh',
      width: '10%',
      title: '物料编号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'wlmc',
      width: '10%',
      title: '物料名称',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'w', width: '8%', title: '宽度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'g', width: '8%', title: '高度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'h', width: '8%', title: '厚度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'xh', width: '8%', title: '型号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'dw', width: '8%', title: '单位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: '6',
      width: '12%',
      title: '不含税单价',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'sl', width: '8%', title: '数量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'sl',
      width: '12%',
      title: '已采购数量',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'je', width: '8%', title: '金额', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'je',
      width: '12%',
      title: '不含税金额',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: '6', width: '8%', title: '税率', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'sl', width: '8%', title: '库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'yl', width: '10%', title: '周用量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'yl', width: '10%', title: '月用量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'cgzt',
      width: '10%',
      title: '单据状态',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'xsdh',
      width: '10%',
      title: '销售单号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'rq',
      width: '10%',
      title: '制单日期',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: '6', width: '10%', title: '制单人', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: '6',
      width: '10%',
      title: '采购部门',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: '6',
      width: '10%',
      title: '采购组织',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: '6', width: '10%', title: '备注', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}
  ],//表头参数
  toolbarConfig: {
    buttons: [/*{type:'text'},
      {
      'name': '创建订单',
      'code':'Add',
    },
      {
        'name': '无单新增',
        'code':'AddNo'
      }*/
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
    ],
    import: false,
    export: true,
    print: true,
    zoom: true,
    custom: true,
    style: 'paddling-left:10px'
  },//表头按钮
  data: [],//table body实际数据
  mergeFooterItems: [
    {row: 0, col: 0, rowspan: 1, colspan: 4}
  ],//合并脚
  footerMethod({columns, data}) {//页脚函数
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
        }
        /* if (props.tableProp.footList.includes(column.field)) {
           return sumNum(data, column.field)
         }*/
        return ''
      })
    ]
  },
})
//详情框 部分2
const showCGDH = ref();
const showDetails = ref(false);
let detailData = [];
const cellClickEvent = ({row}) => {
  if(isQueryColumnId===false){
    queryColumnId();
  }
  detailData = list.map(field => {
    return {label: queryColumnsTitle(field), value: row[field]}
  })
  showDetails.value = true;
  showCGDH.value = row['cgdh'];
}
//获取表列
let list = [];
let columnIndex = 3;//列标头从第几列开始的
let isQueryColumnId = false;
const queryColumnId = () => {
  while (columnIndex < gridOptions.columns.length) {
    list.push(gridOptions.columns[columnIndex].field);
    columnIndex++;
  }
  isQueryColumnId = true;
  return list;
}
//获取表列名
function queryColumnsTitle(cn) {
  let i = 0;
  while (i < gridOptions.columns.length + 1) {
    if (gridOptions.columns[i].field === cn) {
      return gridOptions.columns[i].title;
    }
    i++;
  }
}
//详情框 部分2 结束
const now = new Date()
//时间快捷选择
const datevalue = ref('')
const shortcuts = [
  {
    text: '近一周',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
      return [start, end]
    },
  },
  {
    text: '近一个月',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
      return [start, end]
    },
  },
  {
    text: '近三个月',
    value: () => {
      const end = new Date()
      const start = new Date()
      start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
      return [start, end]
    },
  },
]
//提示信息
//信息内容,显示方式,显示标题,类型
const MessageShow = (content, type = 'success') => {
  ElMessage({
    message: content,
    type: type,
    showClose: true,
  })
}
//操作确认类信息:操作类型,提示内容,提示标头,提示类型
const MessageConfirmShow = (czType, content, title = '操作确认提示', type = 'warning') => {
  ElMessageBox.confirm(
      content,
      title,
      {
        cancelButtonText: '取消',
        confirmButtonText: '确定',
        type: type,
        center: true,
      }
  )
      //点击了确定
      .then(() => {
        logicExecute(czType);
        return true;
      })
      //点击了取消
      .catch(() => {
        return false;
      })
}
//弹窗信息
const MessageAlertShow = (content, title, type = 'info') => {
  ElMessageBox.alert(content, title, {
    // 禁止自动对焦
    //autofocus: false,
    confirmButtonText: 'OK',
    /*callback: (action: Action) => {
      MessageShow(`action: ${action}`,type)
    },*/
  })
}
</script>
<template>
  <div>
     <el-button style="margin-top: 5px;margin-left: 5px;"   id="searchButton" type="primary" @click="showMessage">重新识别</el-button>
    <el-button style="margin-top: 5px"  id="searchButton" type="primary" @click="pick">人工匹配</el-button>
    <el-button style="margin-top: 5px"  id="searchButton" type="primary" @click="remove">人工拿走</el-button>
    <el-button style="margin-top: 5px"  id="searchButton" type="primary" >破损</el-button>
    <el-button style="margin-top: 5px"  id="searchButton" @click="boxb = true;box = false" >合并</el-button>
    <el-button style="margin-top: 5px"  id="searchButton" @click="box = true;boxb = false" >单片</el-button>
    <el-button style="margin-top: 5px;float: right;margin-right: 50px;"  id="searchButton" type="text"  @click="dialogForm">版图号</el-button>
    <div v-if="box">
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 450px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column type="selection" width="55"  />
          <el-table-column prop="id" align="center" label="id" min-width="80" />
          <el-table-column prop="long" align="center" label="长" min-width="120" />
          <el-table-column prop="wide" align="center" label="宽" min-width="120" />
          <el-table-column prop="type" align="center" label="状态" min-width="120" />
          <el-table-column prop="thick" align="center" label="其他" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <!-- <el-button size="mini" type="text" plain  @click="dialogFormVisible = true">详情</el-button> -->
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">设置</el-button>
            </template>
        </el-table-column>
        </el-table>
      </div>
    </el-card>
  </div>
    <div v-if="boxb">
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 450px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column type="selection" width="55"  />
          <el-table-column prop="id" align="center" label="类型序号" min-width="80" />
          <el-table-column prop="long" align="center" label="长" min-width="120" />
          <el-table-column prop="wide" align="center" label="宽" min-width="120" />
          <el-table-column prop="typea" align="center" label="数量" min-width="120" />
          <el-table-column prop="thick" align="center" label="其他" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <!-- <el-button size="mini" type="text" plain  @click="dialogFormVisible = true">详情</el-button> -->
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">设置</el-button>
            </template>
        </el-table-column>
        </el-table>
      </div>
    </el-card>
  </div>
    <!-- <div v-if="boxa">
    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column type="selection" width="55"  />
          <el-table-column prop="ida" align="center" label="id" min-width="80" />
          <el-table-column prop="longa" align="center" label="长" min-width="120" />
          <el-table-column prop="widea" align="center" label="宽" min-width="120" />
          <el-table-column prop="thicka" align="center" label="其他" min-width="120" />
        </el-table>
      </div>
    </el-card>
  </div> -->
  </div>
  <!-- <el-dialog v-model="dialogFormVisible" top="21vh" width="30%" title="小片图" >
        <div id="message">
          200*100
        </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button @click="dialogFormVisible = false">关闭</el-button>
      </div>
    </template>
  </el-dialog> -->
  <el-dialog v-model="dialogFormVisiblea" top="21vh" width="30%" title="测量设置" >
            <el-form  size="mini" label-width="150px">
      <el-form style="margin-left: 80px;">
        <el-form-item label="误差长:" :required="true" style="width: 16vw;margin-bottom: 30px;">
            <div style="display: flex;"><el-input  autocomplete="off" /><div style="margin-left: 10px;">mm</div> </div>
              </el-form-item>
              <el-form-item label="误差宽:" :required="true" style="width: 16vw">
            <div style="display: flex;"><el-input  autocomplete="off" /><div style="margin-left: 10px;">mm</div> </div>
              </el-form-item>
        </el-form>
            </el-form>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="dialogFormVisiblea = false">
          确认
        </el-button>
        <el-button @click="dialogFormVisiblea = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
  <div id="awatch">小片图:
<div id="watch">200*100</div>
</div>
</template>
<style scoped>
:deep(.v-column-label div span) {
  font-weight: bold;
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#message{
  text-align: center;
  align-items: center;
  color: black;
   width: 200px;
   height: 100px;
   background-color: #337ecc;
   margin-left: 28%;
}
#awatch{
  display: flex;
  margin-top: 20px;
  font-size: 20px;
  margin-left: 50px;
}
#watch{
  text-align: center;
  align-items: center;
  color: black;
   width: 300px;
   height: 150px;
   background-color: #337ecc;
   margin-left: 2%;
   margin-top: 10px;
}
</style>
UI-Project/src/views/mm/purchaseReturn/PurchaseReturn.vue
File was deleted
UI-Project/src/views/mm/purchaseReturn/Select.vue
File was deleted
UI-Project/src/views/mm/purchaseStorage/PurchaseStorage.vue
File was deleted
UI-Project/src/views/mm/purchaseStorage/Select.vue
File was deleted
UI-Project/src/views/mm/stockReport/StockMonthReport.vue
File was deleted
UI-Project/src/views/mm/stockReport/StockReport.vue
File was deleted
UI-Project/src/views/mm/stockReport/StockWarehouseReport.vue
File was deleted
UI-Project/src/views/mm/stockReport/SubsidiaryMonthReport.vue
File was deleted
UI-Project/src/views/mm/stockReport/WarehouseReport.vue
File was deleted
UI-Project/src/views/pp/BOM/BOM.vue
File was deleted
UI-Project/src/views/pp/BOM/BenchmarkBOM.vue
File was deleted
UI-Project/src/views/pp/BOM/OrderBOM.vue
File was deleted
UI-Project/src/views/pp/BOM/OrderBOMDetails.vue
File was deleted
UI-Project/src/views/pp/BOM/SelectBOM.vue
File was deleted
UI-Project/src/views/pp/BOM/StandardBOM.vue
File was deleted
UI-Project/src/views/pp/BOM/StandardBOMDetail.vue
File was deleted
UI-Project/src/views/pp/Replenish/AddReplenish.vue
File was deleted
UI-Project/src/views/pp/Replenish/PrintReplenishFlowCard.vue
File was deleted
UI-Project/src/views/pp/Replenish/Replenish.vue
File was deleted
UI-Project/src/views/pp/Replenish/SelectReplenish.vue
File was deleted
UI-Project/src/views/pp/machine/AddMachine.vue
File was deleted
UI-Project/src/views/pp/machine/AddMaintenanceAndRepair.vue
File was deleted
UI-Project/src/views/pp/machine/Machine.vue
File was deleted
UI-Project/src/views/pp/machine/MaintenanceAndRepair.vue
File was deleted
UI-Project/src/views/pp/machine/SelectMachine.vue
File was deleted
UI-Project/src/views/pp/processCard/AddProcessCard.vue
File was deleted
UI-Project/src/views/pp/processCard/PrintFlowCard.vue
File was deleted
UI-Project/src/views/pp/processCard/PrintProcess.vue
File was deleted
UI-Project/src/views/pp/processCard/ProcessCard.vue
File was deleted
UI-Project/src/views/pp/processCard/ProcessCardDetails.vue
File was deleted
UI-Project/src/views/pp/processCard/ProductionScheduling.vue
File was deleted
UI-Project/src/views/pp/processCard/SelectAddProcess.vue
File was deleted
UI-Project/src/views/pp/processCard/SelectPrintFlowCard.vue
File was deleted
UI-Project/src/views/pp/processCard/SelectProcessCard.vue
File was deleted
UI-Project/src/views/pp/processCard/SplittingDetails.vue
File was deleted
UI-Project/src/views/pp/report/DamageReport.vue
File was deleted
UI-Project/src/views/pp/report/EquipmentOutput.vue
File was deleted
UI-Project/src/views/pp/report/OrderBOMOutside.vue
File was deleted
UI-Project/src/views/pp/report/OrderPlanDecomposition.vue
File was deleted
UI-Project/src/views/pp/report/ProcessCardProgress.vue
File was deleted
UI-Project/src/views/pp/report/ProcessToBeCompleted.vue
File was deleted
UI-Project/src/views/pp/report/ProductionSchedule.vue
File was deleted
UI-Project/src/views/pp/report/QualityReport.vue
File was deleted
UI-Project/src/views/pp/report/RawMaterialRequisition.vue
File was deleted
UI-Project/src/views/pp/report/Report.vue
File was deleted
UI-Project/src/views/pp/report/SplittingDetailsOutside.vue
File was deleted
UI-Project/src/views/pp/report/TaskCompletionStatus.vue
File was deleted
UI-Project/src/views/pp/report/TeamOutput.vue
File was deleted
UI-Project/src/views/pp/report/WorkInProgress.vue
File was deleted
UI-Project/src/views/pp/report/Yield.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/AddReportingWork.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/QualityInReviewDetail.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/QualityInspectionReview.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/ReportingWorkDetail.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/ReportingWorks.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/SelectReportingWorks.vue
File was deleted
UI-Project/src/views/pp/rework/AddRework.vue
File was deleted
UI-Project/src/views/pp/rework/Rework.vue
File was deleted
UI-Project/src/views/pp/rework/SelectRework.vue
File was deleted
UI-Project/src/views/pp/workOrder/AddWorkOrder.vue
File was deleted
UI-Project/src/views/pp/workOrder/ReleaseWorkOrder.vue
File was deleted
UI-Project/src/views/pp/workOrder/SelectAddWorkOrder.vue
File was deleted
UI-Project/src/views/pp/workOrder/SelectWorkOrder.vue
File was deleted
UI-Project/src/views/pp/workOrder/WorkOrder.vue
File was deleted
UI-Project/src/views/sd/customer/CreateCustomer.vue
File was deleted
UI-Project/src/views/sd/customer/SelectCustomer.vue
File was deleted
UI-Project/src/views/sd/delivery/CreateDelivery.vue
File was deleted
UI-Project/src/views/sd/delivery/Delivery.vue
File was deleted
UI-Project/src/views/sd/delivery/DeliveryReport.vue
File was deleted
UI-Project/src/views/sd/delivery/SelectDelivery.vue
File was deleted
UI-Project/src/views/sd/delivery/SelectOrderList.vue
File was deleted
UI-Project/src/views/sd/order/CreateOrder.vue
File was deleted
UI-Project/src/views/sd/order/Order.vue
File was deleted
UI-Project/src/views/sd/order/OrderReport.vue
File was deleted
UI-Project/src/views/sd/order/SelectOrder.vue
File was deleted
UI-Project/src/views/sd/order/UpdateOrderCraft.vue
File was deleted
UI-Project/src/views/sd/product/CreateProduct.vue
File was deleted
UI-Project/src/views/sd/product/Product.vue
File was deleted
UI-Project/src/views/sd/product/SelectProduct.vue
File was deleted
UI-Project/src/views/sd/product/Test.vue
File was deleted
UI-Project/src/views/sd/product/Test11.vue
File was deleted
UI-Project/src/views/sd/product/testSort.vue
File was deleted
UI-Project/src/views/sd/returns/Returns.vue
File was deleted
UI-Project/src/views/sd/returns/SelectReturns.vue
File was deleted
UI-Project/vite.config.js
@@ -33,7 +33,7 @@
      '/api2': {
        target: 'localhost:8080/mesModuleTools',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api2/, ""),
        rewrite: (path) => path.replace(/^\/api2/, "mesModuleTools"),
      },
    }
  }
UnLoadGlassModule/mockPLCData.properties
New file
@@ -0,0 +1,13 @@
#Mock S7 PLC Data
#Wed Mar 27 10:21:54 CST 2024
DB4.0.0=false
DB4.1.1=false
DB4.1.0=false
DB4.0.7=false
DB4.0.6=false
DB4.0.5=true
DB4.0.4=true
DB4.0.3=true
DB4.0.2=true
DB4.0.1=true
DB101.0=1
UnLoadGlassModule/src/main/java/com/mes/common/PlcTools/MockS7PLC.java
New file
@@ -0,0 +1,96 @@
package com.mes.common.PlcTools;
import java.util.HashMap;
import java.util.Map;
/**
 * 模拟S7 PLC的简单实现,用于测试和开发阶段
 */
public class MockS7PLC {
    // 使用Map模拟PLC的内存存储,键是地址,值是存储的数据
    private Map<String, byte[]> memory = new HashMap<>();
    private static volatile MockS7PLC instance; // 单例实例
    public static MockS7PLC getInstance() {
        if (instance == null) {
            synchronized (MockS7PLC.class) {
                if (instance == null)
                    instance = new MockS7PLC();
            }
        }
        return instance;
    }
    /**
     * 模拟写入一个或多个字节到指定地址
     *
     * @param address 地址
     * @param data    要写入的数据
     */
    public void writeByte(String address, byte[] data) {
        memory.put(address, data);
    }
    /**
     * 模拟从指定地址读取一定数量的字节
     *
     * @param address 地址
     * @param count   要读取的字节数
     * @return 读取到的数据
     */
    public byte[] readByte(String address, int count) {
        byte[] bytes = memory.getOrDefault(address, new byte[0]);
        if (count >= 0 && count <= bytes.length) {
            byte[] result = new byte[count];
            System.arraycopy(bytes, 0, result, 0, count);
            return result;
        } else {
            // 如果请求的字节数超出了实际可用的字节数,则返回全部可用的字节
            return bytes;
        }
    }
    /**
     * 模拟写入一个16位整数到指定地址
     *
     * @param address 地址
     * @param data    要写入的数据
     */
    public void writeInt16(String address, short data) {
        memory.put(address, new byte[]{(byte) (data >> 8), (byte) data});
    }
    /**
     * 模拟从指定地址读取一个16位整数
     *
     * @param address 地址
     * @return 读取到的数据
     */
    public short readInt16(String address) {
        byte[] data = memory.getOrDefault(address, new byte[]{0, 0});
        return (short) ((data[0] << 8) | (data[1] & 0xFF));
    }
    /**
     * 模拟写入一个布尔值到指定地址
     *
     * @param address 地址
     * @param data    要写入的数据
     */
    public void writeBoolean(String address, boolean data) {
        memory.put(address, new byte[]{(byte) (data ? 1 : 0)});
    }
    /**
     * 模拟从指定地址读取一个布尔值
     *
     * @param address 地址
     * @return 读取到的数据
     */
    public boolean readBoolean(String address) {
        return memory.getOrDefault(address, new byte[]{0})[0] != 0;
    }
    // 根据需要,您可以添加更多模拟PLC操作的方法
}
UnLoadGlassModule/src/main/java/com/mes/common/PlcTools/MockS7PLCtwo.java
New file
@@ -0,0 +1,276 @@
package com.mes.common.PlcTools;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MockS7PLCtwo {
    private static volatile MockS7PLCtwo instance; // 单例实例
    private ConcurrentHashMap<String, String> memory = new ConcurrentHashMap<>();
    private String storageFilePath = "mockPLCData.properties";
    // 私有化构造函数
    private MockS7PLCtwo() {
        // 在构造函数中尝试加载现有的模拟数据
        try (FileInputStream fis = new FileInputStream(storageFilePath)) {
            Properties properties = new Properties();
            properties.load(fis);
            properties.forEach((key, value) -> memory.put(String.valueOf(key), String.valueOf(value)));
        } catch (IOException e) {
            System.out.println("没有找到现有的模拟数据文件,将创建一个新的。");
        }
    }
    // 公共静态方法获取类的唯一实例
    public static MockS7PLCtwo getInstance() {
        if (instance == null) {
            synchronized (MockS7PLCtwo.class) {
                if (instance == null)
                    instance = new MockS7PLCtwo();
            }
        }
        return instance;
    }
    // 修改写入方法以持久化数据
    public void writeByte(String address, byte[] data) {
        memory.put(address, new String(data, StandardCharsets.ISO_8859_1));
        saveMemory();
    }
    // 修改读取方法以从持久化的数据中读取
    public byte[] readByte(String address,int count) {
        String value = memory.getOrDefault(address, "");
        byte[] bytes = value.getBytes(StandardCharsets.ISO_8859_1);
        if (count >= 0 && count <= bytes.length) {
            byte[] result = new byte[count];
            System.arraycopy(bytes, 0, result, 0, count);
            return result;
        } else {
            // 如果请求的字节数超出了实际可用的字节数,则返回全部可用的字节
            return bytes;
        }
    }
    public void writeInt16(String address, short data) {
        memory.put(address, Short.toString(data));
        saveMemory();
    }
    public Short readInt16(String address) {
        String value = memory.get(address);
        return value != null ? Short.parseShort(value) : null;
    }
    public void writeBoolean(String address, boolean data) {
        memory.put(address, Boolean.toString(data));
        saveMemory();
    }
    public Boolean readBoolean(String address) {
        String value = memory.get(address);
        return value != null ? Boolean.parseBoolean(value) : null;
    }
    public void writeString(String address, String data) {
        memory.put(address, data);
        saveMemory();
    }
    public String readString(String address) {
        return memory.getOrDefault(address, "");
    }
    public void writeTime(String address, long data) {
        memory.put(address, Long.toString(data));
        saveMemory();
    }
    public Long readTime(String address) {
        String value = memory.get(address);
        return value != null ? Long.parseLong(value) : null;
    }
    // 添加一个方法来保存数据到文件
    private void saveMemory() {
        Properties properties = new Properties();
        properties.putAll(memory);
        try (FileOutputStream fos = new FileOutputStream(storageFilePath)) {
            properties.store(fos, "Mock S7 PLC Data");
        } catch (IOException e) {
            System.out.println("保存模拟数据失败:" + e.getMessage());
        }
    }
    // 连续写入多个Word
    public void writeword(String address, List<Short> data) {
        for (int i = 0; i < data.size(); i++) {
            String addr = calculateAddress(address, i * 2); // 假设每个word占两个地址单位
            memory.put(addr, Short.toString(data.get(i)));
        }
        saveMemory();
    }
    // 不连续地址word写入多个Word
    public void WriteWords(List<String> addresses, List<Short> datas) {
        if (addresses.size() != datas.size()) {
            throw new IllegalArgumentException("地址列表和数据列表的大小必须相同。");
        }
        for (int i = 0; i < addresses.size(); i++) {
            String addr = addresses.get(i);
            short data = datas.get(i);
            // 假设这里使用内存映射来模拟PLC写入操作
            memory.put(addr, Short.toString(data));
        }
        saveMemory(); // 在所有数据写入后保存更改
    }
    // 连续读取多个Word
    public List<Short> readwords(String address, int count) {
        List<Short> result = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            String addr = calculateAddress(address, i * 2); // 同上,每个word占两个地址单位
            //System.out.println(addr);
            String value = memory.get(addr);
            if (value != null) {
                result.add(Short.parseShort(value));
            } else {
                result.add(null); // 或者考虑抛出异常或其他错误处理
            }
        }
        return result;
    }
    public List<Short> ReadWords(List<String> addresses) {
        List<Short> datas = new ArrayList<>();
        for (String addr : addresses) {
            // 从内存映射中获取数据
            String dataStr = memory.get(addr);
            // 将字符串转换成short类型,并添加到结果列表中
            // 这里假设数据已经以适当的方式存储(例如,作为短整型的字符串表示)
            // 如果读取的数据为空或转换失败,你可能需要处理这些情况
            try {
                short data = Short.parseShort(dataStr);
                datas.add(data);
            } catch (NumberFormatException e) {
                System.err.println("读取地址 " + addr + " 的数据时出错: " + e.getMessage());
            }
        }
        return datas;
    }
    // 连续写入多个Bit
    public void writebits(String address, List<Boolean> data) {
        for (int i = 0; i < data.size(); i++) {
            String addr = calculateAddress(address, i); // 假设每个bit占一个地址单位
            memory.put(addr, Boolean.toString(data.get(i)));
        }
        saveMemory();
    }
//bit分散地址读取
    public List<Boolean> readBits(List<String> addresses) {
        List<Boolean> results = new ArrayList<>();
        for (String address : addresses) {
            // 对于每个地址,直接使用 calculateAddress 来处理可能的位偏移
            // 这里假设 calculateAddress 已经足够智能以处理单个位的偏移
            // 由于我们是逐个读取,每次偏移量都是0
            String addr = calculateAddress(address, 0);
            String value = memory.get(addr);
            if (value != null) {
                results.add(Boolean.parseBoolean(value));
            } else {
                // 如果地址对应的值不存在于内存中,可以选择添加 null 或抛出异常
                // 这里选择添加 null,但在实际应用中应根据具体需求决定
                results.add(null);
            }
        }
        return results;
    }
    // 连续读取多个Bit
    public List<Boolean> readbits(String address, int count) {
        List<Boolean> result = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            String addr = calculateAddress(address, i); // 同上,每个bit占一个地址单位
            String value = memory.get(addr);
            if (value != null) {
                result.add(Boolean.parseBoolean(value));
            } else {
                result.add(null); // 或者考虑抛出异常或其他错误处理
            }
        }
        return result;
    }
    // 计算连续地址
//    private String calculateAddress(String baseAddress, int offset) {
//        // 支持带字母的地址格式
//        Pattern pattern = Pattern.compile("(\\D*)(\\d+)");
//        Matcher matcher = pattern.matcher(baseAddress);
//        if (matcher.find()) {
//            String prefix = matcher.group(1);
//            int address = Integer.parseInt(matcher.group(2));
//            return prefix + (address + offset);
//        } else {
//            throw new IllegalArgumentException("Invalid address format: " + baseAddress);
//        }
//    }
    private String calculateAddress(String baseAddress, int offset) {
        // 分割地址为数据块、字偏移和位偏移(如果有)
        Pattern pattern = Pattern.compile("(DB\\d+)\\.(\\d+)(?:\\.(\\d+))?");
        Matcher matcher = pattern.matcher(baseAddress);
        if (matcher.find()) {
            String dbNumber = matcher.group(1); // 数据块编号,如 "DB100"
            int wordOffset = Integer.parseInt(matcher.group(2)); // 字偏移
            String bitOffsetStr = matcher.group(3); // 位偏移,可能为空
            if (bitOffsetStr != null) {
                // 存在位偏移,进行位操作
                int bitOffset = Integer.parseInt(bitOffsetStr);
                int totalBitOffset = bitOffset + offset;
                // 计算新的字偏移和位偏移
                int newWordOffset = wordOffset + (totalBitOffset / 8);
                int newBitOffset = totalBitOffset % 8;
                return String.format("%s.%d.%d", dbNumber, newWordOffset, newBitOffset);
            } else {
                // 仅存在字偏移,进行字操作
                // 注意:假设每个字占用2个字节
                int newWordOffset = wordOffset + (offset );
                return String.format("%s.%d", dbNumber, newWordOffset);
            }
        } else {
            throw new IllegalArgumentException("Invalid address format: " + baseAddress);
        }
    }
}
UnLoadGlassModule/src/main/java/com/mes/common/RabbitMQUtils.java
@@ -106,6 +106,25 @@
    }
//接收队列中所有消息,不消费
    public static List<String> browseMessages(String queueName) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(host);
        List<String> messages = new ArrayList<>();
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            channel.queueDeclare(queueName, false, false, false, args);
            // 获取队列中的消息
            GetResponse response;
            while ((response = channel.basicGet(queueName, false)) != null) {
                String message = new String(response.getBody(), "UTF-8");
                messages.add(message);
            }
        }
        return messages;
    }
    private static Set<String> sentMessageIds = new HashSet<>();
//根据id发送消息
@@ -145,18 +164,18 @@
            channel.queueDeclare(queueName, false, false, false, args);
            GetResponse response;
        boolean found = false;
            while ((response = channel.basicGet(queueName, false)) != null) {
                String receivedMessage = new String(response.getBody(), "UTF-8");
                if (response.getProps().getMessageId().equals(messageId)) {
                    long deliveryTag = response.getEnvelope().getDeliveryTag();
                    channel.basicAck(deliveryTag, false);
                    System.out.println("Selected message: "+messageId+ receivedMessage);
                    return receivedMessage; // 返回选定的消息内容
                System.out.println("Selected message: " + messageId + " " + receivedMessage);
                return receivedMessage;
                } else {
                    // 对于不符合条件的消息,进行 Nack 操作
//                    long deliveryTag = response.getEnvelope().getDeliveryTag();
//                    channel.basicNack(deliveryTag, false, true);
                    return "Specified message not found in the queue.";
                // 未找到指定消息,继续查找
                channel.basicReject(response.getEnvelope().getDeliveryTag(), false);
                }
            }
UnLoadGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java
@@ -1,23 +1,51 @@
package com.mes.config;
import com.mes.service.Plcaction;
import com.mes.service.DownGlassInfoService;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import com.mes.service.PLCAutoMes;
import com.mes.service.Plchome;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
class AppStartup implements ApplicationListener<ContextRefreshedEvent> {
@Order(1)
    private final DownGlassInfoService downGlassInfoService;
    public AppStartup(DownGlassInfoService downGlassInfoService) {
        this.downGlassInfoService = downGlassInfoService;
    }
public class AppRunnerConfig implements ApplicationRunner {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        Plcaction.setDownGlassInfoService(downGlassInfoService);
        new Plcaction().start();
    public void run(ApplicationArguments args) throws Exception {
        // TODO Auto-generated method stub
        //
        System.out.println("启动完成");
        //  new PlcHold().start();
       new PLCAutoMes().start();
    new Plchome().start();
        //  new PlcLayout().start();
        //  new Plcalarm().start();
        //  new Plcsign().start();
        //  new Plcstate().start();
        //  new PlcPositioning1().start();
        //  new PlcParameter2().start();
        //  new PLCAutomaticParameterSetting().start();
        //  new PlcManualonePosition().start();
        //  new PlcManualonePosition2().start();
        //  new PlcServoManualone().start();
        //  new PLCManualJog().start();
        //  new Plclog().start();
        //  new PlcInteractionState().start();
        //new PlcParameter1Review().start();
        //new PLCAutomaticParameterSettingReview2().start();
    // new PLCManualJogReview().start();
    }
}
UnLoadGlassModule/src/main/java/com/mes/controller/DownGlassInfoController.java
New file
@@ -0,0 +1,40 @@
package com.mes.controller;
import com.mes.entity.DownGlassInfo;
import com.mes.service.DownGlassInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/downGlassInfo")
public class DownGlassInfoController {
    @Autowired
    private DownGlassInfoService downGlassInfoService;
    // 获取指定ID的DownGlassInfo信息
    @GetMapping("/{id}")
    public DownGlassInfo getDownGlassInfoById(@PathVariable Integer id) {
        return downGlassInfoService.getDownGlassInfoById(id);
    }
//    @GetMapping("/messages")
//    public String getMessages() throws IOException, TimeoutException {
//        List<String> messages = new ArrayList<>();
//        try {
//            messages = RabbitMQUtils.browseMessages("hangzhou2");
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return messages.toString();  // 返回消息列表的字符串表示形式
//    }
}
UnLoadGlassModule/src/main/java/com/mes/controller/userInfo/UserController.java
@@ -3,7 +3,6 @@
import com.mes.common.CacheUtil;
import com.mes.common.Constants;
import com.mes.common.Result;
import com.mes.controller.dto.UserDTO;
import com.mes.entity.userInfo.User;
import com.mes.exception.ServiceException;
import com.mes.mapper.userInfo.UserMapper;
@@ -31,18 +30,18 @@
        System.out.println(cacheUtil.getCacheData("admin"));
        return userMapper.findAll();
    }
    @ApiOperation("登录")
    @PostMapping("/login")
    public Result login(@RequestBody UserDTO userDTO){
        //UserDTO getUserCacheDTO = cacheUtil.getCacheData(userDTO.getUserId());
        userService.deleteCache(userDTO.getUserId());
        UserDTO getUserDTO=userService.login(userDTO);
        if(getUserDTO!=null){
            return Result.seccess(userDTO);
        }else{
            throw new ServiceException(Constants.Code_600,"用户名或密码错误");
        }
    }
    //@ApiOperation("登录")
   // @PostMapping("/login")
//    public Result login(@RequestBody UserDTO userDTO){
//        //UserDTO getUserCacheDTO = cacheUtil.getCacheData(userDTO.getUserId());
//        userService.deleteCache(userDTO.getUserId());
//        UserDTO getUserDTO=userService.login(userDTO);
//        if(getUserDTO!=null){
//            return Result.seccess(userDTO);
//        }else{
//            throw new ServiceException(Constants.Code_600,"用户名或密码错误");
//        }
//    }
    @ApiOperation("注册")
    @PostMapping("/register")
    public Result register(@RequestBody User user){
UnLoadGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java
@@ -15,5 +15,7 @@
    private Double width; // 宽
    private Double height; // 高
    private Double thickness; // 厚度
    private String filmsid;//膜系
}
UnLoadGlassModule/src/main/java/com/mes/entity/DownWorkstation.java
@@ -14,4 +14,7 @@
    private Integer deviceId; // 设备id
    private Integer enableState; // 启用状态
    private Integer workState; // 工作状态
    private Integer racks_number; // 已落架数量
    private Integer total_quantity; // 总数量
}
UnLoadGlassModule/src/main/java/com/mes/entity/device/PlcParameterObject.java
@@ -15,6 +15,8 @@
    private int plcAddressLength;
    private ArrayList<PlcParameterInfo> plcParameterList;
    /**
     * @return 数据区开始地址
     */
@@ -199,4 +201,5 @@
    }
}
UnLoadGlassModule/src/main/java/com/mes/mapper/DownGlassInfoMapper.java
@@ -4,12 +4,27 @@
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.entity.DownGlassInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
@InterceptorIgnore(tenantLine = "true")
@DS("hangzhoumes") // 指定使用 hangzhoumes 数据源
public interface DownGlassInfoMapper extends BaseMapper<DownGlassInfo> {
    // 查询下片任务表中状态为1的下片信息
    @Select("SELECT flow_card_id,filmsid,width,height,thickness FROM down_glass_task WHERE state = 1;")
    List<DownGlassInfo> selectunloadingtaskstate();
    @Update("UPDATE down_glass_task SET state = 0 WHERE flow_card_id = #{flowCardId}")
    void updateTaskStateToZero(@Param("flowCardId") String flowCardId);
    @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);
}
UnLoadGlassModule/src/main/java/com/mes/mapper/DownWorkstationMapper.java
@@ -3,14 +3,57 @@
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.entity.DownGlassInfo;
import com.mes.entity.DownWorkstation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Component
@Repository
@InterceptorIgnore(tenantLine = "true")
@DS("hangzhoumes") // 指定使用 hangzhoumes 数据源
public interface DownWorkstationMapper extends BaseMapper<DownWorkstation> {
//根据工位ID和设备ID更新工位状态
    @Update("UPDATE down_workstation SET work_state = #{workState} " +
            "WHERE workstation_id = #{workstationId} AND device_id = #{deviceId}")
    void updateWorkStateByWorkstationIdAndDeviceId(@Param("workstationId") Integer workstationId,
                                                   @Param("deviceId") Integer deviceId,
                                                   @Param("workState") Integer workState);
//工位ID删除信息
    @Delete("DELETE FROM down_workstation WHERE workstation_id = #{workstationId}")
    void deleteByWorkstationId(@Param("workstationId") Integer workstationId);
//落架
    @Insert("INSERT INTO down_workstation (workstation_id, flow_card_id, device_id, enable_state, work_state) " +
            "VALUES (#{workstationId}, #{flowCardId}, #{deviceId}, #{enableState}, #{workState})")
    void insertDownWorkstation(DownWorkstation downWorkstation);
//根据设备ID查询工位信息
    @Select("SELECT * FROM down_workstation WHERE device_id = #{deviceId}")
    List<DownWorkstation> selectByDeviceId(@Param("deviceId") Integer deviceId);
//从机械手任务表查询状态为1的流程卡号
//    @Select("SELECT *  FROM down_workstation_task WHERE state = 1")
//    List<DownWorkstation> selectdownWorkstationstate();
    @Select("SELECT dw.flow_card_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();
    @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);
}
UnLoadGlassModule/src/main/java/com/mes/mapper/userInfo/SysMenuItemMapper.java
@@ -2,11 +2,12 @@
import com.mes.entity.userInfo.SysMenuItem;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface SysMenuItemMapper {
     @Select("select  * from sys_menu_item as a where a.state=1 order by a.listSort")
     List<SysMenuItem> findAll() ;
}
UnLoadGlassModule/src/main/java/com/mes/service/DownGlassInfoService.java
@@ -13,7 +13,10 @@
    @Autowired
    private DownGlassInfoMapper downGlassInfoMapper;
    public DownGlassInfo getDownGlassInfoById(Integer id) {
        return downGlassInfoMapper.selectById(id);
    }
}
UnLoadGlassModule/src/main/java/com/mes/service/GlassHandler.java
File was deleted
UnLoadGlassModule/src/main/java/com/mes/service/ModuleA.java
@@ -18,7 +18,10 @@
//        receiver.sendMessageWithId(QUEUE_NAME, message, messageId); // 调用 sendMessageWithId 方法发送消息
        receiver.sendMessageWithId("hangzhou2", "Hello RabbitMQ!", "1");
        receiver.sendMessageWithId("hangzhou2", "Another message", "2");
        receiver.sendMessageWithId("hangzhou2", "Yet another message", "1"); // 这条消息会打印重复消息的错误信息
        receiver.sendMessageWithId("hangzhou2", "Another message", "3");
        receiver.sendMessageWithId("hangzhou2", "Another message", "4");
        receiver.sendMessageWithId("hangzhou2", "Another message", "5");
      //  receiver.sendMessageWithId("hangzhou2", "Yet another message", "1"); // 这条消息会打印重复消息的错误信息
    }
}
UnLoadGlassModule/src/main/java/com/mes/service/ModuleB.java
@@ -2,6 +2,8 @@
import com.mes.common.RabbitMQUtils;
import java.util.List;
public class ModuleB {
    private final static String QUEUE_NAME = "hangzhou2";
@@ -13,10 +15,11 @@
        try {
            receiver.consumeMessageById("2",QUEUE_NAME);
            //receiver.consumeMessageById("5",QUEUE_NAME);
           // String receivedMessage = receiver.consumeSelectedMessage(1,QUEUE_NAME);
//            String receivedMessage = String.valueOf(receiver.readMessages(QUEUE_NAME,false));
          // System.out.println("Received message: " + receivedMessage);
        List<String> receivedMessage = receiver.browseMessages(QUEUE_NAME);
          System.out.println("Received message: " + receivedMessage);
        } catch (Exception e) {
            e.printStackTrace();
        }
UnLoadGlassModule/src/main/java/com/mes/service/PLCAutoMes.java
New file
@@ -0,0 +1,91 @@
package com.mes.service;
import com.mes.entity.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));
        }
    }
}
UnLoadGlassModule/src/main/java/com/mes/service/PlcService.java
New file
@@ -0,0 +1,139 @@
package com.mes.service;
import com.mes.entity.DownGlassInfo;
import com.mes.entity.DownStorageCageDetails;
import com.mes.entity.DownWorkstation;
import com.mes.entity.device.PlcParameterObject;
import com.mes.mapper.DownGlassInfoMapper;
import com.mes.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 PlcService {
    @Autowired
    private DownWorkstationMapper downWorkstationMapper;
    private DownGlassInfo downGlassInfo;
    private DownWorkstation downWorkstation;
    private DownGlassInfoMapper downGlassInfoMapper;
    private DownGlassInfoService downGlassInfoService;
    private List<DownGlassInfo> glassList; // 存放待处理的玻璃信息
    private List<DownStorageCageDetails> cageDetailsList; // 存放玻璃放置在缓存笼中的详细信息
    PlcParameterObject plcread=PLCAutoMes.PlcReadObject;
    String Robot1PLCrequestword=plcread.getPlcParameter("A01Position").getValue();// 机械手1PLC请求字
    String Robot2PLCrequestword=plcread.getPlcParameter("A01Position").getValue();// 机械手2PLC请求字
    String GlassID=plcread.getPlcParameter("A01Position").getValue();// 玻璃id
    String Glasswidth=plcread.getPlcParameter("A01Position").getValue();//玻璃宽度
    String Glassheight=plcread.getPlcParameter("A01Position").getValue();//玻璃高度
    String Glassthickness=plcread.getPlcParameter("A01Position").getValue();//厚度
    String PLCwancheng = plcread.getPlcParameter("A01Position").getValue();// plc完成字
    //当下片任务表状态为1时候将数据插入到下片玻璃信息表
    public void insertdownglassinfo() {
        downWorkstationMapper = WebSocketServer.applicationContext.getBean(DownWorkstationMapper.class);
        downGlassInfoService = WebSocketServer.applicationContext.getBean(DownGlassInfoService.class);
        downGlassInfoMapper = WebSocketServer.applicationContext.getBean(DownGlassInfoMapper.class);
        List<DownGlassInfo> taskdownGlassInf = downGlassInfoMapper.selectunloadingtaskstate();
//
        if (taskdownGlassInf != null && !taskdownGlassInf.isEmpty()) {
            for (DownGlassInfo downGlassInfo : taskdownGlassInf) {
                // 创建新的 DownGlassInfo 对象并设置相关属性
                DownGlassInfo newdownGlassInfo = new DownGlassInfo();
                newdownGlassInfo.setFlowCardId(downGlassInfo.getFlowCardId());
                Integer maxSequence = downGlassInfoMapper.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); // 设置顺序字段值
                // 插入数据到下片玻璃信息表
                downGlassInfoMapper.insert(newdownGlassInfo);
                //插入数据到机械手任务表
                downWorkstationMapper.insertdownWorkstationtask(newdownGlassInfo);
                //更新任务表状态为0
                downGlassInfoMapper.updateTaskStateToZero(downGlassInfo.getFlowCardId());
                sequence++; // 递增顺序字段值
            }
        }
    }
    //当机械手任务表中状态为1,工位表流程卡绑定了架子 更新已经落架数量,并且把下片任务表的对应记录删掉
    public void down_workstation(){
        //downWorkstationMapper = WebSocketServer.applicationContext.getBean(DownWorkstationMapper.class);
        //downGlassInfoMapper = WebSocketServer.applicationContext.getBean(DownGlassInfoMapper.class);
        try {
            List<DownWorkstation> taskdownWorkstation = downWorkstationMapper.selectdownWorkstationstate();
            if (taskdownWorkstation != null && !taskdownWorkstation.isEmpty()) {
                //查询下片工位表中是否绑定了架子是否绑定了流程卡号,如果已经绑定则更新已落架数量,并且删除下片任务表中的记录
                for (DownWorkstation downWorkstation : taskdownWorkstation) {
                    downWorkstationMapper.update_racks_number(downWorkstation.getFlowCardId(),6 );
                    downGlassInfoMapper.deletetask(downWorkstation.getFlowCardId());
                }
            }
        } catch (Exception e) {
            // 打印异常信息
            e.printStackTrace();
            // 或者可以进行其他异常处理,比如记录日志或者返回特定的错误信息
        }
    }
    //绑定流程卡号架子
    public void bindingshelf(DownWorkstation downWorkstation){
        String FlowCardId=downWorkstation.getFlowCardId();
        int WorkstationId=downWorkstation.getWorkstationId();
    }
}
UnLoadGlassModule/src/main/java/com/mes/service/Plcaction.java
@@ -1,20 +1,25 @@
package com.mes.service;
import com.mes.common.PlcTools.MockS7PLCtwo;
import com.mes.entity.DownGlassInfo;
import com.mes.mapper.DownWorkstationMapper;
import com.mes.tools.WebSocketServer;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collections;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Plcaction extends Thread {
  private static DownGlassInfoService downGlassInfoService; // 静态变量
  public static void setDownGlassInfoService(DownGlassInfoService service) {
    downGlassInfoService = service;
  }
  private List<DownGlassInfo> downGlassInfo; //
  @Autowired
  private DownWorkstationMapper downWorkstationMapper;
  private DownGlassInfo downGlassInfo; //
  private DownGlassInfoService downGlassInfoService;
  private int i =1; //
    //MockS7PLC mockS7PLC=new MockS7PLC();
  @Override
  public void run() {
    while (!Thread.currentThread().isInterrupted()) {
@@ -25,11 +30,74 @@
        Thread.currentThread().interrupt();
        e.printStackTrace();
      }
      downWorkstationMapper = WebSocketServer.applicationContext.getBean(DownWorkstationMapper.class);
      downGlassInfoService = WebSocketServer.applicationContext.getBean(DownGlassInfoService.class);
      int workstationId = 1;
      int deviceId = 2;
      int newWorkState = 9;
      downWorkstationMapper.updateWorkStateByWorkstationIdAndDeviceId(workstationId, deviceId, newWorkState);
      downGlassInfo  = downGlassInfoService.getDownGlassInfoById(1); // 设置需要查询的id
//   System.out.println("Down Glass Info in new thread: "+i + downGlassInfo);
      Boolean[] value4 = { false, true, true, true, true, true, false, false, false,
              false};
     List<Boolean> booldata2 = new ArrayList<>(Arrays.asList(value4));
       // MockS7PLCtwo.getInstance().writeBoolean("DB1.DBX0.0", false);
       // MockS7PLCtwo.getInstance().writebits("DB4.0.0",booldata2);
// 从相同的地址读取布尔值
      boolean value = MockS7PLCtwo.getInstance().readBoolean("DB1.DBX0.0");
      Short[] values1 = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1};
      Short[] values2 = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   List<Short> data = new ArrayList<>(Arrays.asList(values1));
      List<Short> data2 = new ArrayList<>(Arrays.asList(values2));
        List<String> addresses3 = new ArrayList<>();
        addresses3.add("DB1.0.0");
        addresses3.add("DB1.0.3");
        addresses3.add("DB1.0.5");
      List<String> addresses = new ArrayList<>();
      addresses.add("DB100.0");
      addresses.add("DB100.2");
      addresses.add("DB100.4");
      addresses.add("DB100.6");
      addresses.add("DB100.26");
      addresses.add("DB100.28");
      addresses.add("DB100.30");
      addresses.add("DB100.32");
      addresses.add("DB100.34");
      addresses.add("DB100.36");
      downGlassInfo  = Collections.singletonList(downGlassInfoService.getDownGlassInfoById(1)); // 设置需要查询的id
   System.out.println("Down Glass Info in new thread: "+i + downGlassInfo);
      List<String> addresses2 = new ArrayList<>();
      addresses2.add("DB101.0");
      addresses2.add("DB101.2");
      addresses2.add("DB101.4");
      addresses2.add("DB101.6");
      addresses2.add("DB101.8");
      addresses2.add("DB101.10");
      addresses2.add("DB101.12");
      addresses2.add("DB101.14");
      addresses2.add("DB101.16");
      addresses2.add("DB101.18");
//      mockPLC.writeword("DB100.2",data );
        MockS7PLCtwo.getInstance().WriteWords(addresses, data);
        MockS7PLCtwo.getInstance().WriteWords(addresses2, data2);
  //DB100.2,DB100.4,DB100.6,DB100.28,DB100.30,DB100.32,DB100.36,DB100.38,DB100.40
  List<Short> data5= MockS7PLCtwo.getInstance().readwords("DB104.0", 9);
      List<Short> data3= MockS7PLCtwo.getInstance().ReadWords(addresses);
      List<Boolean> data4= MockS7PLCtwo.getInstance().readbits("DB4.0.0",10);
        List<Boolean> data6= MockS7PLCtwo.getInstance().readBits(addresses3);
    //  System.out.println("读取的布尔值: " + value); // 应该输出 true
     // System.out.println("读取的word值: " + data3);
      System.out.println("读取的word值: " + data4);
//        System.out.println("读取的bit值: " + data4);
//        System.out.println("读取的bit值: " + data6);
     //   System.out.println("读取的word值: " + MockS7PLCtwo.getInstance().readInt16("DB5.0.0"));
    }
  }
}
UnLoadGlassModule/src/main/java/com/mes/service/Plchome.java
New file
@@ -0,0 +1,44 @@
package com.mes.service;
import com.mes.tools.WebSocketServer;
import org.springframework.stereotype.Component;
import java.util.function.Supplier;
@Component
public class Plchome extends Thread {
    private int i = 1;
    private final Supplier<PlcService> plcServiceSupplier;
    public Plchome() {
        this.plcServiceSupplier = () -> WebSocketServer.applicationContext.getBean(PlcService.class);
    }
    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            try {
                i++;
                Thread.sleep(100);
                PlcService plcService = plcServiceSupplier.get();
               // plcService.performPlcActions();
                //plcService.unloadpush();
                //当下片任务表状态为1时候将数据插入到下片玻璃信息表
                plcService.insertdownglassinfo();
                //当机械手任务表中状态为1 更新已经落架数量,并且把下片任务表的那条记录删掉 工位表流程卡绑定了架子
                plcService.down_workstation();
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                e.printStackTrace();
            }
        }
    }
}
UnLoadGlassModule/src/main/java/com/mes/service/userInfo/SysErrorService.java
@@ -7,7 +7,7 @@
import org.springframework.stereotype.Service;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class SysErrorService {
    private final SysErrorMapper sysErrorMapper;
UnLoadGlassModule/src/main/java/com/mes/service/userInfo/SysMenuItemService.java
@@ -9,7 +9,7 @@
import java.util.List;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class SysMenuItemService {
    @Autowired
    SysMenuItemMapper sysMenuItemMapper;
UnLoadGlassModule/src/main/java/com/mes/service/userInfo/SysMenuService.java
@@ -9,7 +9,7 @@
import java.util.List;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class SysMenuService {
    @Autowired
    private SysMenuMapper sysMenuMapper;
UnLoadGlassModule/src/main/java/com/mes/service/userInfo/UserService.java
@@ -2,23 +2,18 @@
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.mes.common.CacheUtil;
import com.mes.common.Result;
import com.mes.controller.dto.UserDTO;
import com.mes.entity.userInfo.User;
import com.mes.mapper.userInfo.UserMapper;
import com.mes.controller.dto.UserDTO;
import com.mes.tools.TokenTools;
import org.apache.ibatis.jdbc.Null;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@DS("user_info")
@DS("hangzhoumes")
public class UserService {
    @Autowired
UnLoadGlassModule/src/main/java/com/mes/tools/InitUtil.java
@@ -2,7 +2,6 @@
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.mes.common.PlcTools.S7control;
import com.mes.entity.device.PlcBitInfo;
import com.mes.entity.device.PlcBitObject;
import com.mes.entity.device.PlcParameterInfo;
@@ -11,6 +10,8 @@
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 {
@@ -107,18 +108,18 @@
//
    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());
        Boolean[] values1 = { false, true, true, true, false, false, true, false,
          false, true ,true };
         List<Boolean> getplcvlues = new ArrayList<>(Arrays.asList(values1));
        //List<Boolean> getplcvlues = S7control.getinstance().ReadBits(plcBitObject.getPlcAddressBegin(), plcBitObject.getPlcAddressLength());
        plcBitObject.setPlcBitList(getplcvlues);
    }
    public static void readAndUpdateWordValues(PlcParameterObject plcParameterObject) {
        // byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02};
        byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
         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);
    }
UnLoadGlassModule/src/main/resources/JsonFile/PlcAlarm.json
New file
@@ -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
    }
  ]
}
UnLoadGlassModule/src/main/resources/JsonFile/PlcMes.json
New file
@@ -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"
       }
   ]
}
UnLoadGlassModule/src/main/resources/JsonFile/PlcParameter.json
New file
@@ -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"
     }
   ]
}
UnLoadGlassModule/src/main/resources/JsonFile/PlcRead.json
New file
@@ -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"
      }
   ]
}
UnLoadGlassModule/src/main/resources/JsonFile/PlcSign.json
New file
@@ -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
    }
  ]
}
UnLoadGlassModule/src/main/resources/JsonFile/PlcState.json
New file
@@ -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": ""
    }
  ]
}
UnLoadGlassModule/src/main/resources/JsonFile/PlcTest.json
New file
@@ -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
  ]
}
UnLoadGlassModule/src/main/resources/JsonFile/Plcframe.json
New file
@@ -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"
       }
   ]
}
UnLoadGlassModule/src/main/resources/JsonFile/alarm.xlsx
Binary files differ
UnLoadGlassModule/src/main/resources/JsonFile/sign.xlsx
Binary files differ
UnLoadGlassModule/src/main/resources/JsonFile/test.xlsx
Binary files differ
UnLoadGlassModule/src/main/resources/application.yml
@@ -1,20 +1,16 @@
server:
  port: 8080
  port: 8081
  servlet:
   context-path: /mesModuleTools
spring:
  datasource:
    dynamic:
      primary: user_info #设置默认的数据源或者数据源组,默认值即为master
      primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        user_info:
          url: jdbc:mysql://10.153.19.150:3306/erp_user_info?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        hangzhoumes:
            url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
            username: root
UnLoadGlassModule/target/classes/JsonFile/PlcAlarm.json
New file
@@ -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
    }
  ]
}
UnLoadGlassModule/target/classes/JsonFile/PlcMes.json
New file
@@ -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"
       }
   ]
}
UnLoadGlassModule/target/classes/JsonFile/PlcParameter.json
New file
@@ -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"
     }
   ]
}
UnLoadGlassModule/target/classes/JsonFile/PlcRead.json
New file
@@ -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"
      }
   ]
}
UnLoadGlassModule/target/classes/JsonFile/PlcSign.json
New file
@@ -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
    }
  ]
}
UnLoadGlassModule/target/classes/JsonFile/PlcState.json
New file
@@ -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": ""
    }
  ]
}
UnLoadGlassModule/target/classes/JsonFile/PlcTest.json
New file
@@ -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
  ]
}
UnLoadGlassModule/target/classes/JsonFile/Plcframe.json
New file
@@ -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"
       }
   ]
}
UnLoadGlassModule/target/classes/JsonFile/alarm.xlsx
Binary files differ
UnLoadGlassModule/target/classes/JsonFile/sign.xlsx
Binary files differ
UnLoadGlassModule/target/classes/JsonFile/test.xlsx
Binary files differ
UnLoadGlassModule/target/classes/application.yml
@@ -1,20 +1,16 @@
server:
  port: 8080
  port: 8081
  servlet:
   context-path: /mesModuleTools
spring:
  datasource:
    dynamic:
      primary: user_info #设置默认的数据源或者数据源组,默认值即为master
      primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        user_info:
          url: jdbc:mysql://10.153.19.150:3306/erp_user_info?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        hangzhoumes:
            url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
            username: root
pom.xml
New file
@@ -0,0 +1,12 @@
<?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>groupId</groupId>
    <artifactId>HangZhouMes</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>