Browse Source

金银花搭建

zhangxin 1 year ago
parent
commit
925ea4061d
81 changed files with 2390 additions and 4322 deletions
  1. 0 0
      base_sql/pallet_sql/jinyinhua_ddl_20231025.sql
  2. 855 0
      base_sql/pallet_sql/jinyinhua_dml_20231025.sql
  3. 0 4
      base_sql/pallet_sql/yonghu_ddl_20230921.sql
  4. 0 21
      base_sql/pallet_sql/yonghu_dml_20230921.sql
  5. 21 77
      ruoyi-admin/pom.xml
  6. 33 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/CarInfoController.java
  7. 0 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/LocationViewSafeController.java
  8. 39 65
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/WcsTaskController.java
  9. 1 140
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java
  10. 3 6
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdawcsTaskController.java
  11. 0 52
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/test/GuangShanTestController.java
  12. 0 36
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/test/WcsTaskResponseController.java
  13. 7 81
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/wcs/WcsController.java
  14. 15 16
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/wms/asn/WmsDocAsnHeaderController.java
  15. 16 17
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/wms/order/WmsDocOrderHeaderController.java
  16. 0 35
      ruoyi-admin/src/main/java/com/ruoyi/web/test/Test.java
  17. 1 1
      ruoyi-admin/src/main/resources/application-dev.yml
  18. 10 9
      ruoyi-admin/src/main/resources/application-prod.yml
  19. 1 1
      ruoyi-admin/src/main/resources/application.yml
  20. 1 1
      ruoyi-admin/src/main/resources/logback.xml
  21. 0 452
      ruoyi-admin/src/test/java/com/ruoyi/admin/test/base/impl/WarehouseTest.java
  22. 8 3
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
  23. 119 0
      ruoyi-common/src/main/java/com/ruoyi/common/enums/AutoDoorEnum.java
  24. 85 0
      ruoyi-common/src/main/java/com/ruoyi/common/enums/ButtonBoxEnum.java
  25. 263 0
      ruoyi-common/src/main/java/com/ruoyi/common/enums/ChargingMachineEnum.java
  26. 4 3
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
  27. 59 0
      warewms-ams/src/main/java/com/ruoyi/ams/agv/car/domain/CarInfo.java
  28. 24 0
      warewms-ams/src/main/java/com/ruoyi/ams/agv/car/dto/CarInfoDTO.java
  29. 19 0
      warewms-ams/src/main/java/com/ruoyi/ams/agv/car/mapper/CarInfoMapper.java
  30. 17 0
      warewms-ams/src/main/java/com/ruoyi/ams/agv/car/service/ICarInfoService.java
  31. 39 0
      warewms-ams/src/main/java/com/ruoyi/ams/agv/car/service/impl/CarInfoServiceImpl.java
  32. 11 0
      warewms-ams/src/main/java/com/ruoyi/ams/agv/car/vo/CarInfoVO.java
  33. 3 6
      warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/AciService.java
  34. 0 3
      warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/common/Aci.java
  35. 30 43
      warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/service/impl/StatusUpdateServiceImpl.java
  36. 13 37
      warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnHeaderServiceImpl.java
  37. 32 135
      warewms-ams/src/main/java/com/ruoyi/ams/business/BusinessServiceImpl.java
  38. 1 2
      warewms-ams/src/main/java/com/ruoyi/ams/erp/service/impl/SyncServiceImpl.java
  39. 5 11
      warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/ActTransactionLogServiceImpl.java
  40. 6 43
      warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotLocIdServiceImpl.java
  41. 0 174
      warewms-ams/src/main/java/com/ruoyi/ams/order/service/IWmsDocOrderHeaderService.java
  42. 8 30
      warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/ActAllocationDetailsServiceImpl.java
  43. 1 1
      warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/UpdateOrderStockingProcessImpl.java
  44. 27 1666
      warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java
  45. 10 3
      warewms-ams/src/main/java/com/ruoyi/ams/task/domain/WcsTask.java
  46. 38 0
      warewms-ams/src/main/java/com/ruoyi/ams/task/dto/WcsTaskCallBackDTO.java
  47. 20 0
      warewms-ams/src/main/java/com/ruoyi/ams/task/dto/WcsTaskCancelDTO.java
  48. 28 0
      warewms-ams/src/main/java/com/ruoyi/ams/task/dto/WcsTaskInfoDTO.java
  49. 51 0
      warewms-ams/src/main/java/com/ruoyi/ams/task/dto/WcsTaskInsertDTO.java
  50. 29 0
      warewms-ams/src/main/java/com/ruoyi/ams/task/dto/WcsTaskStateFeedbackDTO.java
  51. 0 21
      warewms-ams/src/main/java/com/ruoyi/ams/task/form/AddTaskForm.java
  52. 4 2
      warewms-ams/src/main/java/com/ruoyi/ams/task/mapper/WcsTaskMapper.java
  53. 13 6
      warewms-ams/src/main/java/com/ruoyi/ams/task/service/IWcsTaskService.java
  54. 0 22
      warewms-ams/src/main/java/com/ruoyi/ams/task/service/TaskDispatchService.java
  55. 104 118
      warewms-ams/src/main/java/com/ruoyi/ams/task/service/impl/WcsTaskServiceImpl.java
  56. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/form/BtnOpForm.java
  57. 14 0
      warewms-ams/src/main/java/com/ruoyi/ams/wcs/service/IWcsService.java
  58. 104 0
      warewms-ams/src/main/java/com/ruoyi/ams/wcs/service/impl/WcsServiceImpl.java
  59. 52 0
      warewms-ams/src/main/resources/mapper/ams/CarInfoMapper.xml
  60. 4 4
      warewms-base/src/main/java/com/ruoyi/base/constant/Constant.java
  61. 4 2
      warewms-base/src/main/java/com/ruoyi/base/mapper/BaseCustomerMapper.java
  62. 6 2
      warewms-base/src/main/java/com/ruoyi/base/mapper/BaseIdsequenceMapper.java
  63. 2 0
      warewms-base/src/main/java/com/ruoyi/base/mapper/BaseLocationInfoMapper.java
  64. 4 2
      warewms-base/src/main/java/com/ruoyi/base/mapper/BaseLocationZoneMapper.java
  65. 4 2
      warewms-base/src/main/java/com/ruoyi/base/mapper/BaseSkuMapper.java
  66. 4 3
      warewms-base/src/main/java/com/ruoyi/base/mapper/BaseSkuTypeMapper.java
  67. 4 2
      warewms-base/src/main/java/com/ruoyi/base/mapper/BaseSupplierMapper.java
  68. 4 2
      warewms-base/src/main/java/com/ruoyi/base/mapper/BaseWarehouseMapper.java
  69. 2 1
      warewms-base/src/main/java/com/ruoyi/base/mapper/CodeSkuRelationshipMapper.java
  70. 2 8
      warewms-base/src/main/java/com/ruoyi/base/service/IBaseIdsequenceService.java
  71. 5 32
      warewms-base/src/main/java/com/ruoyi/base/service/impl/BaseIdsequenceServiceImpl.java
  72. 1 5
      warewms-base/src/main/java/com/ruoyi/base/service/impl/BaseLocationInfoServiceImpl.java
  73. 36 50
      warewms-base/src/main/java/com/ruoyi/base/service/impl/CodeSkuRelationshipServiceImpl.java
  74. 0 185
      warewms-base/src/main/java/com/ruoyi/base/utils/CommonUtils.java
  75. 0 64
      warewms-base/src/main/java/com/ruoyi/base/utils/IdSequenceUtils.java
  76. 1 1
      warewms-base/src/main/resources/mapper/base/CodeSkuRelationshipMapper.xml
  77. 22 158
      warewms-hard/src/main/java/com/ruoyi/hard/modbus/tcp/AutoDoorClient.java
  78. 12 95
      warewms-hard/src/main/java/com/ruoyi/hard/modbus/tcp/ButtonBoxClient.java
  79. 22 289
      warewms-hard/src/main/java/com/ruoyi/hard/modbus/tcp/ChargingMachineClient.java
  80. 3 5
      warewms-hard/src/main/java/com/ruoyi/hard/modbus/tcp/WarningLightClient.java
  81. 3 65
      warewms-hard/src/main/java/com/ruoyi/hard/rfid/RFIDReaderClient.java

+ 0 - 0
base_sql/pallet_sql/jinyinhua_ddl_20231025.sql


+ 855 - 0
base_sql/pallet_sql/jinyinhua_dml_20231025.sql

@@ -0,0 +1,855 @@
+CREATE TABLE if not exists `pallet_match_log`
+(
+    `id`          varchar(255) NOT NULL COMMENT 'id',
+    `pallet_no`   varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '托盘',
+    `sku`         varchar(255)                                                  DEFAULT NULL COMMENT '物料/产品',
+    `total_qty`   varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '数量',
+    `order_nos`   varchar(2000)                                                 DEFAULT NULL COMMENT '所扫描出库单(多出库单以,隔开)',
+    `location_id` varchar(255)                                                  DEFAULT NULL COMMENT '库位id',
+    `agv_no`      varchar(255)                                                  DEFAULT NULL COMMENT 'agv车号',
+    `remark`      varchar(255)                                                  DEFAULT NULL COMMENT '备注',
+    `userdefine1` varchar(255)                                                  DEFAULT NULL,
+    `userdefine2` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci       DEFAULT NULL,
+    `userdefine3` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci       DEFAULT NULL,
+    `userdefine4` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci       DEFAULT NULL,
+    `userdefine5` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci       DEFAULT NULL,
+    `create_by`   varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  DEFAULT '' COMMENT '创建者',
+    `create_time` datetime                                                      DEFAULT NULL COMMENT '创建时间',
+    `update_by`   varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  DEFAULT '' COMMENT '更新者',
+    `update_time` datetime                                                      DEFAULT NULL COMMENT '更新时间',
+    PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='托盘匹配记录';
+
+CREATE TABLE if not exists `wms_doc_asn_details` (
+    `asn_line_no` int(11) NOT NULL COMMENT '行号',
+    `asn_no` varchar(50) NOT NULL COMMENT '入库单号',
+    `sku` varchar(255) NOT NULL COMMENT '产品',
+    `expected_qty` decimal(18,8) DEFAULT NULL COMMENT '预期件数',
+    `expected_qty_each` decimal(18,8) DEFAULT NULL COMMENT '预期数量_EA',
+    `received_qty` decimal(18,8) DEFAULT NULL COMMENT '收货件数',
+    `received_qty_each` decimal(18,8) DEFAULT NULL COMMENT '收货数量',
+    `line_status` varchar(10) DEFAULT NULL COMMENT '行状态(00新建,10上架)',
+    `hold_rejectreason` varchar(255) DEFAULT NULL COMMENT '冻结原因',
+    `notes` varchar(500) DEFAULT NULL COMMENT '备注',
+    `pack_id` varchar(50) DEFAULT NULL COMMENT '包装',
+    `location_zone` varchar(255) DEFAULT NULL COMMENT '指定库区',
+    `lotatt01` varchar(255) DEFAULT NULL COMMENT '批号',
+    `lotatt02` varchar(255) DEFAULT NULL COMMENT '版本号',
+    `lotatt03` varchar(255) DEFAULT NULL COMMENT '生产日期',
+    `lotatt04` varchar(255) DEFAULT NULL COMMENT '有效期',
+    `lotatt05` varchar(255) DEFAULT NULL COMMENT '入库单号',
+    `lotatt06` varchar(255) DEFAULT NULL COMMENT 'poNo',
+    `lotatt07` varchar(255) DEFAULT NULL COMMENT '质量状态',
+    `lotatt08` varchar(255) DEFAULT NULL COMMENT '供应商',
+    `lotatt09` varchar(255) DEFAULT NULL,
+    `lotatt10` varchar(255) DEFAULT NULL COMMENT '检验日期',
+    `lotatt11` varchar(255) DEFAULT NULL,
+    `lotatt12` varchar(255) DEFAULT NULL,
+    `lotatt13` varchar(255) DEFAULT NULL,
+    `lotatt14` varchar(255) DEFAULT NULL,
+    `lotatt15` varchar(255) DEFAULT NULL,
+    `lotatt16` varchar(255) DEFAULT NULL,
+    `lotatt17` varchar(255) DEFAULT NULL,
+    `lotatt18` varchar(255) DEFAULT NULL,
+    `create_by` varchar(50) DEFAULT NULL,
+    `create_time` datetime DEFAULT NULL,
+    `update_by` varchar(50) DEFAULT NULL,
+    `update_time` datetime DEFAULT NULL,
+    `location_id` int(11) DEFAULT NULL COMMENT '指定库位',
+    `document_id` varchar(50) DEFAULT NULL COMMENT 'sap_doucment_id',
+    `d_edi_01` varchar(255) DEFAULT NULL COMMENT '归还人',
+    `d_edi_02` varchar(255) DEFAULT NULL,
+    `d_edi_03` varchar(255) DEFAULT NULL,
+    `d_edi_04` varchar(255) DEFAULT NULL,
+    `d_edi_05` varchar(255) DEFAULT NULL,
+    `d_edi_06` varchar(255) DEFAULT NULL,
+    `d_edi_07` varchar(255) DEFAULT NULL,
+    `d_edi_08` varchar(255) DEFAULT NULL,
+    `d_edi_09` varchar(255) DEFAULT NULL,
+    `d_edi_10` varchar(255) DEFAULT NULL,
+    `d_edi_11` varchar(255) DEFAULT NULL,
+    `d_edi_12` varchar(255) DEFAULT NULL,
+    `d_edi_13` varchar(255) DEFAULT NULL,
+    `d_edi_14` varchar(255) DEFAULT NULL,
+    `d_edi_15` varchar(255) DEFAULT NULL,
+    PRIMARY KEY (`asn_line_no`,`asn_no`) USING BTREE,
+    KEY `index_docd_asnno1` (`asn_no`,`asn_line_no`) USING BTREE
+    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单表体';
+
+CREATE TABLE if not exists `wms_doc_asn_header` (
+    `asn_no` varchar(50) NOT NULL COMMENT '入库单号',
+    `asn_type` varchar(10) DEFAULT NULL COMMENT '入库类型',
+    `asn_status` varchar(10) DEFAULT NULL COMMENT '单据状态',
+    `customer_id` varchar(50) DEFAULT NULL COMMENT '货主代码',
+    `customer_no` varchar(50) DEFAULT NULL COMMENT '客户单号',
+    `asn_reference1` varchar(50) DEFAULT NULL COMMENT '采购单号',
+    `asn_reference2` varchar(50) DEFAULT NULL COMMENT 'asn参考信息',
+    `release_status` varchar(10) DEFAULT NULL COMMENT '释放状态',
+    `expected_arrive_time` datetime DEFAULT NULL COMMENT '预期到货时间',
+    `pa_no` varchar(50) DEFAULT NULL COMMENT '上架单号',
+    `qc_no` varchar(50) DEFAULT NULL COMMENT '验收单号',
+    `notes` varchar(500) DEFAULT NULL COMMENT '备注',
+    `supplier_id` varchar(50) DEFAULT NULL COMMENT '供应商代码',
+    `userdefine1` varchar(255) DEFAULT NULL COMMENT '车间号',
+    `userdefine2` varchar(2000) DEFAULT NULL COMMENT '第三方系统入库信息JSON数据',
+    `userdefine3` varchar(255) DEFAULT NULL,
+    `userdefine4` varchar(255) DEFAULT NULL,
+    `userdefine5` varchar(255) DEFAULT NULL,
+    `create_by` varchar(50) NOT NULL,
+    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    `update_by` varchar(50) DEFAULT NULL,
+    `update_time` datetime DEFAULT NULL,
+    `active_flag` varchar(1) DEFAULT 'Y' COMMENT '是否有效(N删除Y有效)',
+    `h_edi_01` varchar(255) DEFAULT NULL,
+    `h_edi_02` varchar(255) DEFAULT NULL,
+    `h_edi_03` varchar(255) DEFAULT NULL,
+    `h_edi_04` varchar(255) DEFAULT NULL,
+    `h_edi_05` varchar(255) DEFAULT NULL,
+    `h_edi_06` varchar(255) DEFAULT NULL,
+    `h_edi_07` varchar(255) DEFAULT NULL,
+    `h_edi_08` varchar(255) DEFAULT NULL,
+    `h_edi_09` varchar(255) DEFAULT NULL,
+    `h_edi_10` varchar(255) DEFAULT NULL,
+    `h_edi_11` varchar(255) DEFAULT NULL,
+    `h_edi_12` varchar(255) DEFAULT NULL,
+    `h_edi_13` varchar(255) DEFAULT NULL,
+    `h_edi_14` varchar(255) DEFAULT NULL,
+    `h_edi_15` varchar(255) DEFAULT NULL,
+    `edi_send_flag` varchar(2) DEFAULT NULL COMMENT '上游回传标记',
+    PRIMARY KEY (`asn_no`) USING BTREE,
+    KEY `index_dah_asnno` (`asn_no`) USING BTREE,
+    KEY ```asn_reference1``` (`asn_reference1`) USING BTREE
+    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单表头';
+
+CREATE TABLE if not exists `act_allocation_details`  (
+    `allocation_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+    `order_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '订单号',
+    `line_no` int(11) NOT NULL COMMENT '行号',
+    `material` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '物料',
+    `location_id` int(11) NULL DEFAULT NULL COMMENT '待检库位',
+    `call_transaction_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '叫料待检事务id',
+    `status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '状态',
+    `lotnum` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '批次号',
+    `qty` decimal(18, 3) NULL DEFAULT NULL COMMENT '分配数量',
+    `pick_transaction_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拣货事务id',
+    `pick_to_location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拣货库位',
+    `pick_qty` decimal(18, 3) NULL DEFAULT NULL COMMENT '拣货数量',
+    `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `create_time` datetime NULL DEFAULT NULL,
+    `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `update_time` datetime NULL DEFAULT NULL,
+    `userdefine1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    PRIMARY KEY (`allocation_id`) USING BTREE
+    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '分配明细' ROW_FORMAT = COMPACT;
+
+
+CREATE TABLE if not exists `act_transaction_log`  (
+    `transaction_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '事务id',
+    `transaction_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '事务类型',
+    `transaction_status` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '事务执行状态',
+    `doc_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单证号',
+    `doc_line_no` int(11) NULL DEFAULT NULL COMMENT '单证行号',
+    `doc_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单证类型',
+    `fm_customer_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'From客户',
+    `fm_sku` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'From产品',
+    `fm_lotnum` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'From 批次号',
+    `fm_location` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'From 库位',
+    `fm_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'From 跟踪号',
+    `fm_packid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'From 包装ID',
+    `fm_uom` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'From 单位',
+    `fm_qty` decimal(18, 8) NULL DEFAULT NULL COMMENT 'From 件数',
+    `fm_qty_each` decimal(18, 8) NULL DEFAULT NULL COMMENT 'From 数量',
+    `to_customer_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'To 客户',
+    `to_sku` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'To 产品',
+    `to_lotnum` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'To 批次号',
+    `to_localtion` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'To 库位',
+    `to_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'To 跟踪号',
+    `to_packid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'To 包装ID',
+    `to_uom` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'To 单位',
+    `to_qty` decimal(18, 8) NULL DEFAULT NULL COMMENT 'To 件数',
+    `to_qty_each` decimal(18, 8) NULL DEFAULT NULL COMMENT 'To 数量',
+    `warehouse_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '仓库id',
+    `create_date` datetime(6) NOT NULL COMMENT '创建时间',
+    `create_user_id` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人',
+    `edit_date` datetime(6) NULL DEFAULT NULL COMMENT '编辑时间',
+    `edit_user_id` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '编辑人',
+    `total_netweight` decimal(18, 8) NULL DEFAULT NULL COMMENT '总净重',
+    `total_grossweight` decimal(18, 8) NULL DEFAULT NULL COMMENT '总毛重',
+    `total_cubic` decimal(18, 8) NULL DEFAULT NULL COMMENT '总体积',
+    `transaction_time` datetime(6) NULL DEFAULT NULL COMMENT '事务时间',
+    `reason_code` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作原因编码(bas_codes)',
+    `reason` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作原因',
+    `userdefine1` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段1',
+    `userdefine2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段2',
+    `userdefine3` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段3',
+    `userdefine4` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段4',
+    `userdefine5` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段5',
+    PRIMARY KEY (`transaction_id`) USING BTREE,
+    INDEX `IDX_TRANSACTION_3`(`transaction_type`, `transaction_time`, `fm_customer_id`, `fm_sku`, `transaction_status`) USING BTREE,
+    INDEX `IDX_TRANSACTION_6`(`doc_no`, `transaction_type`) USING BTREE,
+    INDEX `IDX_TRANSACTION_BYFMCUSTOMERID`(`fm_customer_id`, `fm_sku`) USING BTREE,
+    INDEX `IDX_TRANSACTION_BYTRANSA`(`transaction_time`, `fm_customer_id`, `fm_sku`) USING BTREE,
+    INDEX `IDX_TRANSACTION_OPTIMIZE`(`transaction_time`, `fm_customer_id`, `doc_no`, `doc_line_no`) USING BTREE,
+    INDEX `IDX_TRANSACTION_TIME`(`transaction_time`, `transaction_type`, `transaction_status`) USING BTREE,
+    INDEX `IDX_TRANSACTION_TYPE`(`transaction_type`, `transaction_time`, `fm_customer_id`, `fm_sku`, `to_lotnum`) USING BTREE,
+    INDEX `IDX_TRANSACTION_TYP_STA`(`transaction_type`, `transaction_status`) USING BTREE,
+    INDEX `I_ACT_TRANSACTION_LOG_6`(`transaction_type`, `doc_type`, `edit_date`, `transaction_status`) USING BTREE,
+    INDEX `I_ACT_TRANSACTION_LOG_C`(`doc_no`, `doc_line_no`) USING BTREE,
+    INDEX `I_ACT_TRANSACTION_LOG_D`(`to_customer_id`, `to_sku`) USING BTREE,
+    INDEX `XIE3ACT_TRANSACTION_LOG`(`doc_no`, `doc_type`, `transaction_type`) USING BTREE,
+    INDEX `XIE6ACT_TRANSACTION_LOG`(`fm_lotnum`, `fm_location`, `fm_id`) USING BTREE,
+    INDEX `XIE7ACT_TRANSACTION_LOG`(`to_lotnum`, `to_localtion`, `to_id`) USING BTREE
+    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '库存事务表' ROW_FORMAT = COMPACT;
+
+
+CREATE TABLE if not exists `ams_hexdefine_detail`  (
+    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `business_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '任务类型',
+    `col_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '字段',
+    `col_type` int(11) NULL DEFAULT NULL COMMENT '1值2绑定字段',
+    `bind_table` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '绑定表',
+    `col_val` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'col_type1为值否则为bind_table指定表字段',
+    `val_type` int(11) NOT NULL DEFAULT 1 COMMENT '1字符串2数字',
+    `sort_index` int(11) NOT NULL DEFAULT 1 COMMENT '字段排序',
+    PRIMARY KEY (`id`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 227 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '任务定义表(lp0-lp30)' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `ams_hexdefine_header`  (
+    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `task_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '任务名称',
+    `business_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '任务类型',
+    `create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    PRIMARY KEY (`id`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '16进制指令定义表' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `ams_ndc_event`  (
+    `id` int(11) NOT NULL AUTO_INCREMENT,
+    `type` int(11) NULL DEFAULT NULL,
+    `eCode` int(11) NULL DEFAULT NULL,
+    `locationIndex` int(11) NULL DEFAULT NULL,
+    `lp1` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lp2` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lp3` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lp4` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `display` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `displayID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `level` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    PRIMARY KEY (`id`) USING BTREE,
+    INDEX `id`(`id`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 140 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'Ndc反馈事件代码字典表' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `ams_task`  (
+    `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+    `task_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `iKey` int(11) NULL DEFAULT NULL,
+    `aci_index` tinyint(3) UNSIGNED NULL DEFAULT NULL,
+    `st_from` int(10) UNSIGNED NOT NULL,
+    `st_to` int(10) UNSIGNED NOT NULL,
+    `priority` int(10) UNSIGNED NOT NULL DEFAULT 0,
+    `system_status` int(10) UNSIGNED NULL DEFAULT NULL,
+    `event` int(10) UNSIGNED NULL DEFAULT NULL,
+    `server_ack` tinyint(3) UNSIGNED NULL DEFAULT 0,
+    `aci_accept` tinyint(3) UNSIGNED NULL DEFAULT 0,
+    `is_delete` tinyint(3) UNSIGNED NULL DEFAULT 0,
+    `callBackUrl` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `addtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    `addwho` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `sys_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '调用系统名称',
+    `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '设备名称',
+    `business_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '任务类型(01普通任务60进判断位90出判断位m释放判断位)',
+    `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `ext2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `ext3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `height_level` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '1(低) 2(中) 3(高)',
+    `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `roadway` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '巷道',
+    `tier` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '层',
+    PRIMARY KEY (`id`) USING BTREE,
+    INDEX `id`(`id`) USING BTREE,
+    INDEX `task_no`(`task_no`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 2503 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `asn_so_strategy`  (
+    `id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+    `asn_same_sku` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '同物料编码靠近',
+    `asn_same_sku_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '同物料种类靠近',
+    `asn_same_lotatt1_flag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '同批次属性靠近1',
+    `asn_same_lotatt1_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '同批次属性靠近1值',
+    `asn_same_lotatt2_flag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '同批次属性靠近2',
+    `asn_same_lotatt2_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '同批次属性靠近2值',
+    `asn_height_limit` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '入库限高',
+    `asn_weight_limit` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '入库限重',
+    `asn_location_average` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '入库库位(平均分散)平铺',
+    `so_period_flag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '近效期优先',
+    `so_same_lotatt1_flag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '同属性优先',
+    `so_same_lotatt1_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '同属性优先值',
+    `so_outer_flag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '外围优先',
+    `so_location_average` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '取货(平均分散)平铺',
+    `so_period_lotatt` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '近效期批次属性',
+    PRIMARY KEY (`id`) USING BTREE
+    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '出入库策略' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `base_customer`  (
+    `customer_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `customer_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '名称',
+    `status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '状态',
+    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    `userdefine1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段1',
+    `userdefine2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段2',
+    `userdefine3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段3',
+    `userdefine4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段4',
+    `userdefine5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段5',
+    PRIMARY KEY (`customer_id`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '客户' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `base_location_info`  (
+    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `warehouse_id` int(11) NULL DEFAULT NULL COMMENT '车间id',
+    `zone_id` int(11) NULL DEFAULT NULL COMMENT '区域id',
+    `location_no` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '库位编码',
+    `location_barcode` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '条形码',
+    `row_no` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排号',
+    `row_index` int(11) NULL DEFAULT NULL COMMENT '排序号',
+    `col_no` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '列号',
+    `col_index` int(11) NULL DEFAULT NULL COMMENT '列序号',
+    `shift_no` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '层号',
+    `shift_index` int(11) NULL DEFAULT NULL COMMENT '层序号',
+    `stock_status` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '储位状态(00)空闲,(10)占用,(20)完成,(90)合格,(99)不合格(80封存)',
+    `is_empty` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '是否为空(Y空/N非空)',
+    `bind_sku` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '指定产品',
+    `location_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '储位类型(1货架2地堆3流离货架)',
+    `rack_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '盘架编号',
+    `agv_station` int(11) NULL DEFAULT NULL COMMENT 'AGV点位',
+    `folded_tag` int(11) NULL DEFAULT 0 COMMENT '是否堆叠',
+    `folded_count` int(11) NULL DEFAULT 0 COMMENT '叠空托盘上限(当folded_tag为1时有效)',
+    `height_limit` double(12, 0) NULL DEFAULT 0 COMMENT '限高',
+    `weight_limit` double(12, 0) NULL DEFAULT 0 COMMENT '限重',
+    `userdefine1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine6` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine7` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine8` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine9` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine10` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    PRIMARY KEY (`id`) USING BTREE,
+    INDEX `location_index_1`(`zone_id`) USING BTREE,
+    INDEX `location_index_2`(`bind_sku`) USING BTREE,
+    INDEX `location_index_3`(`location_type`) USING BTREE,
+    INDEX `location_index_4`(`is_empty`) USING BTREE,
+    INDEX `location_index_5`(`agv_station`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 99999 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '库位信息' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `base_location_zone`  (
+    `zone_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '库区ID',
+    `zone_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '库区名称',
+    `warehouse_id` int(11) NULL DEFAULT NULL COMMENT '所属仓库',
+    `status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '状态(0正常 1停用)',
+    `userdefine1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段1',
+    `userdefine2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段2',
+    `userdefine3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段3',
+    `userdefine4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段4',
+    `userdefine5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段5',
+    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    PRIMARY KEY (`zone_id`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 9999 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '库区' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `base_package`  (
+    `pack_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '包装代码',
+    `desc1` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述1',
+    `pack_uom` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '包装单位',
+    `qty` decimal(18, 8) NULL DEFAULT NULL COMMENT '数量',
+    `desc2` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述2',
+    `cartonize_uom` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '装箱单位',
+    `length` double(10, 6) NULL DEFAULT NULL COMMENT '长',
+    `width` double(10, 6) NULL DEFAULT NULL COMMENT '宽',
+    `height` double(10, 6) NULL DEFAULT NULL COMMENT '高',
+    `cube` double(10, 6) NULL DEFAULT NULL COMMENT '体积',
+    `weight` double(10, 6) NULL DEFAULT NULL COMMENT '重量',
+    `palletwood_length` double(10, 6) NULL DEFAULT NULL COMMENT '托盘长度',
+    `palletwood_width` double(10, 6) NULL DEFAULT NULL COMMENT '托盘宽度',
+    `palletwood_height` double(10, 6) NULL DEFAULT NULL COMMENT '托盘高度',
+    `userdefine1` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine2` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine3` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine4` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine5` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    PRIMARY KEY (`pack_id`) USING BTREE
+    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '包装规格' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `base_sku`  (
+    `customer_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '货主编号',
+    `sku` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '产品编号',
+    `sku_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '产品类型',
+    `specs` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '规格',
+    `model` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '型号',
+    `status` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '有效否',
+    `desc1` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述1',
+    `desc2` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述2',
+    `self_code1` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '自赋码1',
+    `self_code2` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '自赋码2',
+    `hazard_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N' COMMENT '是否危险品',
+    `pack_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '包装',
+    `tare` decimal(18, 8) NULL DEFAULT NULL COMMENT '皮重',
+    `grossweight` decimal(18, 8) NULL DEFAULT NULL COMMENT '毛重',
+    `netweight` decimal(18, 8) NULL DEFAULT NULL COMMENT '净重',
+    `active_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Y' COMMENT '是否激活',
+    `putaway_location` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '上架库位',
+    `putaway_zone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '上架区域',
+    `putaway_rule` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '上架规则',
+    `sku_high` decimal(18, 8) NULL DEFAULT NULL COMMENT '高',
+    `sku_length` decimal(18, 8) NULL DEFAULT NULL COMMENT '长',
+    `sku_width` decimal(18, 8) NULL DEFAULT NULL COMMENT '宽',
+    `qtymax` decimal(18, 8) NULL DEFAULT NULL COMMENT '库存上限',
+    `qtymin` decimal(18, 8) NULL DEFAULT NULL COMMENT '库存下限',
+    `default_receiving_uom` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '默认收货单位',
+    `default_shipment_uom` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '默认发货单位',
+    `qc_rule` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '质检规则',
+    `qc_time` double(4, 1) NULL DEFAULT NULL COMMENT '质检周期',
+    `shelflife` int(11) NULL DEFAULT NULL COMMENT '有效期(天)',
+    `cold_flag` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '冷链标志',
+    `sterilization_flag` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '灭菌标志',
+    `curing_cycle` double(4, 1) NULL DEFAULT NULL COMMENT '养护周期(天)',
+    `manufacturer` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生产企业',
+    `userdefine1` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine2` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine3` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine4` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine5` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine6` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine7` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine8` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine9` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `userdefine10` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `expiration_date_check` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '是否检测效期',
+    `overcharge_check` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '是否允许超收',
+    `qc_check` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '是否需要质检',
+    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    PRIMARY KEY (`customer_id`, `sku`) USING BTREE,
+    INDEX `base_sku_index1`(`customer_id`, `sku`) USING BTREE,
+    INDEX `base_sku_index2`(`sku_type`) USING BTREE,
+    INDEX `base_sku_index3`(`pack_id`) USING BTREE
+    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '物料信息' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `base_sku_type`  (
+    `item_code` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `item_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '分类名称',
+    `parent_code` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '父id',
+    `status` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '启用状态',
+    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    PRIMARY KEY (`item_code`) USING BTREE,
+    INDEX `remark`(`remark`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '物料分类' ROW_FORMAT = DYNAMIC;
+
+
+CREATE TABLE if not exists `base_supplier`  (
+    `supplier_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `supplier_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '名称',
+    `status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '状态',
+    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    `userdefine1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段1',
+    `userdefine2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段2',
+    `userdefine3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段3',
+    `userdefine4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段4',
+    `userdefine5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段5',
+    PRIMARY KEY (`supplier_id`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '供应商' ROW_FORMAT = DYNAMIC;
+
+
+CREATE TABLE if not exists `base_warehouse`  (
+    `warehouse_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '仓库主键',
+    `warehouse_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '仓库名称',
+    `status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '状态(0正常 1停用)',
+    `userdefine1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段1',
+    `userdefine2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段2',
+    `userdefine3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段3',
+    `userdefine4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段4',
+    `userdefine5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '自定义字段5',
+    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    PRIMARY KEY (`warehouse_id`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '仓库信息' ROW_FORMAT = DYNAMIC;
+
+
+CREATE TABLE if not exists `code_sku_relationship`  (
+    `id` int(11) NOT NULL AUTO_INCREMENT,
+    `sn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '条码',
+    `status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '有效否',
+    `sku` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `vdate` datetime NULL DEFAULT NULL,
+    `user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `create_time` datetime NULL DEFAULT NULL,
+    `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `update_time` datetime NULL DEFAULT NULL,
+    PRIMARY KEY (`id`) USING BTREE,
+    INDEX `sn`(`sn`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 129128 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+
+
+CREATE TABLE if not exists `erp_barcodes`  (
+    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
+    `barcode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '条码号',
+    `stock_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '仓库id',
+    `location_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '货架编号',
+    `box_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '栈板号',
+    `lotnum` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '批次',
+    `qty` decimal(18, 8) NULL DEFAULT NULL COMMENT '数量',
+    `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '入库/出库',
+    `erp_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'erp单号',
+    `erp_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '项次',
+    `erp_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'erp单据类型',
+    `create_time` datetime(6) NOT NULL,
+    `create_by` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `update_time` datetime(6) NULL DEFAULT NULL,
+    `update_by` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine1` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段1',
+    `userdefine2` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段2',
+    `userdefine3` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段3',
+    `userdefine4` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段4',
+    `userdefine5` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段5',
+    `userdefine6` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段3',
+    `userdefine7` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段4',
+    `userdefine8` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段5',
+    PRIMARY KEY (`id`) USING BTREE,
+    INDEX `u8`(`userdefine8`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 12279 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+
+CREATE TABLE if not exists `inv_lot_att`  (
+    `lotnum` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键',
+    `customer_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '货主代码',
+    `sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '物料编码',
+    `lotatt01` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt02` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt03` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt04` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt05` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt06` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt07` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt08` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt09` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt10` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt11` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt12` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt13` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt14` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt15` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt16` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt17` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `lotatt18` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    PRIMARY KEY (`lotnum`) USING BTREE
+    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '批次属性' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `inv_lot_loc_id`  (
+    `lotnum` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '批次号',
+    `location_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '库位',
+    `traceid` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '跟踪号',
+    `customer_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '客户',
+    `sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '产品',
+    `qty` decimal(18, 8) NULL DEFAULT NULL COMMENT '数量',
+    `qty_each` decimal(18, 8) NULL DEFAULT NULL,
+    `qtyallocated` decimal(18, 8) NULL DEFAULT NULL COMMENT '分配数量',
+    `qtyallocated_each` decimal(18, 8) NULL DEFAULT NULL,
+    `qtypa` decimal(18, 8) NULL DEFAULT NULL COMMENT '上架数量',
+    `qtyrpin` decimal(18, 3) NULL DEFAULT NULL,
+    `qtyrpout` decimal(18, 3) NULL DEFAULT NULL,
+    `qtymvin` decimal(18, 3) NULL DEFAULT NULL,
+    `qtymvout` decimal(19, 4) NULL DEFAULT NULL,
+    `qtyonhold` decimal(18, 3) NULL DEFAULT NULL,
+    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    PRIMARY KEY (`lotnum`, `location_id`, `customer_id`, `sku`) USING BTREE
+    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '库位库存信息' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `lotatt_config`  (
+    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `lotatt_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字段名称',
+    `lotatt_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字段描述',
+    `required_tag` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否必填',
+    `input_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '控件类型',
+    `input_scope` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '输入范围',
+    `default_value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '默认值',
+    `status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '状态(0启用1禁用)',
+    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    PRIMARY KEY (`id`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '批次属性配置' ROW_FORMAT = DYNAMIC;
+
+CREATE TABLE if not exists `wcs_task`  (
+    `task_no` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'AGV任务主键',
+    `business_type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'AGV任务类型',
+    `wh_type_from` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务关联单号类型1',
+    `wh_no_from` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务关联单号1',
+    `wh_type_to` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务关联单号类型2',
+    `wh_no_to` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务关联单号2',
+    `sys_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '调用系统名称',
+    `device_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '调用设备名称',
+    `batch_no` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '批号',
+    `batch_order_no` int(11) NULL DEFAULT NULL COMMENT '批号2',
+    `location_from` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '起始点位',
+    `area_from` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '起始区域',
+    `location_to` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '终点点位',
+    `area_to` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '终点区域',
+    `priority` int(11) NULL DEFAULT NULL COMMENT '优先级(用于任务排序与ndc不同,10间隔中间插队)',
+    `state` int(11) NULL DEFAULT NULL COMMENT 'ִ状态9:(队列等待) 0:(下达AMS成功)',
+    `remark` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+    `create_user` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+    `create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `update_user` int(11) NULL DEFAULT NULL COMMENT '编辑人',
+    `update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '编辑时间',
+    `task_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务类型(事务)',
+    `shop_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '车间id/仓库id',
+    `start_time` datetime NULL DEFAULT NULL COMMENT '任务开始时间',
+    `end_time` datetime NULL DEFAULT NULL COMMENT '任务结束时间',
+    `parent_task` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父任务单号',
+    `ext_param` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '拓展属性',
+    `ext1` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '拓展字段1',
+    `ext2` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '拓展字段2',
+    `ext3` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '拓展字段3',
+    `ext4` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务类型',
+    `ext5` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '托盘号',
+    `ext6` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '出库单号',
+    `ext7` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `ext8` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+    `agv_no` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'AGV接收车号',
+    `before_task` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否有前置任务,有必须等待前置任务完成',
+    PRIMARY KEY (`task_no`) USING BTREE
+    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '任务表' ROW_FORMAT = DYNAMIC;
+
+
+CREATE TABLE if not exists `wms_box_info`  (
+    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `box_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '容器编号',
+    `box_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '容器类型',
+    `box_remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+    `box_state` int(11) NULL DEFAULT NULL COMMENT '状态',
+    `is_empty` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '是否有货',
+    `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人',
+    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '更新人',
+    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+    `userdefine1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `userdefine2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `location_id` int(11) NULL DEFAULT NULL COMMENT '绑定库位',
+    `is_full` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '是否满托',
+    PRIMARY KEY (`id`) USING BTREE
+    ) ENGINE = InnoDB AUTO_INCREMENT = 926 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '容器' ROW_FORMAT = DYNAMIC;
+
+
+CREATE TABLE if not exists `wms_doc_order_details`  (
+    `order_no` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '出库单号',
+    `order_line_no` decimal(65, 30) NOT NULL COMMENT '明细行号',
+    `customer_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '货主代码',
+    `sku` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '产品代码',
+    `line_status` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '行状态',
+    `qty_ordered` decimal(18, 8) NULL DEFAULT NULL COMMENT '订货件数',
+    `qty_ordered_each` decimal(18, 8) NULL DEFAULT NULL COMMENT '订货数量',
+    `qty_soft_allocated` decimal(18, 8) NULL DEFAULT NULL COMMENT '软分配件数',
+    `qty_softallocated_each` decimal(18, 8) NULL DEFAULT NULL COMMENT '软分配数量',
+    `qty_allocated` decimal(18, 8) UNSIGNED NULL DEFAULT NULL COMMENT '分配件数',
+    `qty_allocated_each` decimal(18, 8) NULL DEFAULT NULL COMMENT '分配数量',
+    `qty_picked` decimal(18, 8) NULL DEFAULT NULL COMMENT '拣货件数',
+    `qty_picked_each` decimal(18, 8) NULL DEFAULT NULL COMMENT '拣货数量',
+    `qty_packed` decimal(18, 8) NULL DEFAULT NULL COMMENT '复核件数',
+    `qty_packed_each` decimal(18, 8) NULL DEFAULT NULL COMMENT '复核数量',
+    `qty_shipped` decimal(18, 8) NULL DEFAULT NULL COMMENT '发运件数',
+    `qty_shipped_each` decimal(18, 8) NULL DEFAULT NULL COMMENT '发运数量',
+    `uom` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单位',
+    `lotatt01` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt02` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt03` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt04` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt05` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt06` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt07` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt08` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt09` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '领用人',
+    `lotatt10` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt11` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt12` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt13` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt14` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt15` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt16` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt17` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `lotatt18` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `pack_id` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '包装规格',
+    `pick_zone` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '指定出库库存的库区(未启用)',
+    `location` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '指定库位',
+    `lotnum` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '批次号',
+    `remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '备注',
+    `create_time` datetime(6) NOT NULL,
+    `create_by` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `update_time` datetime(6) NULL DEFAULT NULL,
+    `update_by` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `net_weight` decimal(18, 8) NULL DEFAULT NULL COMMENT '净重',
+    `gross_weight` decimal(18, 8) NULL DEFAULT NULL COMMENT '毛重',
+    `cubic` decimal(18, 8) NULL DEFAULT NULL COMMENT '体积',
+    `d_edi_01` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_02` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '目标库位',
+    `d_edi_03` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_04` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_05` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_06` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_07` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_08` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_09` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_10` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_11` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_12` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_13` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_14` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_15` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_16` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_17` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_18` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_19` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `d_edi_20` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `trace_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '跟踪号(未启用)',
+    `soft_allocation_rule` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '软分配规则(未启用)',
+    `allocation_rule` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '分配规则(未启用)',
+    `userdefine1` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段1',
+    `userdefine2` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段2',
+    `userdefine3` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段3',
+    `userdefine4` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段4',
+    `userdefine5` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段5',
+    PRIMARY KEY (`order_no`, `order_line_no`) USING BTREE
+    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '出库单表体' ROW_FORMAT = Dynamic;
+
+
+CREATE TABLE if not exists `wms_doc_order_header`  (
+    `order_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '出库单号',
+    `customer_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '货主代码',
+    `order_status` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '单据状态',
+    `order_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单据类型',
+    `so_reference1` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '客户单号1',
+    `so_reference2` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '客户单号2',
+    `so_reference3` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '客户单号3',
+    `priority` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单据操作优先级(按天)',
+    `consignee_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '收货单位id',
+    `consignee_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '收货单位名称',
+    `cus_country` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '国家',
+    `cus_province` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '省',
+    `cus_city` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '市',
+    `cus_district` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '区',
+    `cus_address` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '收货地址',
+    `cus_contact` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '收货联系人',
+    `cus_postcode` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '收货地址邮编',
+    `cus_email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '收货联系人邮箱',
+    `carrier_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '发运单位id',
+    `shipment_time` datetime(6) NULL DEFAULT NULL COMMENT '订单发运时间',
+    `carrier_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '发运单位名称',
+    `delivery_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '发运单号',
+    `edi_send_flag` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '上游单据回传标识',
+    `remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '备注',
+    `warehouse_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '仓库id',
+    `userdefine1` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '目标货柜(移转目标刀具柜)',
+    `userdefine2` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段2',
+    `userdefine3` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段3',
+    `userdefine4` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段4',
+    `userdefine5` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '预留字段5',
+    `userdefine6` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拣货时保存之前状态',
+    `create_time` datetime(6) NOT NULL,
+    `create_by` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `update_time` datetime(6) NULL DEFAULT NULL,
+    `update_by` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_01` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_02` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_03` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_04` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_05` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_06` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_07` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_08` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL,
+    `h_edi_09` decimal(18, 8) NULL DEFAULT NULL,
+    `h_edi_10` decimal(18, 8) NULL DEFAULT NULL,
+    `h_edi_11` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_12` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_13` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_14` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    `h_edi_15` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+    PRIMARY KEY (`order_no`) USING BTREE,
+    INDEX `so_reference1`(`so_reference1`) USING BTREE
+    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '出库单表头' ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+CREATE TABLE if not exists `base_idsequence` (
+                                   `id_name` varchar(60) NOT NULL,
+                                   `descr` varchar(100) DEFAULT NULL,
+                                   `id_type` varchar(2) NOT NULL,
+                                   `id_sequence` decimal(18,0) DEFAULT NULL,
+                                   `create_date` datetime(6) DEFAULT NULL,
+                                   `max_id_sequence` decimal(18,0) DEFAULT NULL,
+                                   `create_user_id` varchar(35) DEFAULT NULL,
+                                   `edit_time` datetime(6) DEFAULT NULL,
+                                   `edit_user_id` varchar(35) DEFAULT NULL,
+                                   `prefix` varchar(20) DEFAULT NULL,
+                                   `length` decimal(65,30) DEFAULT NULL,
+                                   `date_format` varchar(10) DEFAULT NULL,
+                                   `date_max` varchar(10) DEFAULT NULL,
+                                   `warehouseid` varchar(35) NOT NULL,
+                                   PRIMARY KEY (`id_name`,`warehouseid`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT COMMENT='主键生成规则表';
+
+CREATE TABLE if not exists `car_info` (
+                            `id` int(11) NOT NULL AUTO_INCREMENT,
+                            `carNo` int(11) DEFAULT NULL COMMENT '车编号',
+                            `warehouse_id` int(11) DEFAULT NULL COMMENT '仓库编号',
+                            `state` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '状态',
+                            `active_flag` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Y' COMMENT '是否启用',
+                            `userdefine1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
+                            `userdefine2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
+                            `userdefine3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
+                            `userdefine4` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
+                            `userdefine5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
+                            `battery` int(11) DEFAULT NULL COMMENT '电池',
+                            `x` int(11) DEFAULT NULL COMMENT 'x轴',
+                            `y` int(11) DEFAULT NULL COMMENT 'y轴',
+                            PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

+ 0 - 4
base_sql/pallet_sql/yonghu_ddl_20230921.sql

@@ -1,4 +0,0 @@
-DELETE FROM `sys_config` WHERE config_id = 10;
-DELETE FROM `sys_config` WHERE config_id = 11;
-INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (10, '入库检测光栅', 'sys.guangshan.no5', 'Y', 'N', 'admin', '2023-10-19 15:16:10', NULL, NULL, '光栅是否开启【参数键值】condig_value(Y开启,N关闭)');
-INSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (11, '出库检测光栅', 'sys.guangshan.no6', 'Y', 'N', 'admin', '2023-10-19 15:16:10', NULL, NULL, '光栅是否开启【参数键值】condig_value(Y开启,N关闭)');

+ 0 - 21
base_sql/pallet_sql/yonghu_dml_20230921.sql

@@ -1,21 +0,0 @@
-CREATE TABLE if not exists `pallet_match_log`
-(
-    `id`          varchar(255) NOT NULL COMMENT 'id',
-    `pallet_no`   varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '托盘',
-    `sku`         varchar(255)                                                  DEFAULT NULL COMMENT '物料/产品',
-    `total_qty`   varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '数量',
-    `order_nos`   varchar(2000)                                                 DEFAULT NULL COMMENT '所扫描出库单(多出库单以,隔开)',
-    `location_id` varchar(255)                                                  DEFAULT NULL COMMENT '库位id',
-    `agv_no`      varchar(255)                                                  DEFAULT NULL COMMENT 'agv车号',
-    `remark`      varchar(255)                                                  DEFAULT NULL COMMENT '备注',
-    `userdefine1` varchar(255)                                                  DEFAULT NULL,
-    `userdefine2` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci       DEFAULT NULL,
-    `userdefine3` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci       DEFAULT NULL,
-    `userdefine4` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci       DEFAULT NULL,
-    `userdefine5` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci       DEFAULT NULL,
-    `create_by`   varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  DEFAULT '' COMMENT '创建者',
-    `create_time` datetime                                                      DEFAULT NULL COMMENT '创建时间',
-    `update_by`   varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  DEFAULT '' COMMENT '更新者',
-    `update_time` datetime                                                      DEFAULT NULL COMMENT '更新时间',
-    PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='托盘匹配记录';

+ 21 - 77
ruoyi-admin/pom.xml

@@ -9,14 +9,15 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>jar</packaging>
-    <artifactId>ruoyi-admin</artifactId>
+    <artifactId>warewms</artifactId>
+    <version>1.0.0</version>
 
     <description>
         web服务入口
     </description>
 
     <properties>
-        <project.name>${project.artifactId}-release-${project.parent.version}</project.name>
+        <project.name>${project.artifactId}-release-${project.version}</project.name>
         <project.build.libUrl>${project.build.directory}/${project.name}/${project.name}/lib</project.build.libUrl>
     </properties>
 
@@ -92,76 +93,29 @@
 
     </dependencies>
 
-<!--    <build>-->
-<!--        <plugins>-->
-<!--            <plugin>-->
-<!--                <groupId>org.springframework.boot</groupId>-->
-<!--                <artifactId>spring-boot-maven-plugin</artifactId>-->
-<!--                <version>2.1.1.RELEASE</version>-->
-<!--                <configuration>-->
-<!--                    <fork>true</fork> &lt;!&ndash; 如果没有该配置,devtools不会生效 &ndash;&gt;-->
-<!--                </configuration>-->
-<!--                <executions>-->
-<!--                    <execution>-->
-<!--                        <goals>-->
-<!--                            <goal>repackage</goal>-->
-<!--                        </goals>-->
-<!--                    </execution>-->
-<!--                </executions>-->
-<!--            </plugin>-->
-<!--            <plugin>-->
-<!--                <groupId>org.apache.maven.plugins</groupId>-->
-<!--                <artifactId>maven-war-plugin</artifactId>-->
-<!--                <version>3.1.0</version>-->
-<!--                <configuration>-->
-<!--                    <failOnMissingWebXml>false</failOnMissingWebXml>-->
-<!--                    <warName>${project.artifactId}</warName>-->
-<!--                </configuration>-->
-<!--            </plugin>-->
-<!--        </plugins>-->
-<!--        <finalName>${project.artifactId}</finalName>-->
-<!--    </build>-->
-
     <build>
         <plugins>
+            <!-- jar包	-->
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.6.1</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                    <encoding>UTF-8</encoding>
-                    <!-- java8 保留参数名编译参数 -->
-                    <compilerArgument>-parameters</compilerArgument>
-                    <compilerArguments>
-                        <verbose />
-                    </compilerArguments>
-                </configuration>
-            </plugin>
-
-            <!-- jar 包中的配置文件优先级高于 config 目录下的 "同名文件" 因此,打包时需要排除掉 jar 包中来自 src/main/resources
-                目录的 配置文件,否则部署时 config 目录中的同名配置文件不会生效 -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>2.6</version>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
                 <configuration>
-                    <excludes>
-                        <exclude>*.txt</exclude>
-                        <!--juniorRay 修改不要忽略所有xml,否则mybatis找不到映射-->
-                        <!--<exclude>*.xml</exclude>-->
-                        <exclude>/*.xml</exclude><!-- ‘/’ 只过滤根目录下的xml,子文件不进行遍历 -->
-                        <!--JuniorRay 或者直接不用上面的,用下面这个指定具体文件-->
-                        <!-- <exclude>ehcache.xml</exclude>
-                         <exclude>logback.xml</exclude>-->
-                        <exclude>*.yml</exclude>
-                        <exclude>*.properties</exclude>
-                    </excludes>
+                    <fork>true</fork>
+                    <finalName>${project.name}</finalName>
+                    <outputDirectory>${project.build.directory}/</outputDirectory>
+                    <!-- 在打包时将引用的外部jar引入到当前项目包中	-->
+                    <includeSystemScope>true</includeSystemScope>
                 </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
-
-            <!-- 使用 mvn clean package 打包 更多配置可参考官司方文档:http://maven.apache.org/plugins/maven-assembly-plugin/single-mojo.html -->
+            <!-- zip、tar.gz包	-->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-assembly-plugin</artifactId>
@@ -173,7 +127,6 @@
                         <goals>
                             <goal>single</goal>
                         </goals>
-
                         <configuration>
                             <!-- 打包生成的文件名 -->
                             <finalName>${project.name}</finalName>
@@ -191,17 +144,8 @@
                     </execution>
                 </executions>
             </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.18.1</version>
-                <configuration>
-                    <skipTests>true</skipTests>
-                </configuration>
-            </plugin>
-
         </plugins>
+        <finalName>${project.artifactId}</finalName>
     </build>
 
 </project>

+ 33 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/CarInfoController.java

@@ -0,0 +1,33 @@
+package com.ruoyi.web.controller.warewms.ams;
+
+import com.ruoyi.ams.agv.car.service.ICarInfoService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 车辆管理Controller
+ * 
+ * @author ruoyi
+ * @date 2022-11-01
+ */
+@RestController
+@RequestMapping("/ams/car")
+public class CarInfoController extends BaseController
+{
+    @Autowired
+    private ICarInfoService carInfoService;
+
+    /**
+     * agv车辆信息
+     */
+    @GetMapping("/queryInfoByCarNo")
+    public AjaxResult queryInfoByCarNo(@RequestParam String carNo) {
+        return AjaxResult.success(carInfoService.queryInfoByCarNo(Integer.valueOf(carNo)));
+    }
+
+}

+ 0 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/LocationViewSafeController.java

@@ -8,7 +8,6 @@ import com.ruoyi.ams.locationView.domain.vo.LocationViewVO;
 import com.ruoyi.ams.locationView.service.LocationViewService;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationZone;
-import com.ruoyi.base.domain.BaseWarehouse;
 import com.ruoyi.base.domain.dto.BasLocationGuiExtDTO;
 import com.ruoyi.base.service.IBaseLocationZoneService;
 import com.ruoyi.common.annotation.Log;

+ 39 - 65
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/WcsTaskController.java

@@ -1,41 +1,27 @@
 package com.ruoyi.web.controller.warewms.ams;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
-
+import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.task.domain.form.TaskDispositionForm;
-import com.ruoyi.ams.task.form.AddTaskForm;
+import com.ruoyi.ams.task.dto.*;
+import com.ruoyi.ams.task.service.IWcsTaskService;
 import com.ruoyi.base.constant.Constant;
-import com.ruoyi.base.domain.BaseLocationInfo;
-import com.ruoyi.base.service.IBaseLocationInfoService;
-import com.ruoyi.base.utils.IdSequenceUtils;
-import com.ruoyi.common.core.domain.model.LoginUser;
-import com.ruoyi.common.utils.StringUtils;
-import io.swagger.annotations.ApiModelProperty;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.ams.task.domain.WcsTask;
-import com.ruoyi.ams.task.service.IWcsTaskService;
+import com.ruoyi.common.utils.ConvertUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.ApiOperation;
+import org.assertj.core.util.Maps;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.List;
 
 /**
  * AGV任务Controller
@@ -48,8 +34,6 @@ import com.ruoyi.common.core.page.TableDataInfo;
 public class WcsTaskController extends BaseController {
     @Autowired
     private IWcsTaskService wcsTaskService;
-    @Autowired
-    private IBaseLocationInfoService baseLocationInfoService;
 
     /**
      * 查询AGV任务列表
@@ -140,15 +124,30 @@ public class WcsTaskController extends BaseController {
         return wcsTaskService.callBack(wcsTask.getTaskNo(),2,agvNo);
     }
 
-    @Log(title = "任务取消", businessType = BusinessType.INSERT)
-    @PutMapping(value = "/taskCancel/{taskNo}")
-    public AjaxResult taskCancel(@PathVariable("taskNo") String taskNo) {
-        WcsTask wcsTask = wcsTaskService.selectWcsTaskByTaskNo(taskNo);
-        if (wcsTask == null) {
-            AjaxResult.error("任务查询不存在");
-        }
-        wcsTaskService.cancelTask(wcsTask);
-        return AjaxResult.success("任务取消指令下发成功!");
+    @PostMapping(value = "/taskCancel")
+    public AjaxResult taskCancel(@RequestBody @Valid WcsTaskCancelDTO wcsTaskCancelDTO) {
+        wcsTaskService.cancelTask(wcsTaskCancelDTO);
+        return AjaxResult.success();
+    }
+
+    @PostMapping(value = "/taskInsert")
+    public AjaxResult taskInsert(@RequestBody @Valid WcsTaskInsertDTO wcsTaskInsertDTO) {
+        String taskNo = wcsTaskService.taskInsert(wcsTaskInsertDTO);
+        return AjaxResult.success("任务生成成功", Maps.newHashMap("taskNo", taskNo));
+    }
+
+    @GetMapping(value = "/getTaskInfo")
+    public AjaxResult getTaskInfo(@RequestParam String businessNo) {
+        WcsTaskInfoDTO wcsTaskInfoDTO = wcsTaskService.getTaskInfo(businessNo);
+        return AjaxResult.success(wcsTaskInfoDTO);
+    }
+
+    @ApiOperation("WcsTask任务反馈")
+    @PostMapping("/taskStateFeedback")
+    public AjaxResult taskStateFeedback(@RequestBody @Valid WcsTaskStateFeedbackDTO wcsTaskStateFeedbackDTO) {
+        WcsTaskCallBackDTO wcsTaskCallBackDTO = ConvertUtils.sourceToTarget(wcsTaskStateFeedbackDTO, WcsTaskCallBackDTO.class);
+        wcsTaskService.callBack(wcsTaskCallBackDTO);
+        return AjaxResult.success();
     }
 
     @Log(title = "库存处置", businessType = BusinessType.INSERT)
@@ -162,31 +161,6 @@ public class WcsTaskController extends BaseController {
         return AjaxResult.success("处置完成");
     }
 
-    @Log(title = "添加测试任务", businessType = BusinessType.INSERT)
-    @PostMapping(value = "/addTestTask")
-    public AjaxResult addTestTask(@Validated @RequestBody AddTaskForm addTaskForm) {
-        if (addTaskForm.getLocationFrom().equals(addTaskForm.getLocationTo())) {
-            return AjaxResult.error("起始库位与目标库位不能相同");
-        }
-        LoginUser loginUser = this.getLoginUser();
-        WcsTask wcsTask = new WcsTask();
-        wcsTask.setTaskNo(System.currentTimeMillis() + "");
-        wcsTask.setState(9L);
-        if (addTaskForm.getTaskType().equals(Constant.IS_YES.Y.toString())) {
-            wcsTask.setTaskType(Constant.TASK_TYPE.FORWARD.getValue());
-        }
-        wcsTask.setBusinessType(addTaskForm.getBusinessType());
-        wcsTask.setAreaFrom(addTaskForm.getAreaFrom());
-        wcsTask.setLocationFrom(addTaskForm.getLocationFrom());
-        wcsTask.setAreaTo(addTaskForm.getAreaTo());
-        wcsTask.setLocationTo(addTaskForm.getLocationTo());
-        wcsTask.setCreateTime(new Date());
-        wcsTask.setCreateBy(loginUser.getUsername());
-        wcsTask.setShopId(Constant.WAREHOUSE_ID.toString());
-        wcsTask.setPriority(10L);
-        return toAjax(wcsTaskService.insertWcsTask(wcsTask));
-    }
-
     @PostMapping("/toCharge")
     public AjaxResult toCharge(@RequestBody ToChargeForm toChargeForm) {
 

+ 1 - 140
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java

@@ -1,7 +1,6 @@
 package com.ruoyi.web.controller.warewms.pda;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
 import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
 import com.ruoyi.ams.asn.dto.UnbindDTO;
@@ -37,7 +36,6 @@ import com.ruoyi.ams.order.dto.ReversePickGroupDiskDTO;
 import com.ruoyi.ams.order.form.*;
 import com.ruoyi.ams.order.service.IActAllocationDetailsService;
 import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
-import com.ruoyi.ams.order.vo.CheckOutVO;
 import com.ruoyi.ams.order.vo.PickingListVO;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
@@ -140,7 +138,7 @@ public class PdaController {
             // 只有备货单才能备货
             WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
             if (wmsDocOrderHeader != null
-                    && !wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
+                    && !wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYPE.BH.getValue())) {
                 return AjaxResult.error("出库单类型为备货单才能备货!");
             }
             stockForm.setOrderNo(orderNo);
@@ -432,81 +430,6 @@ public class PdaController {
         }
     }
 
-    //endregion
-    /**********************************************托盘分配出库*****************************************************/
-    //region PDA出库
-
-    /**
-     * PDA托盘出库
-     * 出库单分配
-     *
-     * @return
-     */
-    @GetMapping("/docOrder/doAllocation")
-    public AjaxResult doAllocation(@RequestParam String orderNos) {
-        List<String> orderList = JSONArray.parseArray(orderNos, String.class);
-        List<String> orderNoList = wmsDocOrderHeaderService.changeErpNoToOrderNo(orderList);
-        if (orderNoList.size() == 0) {
-            return AjaxResult.error("请扫描正确的出库单号");
-        }
-        return wmsDocOrderHeaderService.doAllocation(orderNoList);
-    }
-
-    /**
-     * PDA托盘出库
-     * 查询出库分配列表
-     * 1.普通出库单根据lotatt15出库单号查询出库存
-     * 2.备货出库单(1)备货完成根据lotatt14查询出库存(2)未备货完成根据lotatt15查询出库存
-     *
-     * @return
-     */
-    @GetMapping("/docOrder/checkOutList")
-    public AjaxResult checkOutList(@RequestParam String orderNos) {
-        List<String> orderList = JSONArray.parseArray(orderNos, String.class);
-        List<String> orderNoList = wmsDocOrderHeaderService.changeErpNoToOrderNo(orderList);
-        if (orderNoList.size() == 0) {
-            return AjaxResult.error("请扫描正确的出库单号");
-        }
-        List<CheckOutVO> checkOutVOList = wmsDocOrderHeaderService.checkOutList(orderNoList);
-        return AjaxResult.success(checkOutVOList);
-    }
-
-    /**
-     * PDA线边出库
-     * 查询备货单已经备货的库存(即便备货单没有完全备货)(主要是将库存移动到线边区域)
-     * 1.传入单据必须为备货单
-     * 2.备货出库单(1)根据lotatt14查询出库存
-     *
-     * @return
-     */
-    @GetMapping("/docOrder/checkOutListBh")
-    public AjaxResult checkOutListBh(@RequestParam String orderNos) {
-        List<String> orderList = JSONArray.parseArray(orderNos, String.class);
-        List<String> orderNoList = wmsDocOrderHeaderService.changeErpNoToOrderNo(orderList);
-        if (orderNoList.size() == 0) {
-            return AjaxResult.error("请扫描正确的出库单号");
-        }
-        List<CheckOutVO> checkOutVOList = wmsDocOrderHeaderService.checkOutListBh(orderNoList);
-        return AjaxResult.success(checkOutVOList);
-    }
-
-    /**
-     * PDA备货反拣出库
-     * 查询备货单所有托盘上有不属于当前备货库存的托盘
-     *
-     * @return
-     */
-    @GetMapping("/docOrder/checkOutListBhGx")
-    public AjaxResult checkOutListBhGx(@RequestParam String orderNos) {
-        List<String> orderList = JSONArray.parseArray(orderNos, String.class);
-        List<String> orderNoList = wmsDocOrderHeaderService.changeErpNoToOrderNo(orderList);
-        if (orderNoList.size() == 0) {
-            return AjaxResult.error("请扫描正确的出库单号");
-        }
-        List<CheckOutVO> checkOutVOList = wmsDocOrderHeaderService.checkOutListBhGx(orderNoList);
-        return AjaxResult.success(checkOutVOList);
-    }
-
     /**
      * 物料拉动(出库)
      *
@@ -617,56 +540,6 @@ public class PdaController {
         return wmsDocOrderHeaderService.groupDiskBHCheck(groupDiskFrom);
     }
 
-    /**
-     * 组盘
-     * 1.PDA备货组盘(传出库单号) 2.PDA分拣组盘(不传出库单号)
-     *
-     * @return
-     */
-    @PostMapping("/docOrder/groupDisk")
-    public AjaxResult groupDisk(@RequestBody GroupDiskFrom groupDiskFrom) {
-        // 可以不传出库单号
-        String orderNo = wmsDocOrderHeaderService.changeErpNoToOrderNo(groupDiskFrom.getOrderNo());
-        groupDiskFrom.setOrderNo(orderNo);
-        if (StringUtils.isEmpty(orderNo)) {
-            return wmsDocOrderHeaderService.groupDisk(groupDiskFrom);
-        } else {
-            // 备货组盘
-            return wmsDocOrderHeaderService.groupDiskBH(groupDiskFrom);
-        }
-    }
-
-    /**
-     * 反拣组盘
-     * 主要作用是备好的托盘,更新备货减少之后,被PDA反拣出库叫出来重新组盘
-     *
-     * @return
-     */
-    @PostMapping("/docOrder/groupDiskFJ")
-    public AjaxResult groupDiskFJ(@RequestBody GroupDiskFrom groupDiskFrom) {
-        String orderNo = wmsDocOrderHeaderService.changeErpNoToOrderNo(groupDiskFrom.getOrderNo());
-        if (StringUtils.isEmpty(orderNo)) {
-            return AjaxResult.error("请扫描正确的出库单号");
-        }
-        groupDiskFrom.setOrderNo(orderNo);
-        return wmsDocOrderHeaderService.groupDiskFJ(groupDiskFrom);
-    }
-
-    /**
-     * 拣货组盘(理货备货)
-     *
-     * @return
-     */
-//    @PostMapping("/docOrder/arrangeStock")
-//    public AjaxResult arrangeStock(@RequestBody ArrangeStockForm arrangeStockForm) {
-//        String orderNo = wmsDocOrderHeaderService.changeErpNoToOrderNo(arrangeStockForm.getOrderNo());
-//        if (StringUtils.isEmpty(orderNo)) {
-//            return AjaxResult.error("请扫描正确的出库单号");
-//        }
-//        arrangeStockForm.setOrderNo(orderNo);
-//        return wmsDocOrderHeaderService.arrangeStock(arrangeStockForm);
-//    }
-
     /**
      * 分拣明细查询
      *
@@ -691,18 +564,6 @@ public class PdaController {
         return AjaxResult.success(pickingListVOS);
     }
 
-    /**
-     * 出库货位释放
-     * 出库完成后,人工拉走出库位货物,扫描库位码,清除库存解绑托盘
-     *
-     * @param locationId
-     * @return
-     */
-//    @PostMapping("/docOrder/locationUntie")
-//    public AjaxResult locationUntie(String locationId) {
-//        return invLotLocIdService.clear(locationId, Constant.WAREHOUSE_ID, "PDA");
-//    }
-
     /**
      * 条码检测(出库)
      *

+ 3 - 6
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdawcsTaskController.java

@@ -1,6 +1,7 @@
 package com.ruoyi.web.controller.warewms.pda;
 
 import com.ruoyi.ams.task.domain.WcsTask;
+import com.ruoyi.ams.task.dto.WcsTaskCancelDTO;
 import com.ruoyi.ams.task.service.IWcsTaskService;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
@@ -62,12 +63,8 @@ public class PdawcsTaskController extends BaseController {
 
     @Log(title = "任务取消", businessType = BusinessType.INSERT)
     @PostMapping(value = "/taskCancel")
-    public AjaxResult taskCancel(@RequestBody WcsTask task) {
-        WcsTask wcsTask = wcsTaskService.selectWcsTaskByTaskNo(task.getTaskNo());
-        if (wcsTask == null) {
-            AjaxResult.error("任务查询不存在");
-        }
-        wcsTaskService.cancelTask(wcsTask);
+    public AjaxResult taskCancel(@RequestBody WcsTaskCancelDTO wcsTaskCancelDTO) {
+        wcsTaskService.cancelTask(wcsTaskCancelDTO);
         return AjaxResult.success("任务取消指令下发成功!");
     }
 

+ 0 - 52
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/test/GuangShanTestController.java

@@ -1,52 +0,0 @@
-package com.ruoyi.web.controller.warewms.test;
-
-import com.ruoyi.system.service.ISysConfigService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author JWK
- * @version 1.0
- * @date 2023/03/22
- */
-@Api("光栅检测")
-@RestController
-@RequestMapping("/test/")
-public class GuangShanTestController {
-
-    @Autowired
-    private ISysConfigService iSysConfigService;
-
-    /**
-     * 光栅检测
-     *
-     * @param no 1234 对应四个光栅
-     * @return true 超高 false 不超高
-     */
-    @ApiOperation("光栅检测(输入1,2,3,4对应四个光栅)")
-    @PostMapping("/guangshan/check")
-    public Boolean responseState(String no) {
-        String configKey = "";
-        switch (Integer.parseInt(no)) {
-            case 1:
-                configKey = "sys.guangshan.no1";
-                break;
-            case 2:
-                configKey = "sys.guangshan.no2";
-                break;
-            case 3:
-                configKey = "sys.guangshan.no3";
-                break;
-            case 4:
-                configKey = "sys.guangshan.no4";
-                break;
-            default:
-                break;
-        }
-        return iSysConfigService.checkGratingIsSuperHigh(configKey);
-    }
-}

+ 0 - 36
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/test/WcsTaskResponseController.java

@@ -1,36 +0,0 @@
-package com.ruoyi.web.controller.warewms.test;
-
-import com.ruoyi.ams.agv.ndc.service.StatusUpdateService;
-import com.ruoyi.ams.task.service.IWcsTaskService;
-import com.ruoyi.common.core.domain.AjaxResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author JWK
- * @version 1.0
- * @date 2022/11/14 14:52
- */
-@Api("WcsTask任务反馈")
-@RestController
-@RequestMapping("/api/wcstask")
-public class WcsTaskResponseController {
-
-    @Autowired
-    private IWcsTaskService iWcsTaskService;
-    @Autowired
-    private StatusUpdateService statusUpdateService;
-
-    /**
-     * WcsTask任务反馈
-     */
-    @ApiOperation("WcsTask任务反馈")
-    @PostMapping("/responseState")
-    public AjaxResult responseState(String taskNo, Integer state, Integer carNo) {
-        return iWcsTaskService.callBack(taskNo, state, carNo);
-    }
-}

+ 7 - 81
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/wcs/WcsController.java

@@ -1,15 +1,8 @@
 package com.ruoyi.web.controller.warewms.wcs;
 
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import com.ruoyi.ams.agv.ndc.common.ByteUtil;
-import com.ruoyi.ams.agv.ndc.common.CRC16Util;
-import com.ruoyi.ams.agv.ndc.domain.AmsTask;
-import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
-import com.ruoyi.base.constant.Constant;
+import com.ruoyi.ams.wcs.form.BtnOpForm;
+import com.ruoyi.ams.wcs.service.IWcsService;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.redis.RedisCache;
-import com.ruoyi.web.form.BtnOpForm;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -17,85 +10,18 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
 @Slf4j
 @RestController
 @RequestMapping("/wcs/ctl")
 public class WcsController {
 
-    @Autowired
-    private RedisCache redisCache;
-    @Autowired
-    private IAmsTaskService amsTaskService;
-
-    /**
-     * 按钮盒关闭交通管制
-     */
-    private final static String OPEN = "OPEN";
-
-    /**
-     * 按钮盒开启交通管制
-     */
-    private final static String CLOSE = "CLOSE";
-
-    /**
-     * 按钮盒对应出库区域ip
-     */
-    private final static String EXIT_AREA_IP = "192.168.77.105";
 
-    /**
-     * 按钮盒对应入库区域ip
-     */
-    private final static String STORAGE_AREA_IP = "192.168.77.104";
-
-    /**
-     * 按钮盒控制
-     */
-    private static final Map<String, String> buttonBoxControlMap= new HashMap<String, String>(){
-        {
-            put(OPEN, Constant.TASK_BUSINESS_TYPE.TASK_75.getValue());
-            put(CLOSE, Constant.TASK_BUSINESS_TYPE.TASK_74.getValue());
-        }
-    };
-
-    /**
-     * 按钮盒区域对应id
-     */
-    private static final Map<String, String> buttonBoxAreaMap= new HashMap<String, String>(){
-        {
-            put(EXIT_AREA_IP, Constant.AREA_INFO.EXIT_AREA.getValue());
-            put(STORAGE_AREA_IP, Constant.AREA_INFO.STORAGE_AREA.getValue());
-        }
-    };
+    @Autowired
+    private IWcsService wcsService;
 
     @PostMapping("/btnOp")
-    public AjaxResult add(@RequestBody BtnOpForm btnOpForm) {
-        log.info("按钮盒请求------------------------》" + JSON.toJSONString(btnOpForm));
-        redisCache.setCacheObject(btnOpForm.getIp() + btnOpForm.getOpType(), btnOpForm.getOpType(), 15, TimeUnit.SECONDS);
-
-        String op = buttonBoxAreaMap.get(btnOpForm.getIp());
-        String businessType = buttonBoxControlMap.get(btnOpForm.getOpType());
-        if (Constant.TASK_BUSINESS_TYPE.TASK_75.getValue().equals(businessType)
-                && redisCache.checkIsExist(Constant.AREA_INFO.getKeyByValue(op))) {
-            insertAmsTask(op, Constant.TASK_BUSINESS_TYPE.TASK_77.getValue());
-            redisCache.deleteObject(Constant.AREA_INFO.getKeyByValue(op));
-        }
-        insertAmsTask(op, businessType);
-        return AjaxResult.success("");
-    }
-
-    private void insertAmsTask(String op, String businessType){
-        AmsTask amsTask = new AmsTask();
-        amsTask.setTaskNo(IdWorker.getIdStr());
-        amsTask.setIkey(Long.parseLong(String.valueOf(CRC16Util.calcCrc16(ByteUtil.string2byteArray(amsTask.getTaskNo())))));
-        amsTask.setStFrom(Integer.valueOf(Constant.LOC_MIDDLE_CACHE.toString()));
-        amsTask.setStTo(Integer.valueOf(Constant.LOC_SORTATION_CACHE.toString()));
-        amsTask.setPriority(1);
-        amsTask.setBusinessType(businessType);
-        amsTask.setExt1(op);
-        amsTaskService.insertAmsTask(amsTask);
+    public AjaxResult buttonBoxOperation(@RequestBody BtnOpForm btnOpForm) {
+        wcsService.buttonBoxOperation(btnOpForm);
+        return AjaxResult.success();
     }
 }

+ 15 - 16
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/wms/asn/WmsDocAsnHeaderController.java

@@ -1,28 +1,27 @@
 package com.ruoyi.web.controller.warewms.wms.asn;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.servlet.http.HttpServletResponse;
-
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
-import com.ruoyi.ams.asn.form.DelDocAsnDetailsForm;
+import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
 import com.ruoyi.ams.asn.service.IWmsDocAsnDetailsService;
-import com.ruoyi.base.domain.BaseIdsequence;
+import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
 import com.ruoyi.base.service.IBaseIdsequenceService;
-import com.ruoyi.common.core.domain.model.LoginUser;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
-import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 入库单Controller
@@ -136,7 +135,7 @@ public class WmsDocAsnHeaderController extends BaseController {
         Map<String, Object> map = new HashMap<>();
         LoginUser loginUser = getLoginUser();
         if (asnNo == null || "undefine".equals(asnNo)) {
-            asnNo = baseIdsequenceService.getCurrent("ASNNO");
+            asnNo = IdWorker.getIdStr();
             Date now = new Date();
             docAsnHeader.setAsnNo(asnNo);
             docAsnHeader.setCreateBy(loginUser.getUsername());

+ 16 - 17
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/wms/order/WmsDocOrderHeaderController.java

@@ -1,34 +1,33 @@
 package com.ruoyi.web.controller.warewms.wms.order;
 
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.servlet.http.HttpServletResponse;
-
-import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
+import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
 import com.ruoyi.ams.order.form.AllocationForm;
 import com.ruoyi.ams.order.form.CancelOrderForm;
 import com.ruoyi.ams.order.form.InvTallyForm;
 import com.ruoyi.ams.order.service.IWmsDocOrderDetailsService;
+import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.service.IBaseIdsequenceService;
-import com.ruoyi.common.core.domain.model.LoginUser;
-import com.ruoyi.framework.web.domain.server.Sys;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
-import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 出库单头Controller
@@ -130,7 +129,7 @@ public class WmsDocOrderHeaderController extends BaseController {
         Map<String, Object> map = new HashMap<>();
         LoginUser loginUser = getLoginUser();
         if (orderNo == null || "undefine".equals(orderNo)) {
-            orderNo = baseIdsequenceService.getCurrent("ORDERNO");
+            orderNo = IdWorker.getIdStr();
             Date now = new Date();
             orderHeader.setOrderNo(orderNo);
             orderHeader.setCreateBy(loginUser.getUsername());

+ 0 - 35
ruoyi-admin/src/main/java/com/ruoyi/web/test/Test.java

@@ -1,35 +0,0 @@
-package com.ruoyi.web.test;
-
-import com.alibaba.fastjson.JSON;
-import com.ruoyi.ams.business.domain.LocationSortComparator;
-import com.ruoyi.ams.business.domain.LocationSortDTO;
-import org.apache.commons.compress.utils.Lists;
-
-import java.util.ArrayList;
-
-/**
- * Created by IntelliJ IDEA.
- * User: andy.qu
- * Date: 2022/2/23
- */
-public class Test {
-
-    public static void main(String[] args) {
-//        String[] strings = new String[] {"1","2"};
-//        System.out.println(String.join(",", strings));
-        LocationSortDTO sortDTO1 = new LocationSortDTO("A","2021-01-01");
-        LocationSortDTO sortDTO2 = new LocationSortDTO("A","2021-01-02");
-        LocationSortDTO sortDTO3 = new LocationSortDTO("A","2021-01-03");
-        LocationSortDTO sortDTO4 = new LocationSortDTO("A1","2021-02-01");
-        LocationSortDTO sortDTO5 = new LocationSortDTO("A2",null);
-        ArrayList<LocationSortDTO> list = new ArrayList<>();
-        list.add(sortDTO3);
-        list.add(sortDTO4);
-        list.add(sortDTO5);
-        list.add(sortDTO1);
-        list.add(sortDTO2);
-
-        list.sort(new LocationSortComparator());
-        System.out.println(JSON.toJSONString(list));
-    }
-}

+ 1 - 1
ruoyi-admin/src/main/resources/application-dev.yml

@@ -6,7 +6,7 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://localhost:3306/yonghu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
+                url: jdbc:mysql://localhost:3306/jinyinhua?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
                 username: root
                 password: root
                 driverClassName: com.mysql.cj.jdbc.Driver

+ 10 - 9
ruoyi-admin/src/main/resources/application-prod.yml

@@ -6,9 +6,10 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://localhost:3306/warewms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-                username: root
-                password: Quest@agv..
+                url: jdbc:mysql://47.100.220.92:3306/warewms-jinyinhua?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
+                username: warewms
+                password: warewms123
+                driverClassName: com.mysql.cj.jdbc.Driver
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭
@@ -21,7 +22,7 @@ spring:
             # 最小连接池数量
             minIdle: 10
             # 最大连接池数量
-            maxActive: 50
+            maxActive: 20
             # 配置获取连接等待超时的时间
             maxWait: 60000
             # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
@@ -57,13 +58,13 @@ spring:
                         multi-statement-allow: true
     redis:
         # 地址
-        host: localhost
+        host: 154.12.16.4
         # 端口,默认为6379
         port: 6379
         # 数据库索引
         database: 0
         # 密码
-        password:
+        password: 123499
         # 连接超时时间
         timeout: 10s
         lettuce:
@@ -85,7 +86,7 @@ logging:
 
 # 是否开启服务
 testtag:
-    autosend: true
-    aciservice: true
-    gsService: true
+    autosend: false
+    aciservice: false
+    gsService: false
 

+ 1 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -18,7 +18,7 @@ ruoyi:
 # 开发环境配置
 server:
   # 服务器的HTTP端口,默认为8080
-  port: 8008
+  port: 8007
   servlet:
     # 应用的访问路径
     context-path: /

+ 1 - 1
ruoyi-admin/src/main/resources/logback.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <!-- 日志存放路径 -->
-	<property name="log.path" value="../../../logs/ruoyi/logs" />
+	<property name="log.path" value="../../../logs" />
     <!-- 日志输出格式 -->
 	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
 

+ 0 - 452
ruoyi-admin/src/test/java/com/ruoyi/admin/test/base/impl/WarehouseTest.java

@@ -1,68 +1,11 @@
 package com.ruoyi.admin.test.base.impl;
 
-import cn.hutool.core.comparator.CompareUtil;
-import com.alibaba.fastjson.JSON;
 import com.ruoyi.RuoYiApplication;
-import com.ruoyi.ams.agv.ndc.domain.AmsHexdefineDetail;
-import com.ruoyi.ams.agv.ndc.domain.AmsTask;
-import com.ruoyi.ams.agv.ndc.service.IAmsHexdefineDetailService;
-import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
-import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
-import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
-import com.ruoyi.ams.asn.form.StockForm;
-import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
-import com.ruoyi.ams.business.IBusinessService;
-import com.ruoyi.ams.business.domain.FilterLockInvLocationDTO;
-import com.ruoyi.ams.config.domain.AsnSoStrategy;
-import com.ruoyi.ams.config.domain.FlowConfigHeader;
-import com.ruoyi.ams.config.domain.dto.InWarehouseDTO;
-import com.ruoyi.ams.config.domain.dto.LotattDTO;
-import com.ruoyi.ams.config.domain.dto.OutWarehouseDTO;
-import com.ruoyi.ams.config.mapper.AsnSoStrategyMapper;
-import com.ruoyi.ams.config.service.IFlowConfigHeaderService;
-import com.ruoyi.ams.config.service.LocationAllocationStrategy;
-import com.ruoyi.ams.erp.domain.ErpBarCodeList;
-import com.ruoyi.ams.erp.domain.ErpOrderList;
-import com.ruoyi.ams.erp.mapper.ErpBarcodesMapper;
-import com.ruoyi.ams.erp.service.IErpBarcodesService;
-import com.ruoyi.ams.erp.service.ISyncService;
-import com.ruoyi.ams.inv.domain.InvLotAtt;
-import com.ruoyi.ams.inv.domain.InvLotLocId;
-import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
-import com.ruoyi.ams.inv.service.IInvLotAttService;
-import com.ruoyi.ams.locationView.domain.form.LocationViewForm;
-import com.ruoyi.ams.locationView.domain.vo.LocationViewVO;
-import com.ruoyi.ams.locationView.service.LocationViewService;
-import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
-import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
-import com.ruoyi.ams.order.mapper.WmsDocOrderDetailsMapper;
-import com.ruoyi.ams.order.service.IWmsDocOrderDetailsService;
-import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
-import com.ruoyi.ams.task.service.IWcsTaskService;
-import com.ruoyi.base.constant.Constant;
-import com.ruoyi.base.domain.BaseLocationInfo;
-import com.ruoyi.base.domain.BaseWarehouse;
-import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
-import com.ruoyi.base.mapper.BaseLocationInfoMapper;
-import com.ruoyi.base.mapper.BaseSkuMapper;
-import com.ruoyi.base.service.IBaseIdsequenceService;
-import com.ruoyi.base.service.IBaseLocationInfoService;
-import com.ruoyi.base.service.IBaseWarehouseService;
-import com.ruoyi.base.utils.IdSequenceUtils;
-import com.ruoyi.common.exception.base.BaseException;
-import org.assertj.core.util.Lists;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
 ;
 
 /**
@@ -74,403 +17,8 @@ import java.util.List;
 @SpringBootTest(classes = RuoYiApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 public class WarehouseTest {
 
-    @Autowired
-    private IBaseWarehouseService baseWarehouseService;
-    @Autowired
-    private LocationAllocationStrategy locationAllocationStrategy;
-    @Autowired
-    private IBusinessService businessService;
-    @Autowired
-    private IBaseIdsequenceService sysIdsequenceService;
-    @Autowired
-    private BaseSkuMapper baseSkuMapper;
-    @Autowired
-    private InvLotLocIdMapper invLotLocIdMapper;
-    @Autowired
-    private LocationViewService locationViewService;
-    @Autowired
-    private BaseLocationInfoMapper baseLocationInfoMapper;
-    @Autowired
-    private IBaseLocationInfoService baseLocationInfoService;
-    @Autowired
-    private IFlowConfigHeaderService flowConfigHeaderService;
-    @Autowired
-    private AsnSoStrategyMapper asnSoStrategyMapper;
-    @Autowired
-    private WmsDocOrderDetailsMapper wmsDocOrderDetailsMapper;
-    @Autowired
-    private IdSequenceUtils idSequenceUtils;
-    @Autowired
-    private IWmsDocAsnHeaderService wmsDocAsnHeaderService;
-    @Autowired
-    private IWmsDocOrderHeaderService wmsDocOrderHeaderService;
-
-    @Autowired
-    private IWmsDocOrderDetailsService wmsDocOrderDetailsService;
-    @Autowired
-    private IWcsTaskService wcsTaskService;
-    @Autowired
-    private IAmsHexdefineDetailService amsHexdefineDetailService;
-    @Autowired
-    private IAmsTaskService amsTaskService;
-    @Autowired
-    private ISyncService syncService;
-    @Autowired
-    private RedisTemplate redisTemplate;
-
-    @Autowired
-    private ErpBarcodesMapper erpBarcodesMapper;
-
-
     @Test
     public void test() {
-        List<BaseWarehouse> warehouseList = baseWarehouseService.selectBaseWarehouseList(null);
-        System.out.println(JSON.toJSONString(warehouseList));
-    }
-
-    @Test
-    public void test1() {
-        LotattDTO lotattDTO = new LotattDTO();
-        lotattDTO.setLotatt01("1000");
-        InWarehouseDTO inWarehouseDTO = new InWarehouseDTO();
-        inWarehouseDTO.setSku("test2");
-        inWarehouseDTO.setWarehouseId(1L);
-        inWarehouseDTO.setLotattDTO(lotattDTO);
-        BaseLocationInfo locationInfo = businessService.inLocationAllocation(inWarehouseDTO, 1L);
-        if (locationInfo != null) {
-            System.out.println("-------------------");
-            System.out.println(locationInfo.getId());
-        }
-    }
-
-    @Test
-    public void testAllocation() {
-        LotattDTO lotattDTO = new LotattDTO();
-        lotattDTO.setLotatt01("1000");
-        OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
-        outWarehouseDTO.setSku("test1");
-        outWarehouseDTO.setWarehouseId(1L);
-        outWarehouseDTO.setLotattDTO(lotattDTO);
-        BaseLocationInfo locationInfo = businessService.outInvAllocation(outWarehouseDTO, 1L);
-        if (locationInfo != null) {
-            System.out.println("-------------------");
-            System.out.println(locationInfo.getId());
-        }
-    }
-
-    @Test
-    public void test2() {
-        //String str = sysIdsequenceService.generateId("ASNNO");
-        //System.out.println(str);
-//        List<String> arr = new ArrayList<>();
-//        arr.add("1");
-//        arr.add("2");
-//        baseSkuMapper.selectBaseSkuBySkuTypeList(null);
-        //List<BaseLocationLotattVO> locationList = invLotLocIdMapper.selectInvLocationList(null,null,null,null,null,null);
-        /*BaseLocationInfo baseLocationInfo = new BaseLocationInfo();
-        baseLocationInfo.setZoneId(2L);
-        baseLocationInfo.setWarehouseId(1L);
-        List<BaseLocationLotattVO> lotattVOS = baseLocationInfoMapper.selectSortedLocationLotattListByZoneId(baseLocationInfo);*/
-        LotattDTO lotattDTO = new LotattDTO();
-        List<Long> zoneList = new ArrayList<>();
-        zoneList.add(2L);
-        List<BaseLocationLotattVO> baseLocationLotattVOS = baseLocationInfoMapper.selectSortedLocationLotattListByZoneIdList(zoneList, 1L, lotattDTO.getAttr());
-        System.out.println(JSON.toJSONString(baseLocationLotattVOS));
-    }
-
-    @Test
-    public void test3() {
-        LocationViewForm form = new LocationViewForm();
-        form.setZoneId(2L);
-        form.setWarehouseId(1L);
-        LocationViewVO locationViewVO = locationViewService.locationView(form);
-        System.out.println(JSON.toJSONString(locationViewVO));
-    }
-
-    @Test
-    public void test4() {
-        List<String> colNos = baseLocationInfoMapper.selectSameSkuTypeColNo("2", null);
-        System.out.println(colNos);
-    }
-
-    @Test
-    public void test5() {
-        List<FlowConfigHeader> flowConfigHeaderVOS = flowConfigHeaderService.sortFlowConfigHeader(8L);
-        System.out.println(JSON.toJSONString(flowConfigHeaderVOS));
-    }
-
-    @Test
-    public void test6() {
-        List<BaseLocationInfo> loc1 = baseLocationInfoService.selectSortedLocatinListByZoneId(2L, 1L, null);
-        //List<BaseLocationInfo> loc2 = baseLocationInfoService.selectSortedLocatinListByZoneId(1L,1L);
-        //List<BaseLocationInfo> loc3 = baseLocationInfoService.selectSortedLocatinListByZoneId(1L,1L);
-        List<Long> locationIdList = new ArrayList<>();
-        for (BaseLocationInfo b : loc1) {
-            locationIdList.add(b.getId());
-        }
-        List<OutWarehouseDTO> outWarehouseDTOs = new ArrayList<>();
-        OutWarehouseDTO sku1 = new OutWarehouseDTO();
-        sku1.setSku("test401");
-        sku1.setQty(150d);
-        outWarehouseDTOs.add(sku1);
-        OutWarehouseDTO sku2 = new OutWarehouseDTO();
-        sku2.setSku("test402");
-        sku2.setQty(50d);
-        outWarehouseDTOs.add(sku2);
-        AsnSoStrategy asnSoStrategy = asnSoStrategyMapper.selectAsnSoStrategy();
-        Long token = 100L;
-        List<FilterLockInvLocationDTO> locationInfoList = locationAllocationStrategy.filterLockInv(locationIdList, outWarehouseDTOs, asnSoStrategy, token);
-        System.out.println(JSON.toJSONString(locationInfoList));
-    }
-
-    @Autowired
-    private IErpBarcodesService erpBarcodesService;
-
-    @Test
-    public void test7() {
-
-        List<WmsDocOrderDetails> wmsDocOrderDetailsList = wmsDocOrderDetailsService.queryWmsDocOrderDetails("SO202308300006");
-        for (WmsDocOrderDetails wmsDocOrderDetails : wmsDocOrderDetailsList) {
-            if (CompareUtil.compare(wmsDocOrderDetails.getOrderLineNo(), new BigDecimal("48")) == 0)
-            erpBarcodesService.recordErpBarcodeListSo(wmsDocOrderDetails, "R12101H23H0205"
-                    , "SORTATION01", "YZB0133", BigDecimal.ONE, "59");
-
-        }
-
-    }
-
-    @Test
-    public void initDocAsnData() {
-        WmsDocAsnHeader header = new WmsDocAsnHeader();
-        header.setAsnReference1("12321");
-        header.setAsnStatus("00");
-        header.setAsnType("PR");
-        header.setCreateTime(new Date());
-        header.setCreateBy("warewms");
-        header.setCustomerId("default");
-        wmsDocAsnHeaderService.insertWmsDocAsnHeader(header);
-        List<WmsDocAsnDetails> detailsList = new ArrayList<>();
-        //String[] arr = new String[]{"test201", "test202", "test301", "test302", "test401", "test402"};
-        String[] arr = new String[]{"test201", "test203"};
-        for (int i = 1; i <= arr.length; i++) {
-            WmsDocAsnDetails details = new WmsDocAsnDetails();
-            details.setAsnNo(header.getAsnNo());
-            details.setAsnLineNo(Long.valueOf(i));
-            details.setSku(arr[i - 1]);
-            details.setExpectedQty(BigDecimal.valueOf(15));
-            details.setExpectedQtyEach(details.getExpectedQty());
-            details.setReceivedQty(BigDecimal.ZERO);
-            details.setReceivedQtyEach(BigDecimal.ZERO);
-            details.setLineStatus("00");
-            details.setCreateBy("warewms");
-            details.setCreateTime(new Date());
-            details.setLotatt05("90");
-            details.setLotatt12("N");
-            detailsList.add(details);
-            wmsDocAsnHeaderService.insertWmsDocAsnDetails(details);
-        }
-        header.setWmsDocAsnDetailsList(detailsList);
-        System.out.println(header.getAsnNo());
-    }
-
-    @Test
-    public void initDocOrderData() {
-        String soNo = idSequenceUtils.generateId("ORDERNO");
-        WmsDocOrderHeader header = new WmsDocOrderHeader();
-        header.setOrderNo(soNo);
-        header.setSoReference1("12321");
-        header.setOrderStatus("00");
-        header.setOrderType("LH");
-        header.setCreateTime(new Date());
-        header.setCreateBy("warewms");
-        header.setCustomerId("default");
-        List<WmsDocOrderDetails> detailsList = new ArrayList<>();
-        //String[] arr = new String[]{"test201", "test202", "test301", "test302", "test401", "test402"};
-        String[] arr = new String[]{"test201", "test203"};
-        for (int i = 1; i <= arr.length; i++) {
-            WmsDocOrderDetails details = new WmsDocOrderDetails();
-            details.setOrderNo(soNo);
-            details.setCustomerId(Constant.CUSTOMER_ID);
-            details.setOrderLineNo(BigDecimal.valueOf(i));
-            details.setSku(arr[i - 1]);
-            details.setQtyOrdered(BigDecimal.valueOf(5));
-            details.setQtyOrderedEach(details.getQtyOrdered());
-            details.setQtyPicked(BigDecimal.ZERO);
-            details.setQtyPickedEach(BigDecimal.ZERO);
-            details.setQtyAllocated(BigDecimal.ZERO);
-            details.setQtyAllocatedEach(BigDecimal.ZERO);
-            details.setQtyShipped(BigDecimal.ZERO);
-            details.setQtySoftAllocated(BigDecimal.ZERO);
-            details.setQtySoftallocatedEach(BigDecimal.ZERO);
-            details.setQtyShippedEach(BigDecimal.ZERO);
-            details.setLineStatus("00");
-            details.setCreateBy("warewms");
-            details.setCreateTime(new Date());
-            detailsList.add(details);
-            wmsDocOrderDetailsMapper.insertWmsDocOrderDetails(details);
-        }
-        header.setWmsDocOrderDetailsList(detailsList);
-        wmsDocOrderHeaderService.insertWmsDocOrderHeader(header);
-        System.out.println(soNo);
-    }
-
-    @Test
-    public void querySameTypeByPalletNo() {
-        List<InvLotLocId> invLotLocIdList = invLotLocIdMapper.querySameTypeByPalletNo("2", "YHRQ002");
-        System.out.println(JSON.toJSONString(invLotLocIdList));
-    }
-
-    @Test
-    public void clear() {
-
-    }
-
-    @Test
-    public void testInitData() {
-        initDocAsnData();
-        initDocOrderData();
-    }
-
-    @Test
-    public void testAmsTask() {
-        businessService.autoSend();
-    }
-
-    @Test
-    public void testAms() {
-        List<AmsHexdefineDetail> basTask = amsHexdefineDetailService.selectAmsHexdefineDetailByBusinessType("01");
-        try {
-            AmsTask amsTask = amsTaskService.selectAmsTaskById(3L);
-            amsTask.init();
-            String order = amsHexdefineDetailService.concatOrder(amsTask, basTask);
-            System.out.println("-------------------------->");
-            System.out.println(order);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-    }
-
-    @Test
-    public void testSync() throws Exception {
-        //syncService.syncSkuType();
-        //syncService.syncSku();
-        //syncService.syncSkuBarcode();
-//        syncService.syncOrderList();
-        List<ErpBarCodeList> erpBarCodeListList = new ArrayList<>();
-        ErpBarCodeList erpBarCodeList = new ErpBarCodeList();
-        erpBarCodeList.setOrderName("SO1");
-        erpBarCodeList.setOrderNo(1);
-        erpBarCodeList.setBarcode("11");
-        erpBarCodeListList.add(erpBarCodeList);
-        ErpBarCodeList erpBarCodeList1 = new ErpBarCodeList();
-        erpBarCodeList1.setOrderName("SO1");
-        erpBarCodeList1.setOrderNo(2);
-        erpBarCodeList1.setBarcode("11");
-        erpBarCodeListList.add(erpBarCodeList1);
-
-        ErpOrderList erpOrderList = new ErpOrderList();
-        erpOrderList.setOrderName("rtyu");
-        erpOrderList.setOrderNo(8);
-        erpOrderList.setOrderState("2");
-        boolean b = syncService.writeBack(erpBarCodeListList);
-        boolean b1 = syncService.updateErpOrderStatus(erpOrderList);
-        System.out.println(b + "|" + b1);
-    }
-
-    /**
-     * 更新备货测试
-     *
-     * @throws Exception
-     */
-    @Test
-    public void updateStockingTest() throws Exception {
-        List<ErpOrderList> erpOrderListList = new ArrayList<>();
-        ErpOrderList erpOrderList = null;
-        ErpOrderList erpOrderList1 = null;
-        WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectDocOrderHeaderByOrderNo("SO202304260001");
-        List<WmsDocOrderDetails> details = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(wmsDocOrderHeader.getOrderNo());
-        for (WmsDocOrderDetails detail : details) {
-            erpOrderList = new ErpOrderList();
-            erpOrderList.setOrderName(wmsDocOrderHeader.getSoReference1());
-            erpOrderList.setOrderNo(Integer.parseInt(detail.getdEdi07()));
-            erpOrderList.setIma01(detail.getSku());
-            erpOrderList.setQty(detail.getQtyOrdered().subtract(new BigDecimal(5)));
-            erpOrderList.setOrderType("axmt620");
-            erpOrderList.setInout("2");
-            erpOrderList.setOrderState(detail.getdEdi06());
-            erpOrderList.setCreateUser("TEST");
-            erpOrderList.setStockId(detail.getdEdi05());
-            erpOrderList.setValid("X");
-            if(Integer.parseInt(detail.getdEdi07()) == 5){
-
-            }else {
-                erpOrderListList.add(erpOrderList);
-            }
-//            erpOrderList1 = new ErpOrderList();
-//            erpOrderList1.setOrderName(wmsDocOrderHeader.getSoReference1());
-//            erpOrderList1.setOrderNo(5);
-//            erpOrderList1.setIma01(detail.getSku());
-//            erpOrderList1.setQty(detail.getQtyOrdered());
-//            erpOrderList1.setOrderType("axmt620");
-//            erpOrderList1.setInout("2");
-//            erpOrderList1.setOrderState(detail.getdEdi06());
-//            erpOrderList1.setCreateUser("TEST");
-//            erpOrderList1.setStockId(detail.getdEdi05());
-//            erpOrderList1.setVaild("Y");
-//            erpOrderListList.add(erpOrderList1);
-        }
-
-        redisTemplate.opsForValue().set("erpOrderList", JSON.toJSONString(erpOrderListList));
-    }
-
-    @Autowired
-    private IInvLotAttService invLotAttService;
-
-    @Test
-    public void erpCode() {
-        erpBarcodesService.untieRecordErpBarcodeListAsnSo("Y1471-23060011", null, "M11501H23F0104");
-    }
-
-    @Test
-    public synchronized void a() {
-       d();
-    }
-
-    @Test
-    public void d(){
-        wmsDocOrderHeaderService.reversePickInventoryMatch("[\"T2502-23101001\"]");
-        System.out.println(JSON.toJSONString(wmsDocOrderHeaderService.queryPalletMatchInfoList("[\"T2502-23101001\"]")));
-//        c();
-//        b();
-    }
-
-    private void c(){
-        InvLotAtt invLotAtt = new InvLotAtt();
-        invLotAtt.setLotnum("1");
-        invLotAtt.setSku("1");
-        invLotAttService.insertInvLotAtt(invLotAtt);
-    }
-    private void b() {
-        InvLotLocId invLotLocId = new InvLotLocId();
-        invLotLocId.setLotnum("1");
-        invLotLocId.setLocationId("1");
-        invLotLocId.setCustomerId("1");
-        invLotLocId.setSku("1");
-        invLotLocIdMapper.insertInvLotLocId(invLotLocId);
-        if(1==1) throw new BaseException("test");
-    }
-
-    @Test
-    public void doStockTest() {
-
-        StockForm stockForm = new StockForm();
-        stockForm.setAsnNo(Lists.newArrayList("ASN202307210003", "ASN202307210004"));
-        stockForm.setPalletNo("T001");
-        stockForm.setFullTag("N");
-        stockForm.setSkuSn("CAGEL0HT0L0330030");
-        stockForm.setQty("100");
-        wmsDocAsnHeaderService.doStock(stockForm);
     }
 
 }

+ 8 - 3
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java

@@ -1,13 +1,13 @@
 package com.ruoyi.common.core.domain;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
 import java.io.Serializable;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.fasterxml.jackson.annotation.JsonFormat;
-
 /**
  * Entity基类
  *
@@ -22,20 +22,25 @@ public class BaseEntity implements Serializable
     private String searchValue;
 
     /** 创建者 */
+    @TableField(exist = false)
     private String createBy;
 
     /** 创建时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(exist = false)
     private Date createTime;
 
     /** 更新者 */
+    @TableField(exist = false)
     private String updateBy;
 
     /** 更新时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(exist = false)
     private Date updateTime;
 
     /** 备注 */
+    @TableField(exist = false)
     private String remark;
 
     /** 请求参数 */

+ 119 - 0
ruoyi-common/src/main/java/com/ruoyi/common/enums/AutoDoorEnum.java

@@ -0,0 +1,119 @@
+package com.ruoyi.common.enums;
+
+public class AutoDoorEnum {
+
+    /**
+     * 自动门编号
+     */
+    public enum AUTO_DOOR_NO {
+        /***
+         * 靠墙门
+         */
+        A("1"),
+        /***
+         * 靠室内
+         */
+        B("2"),
+        /***
+         * 靠墙门(第二层)
+         */
+        C("3"),
+        /***
+         * 卷帘门
+         */
+        D("4");
+
+        private String value;
+
+        AUTO_DOOR_NO(String value) {
+            this.value = value;
+        }
+
+        public String getValue() {
+            return value;
+        }
+
+        /**
+         * 根据值获得枚举类型 switch
+         *
+         * @param value
+         * @return
+         */
+        public static AUTO_DOOR_NO getByValue(String value) {
+            for (AUTO_DOOR_NO code : values()) {
+                if (code.getValue().equals(value)) {
+                    return code;
+                }
+            }
+            return null;
+        }
+    }
+
+
+    /**
+     * 自动门命令
+     */
+    public enum AUTOMATIC_DOOR_CODE {
+        /**
+         * 开门
+         */
+        WRITE_OPEN(1, 0, 1, 0),
+        /**
+         * 关门
+         */
+        WRITE_CLOSE(1, 1, 1, 0),
+        /**
+         * 急停
+         */
+        WRITE_STOP(1, 2, 1, 0),
+        /***
+         * 开门状态
+         */
+        RAED_OPEN_STS(1, 10, 2, 0),
+        /**
+         * 关门状态
+         */
+        RAED_ClOSE_STS(1, 11, 2, 0);
+
+        /**
+         * 从节点id
+         */
+        private int slaveId;
+        /**
+         * 地址
+         */
+        private int offset;
+        /**
+         * 值
+         */
+        private int value;
+        /**
+         * 开关门清除标记
+         */
+        private int clear;
+
+        AUTOMATIC_DOOR_CODE(int slaveId, int offset, int value, int clear) {
+            this.slaveId = slaveId;
+            this.offset = offset;
+            this.value = value;
+            this.clear = clear;
+        }
+
+        public int getSlaveId() {
+            return slaveId;
+        }
+
+        public int getOffset() {
+            return offset;
+        }
+
+        public int getValue() {
+            return value;
+        }
+
+        public int getClear() {
+            return clear;
+        }
+    }
+
+}

+ 85 - 0
ruoyi-common/src/main/java/com/ruoyi/common/enums/ButtonBoxEnum.java

@@ -0,0 +1,85 @@
+package com.ruoyi.common.enums;
+
+public class ButtonBoxEnum {
+    /**
+     * 按钮盒命令
+     */
+    public enum BUTTON_BOX_CODE {
+        /**
+         * 1号按钮状态 value代表读的长度(读到1代表按钮被按过) value1代表清除按下标记
+         */
+        BTN_STS_01(1, 1, 1, 0, 0, 0, 0),
+        /**
+         * 1号按钮状态 value代表读的长度(读到1代表按钮被按过) value1代表清除按下标记
+         */
+        BTN_STS_02(1, 2, 1, 0, 0, 0, 0),
+        /**
+         * 1号灯状态 value代表读的长度(0:灭 1:亮 2:快闪 3慢闪) value1-4代表写(0:灭 1:亮 2:快闪 3慢闪)
+         */
+        LAMP_STS_01(1, 5, 1, 0, 1, 2, 3),
+        /**
+         * 1号灯状态 value代表读的长度(0:灭 1:亮 2:快闪 3慢闪) value1-4代表写(0:灭 1:亮 2:快闪 3慢闪)
+         */
+        LAMP_STS_02(1, 6, 1, 0, 1, 2, 3);
+
+
+        /**
+         * 从节点id
+         */
+        private int slaveId;
+        /**
+         * 地址
+         */
+        private int offset;
+        /**
+         * 读的长度
+         */
+        private int value;
+        /**
+         * 写的值
+         */
+        private int value1;
+        private int value2;
+        private int value3;
+        private int value4;
+
+        BUTTON_BOX_CODE(int slaveId, int offset, int value, int value1, int value2, int value3, int value4) {
+            this.slaveId = slaveId;
+            this.offset = offset;
+            this.value = value;
+            this.value1 = value1;
+            this.value2 = value2;
+            this.value3 = value3;
+            this.value4 = value4;
+        }
+
+        public int getSlaveId() {
+            return slaveId;
+        }
+
+        public int getOffset() {
+            return offset;
+        }
+
+        public int getValue() {
+            return value;
+        }
+
+        public int getValue1() {
+            return value1;
+        }
+
+        public int getValue2() {
+            return value2;
+        }
+
+        public int getValue3() {
+            return value3;
+        }
+
+        public int getValue4() {
+            return value4;
+        }
+    }
+
+}

+ 263 - 0
ruoyi-common/src/main/java/com/ruoyi/common/enums/ChargingMachineEnum.java

@@ -0,0 +1,263 @@
+package com.ruoyi.common.enums;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class ChargingMachineEnum {
+
+    /**
+     * 功能码
+     */
+    public enum FUNCTION_CODE {
+        /***
+         * 读线圈寄存器
+         */
+        READ_01H(0x01),
+        /***
+         * 读保持寄存器
+         */
+        READ_03H(0x03),
+        /***
+         * 写单个线圈寄存器
+         */
+        WRITE_05H(0x05),
+        /***
+         * 写单个保持寄存器
+         */
+        WRITE_06H(0x06);
+
+        private Integer value;
+
+        FUNCTION_CODE(Integer value) {
+            this.value = value;
+        }
+
+        public Integer getValue() {
+            return value;
+        }
+    }
+
+    /**
+     * 充电机ModBus地址码
+     */
+    public enum CHARGER_ADDRESS_MEANING {
+        /***
+         * 启动充电机
+         */
+        START(FUNCTION_CODE.WRITE_05H, 0x0007, 0, 0x0007, 0XFF00),
+        /***
+         * 停止充电机
+         */
+        STOP(FUNCTION_CODE.WRITE_05H, 0x0007, 0, 0x0007, 0X0000),
+        /**
+         * 充电机放电
+         */
+        DISCHARGE(FUNCTION_CODE.WRITE_05H, 0x0008, 0, 0x0008, 0xFF00),
+        /**
+         * 充电机状态
+         */
+        CHARGER_STATUS(FUNCTION_CODE.READ_01H, 0x0040, 24, 0x0040, 0X0018),
+        /**
+         * 读取电压(/100
+         */
+        READ_VOLTAGE(FUNCTION_CODE.READ_03H, 0x0065, 1, 0x0065, 0X0001),
+        /**
+         * 读取电流(/100
+         */
+        READ_CURRENT(FUNCTION_CODE.READ_03H, 0x0066, 1, 0x0066, 0X0001),
+        /**
+         * 读取当前容量(/100
+         */
+        READ_CAPACITY(FUNCTION_CODE.READ_03H, 0x0067, 1, 0x0067, 0X0001),
+        /**
+         * 时
+         */
+        HOURS(FUNCTION_CODE.READ_03H, 0x0068, 1, 0x0068, 0X0001),
+        /**
+         * 钟
+         */
+        MINUTES(FUNCTION_CODE.READ_03H, 0x0069, 1, 0x0069, 0X0001),
+        /**
+         * 秒
+         */
+        SECONDS(FUNCTION_CODE.READ_03H, 0x006A, 1, 0x006A, 0X0001),
+        /**
+         * 设置电压29.00V
+         */
+        SET_VOLTAGE(FUNCTION_CODE.WRITE_06H, 0x0090, 0, 0x0090, 0X0B54),
+        /**
+         * 设置电流29.00A
+         */
+        SET_CURRENT(FUNCTION_CODE.WRITE_06H, 0x0091, 0, 0x0091, 0X0B54),
+        /**
+         * 离线
+         */
+        SET_OFFLINE(FUNCTION_CODE.WRITE_06H, 0x0092, 0, 0x0092, 0X000),
+        /**
+         * 自动
+         */
+        SET_AUTO(FUNCTION_CODE.WRITE_06H, 0x0092, 0, 0x0092, 0X001),
+        /**
+         * 在线
+         */
+        SET_ONLINE(FUNCTION_CODE.WRITE_06H, 0x0092, 0, 0x0092, 0X002);
+
+        /**
+         * 功能码
+         */
+        private FUNCTION_CODE functionCode;
+
+        /**
+         * 读取和写入的开始偏移量
+         */
+        private int offset;
+
+        /**
+         * 长度 10进制
+         */
+        private int length;
+
+        /**
+         * PLC地址
+         */
+        private int address;
+
+        /**
+         * 命令
+         */
+        private int command;
+
+        CHARGER_ADDRESS_MEANING(FUNCTION_CODE functionCode, int offset, int length, int address, int command) {
+            this.functionCode = functionCode;
+            this.offset = offset;
+            this.length = length;
+            this.address = address;
+            this.command = command;
+        }
+
+        public FUNCTION_CODE getFunctionCode() {
+            return functionCode;
+        }
+
+        public int getOffset() {
+            return offset;
+        }
+
+        public int getLength() {
+            return length;
+        }
+
+        public int getAddress() {
+            return address;
+        }
+
+        public int getCommand() {
+            return command;
+        }
+    }
+
+    /**
+     * 充电机状态:
+     * 第4个字节(状态代码) 第5个字节(故障代码) 第6个字节(各种状态,有些功能需要硬件支持)
+     * 假设:第4个字节[00000110] 第5个字节[00000101] 第6个[00000100]
+     * 放在同一个数组中表示:[0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
+     */
+    public enum CHARGER_STATUS {
+
+        // 4bit
+        BIT_04_0("待机", 0),
+        BIT_04_1("故障", 1),
+        BIT_04_2("进行", 2),
+        BIT_04_3("完成", 3),
+        BIT_04_4("离线", 4),
+        BIT_04_5("在线", 5),
+        BIT_04_6("空", 6),
+        BIT_04_7("空", 7),
+
+        // 5bit
+        BIT_05_0("总故障", 8),
+        BIT_05_1("过流", 9),
+        BIT_05_2("过压", 10),
+        BIT_05_3("短路", 11),
+        BIT_05_4("电池未接", 12),
+        BIT_05_5("电池反接", 13),
+        BIT_05_6("模块通信故障", 14),
+        BIT_05_7("Can通信超时", 15),
+
+        // 6bit
+        BIT_06_0("归位", 16),
+        BIT_06_1("正在伸出", 17),
+        BIT_06_2("正在退回", 18),
+        BIT_06_3("伸出充电", 19),
+        BIT_06_4("伸出到底", 20),
+        BIT_06_5("伸缩故障", 21),
+        BIT_06_6("压紧", 22),
+        BIT_06_7("红外到位", 23);
+
+        /**
+         * 判断某位是否为true
+         *
+         * @param booleans
+         * @return
+         */
+        public boolean isTrue(boolean[] booleans) {
+            return booleans[this.getIndex()];
+        }
+
+        /**
+         * 获取枚举类型和状态对应关系表
+         *
+         * @param booleans
+         * @return
+         */
+        public static Map<CHARGER_STATUS, Boolean> getMapping(boolean[] booleans) {
+            if (booleans == null) {
+                return null;
+            }
+            Map<CHARGER_STATUS, Boolean> map = new LinkedHashMap<>();
+            for (CHARGER_STATUS value : values()) {
+                map.put(value, value.isTrue(booleans));
+            }
+            return map;
+        }
+
+        /**
+         * 获取描述和状态对应关系表
+         *
+         * @param booleans
+         * @return
+         */
+        public static Map<String, Boolean> getNameMapping(boolean[] booleans) {
+            if (booleans == null) {
+                return null;
+            }
+            Map<String, Boolean> map = new LinkedHashMap<>();
+            Map<CHARGER_STATUS, Boolean> mapping = getMapping(booleans);
+            mapping.forEach((k, v) -> map.put(k.getDescription(), v));
+            mapping.remove(BIT_04_6.getDescription());
+            return map;
+        }
+
+        /**
+         * 状态描述
+         */
+        private String description;
+        /**
+         * 在数组中下标
+         */
+        private int index;
+
+        CHARGER_STATUS(String description, int index) {
+            this.description = description;
+            this.index = index;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+
+        public int getIndex() {
+            return index;
+        }
+    }
+}

+ 4 - 3
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -1,5 +1,8 @@
 package com.ruoyi.framework.config;
 
+import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;
+import com.ruoyi.framework.security.handle.AuthenticationEntryPointImpl;
+import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.HttpMethod;
@@ -14,9 +17,6 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 import org.springframework.security.web.authentication.logout.LogoutFilter;
 import org.springframework.web.filter.CorsFilter;
-import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;
-import com.ruoyi.framework.security.handle.AuthenticationEntryPointImpl;
-import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
 
 /**
  * spring security配置
@@ -115,6 +115,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/wcs/**").anonymous()
                 .antMatchers("/api/wcstask/**").permitAll()
                 .antMatchers("/test/**").permitAll()
+                .antMatchers("/ams/**").permitAll()
                 // 库位视图
                 .antMatchers("/ams/locationView/**").permitAll()
                 // 除上面外的所有请求全部需要鉴权认证

+ 59 - 0
warewms-ams/src/main/java/com/ruoyi/ams/agv/car/domain/CarInfo.java

@@ -0,0 +1,59 @@
+package com.ruoyi.ams.agv.car.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 入库单明细对象 wms_doc_asn_details
+ * 
+ * @author ruoyi
+ * @date 2022-11-14
+ */
+@Data
+public class CarInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "车编号")
+    @TableField(value = "carNo")
+    private String carNo;
+
+    @ApiModelProperty(value = "仓库编号")
+    private String warehouseId;
+
+    @ApiModelProperty(value = "状态")
+    private String state;
+
+    @ApiModelProperty(value = "是否启用")
+    private String activeFlag;
+
+    @ApiModelProperty(value = "电池")
+    private String battery;
+
+    @ApiModelProperty(value = "x轴")
+    private String x;
+
+    @ApiModelProperty(value = "y轴")
+    private String y;
+
+    @ApiModelProperty(value = "时间")
+    private String userdefine1;
+
+    @ApiModelProperty(value = "时间")
+    private String userdefine2;
+
+    @ApiModelProperty(value = "时间")
+    private String userdefine3;
+
+    @ApiModelProperty(value = "时间")
+    private String userdefine4;
+
+    @ApiModelProperty(value = "时间")
+    private String userdefine5;
+
+}

+ 24 - 0
warewms-ams/src/main/java/com/ruoyi/ams/agv/car/dto/CarInfoDTO.java

@@ -0,0 +1,24 @@
+package com.ruoyi.ams.agv.car.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CarInfoDTO implements Serializable {
+
+    private static final long serialVersionUID = 4857035237485972793L;
+
+    @ApiModelProperty(value = "车辆编号")
+    private String carNo;
+
+    @ApiModelProperty(value = "电池")
+    private String battery;
+
+    @ApiModelProperty(value = "x轴坐标")
+    private String x;
+
+    @ApiModelProperty(value = "y轴坐标")
+    private String y;
+}

+ 19 - 0
warewms-ams/src/main/java/com/ruoyi/ams/agv/car/mapper/CarInfoMapper.java

@@ -0,0 +1,19 @@
+package com.ruoyi.ams.agv.car.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.ams.agv.car.domain.CarInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 入库单明细Mapper接口
+ *
+ * @author ruoyi
+ * @date 2022-11-03
+ */
+@Mapper
+public interface CarInfoMapper extends BaseMapper<CarInfo> {
+
+    CarInfo queryInfoByCarNo(Integer carNo);
+
+    int updateCarInfo(CarInfo carInfo);
+}

+ 17 - 0
warewms-ams/src/main/java/com/ruoyi/ams/agv/car/service/ICarInfoService.java

@@ -0,0 +1,17 @@
+package com.ruoyi.ams.agv.car.service;
+
+import com.ruoyi.ams.agv.car.domain.CarInfo;
+import com.ruoyi.ams.agv.car.dto.CarInfoDTO;
+
+/**
+ * 入库单Service接口
+ *
+ * @author ruoyi
+ * @date 2022-10-12
+ */
+public interface ICarInfoService {
+
+    CarInfoDTO queryInfoByCarNo(Integer carNo);
+
+    int updateCarInfo(CarInfo carInfo);
+}

+ 39 - 0
warewms-ams/src/main/java/com/ruoyi/ams/agv/car/service/impl/CarInfoServiceImpl.java

@@ -0,0 +1,39 @@
+package com.ruoyi.ams.agv.car.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.ruoyi.ams.agv.car.domain.CarInfo;
+import com.ruoyi.ams.agv.car.dto.CarInfoDTO;
+import com.ruoyi.ams.agv.car.mapper.CarInfoMapper;
+import com.ruoyi.ams.agv.car.service.ICarInfoService;
+import com.ruoyi.common.utils.ConvertUtils;
+import io.jsonwebtoken.lang.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 入库单Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2022-10-12
+ */
+@Service
+public class CarInfoServiceImpl implements ICarInfoService {
+
+    @Autowired
+    private CarInfoMapper carInfoMapper;
+
+
+    @Override
+    public CarInfoDTO queryInfoByCarNo(Integer carNo) {
+        CarInfo carInfo = carInfoMapper.queryInfoByCarNo(carNo);
+        Assert.isTrue(ObjectUtil.isNotNull(carInfo), "车辆编号有误!");
+        return ConvertUtils.sourceToTarget(carInfo, CarInfoDTO.class);
+    }
+
+    @Override
+    public int updateCarInfo(CarInfo carInfo) {
+        return carInfoMapper.updateCarInfo(carInfo);
+    }
+
+
+}

+ 11 - 0
warewms-ams/src/main/java/com/ruoyi/ams/agv/car/vo/CarInfoVO.java

@@ -0,0 +1,11 @@
+package com.ruoyi.ams.agv.car.vo;
+
+import com.ruoyi.ams.agv.car.domain.CarInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class CarInfoVO extends CarInfo {
+
+}

+ 3 - 6
warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/AciService.java

@@ -37,9 +37,9 @@ public class AciService {
 
     private static final int BUFF_SIZE = 2048;
 
-    private static final String IP_ADDR = "127.0.0.1";
+    private static final String IP = "127.0.0.1";
 
-    private static final int IP_PORT = 30002;
+    private static final int PORT = 30002;
 
     @Autowired
     private SocketBufferService socketBufferService;
@@ -51,9 +51,6 @@ public class AciService {
     @SuppressWarnings("InfiniteLoopStatement")
     public void start() throws IOException {
 
-        String ip_addr = IP_ADDR; //redisUtils.get(RedisEnum.NDC_IP.getMessage());
-        int ip_port = IP_PORT; //redisUtils.getInt(RedisEnum.NDC_PORT.getMessage());
-
         SocketChannel socketChannel = SocketChannel.open();
         socketChannel.configureBlocking(false); // 解决了IO阻塞
         while (true) {
@@ -66,7 +63,7 @@ public class AciService {
                         socketChannel.configureBlocking(false); // 解决了IO阻塞
                     }
                     // 非阻塞模式下 这段代码并不是等到连接建立之后再往下执行
-                    SocketAddress socketAddress = new InetSocketAddress(ip_addr, ip_port);
+                    SocketAddress socketAddress = new InetSocketAddress(IP, PORT);
                     socketChannel.connect(socketAddress);
                     Thread.sleep(2000);
                     if (socketChannel.isConnectionPending()) {

+ 0 - 3
warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/common/Aci.java

@@ -29,7 +29,4 @@ public class Aci {
     public static final int FUN_HEARTBEAT_POLL = 4;
     public static final int FUN_HEARTBEAT_ACK = 5;
 
-    public static void main(String[] args) {
-
-    }
 }

+ 30 - 43
warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/service/impl/StatusUpdateServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ruoyi.ams.agv.ndc.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.ruoyi.ams.agv.ndc.domain.AmsTask;
 import com.ruoyi.ams.agv.ndc.entity.CallbackResult;
 import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
@@ -9,6 +10,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
+import java.util.Map;
+
 @Slf4j
 @Component
 public class StatusUpdateServiceImpl implements StatusUpdateService {
@@ -18,53 +22,36 @@ public class StatusUpdateServiceImpl implements StatusUpdateService {
     @Autowired
     private IWcsTaskService wcsTaskService;
 
+    private final static Map<Integer, Integer> eventIdToStatus =  new HashMap<Integer, Integer>(){
+        {
+            put(86, 1);
+            put(90, 2);
+            put(91, 4);
+            put(92, 6);
+            put(85, 7);
+            put(113, 8);
+            put(114, 2);
+        }
+    };
+
     @Override
     public void updateStatus(Long id, Integer carNo) {
         AmsTask amsTask = amsTaskService.selectAmsTaskById(id);
-        if (amsTask != null) {
-            log.info("任务回调-------------------------》" + amsTask.getTaskNo());
-            if (amsTask.getAciIndex() == null) {
-                log.error("没有index,未下发的任务");
-            }
-            CallbackResult result = new CallbackResult();
-            result.setCarNo(carNo);
-            result.setTaskNo(amsTask.getTaskNo());
-            //判断状态
-            if(false){
-//            if (null != amsTask.getSystemStatus() && amsTask.getSystemStatus() == 3) {
-//                result.setState(2);
-//            } else if (null != amsTask.getSystemStatus() && amsTask.getSystemStatus() == 4) {
-//                result.setState(7);
-            } else {
-                switch (amsTask.getEvent().intValue()) {
-                    case 86:
-                        result.setState(1);
-                        break;
-                    case 90:
-                        result.setState(2);
-                        break;
-                    case 91:
-                        result.setState(4);
-                        break;
-                    case 92:
-                        result.setState(6);
-                        break;
-                    case 85:
-                        result.setState(7);
-                        break;
-                    case 113:
-                        result.setState(8);
-                        break;
-                    case 114:
-                        result.setState(2);
-                        break;
-                }
-            }
+        if (ObjectUtil.isNull(amsTask)) return;
 
-            wcsTaskService.callBack(result.getTaskNo(), result.getState(), result.getCarNo());
-
-            amsTask.setSystemStatus(result.getState());
-            amsTaskService.updateAmsTask(amsTask);
+        log.info("任务回调-------------------------》" + amsTask.getTaskNo());
+        if (amsTask.getAciIndex() == null) {
+            log.error("没有index,未下发的任务");
         }
+        CallbackResult result = new CallbackResult();
+        result.setCarNo(carNo);
+        result.setTaskNo(amsTask.getTaskNo());
+
+        //判断状态
+        result.setState(eventIdToStatus.get(amsTask.getEvent()));
+        wcsTaskService.callBack(result.getTaskNo(), result.getState(), result.getCarNo());
+
+        amsTask.setSystemStatus(result.getState());
+        amsTaskService.updateAmsTask(amsTask);
     }
 }

+ 13 - 37
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnHeaderServiceImpl.java

@@ -1,21 +1,22 @@
 package com.ruoyi.ams.asn.service.impl;
 
-import java.math.BigDecimal;
-import java.util.*;
-
 import cn.hutool.core.comparator.CompareUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
+import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
 import com.ruoyi.ams.asn.form.PaForm;
 import com.ruoyi.ams.asn.form.StockForm;
 import com.ruoyi.ams.asn.form.UnlockForm;
 import com.ruoyi.ams.asn.mapper.WmsDocAsnDetailsMapper;
+import com.ruoyi.ams.asn.mapper.WmsDocAsnHeaderMapper;
+import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
 import com.ruoyi.ams.asn.vo.SearchStockVO;
 import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
 import com.ruoyi.ams.business.IBusinessService;
 import com.ruoyi.ams.config.domain.dto.LotattDTO;
 import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
-import com.ruoyi.ams.config.service.IFlowConfigHeaderService;
 import com.ruoyi.ams.erp.domain.ErpBarcodes;
 import com.ruoyi.ams.erp.domain.ErpOrderList;
 import com.ruoyi.ams.erp.service.IErpBarcodesService;
@@ -24,16 +25,12 @@ import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.domain.form.InvLocIdSearchFrom;
 import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
 import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
-import com.ruoyi.ams.inv.service.IActTransactionLogService;
 import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.lineCall.domain.form.LineCallForm;
 import com.ruoyi.ams.lineCall.domain.form.LineCallListFrom;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
-import com.ruoyi.ams.order.mapper.WmsDocOrderDetailsMapper;
-import com.ruoyi.ams.order.mapper.WmsDocOrderHeaderMapper;
-import com.ruoyi.ams.order.service.IActAllocationDetailsService;
 import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
@@ -43,25 +40,21 @@ import com.ruoyi.base.form.SnCheckForm;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.base.service.IBaseSkuService;
 import com.ruoyi.base.service.ICodeSkuRelationshipService;
-import com.ruoyi.base.utils.IdSequenceUtils;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import io.jsonwebtoken.lang.Assert;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-
-import com.ruoyi.common.utils.StringUtils;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
-import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
-import com.ruoyi.ams.asn.mapper.WmsDocAsnHeaderMapper;
-import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
-import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
+
+import java.math.BigDecimal;
+import java.util.*;
 
 /**
  * 入库单Service业务层处理
@@ -82,28 +75,16 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
     @Autowired
     private IWmsDocOrderHeaderService wmsDocOrderHeaderService;
     @Autowired
-    private WmsDocOrderDetailsMapper wmsDocOrderDetailsMapper;
-    @Autowired
-    private WmsDocOrderHeaderMapper wmsDocOrderHeaderMapper;
-    @Autowired
     private IBaseSkuService baseSkuService;
     @Autowired
     private IWmsBoxInfoService wmsBoxInfoService;
     @Autowired
-    private IActTransactionLogService actTransactionLogService;
-    @Autowired
-    private IdSequenceUtils idSequenceUtils;
-    @Autowired
     private IInvLotAttService invLotAttService;
     @Autowired
     private InvLotLocIdMapper invLotLocIdMapper;
     @Autowired
-    private IActAllocationDetailsService actAllocationDetailsService;
-    @Autowired
     private ICodeSkuRelationshipService codeSkuRelationshipService;
     @Autowired
-    private IFlowConfigHeaderService flowConfigHeaderService;
-    @Autowired
     private IBusinessService businessService;
     @Autowired
     private IBaseLocationInfoService baseLocationInfoService;
@@ -170,7 +151,7 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
     @Transactional
     @Override
     public int insertWmsDocAsnHeader(WmsDocAsnHeader wmsDocAsnHeader) {
-        String asnNo = idSequenceUtils.generateId("ASNNO");
+        String asnNo = IdWorker.getIdStr();
         wmsDocAsnHeader.setAsnNo(asnNo);
         wmsDocAsnHeader.setEdiSendFlag("N");
         int rows = wmsDocAsnHeaderMapper.insertWmsDocAsnHeader(wmsDocAsnHeader);
@@ -591,7 +572,7 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                     String orderno = invLotAtt.getLotatt15();
                     WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectDocOrderHeaderByOrderNo(orderno);
                     if (wmsDocOrderHeader != null) {
-                        if (wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
+                        if (wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYPE.BH.getValue())) {
                             // 未备货库存
                             if (invLotLocId.getQtyallocated().compareTo(BigDecimal.ZERO) != 0) {
                                 if (StringUtils.isEmpty(invLotAtt.getLotatt14())) {
@@ -599,7 +580,7 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                                 }
                             }
 
-                        } else if (wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.ZC.getValue())) {
+                        } else if (wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYPE.ZC.getValue())) {
                             // 未拣货库存
                             if (invLotLocId.getQtyallocated().compareTo(BigDecimal.ZERO) != 0) {
                                 return AjaxResult.error("托盘上有未拣货的库存不可回库!条码号:" + invLotAtt.getLotatt02());
@@ -783,12 +764,7 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
     @Override
     public AjaxResult addOrUpdateErp(List<ErpOrderList> erpOrderList) {
         String asnNo = "";
-//        String erpName = erpOrderList.get(0).getOrderName();
-//        WmsDocAsnHeader asnHeader = this.selectWmsDocAsnHeaderByErpNo(erpName);
-//        if (asnHeader != null && StringUtils.isNotEmpty(asnHeader.getAsnNo())) {
-//            asnNo = asnHeader.getAsnNo();
-//        }else {
-        asnNo = idSequenceUtils.generateId("ASNNO");
+        asnNo = IdWorker.getIdStr();
 //        }
         String orderNo = "";
         String orderName = "";

+ 32 - 135
warewms-ams/src/main/java/com/ruoyi/ams/business/BusinessServiceImpl.java

@@ -1,10 +1,12 @@
 package com.ruoyi.ams.business;
 
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.ruoyi.ams.agv.ndc.common.ByteUtil;
 import com.ruoyi.ams.agv.ndc.common.CRC16Util;
 import com.ruoyi.ams.agv.ndc.domain.AmsTask;
 import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
-import com.ruoyi.ams.box.service.IWmsBoxInfoService;
 import com.ruoyi.ams.config.domain.AsnSoStrategy;
 import com.ruoyi.ams.config.domain.dto.*;
 import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
@@ -69,23 +71,15 @@ public class BusinessServiceImpl implements IBusinessService {
     @Autowired
     private RedisCache redisCache;
     @Autowired
-    private IWmsBoxInfoService wmsBoxInfoService;
-    @Autowired
     private IWcsTaskService wcsTaskService;
     @Autowired
     private IAmsTaskService amsTaskService;
     @Autowired
     private IFlowConfigHeaderService flowConfigHeaderService;
 
-    public static int geniKey(String taskNo) {
+    public static int genIKey(String taskNo) {
         int res = CRC16Util.calcCrc16(ByteUtil.string2byteArray(taskNo));
-        if (res == 0) {
-            BigDecimal t = new BigDecimal(taskNo);
-            t = t.add(BigDecimal.ONE);
-            return geniKey(t.toString());
-        } else {
-            return res;
-        }
+        return res == 0 ? genIKey(NumberUtil.add(new BigDecimal(taskNo), BigDecimal.ONE).toString()) : res;
     }
 
     @Transactional
@@ -537,24 +531,6 @@ public class BusinessServiceImpl implements IBusinessService {
             int carNo = redisCache.getCacheObject(RedisKey.AGV_TASK_CAR_NO);
             return carNo == 1 ? 2 : 1;
         }
-
-//        if (redisCache.getCacheObject(RedisKey.AGV01_TASK_NUM) == null
-//                && redisCache.getCacheObject(RedisKey.AGV02_TASK_NUM) == null) {
-//            return  0;
-//        } else if (redisCache.getCacheObject(RedisKey.AGV01_TASK_NUM) == null
-//                && redisCache.getCacheObject(RedisKey.AGV02_TASK_NUM) != null
-//                && (int) redisCache.getCacheObject(RedisKey.AGV02_TASK_NUM) != 0) {
-//            return  1;
-//        } else if (redisCache.getCacheObject(RedisKey.AGV02_TASK_NUM) == null
-//                && redisCache.getCacheObject(RedisKey.AGV01_TASK_NUM) != null
-//                && (int) redisCache.getCacheObject(RedisKey.AGV01_TASK_NUM) != 0) {
-//            return  2;
-//        } else if (redisCache.getCacheObject(RedisKey.AGV01_TASK_NUM) != null
-//                && redisCache.getCacheObject(RedisKey.AGV02_TASK_NUM) != null) {
-//            int agv01 = redisCache.getCacheObject(RedisKey.AGV01_TASK_NUM);
-//            int agv02 = redisCache.getCacheObject(RedisKey.AGV02_TASK_NUM);
-//            return agv01 > agv02 ? 2 : 1;
-//        }
         return 0;
     }
 
@@ -600,119 +576,40 @@ public class BusinessServiceImpl implements IBusinessService {
 
     @Override
     public List<WcsTask> genTask(BaseLocationInfo locationFrom, BaseLocationInfo locationTo, FlowConfigHeaderVO flowConfigHeaderVO, AgvCallDTO agvCallDTO, Long token) {
-        if (flowConfigHeaderVO.getLocationFromStrategyFlag().equals("N")) {
-            if (locationFrom == null) {
-                throw new ServiceException("起始库位不能为空", token);
-            }
+        if (flowConfigHeaderVO.getLocationFromStrategyFlag().equals("N") && ObjectUtil.isNull(locationFrom)) {
+            throw new ServiceException("起始库位不能为空", token);
         }
-        if (flowConfigHeaderVO.getLocationToStrategyFlag().equals("N")) {
-            if (locationTo == null) {
-//                throw new ServiceException("目标库位不能为空", token);
-            }
+        if (flowConfigHeaderVO.getLocationToStrategyFlag().equals("N") && ObjectUtil.isNull(locationTo)) {
+            throw new ServiceException("目标库位不能为空", token);
         }
 
         List<WcsTask> wcsTaskList = new ArrayList<>();
-        if (StringUtils.isEmpty(flowConfigHeaderVO.getRootFlow())) {
-            String taskNo = System.currentTimeMillis() + "";
-            WcsTask wcsTask = new WcsTask();
-            wcsTask.setTaskNo(taskNo);
-            if (locationFrom != null) {
-                wcsTask.setAreaFrom(locationFrom.getZoneId().toString());
-                wcsTask.setLocationFrom(locationFrom.getId().toString());
-            }
-            if (locationTo != null) {
-                wcsTask.setAreaTo(locationTo.getZoneId() + "");
-                wcsTask.setLocationTo(locationTo.getId().toString());
-            } else {
-                wcsTask.setLocationTo("待分配");
-            }
-            wcsTask.setState(9L);
-            wcsTask.setPriority(1L);
-            wcsTask.setShopId(Constant.WAREHOUSE_ID.toString());
-            wcsTask.setCreateDate(new Date());
-            wcsTask.setBusinessType("01");
-            wcsTask.setTaskType(Constant.TASK_TYPE.FORWARD.getValue());
-            wcsTask.setExt8(token.toString());
-            wcsTask.setExt7(flowConfigHeaderVO.getId().toString());
-            wcsTask.setExt6(agvCallDTO.getOrderNo());
-            wcsTask.setExt5(agvCallDTO.getPalletNo());
-            wcsTask.setExt4(agvCallDTO.getTaskType());// 任务类型
-            wcsTask.setExtParam(agvCallDTO.getExtParam());
-            wcsTask.setRemark(agvCallDTO.getAgvCallItemDTOList().get(0).isSuperHigh() ? "超高!" : "");
-            wcsTaskList.add(wcsTask);
-            businessService.addTask(wcsTask);
-            if (locationTo != null) {
-                // 入库任务,记录当前是哪辆车接了任务
-                if (locationTo.getZoneId().equals(Constant.ZONE_TYPE.ZONE_INV.getValue())) {
-                    if (locationTo.getFoldedTag().equals("1")) {
-                        redisCache.setCacheObject(RedisKey.AGV_TASK_CAR_NO, 1);
-                    } else if (locationTo.getFoldedTag().equals("2")) {
-                        redisCache.setCacheObject(RedisKey.AGV_TASK_CAR_NO, 2);
-                    }
-                }
-                // 入库任务,统计两辆车分别发了多少任务
-                if (locationTo.getZoneId().equals(Constant.ZONE_TYPE.ZONE_INV.getValue())) {
-                    if (locationTo.getFoldedTag().equals("1")) {
-                        if (redisCache.getCacheObject(RedisKey.AGV01_TASK_NUM) == null) {
-                            redisCache.setCacheObject(RedisKey.AGV01_TASK_NUM, 1);
-                        } else {
-                            int num = redisCache.getCacheObject(RedisKey.AGV01_TASK_NUM);
-                            redisCache.setCacheObject(RedisKey.AGV01_TASK_NUM, 1 + num);
-                        }
-                    } else if (locationTo.getFoldedTag().equals("2")) {
-                        if (redisCache.getCacheObject(RedisKey.AGV02_TASK_NUM) == null) {
-                            redisCache.setCacheObject(RedisKey.AGV02_TASK_NUM, 1);
-                        } else {
-                            int num = redisCache.getCacheObject(RedisKey.AGV02_TASK_NUM);
-                            redisCache.setCacheObject(RedisKey.AGV02_TASK_NUM, 1 + num);
-                        }
-                    }
-                }
-            }
-        } else {
-            /*//获取对应的流程
-            List<FlowConfigHeader> headerVOList = flowConfigHeaderService.sortFlowConfigHeader(Long.parseLong(flowConfigHeaderVO.getRootFlow()));
-            AsnSoStrategy asnSoStrategy = asnSoStrategyMapper.selectAsnSoStrategy();
-            String taskNo = System.currentTimeMillis() + "";
-            WcsTask wcsTask = new WcsTask();
-            wcsTask.setTaskNo(taskNo);
+        if (StringUtils.isNotBlank(flowConfigHeaderVO.getRootFlow())) return wcsTaskList;
+        String taskNo = IdWorker.getIdStr();
+        WcsTask wcsTask = new WcsTask();
+        wcsTask.setTaskNo(taskNo);
+        if (locationFrom != null) {
             wcsTask.setAreaFrom(locationFrom.getZoneId().toString());
             wcsTask.setLocationFrom(locationFrom.getId().toString());
+        }
+        if (locationTo != null) {
             wcsTask.setAreaTo(locationTo.getZoneId() + "");
             wcsTask.setLocationTo(locationTo.getId().toString());
-            wcsTask.setState(9L);
-            wcsTask.setPriority(1L);
-            wcsTask.setCreateDate(new Date());
-            wcsTask.setBusinessType("01");
-            wcsTask.setTaskType("");
-            wcsTaskList.add(wcsTask);
-            String beforeTaskNo = taskNo;
-            for (FlowConfigHeader flowConfigHeader : headerVOList) {
-                if (StringUtils.isEmpty(flowConfigHeader.getRelFlow()) && flowConfigHeader.getRootFlow().equals(flowConfigHeader.getId().toString())) {
-                    continue;
-                }
-                List<BaseLocationInfo> locationFromList = this.convertLocation(flowConfigHeader.getLocationFrom(), 1L);
-                List<BaseLocationInfo> locationToList = this.convertLocation(flowConfigHeader.getLocationTo(), 1L);
-                locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "MV", null, null);
-                locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "MV", null, null);
-                String currentNo = SnowflakeIdWorker.generateId().toString();
-                WcsTask child = new WcsTask();
-                child.setTaskNo(currentNo);
-                child.setParentTask(taskNo);
-                child.setBeforeTask(beforeTaskNo);
-                child.setAreaFrom(locationFrom.getZoneId().toString());
-                child.setLocationFrom(locationFrom.getId().toString());
-                child.setAreaTo(locationTo.getZoneId() + "");
-                child.setLocationTo(locationTo.getId().toString());
-                child.setState(9L);
-                child.setPriority(1L);
-                child.setCreateDate(new Date());
-                child.setBusinessType("01");
-                child.setTaskType("");
-                wcsTaskList.add(child);
-                beforeTaskNo = currentNo;
-            }*/
         }
+        wcsTask.setState(Long.parseLong(Constant.TASK_STS.TASK9.getValue().toString()));
+        wcsTask.setPriority(1L);
+        wcsTask.setShopId(Constant.WAREHOUSE_ID.toString());
+        wcsTask.setCreateDate(new Date());
+        wcsTask.setBusinessType(Constant.TASK_BUSINESS_TYPE.TASK_01.getValue());
+        wcsTask.setTaskType(Constant.TASK_TYPE.FORWARD.getValue());
+        wcsTask.setExt8(token.toString());
+        wcsTask.setExt7(flowConfigHeaderVO.getId().toString());
+        wcsTask.setExt6(agvCallDTO.getOrderNo());
+        wcsTask.setExt5(agvCallDTO.getPalletNo());
+        wcsTask.setExt4(agvCallDTO.getTaskType());// 任务类型
+        wcsTask.setExtParam(agvCallDTO.getExtParam());
+        wcsTaskList.add(wcsTask);
+        businessService.addTask(wcsTask);
         return wcsTaskList;
     }
 
@@ -797,7 +694,7 @@ public class BusinessServiceImpl implements IBusinessService {
         }
         amsTask.setIsDelete(0);
         amsTask.setAciAccept(0);
-        amsTask.setIkey((long) geniKey(amsTask.getTaskNo()));
+        amsTask.setIkey((long) genIKey(amsTask.getTaskNo()));
         amsTask.setPriority(10);
         // 充电任务直接传参数
         if (wcsTask.getBusinessType().equals(Constant.TASK_BUSINESS_TYPE.TASK_POWER.getValue())) {
@@ -842,7 +739,7 @@ public class BusinessServiceImpl implements IBusinessService {
                     break;
                 }
                 // 出库任务分配目标库位
-                if (wcsTask.getLocationTo().equals("待分配")) {
+                if (StringUtils.isBlank(wcsTask.getLocationTo())) {
                     // 出库均匀任务判断
                     BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(wcsTask.getLocationFrom(), Constant.WAREHOUSE_ID);
                     String agvNo = baseLocationInfo.getFoldedTag(); // 车号

+ 1 - 2
warewms-ams/src/main/java/com/ruoyi/ams/erp/service/impl/SyncServiceImpl.java

@@ -23,7 +23,6 @@ import com.ruoyi.base.service.IBaseSkuService;
 import com.ruoyi.base.service.IBaseSkuTypeService;
 import com.ruoyi.base.service.ICodeSkuRelationshipService;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.http.HttpRequest;
 import lombok.extern.slf4j.Slf4j;
@@ -255,7 +254,7 @@ public class SyncServiceImpl implements ISyncService {
         List<WmsDocOrderHeader> wmsDocOrderHeaders = wmsDocOrderHeaderService.selectWmsDocOrderHeaderList(wmsDocOrderHeader);
         for (WmsDocOrderHeader wmsDocOrderHeader1 : wmsDocOrderHeaders) {
             // 理货不回传
-            if (wmsDocOrderHeader1.getOrderType().equals(Constant.ORDER_TYP.LH.getValue())) {
+            if (wmsDocOrderHeader1.getOrderType().equals(Constant.ORDER_TYPE.LH.getValue())) {
                 continue;
             }
             String orderNo = wmsDocOrderHeader1.getOrderNo();

+ 5 - 11
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/ActTransactionLogServiceImpl.java

@@ -1,16 +1,12 @@
 package com.ruoyi.ams.inv.service.impl;
 
-import java.util.Date;
-import java.util.List;
-
-import com.ruoyi.base.utils.IdSequenceUtils;
-import com.ruoyi.common.core.domain.model.LoginUser;
-import com.ruoyi.common.utils.SecurityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.ruoyi.ams.inv.mapper.ActTransactionLogMapper;
 import com.ruoyi.ams.inv.domain.ActTransactionLog;
+import com.ruoyi.ams.inv.mapper.ActTransactionLogMapper;
 import com.ruoyi.ams.inv.service.IActTransactionLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * 库存事务Service业务层处理
@@ -22,8 +18,6 @@ import com.ruoyi.ams.inv.service.IActTransactionLogService;
 public class ActTransactionLogServiceImpl implements IActTransactionLogService {
     @Autowired
     private ActTransactionLogMapper actTransactionLogMapper;
-    @Autowired
-    private IdSequenceUtils idSequenceUtils;
 
     /**
      * 查询库存事务

+ 6 - 43
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotLocIdServiceImpl.java

@@ -3,6 +3,7 @@ package com.ruoyi.ams.inv.service.impl;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
@@ -30,7 +31,6 @@ import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.domain.BaseLocationZone;
 import com.ruoyi.base.domain.form.BasLocationForm;
 import com.ruoyi.base.service.IBaseLocationInfoService;
-import com.ruoyi.base.utils.IdSequenceUtils;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.ServiceException;
@@ -68,8 +68,6 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
     @Autowired
     private IBaseLocationInfoService baseLocationInfoService;
     @Autowired
-    private IdSequenceUtils idSequenceUtils;
-    @Autowired
     private IWmsBoxInfoService iWmsBoxInfoService;
     @Autowired
     private IInvLotLocIdService invLotLocIdService;
@@ -614,27 +612,18 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         invLotAtt.setSku(sku);
         //查询lotatt是否存在
         String lotnum;
-        // todo 注释掉的可能以后会用到,物料码盘的时候同sku批次都是一样的,所以需要在原有库存上进行累加。
-//        List<InvLotAtt> queryList = invLotAttMapper.selectInvLotAttList(invLotAtt);
         List<InvLotAtt> queryList = new ArrayList<>();
-//        if (queryList != null && queryList.size() > 0) {
         if (false) {
             invLotAtt = queryList.get(0);
             lotnum = invLotAtt.getLotnum();
         } else {
-            lotnum = idSequenceUtils.generateId("LOTNUMBER");
+            lotnum = IdWorker.getIdStr();
             invLotAtt.setLotnum(lotnum);
             invLotAtt.setSku(sku);
             invLotAtt.setCustomerId(customerId);
             invLotAtt.setCreateTime(DateUtils.getNowDate());
             invLotAttMapper.insertInvLotAtt(invLotAtt);
         }
-//        InvLotLocId query = invLotLocIdMapper.selectInvLotLocIdByKey(lotnum, locationFrom, customerId, sku);
-//        if (query != null) {
-//            query.setQty(query.getQty().add(BigDecimal.valueOf(qty)));
-//            query.setQtyEach(query.getQty());
-//            invLotLocIdService.updateInvLotLocId(query);
-//        } else {
         InvLotLocId invLotLocId = new InvLotLocId();
         invLotLocId.setLotnum(lotnum);
         invLotLocId.setLocationId(locationFrom);
@@ -644,9 +633,6 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         invLotLocId.setQtyEach(new BigDecimal(qty));
         invLotLocId.setQtyallocated(qtyallocated);
         invLotLocId.setQtyallocatedEach(qtyallocated);
-//            invLotLocId.setQtyEach(new BigDecimal(0));
-//            invLotLocId.setQtyallocated(new BigDecimal(0));
-//            invLotLocId.setQtyallocatedEach(new BigDecimal(0));
         invLotLocId.setQtypa(BigDecimal.ZERO);
         invLotLocId.setQtyrpin(BigDecimal.ZERO);
         invLotLocId.setCreateTime(new Date());
@@ -669,27 +655,19 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         invLotAtt.setSku(sku);
         //查询lotatt是否存在
         String lotnum;
-        // todo 注释掉的可能以后会用到,物料码盘的时候同sku批次都是一样的,所以需要在原有库存上进行累加。
-//        List<InvLotAtt> queryList = invLotAttMapper.selectInvLotAttList(invLotAtt);
+
         List<InvLotAtt> queryList = new ArrayList<>();
-//        if (queryList != null && queryList.size() > 0) {
         if (false) {
             invLotAtt = queryList.get(0);
             lotnum = invLotAtt.getLotnum();
         } else {
-            lotnum = idSequenceUtils.generateId("LOTNUMBER");
+            lotnum = IdWorker.getIdStr();
             invLotAtt.setLotnum(lotnum);
             invLotAtt.setSku(sku);
             invLotAtt.setCustomerId(customerId);
             invLotAtt.setCreateTime(DateUtils.getNowDate());
             invLotAttMapper.insertInvLotAtt(invLotAtt);
         }
-//        InvLotLocId query = invLotLocIdMapper.selectInvLotLocIdByKey(lotnum, locationFrom, customerId, sku);
-//        if (query != null) {
-//            query.setQty(query.getQty().add(BigDecimal.valueOf(qty)));
-//            query.setQtyEach(query.getQty());
-//            invLotLocIdService.updateInvLotLocId(query);
-//        } else {
         InvLotLocId invLotLocId = new InvLotLocId();
         invLotLocId.setLotnum(lotnum);
         invLotLocId.setLocationId(locationFrom);
@@ -721,7 +699,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
             String sku = agvCallItemDTO.getSku();
             Double qty = agvCallItemDTO.getQty() == null ? 1D : agvCallItemDTO.getQty();
             // 批次表
-            String lotnum = idSequenceUtils.generateId("LOTNUMBER");
+            String lotnum = IdWorker.getIdStr();
             LotattDTO lotattDTO = agvCallItemDTO.getLotattDTO();
             InvLotAtt invLotAtt = new InvLotAtt();
             BeanUtils.copyProperties(lotattDTO, invLotAtt);
@@ -811,8 +789,6 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
                 //扣减原库存
                 inv.setQty(inv.getQty().subtract(currentQty));
                 inv.setQtyEach(inv.getQty());
-                //inv.setQtyallocated(inv.getQtyallocated().subtract(currentQty));
-                //inv.setQtyallocatedEach(inv.getQtyallocatedEach().subtract(currentQty));
                 invLotLocIdService.updateInvLotLocId(inv);
 
                 sumQty = sumQty.add(currentQty);
@@ -954,14 +930,6 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
             }
         }
         if (con) {
-//            WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(vo.getLotatt14());
-//            if (!wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS23.getValue())
-//                    && !wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS98.getValue())
-//                    && !wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS99.getValue())) {
-//
-//                return AjaxResult.error("备货单还未备货完成,不可直接出库!" + vo.getLotatt14());
-//            }
-//            return AjaxResult.error("备货库存库位释放请用【PDA备货库位释放】功能");
             // 转移库存到线边区
             return invLotLocIdService.releaseLocation(basLocationForm.getLocationNo(), Constant.LOC_SORTATION02_CACHE
                     , Constant.WAREHOUSE_ID, "PDA");
@@ -974,11 +942,6 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
                 lotatt15Null = false;
             }
         }
-//        if (lotatt15Null) {
-//            // 说明是移库,直接删除库存
-//            return AjaxResult.error("移库暂时不支持释放!");
-////            return invLotLocIdService.clear(baseLocationInfo.getId().toString(), Constant.WAREHOUSE_ID, "PDA");
-//        }
         // 转移库存到出库虚拟区
         return invLotLocIdService.releaseLocation(basLocationForm.getLocationNo(), Constant.LOC_SORTATION_CACHE
                 , Constant.WAREHOUSE_ID, "PDA");
@@ -1014,7 +977,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         if (!wmsDocOrderHeader.getOrderNo().equals(lineReleaseFrom.getOrderNo())) {
             return AjaxResult.error("托盘号对应的出库单号应该为:" + wmsDocOrderHeader.getSoReference1());
         }
-        if (!wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
+        if (!wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYPE.BH.getValue())) {
             return AjaxResult.success("单据类型为备货单才可出库!");
         }
         if (!wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS23.getValue())

+ 0 - 174
warewms-ams/src/main/java/com/ruoyi/ams/order/service/IWmsDocOrderHeaderService.java

@@ -9,9 +9,7 @@ import com.ruoyi.ams.order.dto.PalletMatchLogDTO;
 import com.ruoyi.ams.order.dto.PdaGroupDiskDTO;
 import com.ruoyi.ams.order.dto.ReversePickGroupDiskDTO;
 import com.ruoyi.ams.order.form.*;
-import com.ruoyi.ams.order.vo.CheckOutVO;
 import com.ruoyi.ams.order.vo.PickingListVO;
-import com.ruoyi.ams.order.vo.StockOrderVO;
 import com.ruoyi.base.domain.vo.CodeSkuRelationshipSoVO;
 import com.ruoyi.base.form.SnCheckSoForm;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -58,14 +56,6 @@ public interface IWmsDocOrderHeaderService {
      */
     List<WmsDocOrderHeader> selectWmsDocOrderHeaderList(WmsDocOrderHeader wmsDocOrderHeader);
 
-    /**
-     * 查询出库单头
-     *
-     * @param wmsDocOrderHeader 出库单头
-     * @return 出库单头集合
-     */
-    WmsDocOrderHeader selectWmsDocOrderHeaderByModel(WmsDocOrderHeader wmsDocOrderHeader);
-
     /**
      * 新增出库单头
      *
@@ -92,14 +82,6 @@ public interface IWmsDocOrderHeaderService {
      */
     int deleteWmsDocOrderHeaderByOrderNos(String[] orderNos);
 
-    /**
-     * 删除出库单头信息
-     *
-     * @param orderNo 出库单头主键
-     * @return 结果
-     */
-    int deleteWmsDocOrderHeaderByOrderNo(String orderNo);
-
     /**
      * 初始化表体
      *
@@ -108,16 +90,6 @@ public interface IWmsDocOrderHeaderService {
      */
     List<WmsDocOrderDetails> initOrderDetails(String orderNo);
 
-    /**
-     * 更新订单明细备货数
-     *
-     * @param orderNo     订单号
-     * @param orderLoneNo 订单明细
-     * @param qty         数量
-     * @param status      状态
-     * @return
-     */
-    int updateOrderDetailsStock(String orderNo, Long orderLoneNo, Double qty, String status);
 
     /**
      * 出库分配
@@ -127,21 +99,6 @@ public interface IWmsDocOrderHeaderService {
      */
     AjaxResult doAllocation(String orderNo);
 
-    /**
-     * 备货分配
-     *
-     * @param orderNo
-     * @return
-     */
-    AjaxResult doAllocationBH(String orderNo);
-
-    /**
-     * 多单分配
-     *
-     * @param orderNoList
-     * @return
-     */
-    AjaxResult doAllocation(List<String> orderNoList);
 
     /**
      * 出库分配
@@ -151,15 +108,6 @@ public interface IWmsDocOrderHeaderService {
      */
     AjaxResult doAllocationDetails(WmsDocOrderHeader header, WmsDocOrderDetails details);
 
-    /**
-     * 备货分配
-     *
-     * @param header
-     * @param details
-     * @return
-     */
-    AjaxResult doAllocationDetailsBH(WmsDocOrderHeader header, WmsDocOrderDetails details);
-
     /**
      * 查询拣货列表
      *
@@ -176,31 +124,6 @@ public interface IWmsDocOrderHeaderService {
      */
     AjaxResult toPick(PickForm pickForm);
 
-    /**
-     * 查询出库分配列表
-     *
-     * @param orderNoList
-     * @return
-     */
-    List<CheckOutVO> checkOutList(List<String> orderNoList);
-
-    /**
-     * 查询出库分配列表(备货完成的)
-     *
-     * @param orderNoList
-     * @return
-     */
-    List<CheckOutVO> checkOutListBh(List<String> orderNoList);
-
-    /**
-     * PDA备货反拣出库
-     * 查询备货单所有托盘上有不属于当前备货库存的托盘
-     *
-     * @param orderNoList
-     * @return
-     */
-    List<CheckOutVO> checkOutListBhGx(List<String> orderNoList);
-
     /**
      * 物料拉动
      *
@@ -208,22 +131,6 @@ public interface IWmsDocOrderHeaderService {
      */
     AjaxResult doCheckout(CheckOutInfoForm check);
 
-    /**
-     * 发运
-     *
-     * @param orderNo
-     * @return
-     */
-    AjaxResult doShipped(String orderNo);
-
-    /**
-     * 查询待出库明细
-     *
-     * @param palletNo
-     * @return
-     */
-    List<StockOrderVO> selectStockOrder(String palletNo);
-
     /**
      * 新增出库单明细
      *
@@ -232,21 +139,6 @@ public interface IWmsDocOrderHeaderService {
      */
     int insertWmsDocOrderDetails(WmsDocOrderDetails wmsDocOrderDetails);
 
-    /**
-     * 检查关单
-     *
-     * @param asnNo
-     */
-    void checkStatusClose(String asnNo, String status);
-
-    /**
-     * 组盘
-     *
-     * @param groupDiskFrom
-     * @return
-     */
-    AjaxResult groupDisk(GroupDiskFrom groupDiskFrom);
-
     /**
      * 理货备货 托盘号、出库单号验证
      */
@@ -259,29 +151,6 @@ public interface IWmsDocOrderHeaderService {
      */
     AjaxResult pdaGroupDisk(PdaGroupDiskDTO pdaGroupDiskDTO);
 
-    /**
-     * 组盘(备货)
-     * @param groupDiskFrom
-     * @return
-     */
-    AjaxResult groupDiskBH(GroupDiskFrom groupDiskFrom);
-
-    /**
-     * 组盘 (反拣)
-     *
-     * @param groupDiskFrom
-     * @return
-     */
-    AjaxResult groupDiskFJ(GroupDiskFrom groupDiskFrom);
-
-    /**
-     * 理货
-     *
-     * @param arrangeStockForm
-     * @return
-     */
-    AjaxResult arrangeStock(ArrangeStockForm arrangeStockForm);
-
     /**
      * 库内理货单生成
      *
@@ -307,13 +176,6 @@ public interface IWmsDocOrderHeaderService {
      */
     AjaxResult cancelOrder(WmsDocOrderHeader header);
 
-    /**
-     * 拣货出去回调
-     *
-     * @param taskNo
-     */
-    void checkOutCallback(String taskNo, String extParam);
-
     /**
      * ERP号转换为wms系统出库单号
      *
@@ -345,24 +207,6 @@ public interface IWmsDocOrderHeaderService {
      */
     AjaxResult addOrUpdateErp(List<ErpOrderList> erpOrderLists);
 
-    /**
-     * 在erp_barcodes中插入出库单扫描记录,其实是关联批次插入数据
-     */
-    AjaxResult synchronizeErpBarcodeList(String orderNo);
-
-
-    /**
-     * 修改备货出库单状态
-     * 1 如果非备货完成状态:分配明细为拣货完成
-     * 2 如果备货完成状态:出库单修改为部分出库,完全出库
-     *
-     * @param orderNo
-     * @param locationId
-     * @param palletNo
-     * @return
-     */
-    AjaxResult modifyAssignmentStockTaskStatus(String orderNo,Long locationId,String palletNo);
-
     /**
      * 修改出库单出库状态
      * 调这个方法的以下几种清空
@@ -384,24 +228,6 @@ public interface IWmsDocOrderHeaderService {
      */
     AjaxResult modifyTheTallyStatusInTheWarehouse(String orderNo, Long locationId, String palletNo);
 
-    /**
-     * 修改备货单备货状态
-     *
-     * @return
-     */
-    AjaxResult modifystockCompletionStatus(String palletNo);
-
-    /**
-     * 修改备货单备货状态
-     *
-     * @param orderNo
-     * @param sku
-     * @param qty
-     * @return
-     */
-    AjaxResult modifystockCompletionStatus(String orderNo, String sku, BigDecimal qty
-            ,String sn,String palletNo,String boxNo);
-
     /**
      * 入库备货修改备货单备货状态
      *

+ 8 - 30
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/ActAllocationDetailsServiceImpl.java

@@ -1,31 +1,28 @@
 package com.ruoyi.ams.order.service.impl;
 
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
+import com.ruoyi.ams.order.domain.ActAllocationDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
 import com.ruoyi.ams.order.form.ActAllocationDetailsFrom;
+import com.ruoyi.ams.order.mapper.ActAllocationDetailsMapper;
+import com.ruoyi.ams.order.service.IActAllocationDetailsService;
 import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
-import com.ruoyi.ams.qc.domain.DocQcDetails;
 import com.ruoyi.base.constant.Constant;
-import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.service.IBaseLocationInfoService;
-import com.ruoyi.base.utils.IdSequenceUtils;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.ams.order.mapper.ActAllocationDetailsMapper;
-import com.ruoyi.ams.order.domain.ActAllocationDetails;
-import com.ruoyi.ams.order.service.IActAllocationDetailsService;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 分配查询Service业务层处理
  *
@@ -38,8 +35,6 @@ public class ActAllocationDetailsServiceImpl implements IActAllocationDetailsSer
     @Autowired
     private ActAllocationDetailsMapper actAllocationDetailsMapper;
     @Autowired
-    private IdSequenceUtils idSequenceUtils;
-    @Autowired
     private IWmsBoxInfoService wmsBoxInfoService;
     @Autowired
     private IBaseLocationInfoService baseLocationInfoService;
@@ -159,23 +154,6 @@ public class ActAllocationDetailsServiceImpl implements IActAllocationDetailsSer
     @Override
     public AjaxResult addActAllocationDetails(String lotnum, String locationId, BigDecimal qty, WmsDocOrderDetails orderDetails, String status) {
         WmsBoxInfo wmsBoxInfo = wmsBoxInfoService.selectByLocationId(locationId);
-        // 查询分配明细 有就修改 没有新增
-//        ActAllocationDetailsFrom actAllocationDetailsFrom = new ActAllocationDetailsFrom();
-//        actAllocationDetailsFrom.setLotnum(lotnum);
-//        actAllocationDetailsFrom.setOrderNo(orderDetails.getOrderNo());
-//        actAllocationDetailsFrom.setLineNo(orderDetails.getOrderLineNo().longValue());
-//        actAllocationDetailsFrom.setLocationId(Long.parseLong(locationId));
-//        actAllocationDetailsFrom.setMaterial(orderDetails.getSku());
-//        List<ActAllocationDetailsFrom> allocationDetailsFromList = actAllocationDetailsMapper.selectActAllocationDetailsInvLotAttList(actAllocationDetailsFrom);
-//        if (allocationDetailsFromList.size() > 0) {
-//            for (ActAllocationDetailsFrom allocationDetailsFrom : allocationDetailsFromList) {
-//                ActAllocationDetails allocationDetailsUpdate = new ActAllocationDetails();
-//                allocationDetailsUpdate.setAllocationId(allocationDetailsFrom.getAllocationId());
-//                allocationDetailsUpdate.setStatus(Constant.ORDER_STS.STS20.getValue());
-//                actAllocationDetailsMapper.updateActAllocationDetails(allocationDetailsUpdate);
-//            }
-//            return AjaxResult.success("分配明细生成成功");
-//        }
         String allocationId = IdWorker.getIdStr();
         ActAllocationDetails actAllocationDetails = new ActAllocationDetails();
         actAllocationDetails.setAllocationId(allocationId);
@@ -257,7 +235,7 @@ public class ActAllocationDetailsServiceImpl implements IActAllocationDetailsSer
     public AjaxResult modifyAssignmentStockTaskStatusPickingComplete(String orderNo, Long locationId, String palletNo) {
         if (StringUtils.isBlank(orderNo)) return AjaxResult.success();
         WmsDocOrderHeader wmsDocOrderHeader = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
-        if (!wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
+        if (!wmsDocOrderHeader.getOrderType().equals(Constant.ORDER_TYPE.BH.getValue())) {
             return AjaxResult.success();
         }
         if (wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS23.getValue())

+ 1 - 1
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/UpdateOrderStockingProcessImpl.java

@@ -88,7 +88,7 @@ public class UpdateOrderStockingProcessImpl implements UpdateOrderStockingProces
         WmsDocOrderHeader header = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByErpNo(erpName);
         orderNo = header.getOrderNo();
         // 判断单据类型是否为备货单
-        if (!header.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
+        if (!header.getOrderType().equals(Constant.ORDER_TYPE.BH.getValue())) {
             log.error("出库单类型不是备货类型,不可更新备货!" + header.getOrderNo());
             recordRemark(orderNo, "出库单类型不是备货类型,不可更新备货!" + header.getOrderNo());
             return AjaxResult.success();

File diff suppressed because it is too large
+ 27 - 1666
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java


+ 10 - 3
warewms-ams/src/main/java/com/ruoyi/ams/task/domain/WcsTask.java

@@ -1,11 +1,16 @@
 package com.ruoyi.ams.task.domain;
 
-import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+import static com.baomidou.mybatisplus.annotation.IdType.ASSIGN_UUID;
 
 /**
  * AGV任务对象 wcs_task
@@ -18,6 +23,7 @@ public class WcsTask extends BaseEntity
     private static final long serialVersionUID = 1L;
 
     /** AGV任务主键 */
+    @TableId(type = ASSIGN_UUID)
     private String taskNo;
 
     /** AGV任务类型 */
@@ -80,6 +86,7 @@ public class WcsTask extends BaseEntity
     /** 创建时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonProperty(value = "createBy")
     private Date createDate;
 
     /** 编辑人 */

+ 38 - 0
warewms-ams/src/main/java/com/ruoyi/ams/task/dto/WcsTaskCallBackDTO.java

@@ -0,0 +1,38 @@
+package com.ruoyi.ams.task.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class WcsTaskCallBackDTO implements Serializable {
+
+    private static final long serialVersionUID = -9096165003129622801L;
+    private String taskNo;
+    private Integer state;
+
+    private Integer carNo;
+
+    private String remark;
+
+
+    public WcsTaskCallBackDTO(){}
+
+    public WcsTaskCallBackDTO(String taskNo, Integer state){
+        this.taskNo = taskNo;
+        this.state = state;
+    }
+
+    public WcsTaskCallBackDTO(String taskNo, Integer state, Integer carNo){
+        this.taskNo = taskNo;
+        this.state = state;
+        this.carNo = carNo;
+    }
+
+    public WcsTaskCallBackDTO(String taskNo, Integer state, String remark){
+        this.taskNo = taskNo;
+        this.state = state;
+        this.remark = remark;
+    }
+
+}

+ 20 - 0
warewms-ams/src/main/java/com/ruoyi/ams/task/dto/WcsTaskCancelDTO.java

@@ -0,0 +1,20 @@
+package com.ruoyi.ams.task.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+@Data
+public class WcsTaskCancelDTO implements Serializable {
+
+    private static final long serialVersionUID = 8668896503742786366L;
+
+    @ApiModelProperty("任务编号")
+    @NotBlank(message = "任务编号不能为空!")
+    private String taskNo;
+
+    @ApiModelProperty("取消原因")
+    private String reason;
+}

+ 28 - 0
warewms-ams/src/main/java/com/ruoyi/ams/task/dto/WcsTaskInfoDTO.java

@@ -0,0 +1,28 @@
+package com.ruoyi.ams.task.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class WcsTaskInfoDTO implements Serializable {
+
+    private static final long serialVersionUID = -6573961452126621794L;
+
+    @ApiModelProperty("AMS任务编号")
+    private String taskNo;
+
+    @ApiModelProperty("AMS任务状态")
+    private Long state;
+
+    @ApiModelProperty("事件id")
+    private String event;
+
+    @ApiModelProperty("是否下发 0:未下发 1:已下发")
+    private String aciAccept;
+
+    @ApiModelProperty("车辆编号")
+    private String carNo;
+
+}

+ 51 - 0
warewms-ams/src/main/java/com/ruoyi/ams/task/dto/WcsTaskInsertDTO.java

@@ -0,0 +1,51 @@
+package com.ruoyi.ams.task.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class WcsTaskInsertDTO implements Serializable {
+
+    private static final long serialVersionUID = 3177872880015150980L;
+
+    @ApiModelProperty("任务编号")
+    @NotBlank(message = "任务编号不能为空!")
+    private String businessNo;
+
+    @ApiModelProperty("任务类型")
+    private String businessType;
+
+    @ApiModelProperty("调用系统名称")
+    private String sysName;
+
+    @ApiModelProperty("调用设备名称")
+    private String deviceName;
+
+    @ApiModelProperty("任务起始点位")
+    @NotNull(message = "任务起始点位不能为空!")
+    private Long locationFrom;
+
+    @ApiModelProperty("任务终点点位")
+    @NotNull(message = "任务终点点位不能为空!")
+    private Long locationTo;
+
+    @ApiModelProperty("任务优先级")
+    @NotNull(message = "任务优先级不能为空!")
+    private Long priority;
+
+    @ApiModelProperty("拓展字段")
+    private String extParam;
+
+    @ApiModelProperty("拓展字段")
+    private String ext1;
+
+    @ApiModelProperty("拓展字段")
+    private String ext2;
+
+    @ApiModelProperty("拓展字段")
+    private String ext3;
+}

+ 29 - 0
warewms-ams/src/main/java/com/ruoyi/ams/task/dto/WcsTaskStateFeedbackDTO.java

@@ -0,0 +1,29 @@
+package com.ruoyi.ams.task.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class WcsTaskStateFeedbackDTO implements Serializable {
+
+    private static final long serialVersionUID = -842403273529360488L;
+
+    @ApiModelProperty("AMS任务编号")
+    @NotBlank(message = "AMS任务编号不能为空!")
+    private String taskNo;
+
+    @ApiModelProperty("上游系统任务编号")
+    @NotBlank(message = "上游系统任务编号不能为空!")
+    private String businessNo;
+
+    @ApiModelProperty("任务状态")
+    @NotNull(message = "任务状态不能为空!")
+    private Integer state;
+
+    @ApiModelProperty("车辆编号")
+    private Integer carNo;
+}

+ 0 - 21
warewms-ams/src/main/java/com/ruoyi/ams/task/form/AddTaskForm.java

@@ -1,21 +0,0 @@
-package com.ruoyi.ams.task.form;
-
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-
-@Data
-public class AddTaskForm {
-    @NotBlank(message = "起始区域不能为空")
-    private String areaFrom;
-    @NotBlank(message = "起始库位不能为空")
-    private String locationFrom;
-    @NotBlank(message = "目标区域不能为空")
-    private String areaTo;
-    @NotBlank(message = "目标库位不能为空")
-    private String locationTo;
-    @NotBlank(message = "任务类型不能为空")
-    private String businessType;
-    @NotBlank(message = "是否转发不能为空")
-    private String taskType;
-}

+ 4 - 2
warewms-ams/src/main/java/com/ruoyi/ams/task/mapper/WcsTaskMapper.java

@@ -1,17 +1,19 @@
 package com.ruoyi.ams.task.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * AGV任务Mapper接口
  * 
  * @author andy
  * @date 2022-03-10
  */
-public interface WcsTaskMapper 
+public interface WcsTaskMapper extends BaseMapper<WcsTask>
 {
     /**
      * 查询AGV任务

+ 13 - 6
warewms-ams/src/main/java/com/ruoyi/ams/task/service/IWcsTaskService.java

@@ -1,11 +1,11 @@
 package com.ruoyi.ams.task.service;
 
-import java.util.List;
-
-import com.ruoyi.ams.agv.ndc.entity.CallbackResult;
 import com.ruoyi.ams.task.domain.WcsTask;
-import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
+import com.ruoyi.ams.task.dto.*;
 import com.ruoyi.common.core.domain.AjaxResult;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 /**
  * AGV任务Service接口
@@ -95,9 +95,9 @@ public interface IWcsTaskService {
     /**
      * 取消任务
      *
-     * @param wcsTask
+     * @param wcsTaskCancelDTO
      */
-    AjaxResult cancelTask(WcsTask wcsTask);
+    AjaxResult cancelTask(WcsTaskCancelDTO wcsTaskCancelDTO);
 
     /**
      * 库存处理
@@ -143,4 +143,11 @@ public interface IWcsTaskService {
      * @param carNo
      */
     AjaxResult callBack(String taskNo, Integer state, Integer carNo);
+
+    @Transactional
+    AjaxResult callBack(WcsTaskCallBackDTO wcsTaskCallBackDTO);
+
+    String taskInsert(WcsTaskInsertDTO wcsTaskInsertDTO);
+
+    WcsTaskInfoDTO getTaskInfo(String businessNo);
 }

+ 0 - 22
warewms-ams/src/main/java/com/ruoyi/ams/task/service/TaskDispatchService.java

@@ -1,22 +0,0 @@
-package com.ruoyi.ams.task.service;
-
-import com.ruoyi.ams.task.domain.WcsTask;
-import org.springframework.stereotype.Component;
-
-/**
- * Created by IntelliJ IDEA.
- * User: andy.qu
- * Date: 2022/3/21
- */
-@Component
-public class TaskDispatchService {
-
-    /**
-     * 任务调度策略
-     * @param wcsTask
-     * @return
-     */
-    public boolean taskDispatchStack(WcsTask wcsTask) {
-        return false;
-    }
-}

+ 104 - 118
warewms-ams/src/main/java/com/ruoyi/ams/task/service/impl/WcsTaskServiceImpl.java

@@ -1,42 +1,44 @@
 package com.ruoyi.ams.task.service.impl;
 
-import java.lang.reflect.Method;
-import java.util.Date;
-import java.util.List;
-
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.comparator.CompareUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.ams.agv.ndc.domain.AmsTask;
-import com.ruoyi.ams.agv.ndc.entity.CallbackResult;
 import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
 import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
-import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
 import com.ruoyi.ams.config.domain.FlowConfigEvent;
 import com.ruoyi.ams.config.service.IFlowConfigEventService;
-import com.ruoyi.ams.inv.domain.InvLotAtt;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
-import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.order.service.IActAllocationDetailsService;
 import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
-import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
+import com.ruoyi.ams.task.domain.WcsTask;
+import com.ruoyi.ams.task.dto.*;
+import com.ruoyi.ams.task.mapper.WcsTaskMapper;
+import com.ruoyi.ams.task.service.IWcsTaskService;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.core.redis.RedisKey;
-import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.ConvertUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.spring.SpringUtils;
+import io.jsonwebtoken.lang.Assert;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.ams.task.mapper.WcsTaskMapper;
-import com.ruoyi.ams.task.domain.WcsTask;
-import com.ruoyi.ams.task.service.IWcsTaskService;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.lang.reflect.Method;
+import java.util.Date;
+import java.util.List;
+
 /**
  * AGV任务Service业务层处理
  *
@@ -64,8 +66,6 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
     @Autowired
     private IInvLotLocIdService invLotLocIdService;
     @Autowired
-    private IInvLotAttService iInvLotAttService;
-    @Autowired
     private IAmsTaskService iAmsTaskService;
     @Autowired
     private IActAllocationDetailsService actAllocationDetailsService;
@@ -74,28 +74,7 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
     @Autowired
     private IWmsDocAsnHeaderService iWmsDocAsnHeaderService;
 
-    //任务状态翻译
-    private String codeConvert(int code) {
-        switch (code) {
-            case 1:
-                return "开始";
-            case 2:
-                return "完成";
-            case 3:
-                return "开始取货";
-            case 4:
-                return "取货完成";
-            case 5:
-                return "开始卸货";
-            case 6:
-                return "卸货完成";
-            case 7:
-                return "取消";
-            case 8:
-                return "异常";
-        }
-        return "";
-    }
+    private final static String NDC = "NDC";
 
     /**
      * 查询AGV任务
@@ -246,33 +225,68 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
 
     }
 
-    @Transactional
+    /**
+     * 下发任务
+     * @param wcsTaskInsertDTO
+     * @return
+     */
     @Override
-    public AjaxResult cancelTask(WcsTask wcsTask) {
+    public String taskInsert(WcsTaskInsertDTO wcsTaskInsertDTO) {
+        List<WcsTask> wcsTaskList = wcsTaskMapper.selectList(Wrappers.<WcsTask>lambdaQuery().eq(WcsTask::getWhNoFrom, wcsTaskInsertDTO.getBusinessNo()));
+        Assert.isTrue(CollectionUtil.isEmpty(wcsTaskList), "任务下发重复!");
+        WcsTask wcsTask = ConvertUtils.sourceToTarget(wcsTaskInsertDTO, WcsTask.class);
+        wcsTask.setLocationFrom(wcsTaskInsertDTO.getLocationFrom().toString());
+        wcsTask.setLocationTo(wcsTaskInsertDTO.getLocationTo().toString());
+        wcsTask.setBusinessType(StringUtils.isNotBlank(wcsTaskInsertDTO.getBusinessType()) ?
+                wcsTaskInsertDTO.getBusinessType() : Constant.TASK_BUSINESS_TYPE.TASK_01.getValue());
+        wcsTask.setWhNoFrom(wcsTaskInsertDTO.getBusinessNo());
+        wcsTask.setState(Long.parseLong(Constant.TASK_STS.TASK9.getValue().toString()));
+        wcsTaskMapper.insert(wcsTask);
+        return wcsTask.getTaskNo();
+    }
 
-        String taskNo = wcsTask.getTaskNo();
+    @Override
+    public WcsTaskInfoDTO getTaskInfo(String businessNo) {
+        List<WcsTask> wcsTaskList = wcsTaskMapper.selectList(Wrappers.<WcsTask>lambdaQuery().eq(WcsTask::getWhNoFrom, businessNo));
+        WcsTask wcsTask = wcsTaskList.stream().findFirst().orElseThrow(() -> new BaseException("任务编号有误!"));
+        WcsTaskInfoDTO wcsTaskInfoDTO = ConvertUtils.sourceToTarget(wcsTask, WcsTaskInfoDTO.class);
+        //todo 假数据
+        wcsTaskInfoDTO.setAciAccept("0");
+        wcsTaskInfoDTO.setEvent("114");
+        return wcsTaskInfoDTO;
+    }
+
+    /**
+     * 任务取消
+     * @param wcsTaskCancelDTO
+     * @return
+     */
+    @Transactional
+    @Override
+    public AjaxResult cancelTask(WcsTaskCancelDTO wcsTaskCancelDTO) {
+        String taskNo = wcsTaskCancelDTO.getTaskNo();
+        String remark = StringUtils.isNotBlank(wcsTaskCancelDTO.getReason()) ? wcsTaskCancelDTO.getReason() : null;
+        WcsTask wcsTask = wcsTaskMapper.selectWcsTaskByTaskNo(taskNo);
+        Assert.isTrue(ObjectUtil.isNotNull(wcsTask), "任务不存在!");
         // 任务状态: 队列等待 直接删除即可 其他状态 需要请求AMS删除
         if (wcsTask.getState() == Constant.TASK_STS.TASK9.getValue().longValue()
                 || wcsTask.getState() == Constant.TASK_STS.TASK10.getValue().longValue()) {
-            return callBack(wcsTask.getTaskNo(), 7, null);
-        } else {
-            //请求ams 取消任务
-            AmsTask amsTaskQuery = new AmsTask();
-            amsTaskQuery.setTaskNo(taskNo);
-            AmsTask amsTask = iAmsTaskService.selectAmsTaskByModel(amsTaskQuery);
-            if (amsTask == null) {
-                return AjaxResult.error("amsTask没有对应任务!");
-            }
-            if (null != amsTask.getEvent() && amsTask.getEvent() == 85) {
-                return AjaxResult.error("任务已取消!");
-            }
-            AmsTask amsTaskUpdate = new AmsTask();
-            amsTaskUpdate.setId(amsTask.getId());
-            amsTaskUpdate.setIsDelete(1);
-            amsTaskUpdate.setAciAccept(0);
-            amsTaskUpdate.setRemark("下发超时1分钟未接收自动取消" + amsTaskUpdate.getAciAccept());
-            iAmsTaskService.updateAmsTask(amsTaskUpdate);
+            return callBack(new WcsTaskCallBackDTO(taskNo, Constant.TASK_STS.TASK7.getValue(), remark));
         }
+        //请求ams 取消任务
+        AmsTask amsTaskQuery = new AmsTask();
+        amsTaskQuery.setTaskNo(taskNo);
+        AmsTask amsTask = iAmsTaskService.selectAmsTaskByModel(amsTaskQuery);
+        Assert.isTrue(ObjectUtil.isNotNull(amsTask), "amsTask没有对应任务!");
+        Assert.isTrue(ObjectUtil.isNull(amsTask.getEvent()) || CompareUtil.compare(amsTask.getEvent(), 85) != 0
+                , "任务已取消!");
+        AmsTask amsTaskUpdate = new AmsTask();
+        amsTaskUpdate.setId(amsTask.getId());
+        amsTaskUpdate.setIsDelete(1);
+        amsTaskUpdate.setAciAccept(0);
+        amsTaskUpdate.setRemark("下发超时1分钟未接收自动取消" + amsTaskUpdate.getAciAccept());
+        iAmsTaskService.updateAmsTask(amsTaskUpdate);
+
         return AjaxResult.success("取消任务指令已下发!");
     }
 
@@ -335,24 +349,28 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
     @Transactional
     @Override
     public synchronized AjaxResult callBack(String taskNo, Integer state, Integer carNo) {
-        String updateBy = "NDC";
-        log.info("agv回传------------->" + taskNo + "," + state);
-        WcsTask wcsTask = wcsTaskService.selectWcsTaskByTaskNo(taskNo);
-        if (wcsTask == null) {
-            log.info("agv回传没有任务记录------------->");
-            return AjaxResult.error("agv回传没有任务记录------------->");
-        }
-
-        if (state == 4 || state == 6) {
-            wcsTask.setAgvNo(carNo + "");
-        }
+        return callBack(new WcsTaskCallBackDTO(taskNo, state, carNo));
+    }
 
-        if (wcsTask.getState() == 2) {
-            log.info("已完成的任务无需反馈");
-            return AjaxResult.error("已完成的任务无需反馈");
+    @Transactional
+    @Override
+    public synchronized AjaxResult callBack(WcsTaskCallBackDTO wcsTaskCallBackDTO) {
+        String taskNo = wcsTaskCallBackDTO.getTaskNo();
+        Integer state = wcsTaskCallBackDTO.getState();
+        log.info("agv回传------------->" + taskNo + "," + wcsTaskCallBackDTO.getState());
+        WcsTask wcsTask = wcsTaskService.selectWcsTaskByTaskNo(taskNo);
+        Assert.isTrue(ObjectUtil.isNotNull(wcsTask), "agv回传没有任务记录------------->");
+        Assert.isTrue(!Constant.TASK_STS.TASK2.getValue().equals(wcsTask.getState()), "已完成的任务无需反馈");
+        wcsTask.setAgvNo(ObjectUtil.isNotNull(wcsTaskCallBackDTO.getCarNo()) ? wcsTaskCallBackDTO.getCarNo().toString() : null);
+        wcsTask.setState(state.longValue());
+        wcsTask.setRemark(StringUtils.isNotBlank(wcsTaskCallBackDTO.getRemark()) ? wcsTaskCallBackDTO.getRemark() : null);
+        wcsTask.setUpdateDate(new Date());
+        if (!Constant.TASK_TYPE.FORWARD.getValue().equals(wcsTask.getTaskType()) ||
+                (Constant.TASK_STS.TASK2.getValue().equals(state) && Constant.TASK_STS.TASK6.getValue().equals(wcsTask.getState()))) {
+            wcsTaskService.updateWcsTask(wcsTask);
+            return AjaxResult.success("操作成功!");
         }
         //转发类型任务才回调
-        if (wcsTask.getTaskType().equals(Constant.TASK_TYPE.FORWARD.getValue())) {
             try {
                 switch (state) {
                     case 1:
@@ -368,17 +386,10 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
                             log.info("不能重复放货," + taskNo);
                             return AjaxResult.error("不能重复放货," + taskNo);
                         }
-                        if (wcsTask.getState() == 6) {
-                            // 修改任务状态
-                            wcsTask.setState(state.longValue());
-                            wcsTask.setUpdateDate(new Date());
-                            wcsTaskService.updateWcsTask(wcsTask);
-                            return AjaxResult.error("不能重复放货," + taskNo);
-                        }
                         wcsTask.setEndTime(new Date());
                         // 解锁终点库位
                         baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationTo())
-                                , Constant.WAREHOUSE_ID, updateBy);
+                                , Constant.WAREHOUSE_ID, NDC);
                         // 将中间缓存位库存移动到终点
                         moveMiddleCacheToDestination(wcsTask);
                         //释放redis锁
@@ -390,22 +401,16 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
                         // 任务完成回调
                         callBackTaskComplete(wcsTask);
                         break;
-                    case 3:
-                        break;
                     case 4:
-                        if (wcsTask.getState() == 4) {
-                            log.info("不能重复取货," + taskNo);
-                            return AjaxResult.error("不能重复取货," + taskNo);
-                        }
-                        if (wcsTask.getBeforeTask() != null && wcsTask.getBeforeTask().equals("1")) {
+                        if (wcsTask.getState() == 4 || (StringUtils.isNotBlank(wcsTask.getBeforeTask()) && Constant.IS_YES.Y.getValue().equals(wcsTask.getBeforeTask()))) {
                             log.info("不能重复取货," + taskNo);
                             return AjaxResult.error("不能重复取货," + taskNo);
                         }
                         // 标记已经取货完成
-                        wcsTask.setBeforeTask("1");
+                        wcsTask.setBeforeTask(Constant.IS_YES.Y.getValue());
                         // 解锁起始库位
                         baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
-                                , Constant.WAREHOUSE_ID, updateBy);
+                                , Constant.WAREHOUSE_ID, NDC);
                         // 将起始点库存移动到中间缓存位
                         moveStartingPointToMiddleCache(wcsTask);
 
@@ -416,25 +421,20 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
                         //取货完成回调
                         callBackPickup(wcsTask);
                         break;
-                    case 5:
-                        break;
                     case 6://卸货
                         if (wcsTask.getState() != 4
-                                && (StringUtils.isEmpty(wcsTask.getBeforeTask())|| !wcsTask.getBeforeTask().equals("1"))) {
+                                && (StringUtils.isEmpty(wcsTask.getBeforeTask()) || !wcsTask.getBeforeTask().equals("1"))) {
                             log.info("任务未取货,不能直接完成!" + taskNo);
                             return AjaxResult.error("任务未取货,不能直接完成!" + taskNo);
                         }
-                        if (wcsTask.getState() == 2) {
+                        if (wcsTask.getState() == 2 || wcsTask.getState() == 6) {
                             log.info("不能重复放货," + taskNo);
                             return AjaxResult.error("不能重复放货," + taskNo);
                         }
-                        if (wcsTask.getState() == 6) {
-                            return AjaxResult.error("不能重复放货," + taskNo);
-                        }
                         wcsTask.setEndTime(new Date());
                         // 解锁终点库位
                         baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationTo())
-                                , Constant.WAREHOUSE_ID, updateBy);
+                                , Constant.WAREHOUSE_ID, NDC);
                         // 将中间缓存位库存移动到终点
                         moveMiddleCacheToDestination(wcsTask);
                         //释放redis锁
@@ -452,42 +452,30 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
                         if (wcsTask.getState() == 4 || wcsTask.getState() == 5) {
                             // 解锁终点库位
                             baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationTo())
-                                    , Constant.WAREHOUSE_ID, updateBy);
+                                    , Constant.WAREHOUSE_ID, NDC);
                         } else {
-                            boolean unlock = "待分配".equals(wcsTask.getLocationTo()) ?  baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()), Constant.WAREHOUSE_ID, updateBy)
-                                    : baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()), Long.parseLong(wcsTask.getLocationTo()), Constant.WAREHOUSE_ID, updateBy);
+                            baseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()),
+                                    Long.parseLong(wcsTask.getLocationTo()), Constant.WAREHOUSE_ID, NDC);
                         }
                         //释放redis锁
                         if (!StringUtils.isEmpty(wcsTask.getExt8())) {
                             redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
                         }
                         // 如果是入库任务,任务结束,减去当前AGV任务数量
-                        if (!"待分配".equals(wcsTask.getLocationTo())) {
-                            subtractTheNumberOfTasks(wcsTask.getLocationTo());
-                        }
-                        // 取消任务删除中间缓存库存
-//                        cancelTaskDelMiddleCache(wcsTask);
-                        break;
-                    case 8:
-                        log.error("任务异常状态------------" + wcsTask.getTaskNo());
+                        subtractTheNumberOfTasks(wcsTask.getLocationTo());
                         break;
                     default:
                         break;
                 }
             } catch (Exception e) {
-                log.info(wcsTask.getTaskNo() + "-----" + "回调状态:" + state + "异常", e);
-                wcsTask.setRemark("回调状态:" + state + "异常");
                 //释放redis锁
                 if (!StringUtils.isEmpty(wcsTask.getExt8())) {
                     redisCache.unlockCacheObject(Long.parseLong(wcsTask.getExt8()));
                 }
-                throw new ServiceException();
+                log.error("excute callBack exception was happened, taskNo is {}, cause by {}, ", taskNo, e);
+                throw new BaseException(wcsTask.getTaskNo() + "-----" + "回调状态:" + state + "异常");
             }
-        } else {
 
-        }
-        wcsTask.setState(state.longValue());
-        wcsTask.setUpdateDate(new Date());
         wcsTaskService.updateWcsTask(wcsTask);
         return AjaxResult.success("操作成功!");
     }
@@ -600,8 +588,6 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
         List<InvLotLocId> invLotLocIdList = invLotLocIdService.selectInvLotLocIdList(invLotLocIdQuery);
         if (invLotLocIdList.size() > 0) {
             for (InvLotLocId lotLocId : invLotLocIdList) {
-                // todo 是否删除批次表
-//                iInvLotAttService.deleteInvLotAttByLotnum(lotLocId.getLotnum());
                 invLotLocIdService.deleteInvLotLocIdById(Long.valueOf(lotLocId.getLocationId()));
             }
         }

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/form/BtnOpForm.java

@@ -1,4 +1,4 @@
-package com.ruoyi.web.form;
+package com.ruoyi.ams.wcs.form;
 
 import lombok.Data;
 

+ 14 - 0
warewms-ams/src/main/java/com/ruoyi/ams/wcs/service/IWcsService.java

@@ -0,0 +1,14 @@
+package com.ruoyi.ams.wcs.service;
+
+import com.ruoyi.ams.wcs.form.BtnOpForm;
+
+/**
+ * 出库单头Service接口
+ *
+ * @author ruoyi
+ * @date 2022-10-18
+ */
+public interface IWcsService {
+
+    void buttonBoxOperation(BtnOpForm btnOpForm);
+}

+ 104 - 0
warewms-ams/src/main/java/com/ruoyi/ams/wcs/service/impl/WcsServiceImpl.java

@@ -0,0 +1,104 @@
+package com.ruoyi.ams.wcs.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.ruoyi.ams.agv.ndc.common.ByteUtil;
+import com.ruoyi.ams.agv.ndc.common.CRC16Util;
+import com.ruoyi.ams.agv.ndc.domain.AmsTask;
+import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
+import com.ruoyi.ams.wcs.form.BtnOpForm;
+import com.ruoyi.ams.wcs.service.IWcsService;
+import com.ruoyi.base.constant.Constant;
+import com.ruoyi.common.core.redis.RedisCache;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 出库单头Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2022-10-18
+ */
+@Slf4j
+@Service
+public class WcsServiceImpl implements IWcsService {
+
+
+    @Autowired
+    private RedisCache redisCache;
+    @Autowired
+    private IAmsTaskService amsTaskService;
+
+    /**
+     * 按钮盒关闭交通管制
+     */
+    private final static String OPEN = "OPEN";
+
+    /**
+     * 按钮盒开启交通管制
+     */
+    private final static String CLOSE = "CLOSE";
+
+    /**
+     * 按钮盒对应出库区域ip
+     */
+    private final static String EXIT_AREA_IP = "192.168.77.105";
+
+    /**
+     * 按钮盒对应入库区域ip
+     */
+    private final static String STORAGE_AREA_IP = "192.168.77.104";
+
+    /**
+     * 按钮盒控制
+     */
+    private static final Map<String, String> buttonBoxControlMap= new HashMap<String, String>(){
+        {
+            put(OPEN, Constant.TASK_BUSINESS_TYPE.TASK_75.getValue());
+            put(CLOSE, Constant.TASK_BUSINESS_TYPE.TASK_74.getValue());
+        }
+    };
+
+    /**
+     * 按钮盒区域对应id
+     */
+    private static final Map<String, String> buttonBoxAreaMap= new HashMap<String, String>(){
+        {
+            put(EXIT_AREA_IP, Constant.AREA_INFO.EXIT_AREA.getValue());
+            put(STORAGE_AREA_IP, Constant.AREA_INFO.STORAGE_AREA.getValue());
+        }
+    };
+
+    @Override
+    public void buttonBoxOperation(BtnOpForm btnOpForm){
+        log.info("按钮盒请求------------------------》" + JSON.toJSONString(btnOpForm));
+        redisCache.setCacheObject(btnOpForm.getIp() + btnOpForm.getOpType(), btnOpForm.getOpType(), 15, TimeUnit.SECONDS);
+
+        String op = buttonBoxAreaMap.get(btnOpForm.getIp());
+        String businessType = buttonBoxControlMap.get(btnOpForm.getOpType());
+        if (Constant.TASK_BUSINESS_TYPE.TASK_75.getValue().equals(businessType)
+                && redisCache.checkIsExist(Constant.AREA_INFO.getKeyByValue(op))) {
+            insertAmsTask(op, Constant.TASK_BUSINESS_TYPE.TASK_77.getValue());
+            redisCache.deleteObject(Constant.AREA_INFO.getKeyByValue(op));
+        }
+        insertAmsTask(op, businessType);
+    }
+
+    private void insertAmsTask(String op, String businessType){
+        AmsTask amsTask = new AmsTask();
+        amsTask.setTaskNo(IdWorker.getIdStr());
+        amsTask.setIkey(Long.parseLong(String.valueOf(CRC16Util.calcCrc16(ByteUtil.string2byteArray(amsTask.getTaskNo())))));
+        amsTask.setStFrom(Integer.valueOf(Constant.LOC_MIDDLE_CACHE.toString()));
+        amsTask.setStTo(Integer.valueOf(Constant.LOC_SORTATION_CACHE.toString()));
+        amsTask.setPriority(1);
+        amsTask.setBusinessType(businessType);
+        amsTask.setExt1(op);
+        amsTaskService.insertAmsTask(amsTask);
+    }
+
+}

+ 52 - 0
warewms-ams/src/main/resources/mapper/ams/CarInfoMapper.xml

@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.ams.agv.car.mapper.CarInfoMapper">
+
+    <resultMap type="com.ruoyi.ams.agv.car.domain.CarInfo" id="CarInfoResult">
+        <result column="id" property="id"/>
+        <result column="carNo" property="carNo"/>
+        <result column="warehouse_id" property="warehouseId"/>
+        <result column="state" property="state"/>
+        <result column="active_flag" property="activeFlag"/>
+        <result column="userdefine1" property="userdefine1"/>
+        <result column="userdefine2" property="userdefine2"/>
+        <result column="userdefine3" property="userdefine3"/>
+        <result column="userdefine4" property="userdefine4"/>
+        <result column="userdefine5" property="userdefine5"/>
+        <result column="battery" property="battery"/>
+        <result column="x" property="x"/>
+        <result column="y" property="y"/>
+    </resultMap>
+
+    <select id="queryCarInfos"  resultMap="CarInfoResult" parameterType="Object">
+        select *
+        from car_info
+        order by carNo
+    </select>
+
+    <select id="queryInfoByCarNo" resultMap="CarInfoResult" parameterType="Object">
+        select *
+        from car_info
+        where carNo = #{carNo}
+    </select>
+
+    <update id="updateCarInfo">
+        update car_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="state != null">state = #{state},</if>
+            <if test="activeFlag != null">active_flag = #{activeFlag},</if>
+            <if test="userdefine1 != null">userdefine1 = #{userdefine1},</if>
+            <if test="userdefine2 != null">userdefine2 = #{userdefine2},</if>
+            <if test="userdefine3 != null">userdefine3 = #{userdefine3},</if>
+            <if test="userdefine4 != null">userdefine4 = #{userdefine4},</if>
+            <if test="userdefine5 != null">userdefine5 = #{userdefine5},</if>
+            <if test="battery != null">battery = #{battery},</if>
+            <if test="x != null">x = #{x},</if>
+            <if test="y != null">y = #{y},</if>
+        </trim>
+        where carNo = #{carNo}
+    </update>
+
+</mapper>

+ 4 - 4
warewms-base/src/main/java/com/ruoyi/base/constant/Constant.java

@@ -104,7 +104,7 @@ public class Constant {
     /**
      * 出库单据类型
      */
-    public enum ORDER_TYP {
+    public enum ORDER_TYPE {
         /**
          * 正常出库
          */
@@ -124,7 +124,7 @@ public class Constant {
 
         private String value;
 
-        ORDER_TYP(String value) {
+        ORDER_TYPE(String value) {
             this.value = value;
         }
 
@@ -469,7 +469,7 @@ public class Constant {
     /**
      * 事务类型
      */
-    public enum Transaction_TYPE {
+    public enum TRANSACTION_TYPE {
         /**
          * 收货
          */
@@ -497,7 +497,7 @@ public class Constant {
 
         private String value;
 
-        Transaction_TYPE(String value) {
+        TRANSACTION_TYPE(String value) {
             this.value = value;
         }
 

+ 4 - 2
warewms-base/src/main/java/com/ruoyi/base/mapper/BaseCustomerMapper.java

@@ -1,15 +1,17 @@
 package com.ruoyi.base.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.base.domain.BaseCustomer;
 
+import java.util.List;
+
 /**
  * 客户Mapper接口
  * 
  * @author andy
  * @date 2022-02-21
  */
-public interface BaseCustomerMapper 
+public interface BaseCustomerMapper extends BaseMapper<BaseCustomer>
 {
     /**
      * 查询客户

+ 6 - 2
warewms-base/src/main/java/com/ruoyi/base/mapper/BaseIdsequenceMapper.java

@@ -1,16 +1,20 @@
 package com.ruoyi.base.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.base.domain.BaseIdsequence;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * 主键生成规则Mapper接口
  * 
  * @author ruoyi
  * @date 2022-10-14
  */
-public interface BaseIdsequenceMapper 
+@Mapper
+public interface BaseIdsequenceMapper extends BaseMapper<BaseIdsequence>
 {
     /**
      * 查询主键生成规则

+ 2 - 0
warewms-base/src/main/java/com/ruoyi/base/mapper/BaseLocationInfoMapper.java

@@ -7,6 +7,7 @@ import com.ruoyi.base.domain.dto.BaseLocationInfoSameColDTO;
 import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
 import com.ruoyi.base.domain.vo.LotattVO;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
 import java.util.Map;
@@ -17,6 +18,7 @@ import java.util.Map;
  * @author andy
  * @date 2022-02-18
  */
+@Repository
 public interface BaseLocationInfoMapper extends BaseMapper<BaseLocationInfo> {
     /**
      * 查询库位信息

+ 4 - 2
warewms-base/src/main/java/com/ruoyi/base/mapper/BaseLocationZoneMapper.java

@@ -1,15 +1,17 @@
 package com.ruoyi.base.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.base.domain.BaseLocationZone;
 
+import java.util.List;
+
 /**
  * 库区Mapper接口
  * 
  * @author andy
  * @date 2022-02-15
  */
-public interface BaseLocationZoneMapper 
+public interface BaseLocationZoneMapper extends BaseMapper<BaseLocationZone>
 {
     /**
      * 查询库区

+ 4 - 2
warewms-base/src/main/java/com/ruoyi/base/mapper/BaseSkuMapper.java

@@ -1,16 +1,18 @@
 package com.ruoyi.base.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.base.domain.BaseSku;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * 物料信息Mapper接口
  * 
  * @author andy
  * @date 2022-02-21
  */
-public interface BaseSkuMapper 
+public interface BaseSkuMapper extends BaseMapper<BaseSku>
 {
     /**
      * 查询物料信息

+ 4 - 3
warewms-base/src/main/java/com/ruoyi/base/mapper/BaseSkuTypeMapper.java

@@ -1,16 +1,17 @@
 package com.ruoyi.base.mapper;
 
-import java.util.List;
-
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.base.domain.BaseSkuType;
 
+import java.util.List;
+
 /**
  * 物料分类Mapper接口
  *
  * @author andy
  * @date 2022-02-21
  */
-public interface BaseSkuTypeMapper {
+public interface BaseSkuTypeMapper extends BaseMapper<BaseSkuType> {
     /**
      * 查询物料分类
      *

+ 4 - 2
warewms-base/src/main/java/com/ruoyi/base/mapper/BaseSupplierMapper.java

@@ -1,15 +1,17 @@
 package com.ruoyi.base.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.base.domain.BaseSupplier;
 
+import java.util.List;
+
 /**
  * 供应商Mapper接口
  * 
  * @author andy
  * @date 2022-02-21
  */
-public interface BaseSupplierMapper 
+public interface BaseSupplierMapper extends BaseMapper<BaseSupplier>
 {
     /**
      * 查询供应商

+ 4 - 2
warewms-base/src/main/java/com/ruoyi/base/mapper/BaseWarehouseMapper.java

@@ -1,15 +1,17 @@
 package com.ruoyi.base.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.base.domain.BaseWarehouse;
 
+import java.util.List;
+
 /**
  * 仓库信息Mapper接口
  * 
  * @author andy
  * @date 2022-02-09
  */
-public interface BaseWarehouseMapper 
+public interface BaseWarehouseMapper extends BaseMapper<BaseWarehouse>
 {
     /**
      * 查询仓库信息

+ 2 - 1
warewms-base/src/main/java/com/ruoyi/base/mapper/CodeSkuRelationshipMapper.java

@@ -1,5 +1,6 @@
 package com.ruoyi.base.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.base.domain.CodeSkuRelationship;
 import com.ruoyi.base.domain.vo.CodeSkuRelationshipVO;
 
@@ -11,7 +12,7 @@ import java.util.List;
  * @author andy
  * @date 2022-11-07
  */
-public interface CodeSkuRelationshipMapper
+public interface CodeSkuRelationshipMapper extends BaseMapper<CodeSkuRelationship>
 {
     /**
      * 查询条码品号关系表

+ 2 - 8
warewms-base/src/main/java/com/ruoyi/base/service/IBaseIdsequenceService.java

@@ -1,8 +1,9 @@
 package com.ruoyi.base.service;
 
-import java.util.List;
 import com.ruoyi.base.domain.BaseIdsequence;
 
+import java.util.List;
+
 /**
  * 主键生成规则Service接口
  * 
@@ -72,15 +73,8 @@ public interface IBaseIdsequenceService
      * @param idName
      * @param dateStr
      * @param idSequence
-     * @param index
      * @return
      */
      int updateByVersion(String idName, String dateStr, Long idSequence,int nextId);
 
-    /**
-     * 查询当前主键值
-     * @param idName
-     * @return
-     */
-     String getCurrent(String idName);
 }

+ 5 - 32
warewms-base/src/main/java/com/ruoyi/base/service/impl/BaseIdsequenceServiceImpl.java

@@ -1,16 +1,12 @@
 package com.ruoyi.base.service.impl;
 
-import java.util.Date;
-import java.util.List;
-
-import cn.hutool.core.date.DateUtil;
-import com.ruoyi.base.utils.CommonUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.ruoyi.base.mapper.BaseIdsequenceMapper;
 import com.ruoyi.base.domain.BaseIdsequence;
+import com.ruoyi.base.mapper.BaseIdsequenceMapper;
 import com.ruoyi.base.service.IBaseIdsequenceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * 主键生成规则Service业务层处理
@@ -110,27 +106,4 @@ public class BaseIdsequenceServiceImpl implements IBaseIdsequenceService {
         return baseIdsequenceMapper.updateByVersion(idName, dateStr, idSequence, nextId);
     }
 
-    @Override
-    public String getCurrent(String idName) {
-        BaseIdsequence sysIdsequence = baseIdsequenceMapper.selectBaseIdsequenceByIdName(idName);
-        String prefix;
-        String dateStr = "";
-        if (!StringUtils.isEmpty(sysIdsequence.getDateFormat()) && (sysIdsequence.getDateFormat().equals("YYYYMMDD") || sysIdsequence.getDateFormat().equals("YYMMDD"))) {
-            prefix = sysIdsequence.getPrefix() + DateUtil.format(new Date(), "yMMdd");
-            dateStr = DateUtil.format(new Date(), "yMMdd");
-        } else {
-            prefix = sysIdsequence.getPrefix();
-        }
-        int index = 0;
-        if (sysIdsequence.getDateFormat() == null || sysIdsequence.getDateFormat().equals("") || dateStr.equals(sysIdsequence.getDateMax())) {
-            index = sysIdsequence.getIdSequence() == null ? 0 : sysIdsequence.getIdSequence().intValue();
-        }
-        String resultNo = "";
-        if (!StringUtils.isEmpty(prefix)) {
-            resultNo = prefix + CommonUtils.lpad((index + 1) + "", sysIdsequence.getLength().intValue(), "0");
-        } else {
-            resultNo = (index + 1) + "";
-        }
-        return resultNo;
-    }
 }

+ 1 - 5
warewms-base/src/main/java/com/ruoyi/base/service/impl/BaseLocationInfoServiceImpl.java

@@ -10,9 +10,7 @@ import com.ruoyi.base.domain.vo.*;
 import com.ruoyi.base.mapper.BaseLocationInfoMapper;
 import com.ruoyi.base.mapper.BaseLocationZoneMapper;
 import com.ruoyi.base.service.IBaseLocationInfoService;
-import com.ruoyi.base.utils.CommonUtils;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -41,8 +39,6 @@ public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
     private BaseLocationInfoMapper baseLocationInfoMapper;
     @Autowired
     private BaseLocationZoneMapper baseLocationZoneMapper;
-    @Autowired
-    private RedisCache redisCache;
 
     /**
      * 查询库位信息
@@ -260,7 +256,7 @@ public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
             } else {
                 if (i + 1 < colNoList.size()) {
                     if (currentLocation != null) {
-                        if (CommonUtils.getString(colNoList.get(i + 1).getBindSku()).equals("") || CommonUtils.getString(colNoList.get(i + 1).getBindSku()).equals(currentLocation.getBindSku())) {
+                        if (StringUtils.isBlank(colNoList.get(i + 1).getBindSku()) || colNoList.get(i + 1).getBindSku().equals(currentLocation.getBindSku())){
                             nextColNo = colNoList.get(i + 1).getColNo();
                         }
                     }

+ 36 - 50
warewms-base/src/main/java/com/ruoyi/base/service/impl/CodeSkuRelationshipServiceImpl.java

@@ -1,19 +1,23 @@
 package com.ruoyi.base.service.impl;
 
-import java.util.List;
-
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseSku;
+import com.ruoyi.base.domain.CodeSkuRelationship;
 import com.ruoyi.base.domain.vo.CodeSkuRelationshipVO;
+import com.ruoyi.base.mapper.CodeSkuRelationshipMapper;
 import com.ruoyi.base.service.IBaseSkuService;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.base.service.ICodeSkuRelationshipService;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.DateUtils;
+import io.jsonwebtoken.lang.Assert;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.base.mapper.CodeSkuRelationshipMapper;
-import com.ruoyi.base.domain.CodeSkuRelationship;
-import com.ruoyi.base.service.ICodeSkuRelationshipService;
+
+import java.util.List;
 
 /**
  * 条码品号关系表Service业务层处理
@@ -134,55 +138,37 @@ public class CodeSkuRelationshipServiceImpl implements ICodeSkuRelationshipServi
      */
     @Override
     public CodeSkuRelationshipVO checkIsProduct(String sn) {
-        List<CodeSkuRelationshipVO> codeSkuRelationshipVO = codeSkuRelationshipMapper.selectCodeSkuRelationshipBySn(sn);
-        if (codeSkuRelationshipVO != null && codeSkuRelationshipVO.size() > 0) {
-            if (!codeSkuRelationshipVO.get(0).getStatus().equals("Y")) {
-                throw new ServiceException("该条码已禁用");
-            }
-            //成品条码
-            CodeSkuRelationshipVO tmp = codeSkuRelationshipVO.get(0);
-            tmp.setProduct(true);
-            //物料条码
-            BaseSku baseSku = baseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, tmp.getSku());
-            if (baseSku == null) {
-                throw new ServiceException("物料不存在");
-            }
-            return tmp;
-        } else if (codeSkuRelationshipVO == null || codeSkuRelationshipVO.size() == 0) {
-            CodeSkuRelationshipVO tmp = new CodeSkuRelationshipVO();
-            //物料条码
-            BaseSku baseSku = baseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, sn);
-            if (baseSku == null) {
-                throw new ServiceException("物料不存在");
-            }
-            if (!baseSku.getActiveFlag().equals("Y")) {
-                throw new ServiceException("该物料已禁用");
-            }
-            tmp.setProduct(false);
-            tmp.setSku(baseSku.getSku());
-            tmp.setSkuType(baseSku.getSkuType());
-            tmp.setSn(baseSku.getSku());
-            tmp.setSkuName(baseSku.getDesc1());
-            tmp.setModel(baseSku.getModel());
-            tmp.setStatus(baseSku.getActiveFlag());
-            return tmp;
-        } else {
-            throw new ServiceException("条码不存在");
+        List<CodeSkuRelationshipVO> codeSkuRelationshipVOList = codeSkuRelationshipMapper.selectCodeSkuRelationshipBySn(sn);
+        BaseSku baseSku = baseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, sn);
+        Assert.isTrue(ObjectUtil.isNotNull(baseSku), "物料不存在!");
+        Assert.isTrue(baseSku.getActiveFlag().equals(Constants.YES), "该物料已禁用!");
+        if (CollectionUtil.isNotEmpty(codeSkuRelationshipVOList)){
+            CodeSkuRelationshipVO codeSkuRelationshipVO = codeSkuRelationshipVOList.stream().
+                    filter(item -> Constants.YES.equals(item.getStatus())).findFirst().orElseThrow(() -> new BaseException("该条码已禁用"));
+            codeSkuRelationshipVO.setProduct(Boolean.TRUE);
+            return codeSkuRelationshipVO;
         }
+        CodeSkuRelationshipVO codeSkuRelationshipVO = new CodeSkuRelationshipVO();
+        codeSkuRelationshipVO.setProduct(Boolean.FALSE);
+        codeSkuRelationshipVO.setSku(baseSku.getSku());
+        codeSkuRelationshipVO.setSkuType(baseSku.getSkuType());
+        codeSkuRelationshipVO.setSn(baseSku.getSku());
+        codeSkuRelationshipVO.setSkuName(baseSku.getDesc1());
+        codeSkuRelationshipVO.setModel(baseSku.getModel());
+        codeSkuRelationshipVO.setStatus(baseSku.getActiveFlag());
+        return codeSkuRelationshipVO;
     }
 
     @Override
     public int saveOrUpdate(CodeSkuRelationship codeSkuRelationship) {
-        List<CodeSkuRelationshipVO> query = codeSkuRelationshipMapper.selectCodeSkuRelationshipBySn(codeSkuRelationship.getSn());
-        if (query == null || query.size() == 0) {
+        List<CodeSkuRelationshipVO> codeSkuRelationshipVOList = codeSkuRelationshipMapper.selectCodeSkuRelationshipBySn(codeSkuRelationship.getSn());
+        if (CollectionUtil.isEmpty(codeSkuRelationshipVOList)){
             return codeSkuRelationshipMapper.insertCodeSkuRelationship(codeSkuRelationship);
-        } else {
-            CodeSkuRelationship relationshipUpdate = new CodeSkuRelationship();
-            relationshipUpdate.setId(codeSkuRelationship.getId());
-            relationshipUpdate.setSku(codeSkuRelationship.getSku());
-            relationshipUpdate.setSn(codeSkuRelationship.getSn());
-            relationshipUpdate.setStatus(codeSkuRelationship.getStatus());
-            return codeSkuRelationshipMapper.updateCodeSkuRelationship(codeSkuRelationship);
         }
+        return codeSkuRelationshipMapper.update(new CodeSkuRelationship(), Wrappers.<CodeSkuRelationship>lambdaUpdate()
+                .set(CodeSkuRelationship::getSku, codeSkuRelationship.getSku())
+                .set(CodeSkuRelationship::getSn, codeSkuRelationship.getSn())
+                .set(CodeSkuRelationship::getStatus, codeSkuRelationship.getStatus())
+                .eq(CodeSkuRelationship::getId, codeSkuRelationship.getId()));
     }
 }

+ 0 - 185
warewms-base/src/main/java/com/ruoyi/base/utils/CommonUtils.java

@@ -1,185 +0,0 @@
-package com.ruoyi.base.utils;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.TypeReference;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * Created by IntelliJ IDEA.
- * User: andy.qu
- * Date: 2019/11/14
- */
-public class CommonUtils {
-
-    //转变的依赖字符
-    public static final char UNDERLINE = '_';
-
-    /**
-     * 文件下载
-     *
-     * @param file
-     * @param res
-     * @throws IOException
-     */
-    public static void download(File file, HttpServletResponse res) throws IOException {
-        // 发送给客户端的数据
-        OutputStream outputStream = res.getOutputStream();
-        byte[] buff = new byte[1024];
-        BufferedInputStream bis = null;
-        // 读取filename
-        bis = new BufferedInputStream(new FileInputStream(file));
-        int i = bis.read(buff);
-        while (i != -1) {
-            outputStream.write(buff, 0, buff.length);
-            outputStream.flush();
-            i = bis.read(buff);
-        }
-    }
-
-    /**
-     * 文件下载
-     *
-     * @param inputStream
-     * @param res
-     * @throws IOException
-     */
-    public static void download(InputStream inputStream, HttpServletResponse res) throws IOException {
-        // 发送给客户端的数据
-        OutputStream outputStream = res.getOutputStream();
-        byte[] buff = new byte[1024];
-        BufferedInputStream bis = null;
-        // 读取filename
-        bis = new BufferedInputStream(inputStream);
-        int i = bis.read(buff);
-        while (i != -1) {
-            outputStream.write(buff, 0, buff.length);
-            outputStream.flush();
-            i = bis.read(buff);
-        }
-    }
-
-    /**
-     * 对象字符串转换null判断
-     *
-     * @return
-     */
-    public static String objectStringConvert(Object object) {
-        return object == null ? "" : object.toString();
-    }
-
-    public static String getString(String string) {
-        if (string == null) {
-            return "";
-        } else {
-            return string;
-        }
-    }
-
-    /**
-     * 检查是否为Int
-     *
-     * @param value    值
-     * @param fildName 提示字段名称
-     * @return
-     */
-    public static void checkInt(String value, String fildName) {
-        try {
-            Integer i = Integer.parseInt(value);
-        } catch (Exception e) {
-            throw new RuntimeException(fildName + "必须是整数");
-        }
-    }
-
-    /**
-     * 对象转map
-     *
-     * @param obj
-     * @return
-     */
-    public static Map<String, String> objToMap(Object obj) {
-        if (obj == null) {
-            return null;
-        }
-        JSONObject jsonObj = (JSONObject) JSON.toJSON(obj);
-        Map<String, String> map = JSONObject.parseObject(jsonObj.toJSONString(), new TypeReference<Map<String, String>>() {
-        });
-        return map;
-    }
-
-    /**
-     * 将驼峰转换成"_"(userId:user_id)
-     *
-     * @param param
-     * @return
-     */
-    public static String camelToUnderline(String param) {
-        if (param == null || "".equals(param.trim())) {
-            return "";
-        }
-        int len = param.length();
-        StringBuilder sb = new StringBuilder(len);
-        for (int i = 0; i < len; i++) {
-            char c = param.charAt(i);
-            if (Character.isUpperCase(c)) {
-                sb.append(UNDERLINE);
-                sb.append(Character.toLowerCase(c));
-            } else {
-                sb.append(c);
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * 将"_"转成驼峰(user_id:userId)
-     *
-     * @param param
-     * @return
-     */
-    public static String underlineToCamel(String param) {
-        if (param == null || "".equals(param.trim())) {
-            return "";
-        }
-        int len = param.length();
-        StringBuilder sb = new StringBuilder(len);
-        for (int i = 0; i < len; i++) {
-            char c = param.charAt(i);
-            if (c == UNDERLINE) {
-                if (++i < len) {
-                    sb.append(Character.toUpperCase(param.charAt(i)));
-                }
-            } else {
-                sb.append(c);
-            }
-        }
-        return sb.toString();
-    }
-
-    public static String lpad(String s, int n, String replace) {
-        while (s.length() < n) {
-            s = replace + s;
-        }
-        return s;
-    }
-
-    public static void main(String[] args) {
-
-        //String pwd = RandomUtil.randomNumbers(6);
-
-        //System.out.println(DigestUtils.sha256Hex("583817"));
-        List<Map<String, Object>> arr = new ArrayList<>();
-        Map<String, Object> map1 = new HashMap<>();
-        map1.put("key", "123");
-        map1.put("value", "1");
-        arr.add(map1);
-        List<Object> map = arr.stream().map(e -> e.put("key", "")).collect(Collectors.toList());
-        System.out.println(JSON.toJSONString(map));
-        //System.out.println(StringUtils.join(arr,","));
-
-    }
-}

+ 0 - 64
warewms-base/src/main/java/com/ruoyi/base/utils/IdSequenceUtils.java

@@ -1,64 +0,0 @@
-package com.ruoyi.base.utils;
-
-import cn.hutool.core.date.DateUtil;
-import com.ruoyi.base.domain.BaseIdsequence;
-import com.ruoyi.base.service.IBaseIdsequenceService;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.Date;
-
-@Component
-public class IdSequenceUtils {
-    @Autowired
-    private IBaseIdsequenceService baseIdsequenceService;
-
-    /**
-     * 生成主键
-     *
-     * @param idName
-     * @return
-     */
-    public String generateId(String idName) {
-        int count = 20;
-        while (count > 0) {
-            count--;
-            BaseIdsequence sysIdsequence = baseIdsequenceService.selectBaseIdsequenceByIdName(idName.toUpperCase());
-            if (sysIdsequence == null) {
-                return null;
-            }
-
-            String prefix;
-            String dateStr = "";
-            if (!StringUtils.isEmpty(sysIdsequence.getDateFormat()) && (sysIdsequence.getDateFormat().equals("YYYYMMDD") || sysIdsequence.getDateFormat().equals("YYMMDD"))) {
-                prefix = sysIdsequence.getPrefix() + DateUtil.format(new Date(), "yMMdd");
-                dateStr = DateUtil.format(new Date(), "yMMdd");
-            } else {
-                prefix = sysIdsequence.getPrefix();
-            }
-
-            int index = 0;
-            if (sysIdsequence.getDateFormat() == null || sysIdsequence.getDateFormat().equals("") || dateStr.equals(sysIdsequence.getDateMax())) {
-                index = sysIdsequence.getIdSequence() == null ? 0 : sysIdsequence.getIdSequence().intValue();
-            }
-
-            String resultNo = "";
-            if (!StringUtils.isEmpty(prefix)) {
-                resultNo = prefix + CommonUtils.lpad((index + 1) + "", sysIdsequence.getLength().intValue(), "0");
-            } else {
-                resultNo = (index + 1) + "";
-            }
-
-            int isOk = baseIdsequenceService.updateByVersion(idName, dateStr, sysIdsequence.getIdSequence(), index + 1);
-            if (isOk > 0) {
-                return resultNo;
-            }
-        }
-        return "";
-    }
-
-    public static void main(String[] args) {
-        System.out.println(DateUtil.format(new Date(), "yMMdd"));
-    }
-}

+ 1 - 1
warewms-base/src/main/resources/mapper/base/CodeSkuRelationshipMapper.xml

@@ -103,6 +103,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       select c.sn,c.status,s.sku,s.desc1,s.sku_type,s.model
       from code_sku_relationship c
       left join base_sku s on c.sku = s.sku
-      where c.sn = #{sn} and c.status = 'Y'
+      where c.sn = #{sn}
     </select>
 </mapper>

+ 22 - 158
warewms-hard/src/main/java/com/ruoyi/hard/modbus/tcp/AutoDoorClient.java

@@ -3,17 +3,15 @@ package com.ruoyi.hard.modbus.tcp;
 import com.jwk.spring.boot.autoconfigure.ModbusTcpMasterTemplate;
 import com.jwk.spring.boot.modbus4j.ModbusMasterUtil;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.AutoDoorEnum;
 import com.serotonin.modbus4j.msg.ReadResponse;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 import java.util.HashMap;
 import java.util.Map;
 
-import static com.ruoyi.hard.modbus.tcp.AutoDoorClient.AUTOMATIC_DOOR_CODE.*;
-
 
 /**
  * 自动门对接
@@ -29,169 +27,30 @@ public class AutoDoorClient {
      * 自动门(靠马路)
      */
     @Autowired(required = false)
-    @Qualifier("modbusTcpMasterTemplateFirst")
-    private ModbusTcpMasterTemplate modbusTcpMasterTemplateFirst;
-
-    /**
-     * 自动门(靠马路-第二层)
-     */
-    @Autowired(required = false)
-    @Qualifier("modbusTcpMasterTemplateSixth")
-    private ModbusTcpMasterTemplate modbusTcpMasterTemplateSixth;
-
-    /**
-     * 自动门
-     */
-    @Autowired(required = false)
-    @Qualifier("modbusTcpMasterTemplateSecond")
-    private ModbusTcpMasterTemplate modbusTcpMasterTemplateSecond;
-
-    /**
-     * 卷帘门
-     */
-    @Autowired(required = false)
-    @Qualifier("modbusTcpMasterTemplateSeventh")
-    private ModbusTcpMasterTemplate modbusTcpMasterTemplateSeventh;
+    private ModbusTcpMasterTemplate modbusTcpMasterTemplate;
 
     private Map<String, ModbusTcpMasterTemplate> tcpMasterTemplateMap;
 
     @PostConstruct
     public void initMap() {
         tcpMasterTemplateMap = new HashMap<>();
-        tcpMasterTemplateMap.put(AUTO_DOOR_NO.A.name(), modbusTcpMasterTemplateFirst);
-        tcpMasterTemplateMap.put(AUTO_DOOR_NO.B.name(), modbusTcpMasterTemplateSecond);
-        tcpMasterTemplateMap.put(AUTO_DOOR_NO.C.name(), modbusTcpMasterTemplateSixth);
-        tcpMasterTemplateMap.put(AUTO_DOOR_NO.D.name(), modbusTcpMasterTemplateSeventh);
+        tcpMasterTemplateMap.put(AutoDoorEnum.AUTO_DOOR_NO.A.name(), modbusTcpMasterTemplate);
     }
 
-    public ModbusMasterUtil getModbusMasterUtil(AUTO_DOOR_NO doorNo) {
+    public ModbusMasterUtil getModbusMasterUtil(AutoDoorEnum.AUTO_DOOR_NO doorNo) {
         return tcpMasterTemplateMap.get(doorNo.name()).getModbusMasterUtil();
     }
 
-    /**
-     * 自动门编号
-     */
-    public enum AUTO_DOOR_NO {
-        /***
-         * 靠墙门
-         */
-        A("1"),
-        /***
-         * 靠室内
-         */
-        B("2"),
-        /***
-         * 靠墙门(第二层)
-         */
-        C("3"),
-        /***
-         * 卷帘门
-         */
-        D("4");
-
-        private String value;
-
-        AUTO_DOOR_NO(String value) {
-            this.value = value;
-        }
-
-        public String getValue() {
-            return value;
-        }
-
-        /**
-         * 根据值获得枚举类型 switch
-         *
-         * @param value
-         * @return
-         */
-        public static AUTO_DOOR_NO getByValue(String value) {
-            for (AUTO_DOOR_NO code : values()) {
-                if (code.getValue().equals(value)) {
-                    return code;
-                }
-            }
-            return null;
-        }
-    }
-
-
-    /**
-     * 自动门命令
-     */
-    public enum AUTOMATIC_DOOR_CODE {
-        /**
-         * 开门
-         */
-        WRITE_OPEN(1, 0, 1, 0),
-        /**
-         * 关门
-         */
-        WRITE_CLOSE(1, 1, 1, 0),
-        /**
-         * 急停
-         */
-        WRITE_STOP(1, 2, 1, 0),
-        /***
-         * 开门状态
-         */
-        RAED_OPEN_STS(1, 10, 2, 0),
-        /**
-         * 关门状态
-         */
-        RAED_ClOSE_STS(1, 11, 2, 0);
-
-        /**
-         * 从节点id
-         */
-        private int slaveId;
-        /**
-         * 地址
-         */
-        private int offset;
-        /**
-         * 值
-         */
-        private int value;
-        /**
-         * 开关门清除标记
-         */
-        private int clear;
-
-        AUTOMATIC_DOOR_CODE(int slaveId, int offset, int value, int clear) {
-            this.slaveId = slaveId;
-            this.offset = offset;
-            this.value = value;
-            this.clear = clear;
-        }
-
-        public int getSlaveId() {
-            return slaveId;
-        }
-
-        public int getOffset() {
-            return offset;
-        }
-
-        public int getValue() {
-            return value;
-        }
-
-        public int getClear() {
-            return clear;
-        }
-    }
-
-
     /**
      * 开门
      *
      * @param doorNo
      */
-    public Boolean sendOpen(AUTO_DOOR_NO doorNo) {
+    public Boolean sendOpen(AutoDoorEnum.AUTO_DOOR_NO doorNo) {
         ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
         sendCloseClear(doorNo);
-        Boolean r = modbusMasterUtil.writeHoldingRegisters(WRITE_OPEN.getSlaveId(), WRITE_OPEN.offset, WRITE_OPEN.getValue());
+        Boolean r = modbusMasterUtil.writeHoldingRegisters(AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_OPEN.getSlaveId(),
+                AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_OPEN.getOffset(), AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_OPEN.getValue());
         try {
             Thread.sleep(1000);
         } catch (InterruptedException e) {
@@ -206,10 +65,11 @@ public class AutoDoorClient {
      *
      * @param doorNo
      */
-    public Boolean sendClose(AUTO_DOOR_NO doorNo) {
+    public Boolean sendClose(AutoDoorEnum.AUTO_DOOR_NO doorNo) {
         ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
         sendOpenClear(doorNo);
-        Boolean r = modbusMasterUtil.writeHoldingRegisters(WRITE_CLOSE.getSlaveId(), WRITE_CLOSE.offset, WRITE_CLOSE.getValue());
+        Boolean r = modbusMasterUtil.writeHoldingRegisters(AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_CLOSE.getSlaveId()
+                , AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_CLOSE.getOffset(), AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_CLOSE.getValue());
         try {
             Thread.sleep(1000);
         } catch (InterruptedException e) {
@@ -224,9 +84,10 @@ public class AutoDoorClient {
      *
      * @param doorNo
      */
-    public Boolean sendOpenClear(AUTO_DOOR_NO doorNo) {
+    public Boolean sendOpenClear(AutoDoorEnum.AUTO_DOOR_NO doorNo) {
         ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
-        return modbusMasterUtil.writeHoldingRegisters(WRITE_OPEN.getSlaveId(), WRITE_OPEN.offset, WRITE_OPEN.getClear());
+        return modbusMasterUtil.writeHoldingRegisters(AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_OPEN.getSlaveId(),
+                AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_OPEN.getOffset(), AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_OPEN.getClear());
     }
 
     /**
@@ -234,9 +95,10 @@ public class AutoDoorClient {
      *
      * @param doorNo
      */
-    public Boolean sendCloseClear(AUTO_DOOR_NO doorNo) {
+    public Boolean sendCloseClear(AutoDoorEnum.AUTO_DOOR_NO doorNo) {
         ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
-        return modbusMasterUtil.writeHoldingRegisters(WRITE_CLOSE.getSlaveId(), WRITE_CLOSE.offset, WRITE_CLOSE.getClear());
+        return modbusMasterUtil.writeHoldingRegisters(AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_CLOSE.getSlaveId(),
+                AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_CLOSE.getOffset(), AutoDoorEnum.AUTOMATIC_DOOR_CODE.WRITE_CLOSE.getClear());
     }
 
     /**
@@ -244,9 +106,10 @@ public class AutoDoorClient {
      *
      * @param
      */
-    public AjaxResult readOpenSts(AUTO_DOOR_NO doorNo) {
+    public AjaxResult readOpenSts(AutoDoorEnum.AUTO_DOOR_NO doorNo) {
         ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
-        ReadResponse readResponse = modbusMasterUtil.readHoldingRegisters(RAED_OPEN_STS.getSlaveId(), RAED_OPEN_STS.getOffset(), RAED_OPEN_STS.getValue());
+        ReadResponse readResponse = modbusMasterUtil.readHoldingRegisters(AutoDoorEnum.AUTOMATIC_DOOR_CODE.RAED_OPEN_STS.getSlaveId(),
+                AutoDoorEnum.AUTOMATIC_DOOR_CODE.RAED_OPEN_STS.getOffset(), AutoDoorEnum.AUTOMATIC_DOOR_CODE.RAED_OPEN_STS.getValue());
         boolean[] booleanData = readResponse.getBooleanData();
         return AjaxResult.success("", booleanData);
     }
@@ -256,9 +119,10 @@ public class AutoDoorClient {
      *
      * @param doorNo
      */
-    public AjaxResult readCloseSts(AUTO_DOOR_NO doorNo) {
+    public AjaxResult readCloseSts(AutoDoorEnum.AUTO_DOOR_NO doorNo) {
         ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
-        ReadResponse readResponse = modbusMasterUtil.readHoldingRegisters(RAED_ClOSE_STS.getSlaveId(), RAED_ClOSE_STS.getOffset(), RAED_ClOSE_STS.getValue());
+        ReadResponse readResponse = modbusMasterUtil.readHoldingRegisters(AutoDoorEnum.AUTOMATIC_DOOR_CODE.RAED_ClOSE_STS.getSlaveId(),
+                AutoDoorEnum.AUTOMATIC_DOOR_CODE.RAED_ClOSE_STS.getOffset(), AutoDoorEnum.AUTOMATIC_DOOR_CODE.RAED_ClOSE_STS.getValue());
         boolean[] booleanData = readResponse.getBooleanData();
         return AjaxResult.success("", booleanData);
     }

+ 12 - 95
warewms-hard/src/main/java/com/ruoyi/hard/modbus/tcp/ButtonBoxClient.java

@@ -2,13 +2,11 @@ package com.ruoyi.hard.modbus.tcp;
 
 import com.jwk.spring.boot.autoconfigure.ModbusTcpMasterTemplate;
 import com.jwk.spring.boot.modbus4j.ModbusMasterUtil;
+import com.ruoyi.common.enums.ButtonBoxEnum;
 import com.serotonin.modbus4j.msg.ReadResponse;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
-import static com.ruoyi.hard.modbus.tcp.ButtonBoxClient.BUTTON_BOX_CODE.*;
-
 
 /**
  * 按钮盒对接
@@ -24,89 +22,8 @@ public class ButtonBoxClient {
      * 按钮盒
      */
     @Autowired(required = false)
-    @Qualifier("modbusTcpMasterTemplateThird")
-    private ModbusTcpMasterTemplate modbusTcpMasterTemplateThird;
-
-    /**
-     * 按钮盒命令
-     */
-    public enum BUTTON_BOX_CODE {
-        /**
-         * 1号按钮状态 value代表读的长度(读到1代表按钮被按过) value1代表清除按下标记
-         */
-        BTN_STS_01(1, 1, 1, 0, 0, 0, 0),
-        /**
-         * 1号按钮状态 value代表读的长度(读到1代表按钮被按过) value1代表清除按下标记
-         */
-        BTN_STS_02(1, 2, 1, 0, 0, 0, 0),
-        /**
-         * 1号灯状态 value代表读的长度(0:灭 1:亮 2:快闪 3慢闪) value1-4代表写(0:灭 1:亮 2:快闪 3慢闪)
-         */
-        LAMP_STS_01(1, 5, 1, 0, 1, 2, 3),
-        /**
-         * 1号灯状态 value代表读的长度(0:灭 1:亮 2:快闪 3慢闪) value1-4代表写(0:灭 1:亮 2:快闪 3慢闪)
-         */
-        LAMP_STS_02(1, 6, 1, 0, 1, 2, 3);
-
-
-        /**
-         * 从节点id
-         */
-        private int slaveId;
-        /**
-         * 地址
-         */
-        private int offset;
-        /**
-         * 读的长度
-         */
-        private int value;
-        /**
-         * 写的值
-         */
-        private int value1;
-        private int value2;
-        private int value3;
-        private int value4;
-
-        BUTTON_BOX_CODE(int slaveId, int offset, int value, int value1, int value2, int value3, int value4) {
-            this.slaveId = slaveId;
-            this.offset = offset;
-            this.value = value;
-            this.value1 = value1;
-            this.value2 = value2;
-            this.value3 = value3;
-            this.value4 = value4;
-        }
+    private ModbusTcpMasterTemplate modbusTcpMasterTemplate;
 
-        public int getSlaveId() {
-            return slaveId;
-        }
-
-        public int getOffset() {
-            return offset;
-        }
-
-        public int getValue() {
-            return value;
-        }
-
-        public int getValue1() {
-            return value1;
-        }
-
-        public int getValue2() {
-            return value2;
-        }
-
-        public int getValue3() {
-            return value3;
-        }
-
-        public int getValue4() {
-            return value4;
-        }
-    }
 
 
     /**
@@ -115,7 +32,7 @@ public class ButtonBoxClient {
      * @return true 代表按钮被按下
      */
     public Boolean readBtn01() {
-        short i = read(BTN_STS_01.getSlaveId(), BTN_STS_01.getOffset(), BTN_STS_01.getValue());
+        short i = read(ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_01.getSlaveId(), ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_01.getOffset(), ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_01.getValue());
         return i == 1;
     }
 
@@ -125,7 +42,7 @@ public class ButtonBoxClient {
      * @return true 代表按钮被按下
      */
     public Boolean readBtn02() {
-        short i = read(BTN_STS_02.getSlaveId(), BTN_STS_02.getOffset(), BTN_STS_02.getValue());
+        short i = read(ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_02.getSlaveId(), ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_02.getOffset(), ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_02.getValue());
         return i == 1;
     }
 
@@ -135,7 +52,7 @@ public class ButtonBoxClient {
      * @return true
      */
     public Boolean clearBtn01() {
-        return write(BTN_STS_01.getSlaveId(), BTN_STS_01.getOffset(), BTN_STS_01.getValue1());
+        return write(ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_01.getSlaveId(), ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_01.getOffset(), ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_01.getValue1());
     }
 
     /**
@@ -144,7 +61,7 @@ public class ButtonBoxClient {
      * @return true
      */
     public Boolean clearBtn02() {
-        return write(BTN_STS_02.getSlaveId(), BTN_STS_02.getOffset(), BTN_STS_02.getValue1());
+        return write(ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_02.getSlaveId(), ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_02.getOffset(), ButtonBoxEnum.BUTTON_BOX_CODE.BTN_STS_02.getValue1());
     }
 
     /**
@@ -153,7 +70,7 @@ public class ButtonBoxClient {
      * @return true
      */
     public Boolean writeLamp01Bright() {
-        return write(LAMP_STS_01.getSlaveId(), LAMP_STS_01.getOffset(), LAMP_STS_01.getValue2());
+        return write(ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_01.getSlaveId(), ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_01.getOffset(), ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_01.getValue2());
     }
 
     /**
@@ -162,7 +79,7 @@ public class ButtonBoxClient {
      * @return true
      */
     public Boolean writeLamp02Bright() {
-        return write(LAMP_STS_02.getSlaveId(), LAMP_STS_02.getOffset(), LAMP_STS_02.getValue2());
+        return write(ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_02.getSlaveId(), ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_02.getOffset(), ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_02.getValue2());
     }
 
     /**
@@ -171,7 +88,7 @@ public class ButtonBoxClient {
      * @return true
      */
     public Boolean writeLamp01Death() {
-        return write(LAMP_STS_01.getSlaveId(), LAMP_STS_01.getOffset(), LAMP_STS_01.getValue1());
+        return write(ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_01.getSlaveId(), ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_01.getOffset(), ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_01.getValue1());
     }
 
     /**
@@ -180,11 +97,11 @@ public class ButtonBoxClient {
      * @return true
      */
     public Boolean writeLamp02Death() {
-        return write(LAMP_STS_02.getSlaveId(), LAMP_STS_02.getOffset(), LAMP_STS_02.getValue1());
+        return write(ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_02.getSlaveId(), ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_02.getOffset(), ButtonBoxEnum.BUTTON_BOX_CODE.LAMP_STS_02.getValue1());
     }
 
     private short read(int slaveId, int offset, int len) {
-        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplateThird.getModbusMasterUtil();
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplate.getModbusMasterUtil();
         ReadResponse readResponse = modbusMasterUtil.readHoldingRegisters(slaveId, offset, len);
         if (readResponse == null) {
             return 0;
@@ -195,7 +112,7 @@ public class ButtonBoxClient {
 
 
     private Boolean write(int slaveId, int offset, int value) {
-        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplateThird.getModbusMasterUtil();
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplate.getModbusMasterUtil();
         return modbusMasterUtil.writeHoldingRegisters(slaveId, offset, value);
     }
 

+ 22 - 289
warewms-hard/src/main/java/com/ruoyi/hard/modbus/tcp/ChargingMachineClient.java

@@ -2,18 +2,15 @@ package com.ruoyi.hard.modbus.tcp;
 
 import com.jwk.spring.boot.autoconfigure.ModbusTcpMasterTemplate;
 import com.jwk.spring.boot.modbus4j.ModbusMasterUtil;
+import com.ruoyi.common.enums.ChargingMachineEnum;
 import com.serotonin.modbus4j.msg.ReadResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import java.util.Arrays;
-import java.util.LinkedHashMap;
 import java.util.Map;
 
-import static com.ruoyi.hard.modbus.tcp.ChargingMachineClient.CHARGER_ADDRESS_MEANING.*;
-
 
 /**
  * 充电机
@@ -30,15 +27,7 @@ public class ChargingMachineClient {
      * 充电机(三向车)
      */
     @Autowired(required = false)
-    @Qualifier("modbusTcpMasterTemplateFourth")
-    private ModbusTcpMasterTemplate modbusTcpMasterTemplateFourth;
-
-    /**
-     * 充电机(迷你堆垛)
-     */
-    @Autowired(required = false)
-    @Qualifier("modbusTcpMasterTemplateFifth")
-    private ModbusTcpMasterTemplate modbusTcpMasterTemplateFifth;
+    private ModbusTcpMasterTemplate modbusTcpMasterTemplate;
 
     /**
      * 充电机操作
@@ -46,17 +35,17 @@ public class ChargingMachineClient {
      * @param operation
      * @return
      */
-    public boolean operation(CHARGER_ADDRESS_MEANING operation, boolean con) {
+    public boolean operation(ChargingMachineEnum.CHARGER_ADDRESS_MEANING operation) {
         switch (operation) {
             // 启动
             case START:
-                return start(con);
+                return start();
             // 停止
             case STOP:
-                return stop(con);
+                return stop();
             // 放电
             case DISCHARGE:
-                return discharge(con);
+                return discharge();
             default:
                 break;
         }
@@ -68,8 +57,8 @@ public class ChargingMachineClient {
      *
      * @return
      */
-    public Map<CHARGER_STATUS, Boolean> getStatusMapping(boolean con) {
-        return ChargingMachineClient.CHARGER_STATUS.getMapping(getStatus(con));
+    public Map<ChargingMachineEnum.CHARGER_STATUS, Boolean> getStatusMapping() {
+        return ChargingMachineEnum.CHARGER_STATUS.getMapping(getStatus());
     }
 
     /**
@@ -77,8 +66,8 @@ public class ChargingMachineClient {
      *
      * @return
      */
-    public Map<String, Boolean> getStatusNameMapping(boolean con) {
-        return ChargingMachineClient.CHARGER_STATUS.getNameMapping(getStatus(con));
+    public Map<String, Boolean> getStatusNameMapping() {
+        return ChargingMachineEnum.CHARGER_STATUS.getNameMapping(getStatus());
     }
 
     /**
@@ -88,10 +77,9 @@ public class ChargingMachineClient {
      * 假设3个字节为:00000110 00000101 00000100
      * 则最终返回的数组:[0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
      */
-    public boolean[] getStatus(boolean con) {
-        ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFourth.getModbusMasterUtil()
-                : modbusTcpMasterTemplateFifth.getModbusMasterUtil();
-        ReadResponse read = modbusMasterUtil.readCoils(1, CHARGER_STATUS.getOffset(), CHARGER_STATUS.getCommand());
+    public boolean[] getStatus() {
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplate.getModbusMasterUtil();
+        ReadResponse read = modbusMasterUtil.readCoils(1, ChargingMachineEnum.CHARGER_ADDRESS_MEANING.CHARGER_STATUS.getOffset(), ChargingMachineEnum.CHARGER_ADDRESS_MEANING.CHARGER_STATUS.getCommand());
         if (read == null || read.getBooleanData() == null) {
             log.error("获取充电机状态为空!");
             return null;
@@ -108,10 +96,9 @@ public class ChargingMachineClient {
      *
      * @return
      */
-    private boolean start(boolean con) {
-        ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFourth.getModbusMasterUtil()
-                : modbusTcpMasterTemplateFifth.getModbusMasterUtil();
-        return modbusMasterUtil.writeCoil(1, START.getOffset(), START.getCommand());
+    private boolean start() {
+        ModbusMasterUtil modbusMasterUtil =modbusTcpMasterTemplate.getModbusMasterUtil();
+        return modbusMasterUtil.writeCoil(1, ChargingMachineEnum.CHARGER_ADDRESS_MEANING.START.getOffset(), ChargingMachineEnum.CHARGER_ADDRESS_MEANING.START.getCommand());
     }
 
     /**
@@ -119,10 +106,9 @@ public class ChargingMachineClient {
      *
      * @return
      */
-    private boolean stop(boolean con) {
-        ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFourth.getModbusMasterUtil()
-                : modbusTcpMasterTemplateFifth.getModbusMasterUtil();
-        return modbusMasterUtil.writeCoil(1, STOP.getOffset(), STOP.getCommand());
+    private boolean stop() {
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplate.getModbusMasterUtil();
+        return modbusMasterUtil.writeCoil(1, ChargingMachineEnum.CHARGER_ADDRESS_MEANING.STOP.getOffset(), ChargingMachineEnum.CHARGER_ADDRESS_MEANING.STOP.getCommand());
     }
 
     /**
@@ -130,266 +116,13 @@ public class ChargingMachineClient {
      *
      * @return
      */
-    private boolean discharge(boolean con) {
-        ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFourth.getModbusMasterUtil()
-                : modbusTcpMasterTemplateFifth.getModbusMasterUtil();
-        return modbusMasterUtil.writeCoil(1, DISCHARGE.getOffset(), DISCHARGE.getCommand());
-    }
-
-    /**
-     * 功能码
-     */
-    public enum FUNCTION_CODE {
-        /***
-         * 读线圈寄存器
-         */
-        READ_01H(0x01),
-        /***
-         * 读保持寄存器
-         */
-        READ_03H(0x03),
-        /***
-         * 写单个线圈寄存器
-         */
-        WRITE_05H(0x05),
-        /***
-         * 写单个保持寄存器
-         */
-        WRITE_06H(0x06);
-
-        private Integer value;
-
-        FUNCTION_CODE(Integer value) {
-            this.value = value;
-        }
-
-        public Integer getValue() {
-            return value;
-        }
-    }
-
-    /**
-     * 充电机ModBus地址码
-     */
-    public enum CHARGER_ADDRESS_MEANING {
-        /***
-         * 启动充电机
-         */
-        START(FUNCTION_CODE.WRITE_05H, 0x0007, 0, 0x0007, 0XFF00),
-        /***
-         * 停止充电机
-         */
-        STOP(FUNCTION_CODE.WRITE_05H, 0x0007, 0, 0x0007, 0X0000),
-        /**
-         * 充电机放电
-         */
-        DISCHARGE(FUNCTION_CODE.WRITE_05H, 0x0008, 0, 0x0008, 0xFF00),
-        /**
-         * 充电机状态
-         */
-        CHARGER_STATUS(FUNCTION_CODE.READ_01H, 0x0040, 24, 0x0040, 0X0018),
-        /**
-         * 读取电压(/100
-         */
-        READ_VOLTAGE(FUNCTION_CODE.READ_03H, 0x0065, 1, 0x0065, 0X0001),
-        /**
-         * 读取电流(/100
-         */
-        READ_CURRENT(FUNCTION_CODE.READ_03H, 0x0066, 1, 0x0066, 0X0001),
-        /**
-         * 读取当前容量(/100
-         */
-        READ_CAPACITY(FUNCTION_CODE.READ_03H, 0x0067, 1, 0x0067, 0X0001),
-        /**
-         * 时
-         */
-        HOURS(FUNCTION_CODE.READ_03H, 0x0068, 1, 0x0068, 0X0001),
-        /**
-         * 钟
-         */
-        MINUTES(FUNCTION_CODE.READ_03H, 0x0069, 1, 0x0069, 0X0001),
-        /**
-         * 秒
-         */
-        SECONDS(FUNCTION_CODE.READ_03H, 0x006A, 1, 0x006A, 0X0001),
-        /**
-         * 设置电压29.00V
-         */
-        SET_VOLTAGE(FUNCTION_CODE.WRITE_06H, 0x0090, 0, 0x0090, 0X0B54),
-        /**
-         * 设置电流29.00A
-         */
-        SET_CURRENT(FUNCTION_CODE.WRITE_06H, 0x0091, 0, 0x0091, 0X0B54),
-        /**
-         * 离线
-         */
-        SET_OFFLINE(FUNCTION_CODE.WRITE_06H, 0x0092, 0, 0x0092, 0X000),
-        /**
-         * 自动
-         */
-        SET_AUTO(FUNCTION_CODE.WRITE_06H, 0x0092, 0, 0x0092, 0X001),
-        /**
-         * 在线
-         */
-        SET_ONLINE(FUNCTION_CODE.WRITE_06H, 0x0092, 0, 0x0092, 0X002);
-
-        /**
-         * 功能码
-         */
-        private FUNCTION_CODE functionCode;
-
-        /**
-         * 读取和写入的开始偏移量
-         */
-        private int offset;
-
-        /**
-         * 长度 10进制
-         */
-        private int length;
-
-        /**
-         * PLC地址
-         */
-        private int address;
-
-        /**
-         * 命令
-         */
-        private int command;
-
-        CHARGER_ADDRESS_MEANING(FUNCTION_CODE functionCode, int offset, int length, int address, int command) {
-            this.functionCode = functionCode;
-            this.offset = offset;
-            this.length = length;
-            this.address = address;
-            this.command = command;
-        }
-
-        public FUNCTION_CODE getFunctionCode() {
-            return functionCode;
-        }
-
-        public int getOffset() {
-            return offset;
-        }
-
-        public int getLength() {
-            return length;
-        }
-
-        public int getAddress() {
-            return address;
-        }
-
-        public int getCommand() {
-            return command;
-        }
+    private boolean discharge() {
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplate.getModbusMasterUtil();
+        return modbusMasterUtil.writeCoil(1, ChargingMachineEnum.CHARGER_ADDRESS_MEANING.DISCHARGE.getOffset(), ChargingMachineEnum.CHARGER_ADDRESS_MEANING.DISCHARGE.getCommand());
     }
 
-    /**
-     * 充电机状态:
-     * 第4个字节(状态代码) 第5个字节(故障代码) 第6个字节(各种状态,有些功能需要硬件支持)
-     * 假设:第4个字节[00000110] 第5个字节[00000101] 第6个[00000100]
-     * 放在同一个数组中表示:[0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
-     */
-    public enum CHARGER_STATUS {
-
-        // 4bit
-        BIT_04_0("待机", 0),
-        BIT_04_1("故障", 1),
-        BIT_04_2("进行", 2),
-        BIT_04_3("完成", 3),
-        BIT_04_4("离线", 4),
-        BIT_04_5("在线", 5),
-        BIT_04_6("空", 6),
-        BIT_04_7("空", 7),
 
-        // 5bit
-        BIT_05_0("总故障", 8),
-        BIT_05_1("过流", 9),
-        BIT_05_2("过压", 10),
-        BIT_05_3("短路", 11),
-        BIT_05_4("电池未接", 12),
-        BIT_05_5("电池反接", 13),
-        BIT_05_6("模块通信故障", 14),
-        BIT_05_7("Can通信超时", 15),
 
-        // 6bit
-        BIT_06_0("归位", 16),
-        BIT_06_1("正在伸出", 17),
-        BIT_06_2("正在退回", 18),
-        BIT_06_3("伸出充电", 19),
-        BIT_06_4("伸出到底", 20),
-        BIT_06_5("伸缩故障", 21),
-        BIT_06_6("压紧", 22),
-        BIT_06_7("红外到位", 23);
 
-        /**
-         * 判断某位是否为true
-         *
-         * @param booleans
-         * @return
-         */
-        public boolean isTrue(boolean[] booleans) {
-            return booleans[this.getIndex()];
-        }
-
-        /**
-         * 获取枚举类型和状态对应关系表
-         *
-         * @param booleans
-         * @return
-         */
-        public static Map<CHARGER_STATUS, Boolean> getMapping(boolean[] booleans) {
-            if (booleans == null) {
-                return null;
-            }
-            Map<CHARGER_STATUS, Boolean> map = new LinkedHashMap<>();
-            for (CHARGER_STATUS value : values()) {
-                map.put(value, value.isTrue(booleans));
-            }
-            return map;
-        }
-
-        /**
-         * 获取描述和状态对应关系表
-         *
-         * @param booleans
-         * @return
-         */
-        public static Map<String, Boolean> getNameMapping(boolean[] booleans) {
-            if (booleans == null) {
-                return null;
-            }
-            Map<String, Boolean> map = new LinkedHashMap<>();
-            Map<CHARGER_STATUS, Boolean> mapping = getMapping(booleans);
-            mapping.forEach((k, v) -> map.put(k.getDescription(), v));
-            mapping.remove(BIT_04_6.getDescription());
-            return map;
-        }
-
-        /**
-         * 状态描述
-         */
-        private String description;
-        /**
-         * 在数组中下标
-         */
-        private int index;
-
-        CHARGER_STATUS(String description, int index) {
-            this.description = description;
-            this.index = index;
-        }
-
-        public String getDescription() {
-            return description;
-        }
-
-        public int getIndex() {
-            return index;
-        }
-    }
 
 }

+ 3 - 5
warewms-hard/src/main/java/com/ruoyi/hard/modbus/tcp/WarningLightClient.java

@@ -4,7 +4,6 @@ import com.jwk.spring.boot.autoconfigure.ModbusTcpMasterTemplate;
 import com.jwk.spring.boot.modbus4j.ModbusMasterUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 
@@ -23,8 +22,7 @@ public class WarningLightClient {
      * 警报灯对接
      */
     @Autowired(required = false)
-    @Qualifier("modbusTcpMasterTemplateEighth")
-    private ModbusTcpMasterTemplate modbusTcpMasterTemplateEighth;
+    private ModbusTcpMasterTemplate modbusTcpMasterTemplate;
 
 
     /**
@@ -33,7 +31,7 @@ public class WarningLightClient {
      * @return
      */
     public Boolean openWarningLight() {
-        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplateEighth.getModbusMasterUtil();
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplate.getModbusMasterUtil();
         Boolean do1 = false;//打开DO1中间端
         Boolean do3 = false;//打开DO3中间端
         try {
@@ -51,7 +49,7 @@ public class WarningLightClient {
      * @return
      */
     public Boolean closeWarningLight() {
-        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplateEighth.getModbusMasterUtil();
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplate.getModbusMasterUtil();
         Boolean do1 = false;//关闭DO1中间端
         Boolean do3 = false;//关闭DO3中间端
         try {

+ 3 - 65
warewms-hard/src/main/java/com/ruoyi/hard/rfid/RFIDReaderClient.java

@@ -5,11 +5,9 @@ import com.jwk.spring.boot.rfid.RfidReaderUtil;
 import com.mot.rfid.api3.TagData;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -25,80 +23,20 @@ import java.util.stream.Collectors;
 @Service
 public class RFIDReaderClient {
 
-
-    @Autowired(required = false)
-    @Qualifier("rfidReaderTemplateFirst")
-    private RfidReaderTemplate rfidReaderTemplateFirst;
     @Autowired(required = false)
-    @Qualifier("rfidReaderTemplateSecond")
-    private RfidReaderTemplate rfidReaderTemplateSecond;
-
+    private RfidReaderTemplate rfidReaderTemplate;
 
     /**
-     * 读取标签 墙外
+     * 读取标签
      *
      * @return
      */
     public List<String> readTagsOut() {
-        RfidReaderUtil rfidReaderUtil = rfidReaderTemplateFirst.getRfidReaderUtil();
-        TagData[] tagData = rfidReaderUtil.readTags();
-        if (tagData == null) {
-            return null;
-        }
-        return Arrays.stream(tagData).map(v -> v.getTagID()).collect(Collectors.toList());
-    }
-
-    /**
-     * 读取标签 室内
-     *
-     * @return
-     */
-    public List<String> readTagsIn() {
-        RfidReaderUtil rfidReaderUtil = rfidReaderTemplateSecond.getRfidReaderUtil();
+        RfidReaderUtil rfidReaderUtil = rfidReaderTemplate.getRfidReaderUtil();
         TagData[] tagData = rfidReaderUtil.readTags();
         if (tagData == null) {
             return null;
         }
         return Arrays.stream(tagData).map(v -> v.getTagID()).collect(Collectors.toList());
     }
-
-    /**
-     * 读取标签测试 墙外
-     */
-    public void readTagsOutTest() {
-        RfidReaderUtil rfidReaderUtil = rfidReaderTemplateFirst.getRfidReaderUtil();
-        for (; ; ) {
-            TagData[] tagData = rfidReaderUtil.readTags();
-            if (tagData == null) {
-                log.error("读取标签为空!");
-            } else {
-                List<String> tagIdList = Arrays.stream(tagData).map(v -> v.getTagID()).collect(Collectors.toList());
-                String[] strings = new String[tagIdList.size()];
-                String[] tagIds = tagIdList.toArray(strings);
-                System.out.println("--------------RFID读取标签--------------------");
-                Arrays.stream(tagIds).forEach(v -> System.out.println(v));
-                System.out.println("--------------RFID读取标签--------------------");
-            }
-        }
-    }
-
-    /**
-     * 读取标签测试 室内
-     */
-    public void readTagsInTest() {
-        RfidReaderUtil rfidReaderUtil = rfidReaderTemplateSecond.getRfidReaderUtil();
-        for (; ; ) {
-            TagData[] tagData = rfidReaderUtil.readTags();
-            if (tagData == null) {
-                log.error("读取标签为空!");
-            } else {
-                List<String> tagIdList = Arrays.stream(tagData).map(v -> v.getTagID()).collect(Collectors.toList());
-                String[] strings = new String[tagIdList.size()];
-                String[] tagIds = tagIdList.toArray(strings);
-                System.out.println("--------------RFID读取标签--------------------");
-                Arrays.stream(tagIds).forEach(v -> System.out.println(v));
-                System.out.println("--------------RFID读取标签--------------------");
-            }
-        }
-    }
 }