Browse Source

0701分支合并到主

hella_online_20240816
陈薪名 11 months ago
parent
commit
7642eec19e
  1. 17
      sql/release_202405/scp_202405.sql
  2. 14
      sql/release_202405/wms_202405.sql
  3. 15
      win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/util/ExcelUtils.java
  4. 68
      win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/QueryWrapperUtils.java
  5. 8
      win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/PostApi.java
  6. 21
      win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/dto/PostRespDTO.java
  7. 7
      win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/user/AdminUserApi.java
  8. 5
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dept/PostApiImpl.java
  9. 6
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/user/AdminUserApiImpl.java
  10. 2
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/dept/PostConvert.java
  11. 7
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostService.java
  12. 8
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostServiceImpl.java
  13. 9
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserService.java
  14. 30
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserServiceImpl.java
  15. 21
      win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java
  16. 160
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/DemandforecastingDetailController.java
  17. 79
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/DemandforecastingMainController.java
  18. 29
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingDetailBaseVO.java
  19. 98
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingDetailPageReqVO.java
  20. 30
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingDetailVersionRespVO.java
  21. 32
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingExportVo2.java
  22. 56
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingMainBaseVO.java
  23. 5
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingMainUpdateReqVO.java
  24. 12
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingMainUserCodeReqVO.java
  25. 14
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingPlanerRespVO.java
  26. 34
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingSupplierReqVO.java
  27. 29
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingSupplierRespVO.java
  28. 17
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itemarea/ItemareaController.java
  29. 104
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itempackage/ItempackageController.java
  30. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itempackage/vo/ItempackagePageReqVO.java
  31. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itempackage/vo/ItempackageRespVO.java
  32. 39
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/LocationController.java
  33. 48
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageunit/PackageunitController.java
  34. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageunit/vo/PackageunitPageReqVO.java
  35. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageunit/vo/PackageunitRespVO.java
  36. 187
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/PurchasePlanDetailController.java
  37. 189
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/PurchasePlanMainController.java
  38. 8
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanDetailBaseVO.java
  39. 9
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanDetailPageReqVO.java
  40. 10
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanDetailRespVO.java
  41. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainBaseVO.java
  42. 1
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainCreateReqVO.java
  43. 199
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExcelVO.java
  44. 150
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExcelVO2.java
  45. 25
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExportReqVO.java
  46. 25
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainImportErrorVO2.java
  47. 19
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainImportVO.java
  48. 58
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainImportVO2.java
  49. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestDetailBaseVO.java
  50. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestDetailPageReqVO.java
  51. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestDetailRespVO.java
  52. 194
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/SupplierCycleController.java
  53. 77
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleBaseVO.java
  54. 14
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleCreateReqVO.java
  55. 62
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleExcelVO.java
  56. 79
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleExportReqVO.java
  57. 18
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleImportExcelErrorVO.java
  58. 65
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleImportExcelVO.java
  59. 81
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCyclePageReqVO.java
  60. 19
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleRespVO.java
  61. 18
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleUpdateReqVO.java
  62. 95
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/SupplierdeliverRequestDetailController.java
  63. 70
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/SupplierdeliverRequestMainController.java
  64. 10
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestDetailCreateReqVO.java
  65. 24
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestDetailPackageRespVO.java
  66. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestDetailPageReqVO.java
  67. 12
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestDetailRespVO.java
  68. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestMainBaseVO.java
  69. 1
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestMainCreateReqVO.java
  70. 112
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestMainImportVO2.java
  71. 36
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestPackageTReqVO.java
  72. 20
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestPackageXReqVO.java
  73. 21
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/SupplieritemController.java
  74. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/vo/SupplieritemBaseVO.java
  75. 1
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/vo/SupplieritemCreateReqVO.java
  76. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/vo/SupplieritemPageReqVO.java
  77. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/itemarea/ItemareaConvert.java
  78. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasePlan/PurchasePlanDetailConvert.java
  79. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/supplier/SupplierConvert.java
  80. 34
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/suppliercycle/SupplierCycleConvert.java
  81. 41
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/demandforecasting/DemandforecastingDetailDO.java
  82. 67
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/demandforecasting/DemandforecastingMainDO.java
  83. 10
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasePlan/PurchasePlanDetailDO.java
  84. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/repleinshRequest/RepleinshRequestDetailDO.java
  85. 108
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/suppliercycle/SupplierCycleDO.java
  86. 5
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/supplierdeliverRequest/SupplierdeliverRequestMainDO.java
  87. 10
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/supplieritem/SupplieritemDO.java
  88. 12
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java
  89. 9
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/demandforecasting/DemandforecastingMainMapper.java
  90. 10
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/itempackage/ItempackageMapper.java
  91. 17
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/packageunit/PackageunitMapper.java
  92. 13
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchasePlan/PurchasePlanDetailMapper.java
  93. 34
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchasePlan/PurchasePlanMainMapper.java
  94. 80
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/suppliercycle/SupplierCycleMapper.java
  95. 49
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplierdeliverRequest/SupplierdeliverRequestDetailMapper.java
  96. 14
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplieritem/SupplieritemMapper.java
  97. 3
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/enums/common/InterfaceTypeEnum.java
  98. 31
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/PurchasePlanOffOneJob.java
  99. 31
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/PurchasePlanOffTwoJob.java
  100. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/PurchasePlanTenantOneJob.java

17
sql/release_202405/scp_202405.sql

@ -177,4 +177,19 @@ ALTER TABLE request_supplierinvoice_main ADD `balance_statement_status` varchar(
-- 新增发票记录字段 -- 新增发票记录字段
ALTER TABLE record_supplierinvoice_main ADD `balance_statement` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT null COMMENT '采购通过价差说明'; ALTER TABLE record_supplierinvoice_main ADD `balance_statement` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT null COMMENT '采购通过价差说明';
ALTER TABLE record_supplierinvoice_main ADD `balance_statement_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '有价差状态字典TRUE'; ALTER TABLE record_supplierinvoice_main ADD `balance_statement_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '有价差状态字典TRUE';
-- 以上同步到2024-07-05 08:54 -- 以上同步到2024-07-05 08:54
-- 要货计划明细
ALTER TABLE plan_purchase_detail ADD `not_receive_qty` DECIMAL ( 18, 6 ) NULL COMMENT '在途数量(已发货-已收货)';
ALTER TABLE plan_purchase_detail ADD `received_qty` DECIMAL ( 18, 6 ) NULL COMMENT '收货数量';
-- 供应商物料
ALTER TABLE basic_supplieritem ADD `allow_over_shipment` varchar(20) CHARACTER SET utf8mb4 DEFAULT 'FALSE' COMMENT '是否允许超发默认FALSE';
-- 添加供应商物料是否允许超发
INSERT INTO `system_dict_type`(`name`, `type`, `classes`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES ( '供应商物料是否允许超发', 'allow_over_shipment', 'system', 0, '', '1', '2024-07-05 15:54:52', '1', '2024-07-05 15:54:52', b'0', '1970-01-01 00:00:00');
INSERT INTO `system_dict_data`(`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, '', 'TRUE', 'allow_over_shipment', 0, '', '', '', '1', '2024-07-05 15:55:02', '1', '2024-07-05 15:55:02', b'0');
INSERT INTO `system_dict_data`(`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2, '', 'FALSE', 'allow_over_shipment', 0, '', '', '', '1', '2024-07-05 15:55:11', '1', '2024-07-05 15:55:11', b'0');
-- 供应商发货申请主表
ALTER TABLE request_supplierdeliver_main ADD `arrive_time` datetime DEFAULT NULL COMMENT '到货时间';
--
INSERT INTO `system_menu` (`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ( '生产消耗报表', '', 2, 46, 4112, 'productputaway-report-list/970470066577096704', 'fa:steam-square', 'wms/reportList/index', 'ProductReceiptReportUseList', 0, b'1', b'1', b'1', '1', '2024-07-09 10:57:56', '1', '2024-07-09 10:58:12', b'0');

14
sql/release_202405/wms_202405.sql

@ -1090,3 +1090,17 @@ insert into `system_menu` ( `name`, `permission`, `type`, `sort`, `parent_id`, `
insert into `system_menu` ( `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) values('库存转移申请子更新','wms:inventorymove-request-detail:update','3','4','3661','','','','','0','','','','1','2024-07-10 18:27:56','1','2024-07-10 18:27:56',''); insert into `system_menu` ( `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) values('库存转移申请子更新','wms:inventorymove-request-detail:update','3','4','3661','','','','','0','','','','1','2024-07-10 18:27:56','1','2024-07-10 18:27:56','');
insert into `system_menu` ( `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) values('库存转移申请子导出','wms:inventorymove-request-detail:export','3','5','3661','','','','','0','','','','1','2024-07-10 19:12:49','1','2024-07-10 19:13:55',''); insert into `system_menu` ( `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) values('库存转移申请子导出','wms:inventorymove-request-detail:export','3','5','3661','','','','','0','','','','1','2024-07-10 19:12:49','1','2024-07-10 19:13:55','');
-- 以上同步到2024-07-11 08:47 -- 以上同步到2024-07-11 08:47
-- 要货计划明细
ALTER TABLE plan_purchase_detail ADD `not_receive_qty` DECIMAL ( 18, 6 ) NULL COMMENT '在途数量(已发货-已收货)';
ALTER TABLE plan_purchase_detail ADD `received_qty` DECIMAL ( 18, 6 ) NULL COMMENT '收货数量';
-- 供应商物料
ALTER TABLE basic_supplieritem ADD `allow_over_shipment` varchar(20) CHARACTER SET utf8mb4 DEFAULT 'FALSE' COMMENT '是否允许超发默认FALSE';
-- 添加供应商物料是否允许超发
INSERT INTO `system_dict_type`(`name`, `type`, `classes`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES ( '供应商物料是否允许超发', 'allow_over_shipment', 'system', 0, '', '1', '2024-07-05 15:54:52', '1', '2024-07-05 15:54:52', b'0', '1970-01-01 00:00:00');
INSERT INTO `system_dict_data`(`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, '', 'TRUE', 'allow_over_shipment', 0, '', '', '', '1', '2024-07-05 15:55:02', '1', '2024-07-05 15:55:02', b'0');
INSERT INTO `system_dict_data`(`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2, '', 'FALSE', 'allow_over_shipment', 0, '', '', '', '1', '2024-07-05 15:55:11', '1', '2024-07-05 15:55:11', b'0');
-- 供应商发货申请主表
ALTER TABLE request_supplierdeliver_main ADD `arrive_time` datetime DEFAULT NULL COMMENT '到货时间';
--
INSERT INTO `system_menu` (`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ( '生产消耗报表', '', 2, 46, 4112, 'productputaway-report-list/970470066577096704', 'fa:steam-square', 'wms/reportList/index', 'ProductReceiptReportUseList', 0, b'1', b'1', b'1', '1', '2024-07-09 10:57:56', '1', '2024-07-09 10:58:12', b'0');

15
win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/util/ExcelUtils.java

@ -163,5 +163,18 @@ public class ExcelUtils {
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现 // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
return new HorizontalCellStyleStrategy(headWriteCellStyle, contentStyle); return new HorizontalCellStyleStrategy(headWriteCellStyle, contentStyle);
} }
/***/
public static <T> void writeMap(HttpServletResponse response, String filename, String sheetName, List<List<String>> headMap, List<List<Object>> data) throws IOException {
// 输出 Excel
EasyExcel.write(response.getOutputStream())
.autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度
//.registerWriteHandler(new CustomCellWriteHandler())
.sheet(sheetName)
.head(headMap)
.doWrite(data);
// 设置 header 和 contentType。写在最后的原因是,避免报错时,响应 contentType 已经被修改了
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
}
} }

68
win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/QueryWrapperUtils.java

@ -233,7 +233,73 @@ public class QueryWrapperUtils {
break; break;
} }
} }
//去掉字段的单引号 可以拼接自定义的sql方式,字段上不能有‘’
public static void appendCondition2(StringBuilder sb, String column, CustomConditions.Condition condition) {
String action = condition.getAction();
String value = condition.getValue();
if ("accept_user_id".equals(column)) {
sb.append(StrUtil.format(" AND ({} = '{}' OR {} = '' OR {} IS NULL)", column, value, column, column));
return;
}
switch (action) {
case "in":
String inSql = Arrays.stream(value.split(",")).map(val -> "'" + val + "'").collect(Collectors.joining(","));
sb.append(StrUtil.format(" AND {} IN ({}) ", column, inSql));
break;
case "notIn":
String notInSql = Arrays.stream(value.split(",")).map(val -> "'" + val + "'").collect(Collectors.joining(","));
sb.append(StrUtil.format(" AND {} NOT IN ({}) ", column, notInSql));
break;
case "==":
sb.append(StrUtil.format(" AND {} = '{}' ", column, value));
break;
case "!=":
sb.append(StrUtil.format(" AND {} != '{}' ", column, value));
break;
case ">":
sb.append(StrUtil.format(" AND {} > '{}' ", column, value));
break;
case "<":
sb.append(StrUtil.format(" AND {} < '{}' ", column, value));
break;
case ">=":
sb.append(StrUtil.format(" AND {} >= '{}' ", column, value));
break;
case "<=":
sb.append(StrUtil.format(" AND {} <= '{}' ", column, value));
break;
case "like":
sb.append(StrUtil.format(" AND {} LIKE '%{}%' ", column, value));
break;
case "isNull":
sb.append(StrUtil.format(" AND {} IS NULL ", column));
break;
case "isNotNull":
sb.append(StrUtil.format(" AND {} IS NOT NULL ", column));
break;
case "isStr":
sb.append(StrUtil.format(" AND {} = '' ", column));
break;
case "isNotStr":
sb.append(StrUtil.format(" AND {} != '' ", column));
break;
case "betweeen":
String[] values = value.split(",");
if (values.length != 2) {
break;
}
if (isNumeric(values[0]) && isNumeric(values[1])) {
LocalDateTime localDateTime1 = Instant.ofEpochMilli(Long.parseLong(values[0])).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
LocalDateTime localDateTime2 = Instant.ofEpochMilli(Long.parseLong(values[1])).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
sb.append(StrUtil.format(" AND {} BETWEEN '{}' AND '{}' ", column, localDateTime1, localDateTime2));
} else {
sb.append(StrUtil.format(" AND {} BETWEEN '{}' AND '{}' ", column, values[0], values[1]));
}
break;
default:
break;
}
}
private static String camelToSnake(String str) { private static String camelToSnake(String str) {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
for (int i = 0; i < str.length(); i++) { for (int i = 0; i < str.length(); i++) {

8
win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/PostApi.java

@ -1,5 +1,7 @@
package com.win.module.system.api.dept; package com.win.module.system.api.dept;
import com.win.module.system.api.dept.dto.PostRespDTO;
import java.util.Collection; import java.util.Collection;
/** /**
@ -18,4 +20,10 @@ public interface PostApi {
*/ */
void validPostList(Collection<Long> ids); void validPostList(Collection<Long> ids);
/**
* 根据岗位编码获取岗位ID
* @param postCode 岗位编码
* @return
*/
PostRespDTO queryPostByCode(String postCode);
} }

21
win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/dto/PostRespDTO.java

@ -0,0 +1,21 @@
package com.win.module.system.api.dept.dto;
import lombok.Data;
@Data
public class PostRespDTO {
/**
* 岗位序号
*/
private Long id;
/**
* 岗位名称
*/
private String name;
/**
* 岗位编码
*/
private String code;
}

7
win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/user/AdminUserApi.java

@ -91,6 +91,13 @@ public interface AdminUserApi {
*/ */
PageResult<AdminUserRespDTO> getUserListByRoleCode(List<String> roleCodeList,Integer pageNo,Integer pageSize); PageResult<AdminUserRespDTO> getUserListByRoleCode(List<String> roleCodeList,Integer pageNo,Integer pageSize);
/**
* 获取角色列表
* @param roleCodeList
* @return
*/
List<AdminUserRespDTO> getUserListByRoleCodeList(List<String> roleCodeList);
/** /**
* 获取用户信息根据用户身份 * 获取用户信息根据用户身份
* *

5
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dept/PostApiImpl.java

@ -1,5 +1,6 @@
package com.win.module.system.api.dept; package com.win.module.system.api.dept;
import com.win.module.system.api.dept.dto.PostRespDTO;
import com.win.module.system.service.dept.PostService; import com.win.module.system.service.dept.PostService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -22,4 +23,8 @@ public class PostApiImpl implements PostApi {
postService.validatePostList(ids); postService.validatePostList(ids);
} }
@Override
public PostRespDTO queryPostByCode(String postCode) {
return postService.queryPostByCode(postCode);
}
} }

6
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/user/AdminUserApiImpl.java

@ -87,6 +87,12 @@ public class AdminUserApiImpl implements AdminUserApi {
return UserConvert.INSTANCE.convertPage(users); return UserConvert.INSTANCE.convertPage(users);
} }
@Override
public List<AdminUserRespDTO> getUserListByRoleCodeList(List<String> roleCodeList) {
List<AdminUserDO> usersList = userService.getUserListByRoleCodeList(roleCodeList);
return UserConvert.INSTANCE.convertList4(usersList);
}
public List<AdminUserRespDTO> selectByUserIdentity(AdminUserRespExpandDTO adminUserRespExpandDTO){ public List<AdminUserRespDTO> selectByUserIdentity(AdminUserRespExpandDTO adminUserRespExpandDTO){
List<AdminUserDO> list = userService.selectByUserIdentity(adminUserRespExpandDTO.getCode(),adminUserRespExpandDTO.getFactoryAreaNumber()); List<AdminUserDO> list = userService.selectByUserIdentity(adminUserRespExpandDTO.getCode(),adminUserRespExpandDTO.getFactoryAreaNumber());

2
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/dept/PostConvert.java

@ -1,6 +1,7 @@
package com.win.module.system.convert.dept; package com.win.module.system.convert.dept;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.module.system.api.dept.dto.PostRespDTO;
import com.win.module.system.controller.dept.vo.post.*; import com.win.module.system.controller.dept.vo.post.*;
import com.win.module.system.dal.dataobject.dept.PostDO; import com.win.module.system.dal.dataobject.dept.PostDO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@ -25,4 +26,5 @@ public interface PostConvert {
List<PostExcelVO> convertList03(List<PostDO> list); List<PostExcelVO> convertList03(List<PostDO> list);
PostRespDTO convertRespDTO(PostDO postDO);
} }

7
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostService.java

@ -2,6 +2,7 @@ package com.win.module.system.service.dept;
import com.win.framework.common.enums.CommonStatusEnum; import com.win.framework.common.enums.CommonStatusEnum;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.module.system.api.dept.dto.PostRespDTO;
import com.win.module.system.controller.dept.vo.post.PostCreateReqVO; import com.win.module.system.controller.dept.vo.post.PostCreateReqVO;
import com.win.module.system.controller.dept.vo.post.PostExportReqVO; import com.win.module.system.controller.dept.vo.post.PostExportReqVO;
import com.win.module.system.controller.dept.vo.post.PostPageReqVO; import com.win.module.system.controller.dept.vo.post.PostPageReqVO;
@ -95,4 +96,10 @@ public interface PostService {
*/ */
void validatePostList(Collection<Long> ids); void validatePostList(Collection<Long> ids);
/**
* 根据更为code获取岗位ID
* @param postCode
* @return
*/
PostRespDTO queryPostByCode(String postCode);
} }

8
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostServiceImpl.java

@ -3,6 +3,7 @@ package com.win.module.system.service.dept;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.win.framework.common.enums.CommonStatusEnum; import com.win.framework.common.enums.CommonStatusEnum;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.module.system.api.dept.dto.PostRespDTO;
import com.win.module.system.controller.dept.vo.post.PostCreateReqVO; import com.win.module.system.controller.dept.vo.post.PostCreateReqVO;
import com.win.module.system.controller.dept.vo.post.PostExportReqVO; import com.win.module.system.controller.dept.vo.post.PostExportReqVO;
import com.win.module.system.controller.dept.vo.post.PostPageReqVO; import com.win.module.system.controller.dept.vo.post.PostPageReqVO;
@ -148,4 +149,11 @@ public class PostServiceImpl implements PostService {
} }
}); });
} }
@Override
public PostRespDTO queryPostByCode(String postCode) {
PostDO postDO = postMapper.selectByCode(postCode);
PostRespDTO postRespDTO = PostConvert.INSTANCE.convertRespDTO(postDO);
return postRespDTO;
}
} }

9
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserService.java

@ -294,6 +294,13 @@ public interface AdminUserService {
PageResult<AdminUserDO> getUserListByRoleCode(List<String> roleCodeList, Integer pageNo, Integer pageSize); PageResult<AdminUserDO> getUserListByRoleCode(List<String> roleCodeList, Integer pageNo, Integer pageSize);
/**
* 查询角色用户列表
* @param roleCodeList 角色列表
* @return 用户列表
*/
List<AdminUserDO> getUserListByRoleCodeList(List<String> roleCodeList);
/** /**
* 根据信息查询该角色下的用户 * 根据信息查询该角色下的用户
* *
@ -312,4 +319,6 @@ public interface AdminUserService {
* @return * @return
*/ */
List<AdminUserDO> getUserListByUsername(String userName); List<AdminUserDO> getUserListByUsername(String userName);
} }

30
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserServiceImpl.java

@ -629,6 +629,36 @@ public class AdminUserServiceImpl implements AdminUserService {
} }
} }
@Override
public List<AdminUserDO> getUserListByRoleCodeList(List<String> roleCodeList) {
List<AdminUserDO> adminUserDOList = new ArrayList<>();
LambdaQueryWrapperX<RoleDO> roleLambdaQueryWrapperX = new LambdaQueryWrapperX<>();
roleLambdaQueryWrapperX.in(RoleDO::getCode, roleCodeList);
List<RoleDO> roleDOS = roleMapper.selectList(roleLambdaQueryWrapperX);
List<Long> roleIdList = new ArrayList<>();
for (RoleDO roleDO : roleDOS) {
roleIdList.add(roleDO.getId());
}
if (roleIdList.size() > 0) {
LambdaQueryWrapperX<UserRoleDO> userRoleDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>();
userRoleDOLambdaQueryWrapperX.in(UserRoleDO::getRoleId, roleIdList);
List<UserRoleDO> userRoleDOS = userRoleMapper.selectList(userRoleDOLambdaQueryWrapperX);
List<Long> userIdList = new ArrayList<>();
for (UserRoleDO userRoleDO : userRoleDOS) {
userIdList.add(userRoleDO.getUserId());
}
if (userIdList.size() == 0) {
return adminUserDOList;
}
LambdaQueryWrapperX<AdminUserDO> adminUserDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>();
adminUserDOLambdaQueryWrapperX.in(AdminUserDO::getId, userIdList);
List<AdminUserDO> adminUserDOS = userMapper.selectList(adminUserDOLambdaQueryWrapperX);
return adminUserDOS;
} else {
return adminUserDOList;
}
}
@Override @Override
public List<AdminUserDO> selectByUserIdentity(List<String> code, String factoryAreaNumber) { public List<AdminUserDO> selectByUserIdentity(List<String> code, String factoryAreaNumber) {
AdminUserDOExpand adminUserDOExpand = new AdminUserDOExpand(); AdminUserDOExpand adminUserDOExpand = new AdminUserDOExpand();

21
win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java

@ -273,6 +273,8 @@ public interface ErrorCodeConstants {
ErrorCode RULE_PUTAWAY_ITEMCODE_NOT_EXISTS = new ErrorCode(1_000_045_003, "上架策略参数物品代码没有传递"); ErrorCode RULE_PUTAWAY_ITEMCODE_NOT_EXISTS = new ErrorCode(1_000_045_003, "上架策略参数物品代码没有传递");
ErrorCode RULE_PUTAWAY_BUSINESSCODE_NOT_EXISTS = new ErrorCode(1_000_045_003, "上架策略参数业务类型没有传递"); ErrorCode RULE_PUTAWAY_BUSINESSCODE_NOT_EXISTS = new ErrorCode(1_000_045_003, "上架策略参数业务类型没有传递");
ErrorCode RULE_PUTAWAY_LOCATIONCODE_NOT_EXISTS = new ErrorCode(1_000_045_003, "物料:{},推荐库位不存在或者库区已满"); ErrorCode RULE_PUTAWAY_LOCATIONCODE_NOT_EXISTS = new ErrorCode(1_000_045_003, "物料:{},推荐库位不存在或者库区已满");
ErrorCode RULE_PUTAWAY_NOT_EXISTS = new ErrorCode(1_000_045_003, "上架策略不存在代码不存在,物料代码:{}");
ErrorCode RULE_PUTAWAY_RECOMMEND_LOCATIONCODE_NOT_EXISTS = new ErrorCode(1_000_045_003, "上架策略-推荐库位未找到符合的库位,请检查上架策略配置是否正确,策略代码:【{}】,策略名称:【{}】,策略优先级:【{}】");
// 条件ErrorCode // 条件ErrorCode
ErrorCode CONDITION_NOT_EXISTS = new ErrorCode(1_046_000_000, "条件不存在"); ErrorCode CONDITION_NOT_EXISTS = new ErrorCode(1_046_000_000, "条件不存在");
@ -393,6 +395,9 @@ public interface ErrorCodeConstants {
ErrorCode LABLE_TYPE_NOT_EXISTS = new ErrorCode(1_000_059_000, "标签定义不存在"); ErrorCode LABLE_TYPE_NOT_EXISTS = new ErrorCode(1_000_059_000, "标签定义不存在");
ErrorCode LABLE_AND_PACK_TYPE_NOT_EXISTS = new ErrorCode(1_000_059_000, "包装和标签已存在,无法再次生成"); ErrorCode LABLE_AND_PACK_TYPE_NOT_EXISTS = new ErrorCode(1_000_059_000, "包装和标签已存在,无法再次生成");
ErrorCode LABLE_AND_PACK_TYPE_NO_EXISTS = new ErrorCode(1_000_059_000, "包装和标签不存在,请生成标签后再进行操作"); ErrorCode LABLE_AND_PACK_TYPE_NO_EXISTS = new ErrorCode(1_000_059_000, "包装和标签不存在,请生成标签后再进行操作");
ErrorCode LABLE_AND_PACK_QTY_NOT_EXISTS = new ErrorCode(1_000_059_000, "物料代码:【{}】,没有选择箱包装规格");
ErrorCode LABLE_AND_PACK_TUO_QTY_NOT_EXISTS = new ErrorCode(1_000_059_000, "物料代码:【{}】,托总数量大于物料发货数量");
ErrorCode LABLE_AND_PACK_XIANG_QTY_NOT_EXISTS = new ErrorCode(1_000_059_000, "物料代码:【{}】,箱总数量大于物料发货数量");
// 标签规则设置ErrorCode // 标签规则设置ErrorCode
ErrorCode BARCODE_NOT_EXISTS = new ErrorCode(1_000_060_000, "标签规则设置不存在"); ErrorCode BARCODE_NOT_EXISTS = new ErrorCode(1_000_060_000, "标签规则设置不存在");
@ -462,7 +467,7 @@ public interface ErrorCodeConstants {
ErrorCode SUPPLIERINVOICE_REQUEST_DETAIL_QTY_OVER_PERCENT = new ErrorCode(1_000_066_002, "发货数量【{}】大于订单号【{}】、订单行【{}】、物料代码【{},超出百分比{}】的未发货数量【{}】"); ErrorCode SUPPLIERINVOICE_REQUEST_DETAIL_QTY_OVER_PERCENT = new ErrorCode(1_000_066_002, "发货数量【{}】大于订单号【{}】、订单行【{}】、物料代码【{},超出百分比{}】的未发货数量【{}】");
ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_IMPORT_NOT_EXISTS = new ErrorCode(1_000_066_000, "供应商发票导入数据不存在"); ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_IMPORT_NOT_EXISTS = new ErrorCode(1_000_066_000, "供应商发票导入数据不存在");
ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_IMPORT_PROCUREMENTCREATOR_ERROR = new ErrorCode(1_000_066_000, "供应商发票导入【采购价格审批人】天蝎错误"); ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_IMPORT_PROCUREMENTCREATOR_ERROR = new ErrorCode(1_000_066_000, "供应商发票导入【采购价格审批人】天蝎错误");
ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_FILE_CONTRACT_NOT_EXISTS = new ErrorCode(1_000_066_000, "合同附件未上传,请上传合同附件"); ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_FILE_CONTRACT_NOT_EXISTS = new ErrorCode(1_000_066_000, "供应商合同附件未上传,请上传合同附件");
ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_PRINT_ASN_NOT_EXISTS = new ErrorCode(1_000_066_000, "供应商发货记录未查询到发货单号:【{}】"); ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_PRINT_ASN_NOT_EXISTS = new ErrorCode(1_000_066_000, "供应商发货记录未查询到发货单号:【{}】");
ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_INVOICE_NOT_EXISTS = new ErrorCode(1_000_066_000, "发票附件未上传,请上传发票附件"); ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_INVOICE_NOT_EXISTS = new ErrorCode(1_000_066_000, "发票附件未上传,请上传发票附件");
ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_INVOICE_TIME_NOT_EXISTS = new ErrorCode(1_000_066_000, "发票时间未填写,请填写发票时间"); ErrorCode SUPPLIERINVOICE_REQUEST_MAIN_INVOICE_TIME_NOT_EXISTS = new ErrorCode(1_000_066_000, "发票时间未填写,请填写发票时间");
@ -480,12 +485,17 @@ public interface ErrorCodeConstants {
ErrorCode PURCHASE_PLAN_MAIN_NOT_EXISTS = new ErrorCode(1_000_069_000, "要货计划主不存在"); ErrorCode PURCHASE_PLAN_MAIN_NOT_EXISTS = new ErrorCode(1_000_069_000, "要货计划主不存在");
// 要货计划子ErrorCode // 要货计划子ErrorCode
ErrorCode PURCHASE_PLAN_DETAIL_NOT_EXISTS = new ErrorCode(1_000_069_001, "要货计划子不存在"); ErrorCode PURCHASE_PLAN_DETAIL_NOT_EXISTS = new ErrorCode(1_000_069_001, "要货计划子不存在");
ErrorCode PURCHASE_PLAN_DETAIL_NOT_DELETE = new ErrorCode(1_000_069_001, "要货计划子数据不能为空");
ErrorCode PURCHASE_PLAN_DETAIL_EXISTED = new ErrorCode(1_000_069_001, "要货计划子已经存在"); ErrorCode PURCHASE_PLAN_DETAIL_EXISTED = new ErrorCode(1_000_069_001, "要货计划子已经存在");
ErrorCode DISCRETE_PURCHASE_PLAN_NOT_OFF = new ErrorCode(1_000_069_001, "离散订单的要货计划不允许关闭");
ErrorCode DISCRETE_PURCHASE_PLAN_NOT_UPDATE= new ErrorCode(1_000_069_001, "离散订单的要货计划不允许修改");
// 要货计划子ErrorCode // 要货计划子ErrorCode
ErrorCode PURCHASE_PLAN_DETAIL_ACCEPTED = new ErrorCode(1_000_069_001, "未查找到接收状态下的要货计划"); ErrorCode PURCHASE_PLAN_DETAIL_ACCEPTED = new ErrorCode(1_000_069_001, "未查找到接收状态下的要货计划");
ErrorCode PURCHASE_PLAN_DETAIL_DUPLICATE_DATA = new ErrorCode(1_000_069_001, "要货计划子表新增存在重复数据"); ErrorCode PURCHASE_PLAN_DETAIL_DUPLICATE_DATA = new ErrorCode(1_000_069_001, "要货计划子表新增存在重复数据");
ErrorCode PURCHASE_PLAN_DETAIL_PLANEDQTY_DATA = new ErrorCode(1_000_069_001, "要货计划子表新增采购订单离散单【订单数量 - 已计划数量 大于 计划数量】"); ErrorCode PURCHASE_PLAN_DETAIL_PLANEDQTY_DATA = new ErrorCode(1_000_069_001, "要货计划子表新增采购订单离散单【订单数量 - 已计划数量 大于 计划数量】");
ErrorCode PURCHASE_PLAN_ORDER_NOT_EXISTS = new ErrorCode(1_000_069_001, "要货计划子表:订单号【{}】,订单行【{}】,物料代码【{}】不存在这样的采购订单数据"); ErrorCode PURCHASE_PLAN_ORDER_NOT_EXISTS = new ErrorCode(1_000_069_001, "要货计划子表:订单号【{}】,订单行【{}】,物料代码【{}】不存在这样的采购订单数据");
ErrorCode SUPPLIERDELIVER_REQUEST_BATCH_LINE_EXISTS = new ErrorCode(1_000_069_001, "供应商发货申请子:订单行【{}】,批次【{}】重复");
ErrorCode PURCHASE_PLAN_DETAIL_NOT_AVAILABLE_DATA = new ErrorCode(1_000_069_001, "要货计划子表没有可用的数据不能发布"); ErrorCode PURCHASE_PLAN_DETAIL_NOT_AVAILABLE_DATA = new ErrorCode(1_000_069_001, "要货计划子表没有可用的数据不能发布");
ErrorCode PURCHASE_PLAN_DETAIL_PLAN_QTY_NULL = new ErrorCode(1_000_069_001, "要货计划子表新增存在计划数量不能为空,订单号:【{}】,订单行:【{}】,物料代码:【{}】"); ErrorCode PURCHASE_PLAN_DETAIL_PLAN_QTY_NULL = new ErrorCode(1_000_069_001, "要货计划子表新增存在计划数量不能为空,订单号:【{}】,订单行:【{}】,物料代码:【{}】");
@ -499,6 +509,8 @@ public interface ErrorCodeConstants {
ErrorCode SUPPLIERDELIVER_REQUEST_DOCKCODE_IS_EMPTY = new ErrorCode(1_000_072_002, "供应商发货申请选择的要货计划月台代码为空"); ErrorCode SUPPLIERDELIVER_REQUEST_DOCKCODE_IS_EMPTY = new ErrorCode(1_000_072_002, "供应商发货申请选择的要货计划月台代码为空");
ErrorCode SUPPLIERDELIVER_REQUEST_MAIN_PLANQTY_CHECK = new ErrorCode(1_000_072_002, "供应商发货申请要货计划单号【{}】,订单号【{}】,行号【{}】,物料代码【{}】大于计划数量【{}】"); ErrorCode SUPPLIERDELIVER_REQUEST_MAIN_PLANQTY_CHECK = new ErrorCode(1_000_072_002, "供应商发货申请要货计划单号【{}】,订单号【{}】,行号【{}】,物料代码【{}】大于计划数量【{}】");
ErrorCode SUPPLIERDELIVER_REQUEST_MAIN_SHIPEDQTY_CHECK = new ErrorCode(1_000_072_002, "供应商发货申请要货计划单号【{}】,订单号【{}】,行号【{}】,物料代码【{}】大于【{}】(计划数量 减 收货数量)"); ErrorCode SUPPLIERDELIVER_REQUEST_MAIN_SHIPEDQTY_CHECK = new ErrorCode(1_000_072_002, "供应商发货申请要货计划单号【{}】,订单号【{}】,行号【{}】,物料代码【{}】大于【{}】(计划数量 减 收货数量)");
ErrorCode SUPPLIERDELIVER_SEND_MAIN_PLANQTY_CHECK = new ErrorCode(1_000_072_002, "采购订单号【{}】,行号【{}】,物料号【{}】,可发货数量为【{}】,少于此发货申请的发货数量,不允许发货。");
ErrorCode SUPPLIERDELIVER_REQUEST_SOLE_EXISTS = new ErrorCode(1_000_072_002, "供应商发货申请,订单号【{}】,行号【{}】,物料代码【{}】,批次号【{}】已存在,不能重复添加");
ErrorCode PURCHASERECEIPT_REQUEST_PLANARRIVETIME_NOT_EXISTS = new ErrorCode(1_000_072_001, "计划到货时间不能为空"); ErrorCode PURCHASERECEIPT_REQUEST_PLANARRIVETIME_NOT_EXISTS = new ErrorCode(1_000_072_001, "计划到货时间不能为空");
ErrorCode PURCHASERECEIPT_REQUEST_ASN_NUMBER_EXISTS = new ErrorCode(1_000_072_001, "asn发货单号已存在,请重新填写"); ErrorCode PURCHASERECEIPT_REQUEST_ASN_NUMBER_EXISTS = new ErrorCode(1_000_072_001, "asn发货单号已存在,请重新填写");
ErrorCode PURCHASERECEIPT_REQUEST_SELF_CHECK_NOT_EXISTS = new ErrorCode(1_000_059_000, "质量报告未上传,请先上传质量报告"); ErrorCode PURCHASERECEIPT_REQUEST_SELF_CHECK_NOT_EXISTS = new ErrorCode(1_000_059_000, "质量报告未上传,请先上传质量报告");
@ -1565,6 +1577,13 @@ public interface ErrorCodeConstants {
ErrorCode REQUEST_JOB_DO_NOT_HANDLE = new ErrorCode(1_000_353_000, "已存在任务数量满足当前申请数量,不可再进行【处理】操作!"); ErrorCode REQUEST_JOB_DO_NOT_HANDLE = new ErrorCode(1_000_353_000, "已存在任务数量满足当前申请数量,不可再进行【处理】操作!");
ErrorCode MSTR_NOT_EXISTS = new ErrorCode(1_000_354_000, "产品类信息不存在"); ErrorCode MSTR_NOT_EXISTS = new ErrorCode(1_000_354_000, "产品类信息不存在");
// ========== 要货预测周期 TODO 补充编号 ==========
ErrorCode SUPPLIER_CYCLE_NOT_EXISTS = new ErrorCode(1_000_354_000, "要货预测周期不存在");
ErrorCode SUPPLIER_CYCLE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_354_001, "要货预测周期列表不存在");
ErrorCode DEMANDFORECASTING_PLANER_CONFIG_NOT_EXISTS = new ErrorCode(1_000_068_001, "系统没有配置计划员的岗位,请配置计划员的岗位");
ErrorCode ITEM_PACKAGE_DEFAULT_PACKAGEUNIT_EXISTS = new ErrorCode(1_000_090_009, "物料包装信息中,未查询到物料:【{}】的默认包装规格");
ErrorCode BUSINESSTYPE_NOT_INVENTORYSTATUSES_EXISTS_IN = new ErrorCode(1_000_355_000, "业务类型-入库库存状态范围:【{}】,当前数据状态:【{}】,不匹配!"); ErrorCode BUSINESSTYPE_NOT_INVENTORYSTATUSES_EXISTS_IN = new ErrorCode(1_000_355_000, "业务类型-入库库存状态范围:【{}】,当前数据状态:【{}】,不匹配!");
ErrorCode BUSINESSTYPE_NOT_INVENTORYSTATUSES_EXISTS_OUT = new ErrorCode(1_000_355_000, "业务类型-出库库存状态范围:【{}】,当前数据状态:【{}】,不匹配!"); ErrorCode BUSINESSTYPE_NOT_INVENTORYSTATUSES_EXISTS_OUT = new ErrorCode(1_000_355_000, "业务类型-出库库存状态范围:【{}】,当前数据状态:【{}】,不匹配!");
} }

160
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/DemandforecastingDetailController.java

@ -1,9 +1,6 @@
package com.win.module.wms.controller.demandforecasting; package com.win.module.wms.controller.demandforecasting;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.CommonResult;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.framework.operatelog.core.annotations.OperateLog;
@ -11,7 +8,6 @@ import com.win.module.system.api.user.AdminUserApi;
import com.win.module.wms.controller.demandforecasting.vo.*; import com.win.module.wms.controller.demandforecasting.vo.*;
import com.win.module.wms.convert.demandforecasting.DemandforecastingDetailConvert; import com.win.module.wms.convert.demandforecasting.DemandforecastingDetailConvert;
import com.win.module.wms.dal.dataobject.demandforecasting.DemandforecastingDetailDO; import com.win.module.wms.dal.dataobject.demandforecasting.DemandforecastingDetailDO;
import com.win.module.wms.dal.dataobject.demandforecasting.DemandforecastingMainDO;
import com.win.module.wms.dal.mysql.demandforecasting.DemandforecastingMainMapper; import com.win.module.wms.dal.mysql.demandforecasting.DemandforecastingMainMapper;
import com.win.module.wms.dal.mysql.supplieruser.SupplierUserMapper; import com.win.module.wms.dal.mysql.supplieruser.SupplierUserMapper;
import com.win.module.wms.enums.common.ConstantDataInfo; import com.win.module.wms.enums.common.ConstantDataInfo;
@ -27,7 +23,10 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@ -44,8 +43,6 @@ public class DemandforecastingDetailController {
@Resource @Resource
private AdminUserApi userApi; private AdminUserApi userApi;
@Resource @Resource
private DemandforecastingMainMapper demandforecastingMainMapper;
@Resource
private SupplierUserMapper supplierUserMapper; private SupplierUserMapper supplierUserMapper;
@PostMapping("/create") @PostMapping("/create")
@ -90,7 +87,7 @@ public class DemandforecastingDetailController {
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得要货预测子分页") @Operation(summary = "获得要货预测子分页")
public CommonResult<PageResult<DemandforecastingDetailRespVO>> getDemandforecastingDetailPage(@Valid DemandforecastingDetailPageReqVO pageVO) { public CommonResult<PageResult<Map<String,Object>>> getDemandforecastingDetailPage(@Valid DemandforecastingDetailPageReqVO pageVO) {
Long userId = getLoginUserId(); Long userId = getLoginUserId();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){ if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId); List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
@ -101,79 +98,81 @@ public class DemandforecastingDetailController {
}else { }else {
pageVO.setSupplierCodeList(null); pageVO.setSupplierCodeList(null);
} }
PageResult<DemandforecastingDetailDO> pageResult = demandforecastingDetailService.getDemandforecastingDetailPage(pageVO); PageResult<Map<String,Object>> pageResult = demandforecastingDetailService.getDemandforecastingDetailPageTwoDimentsional(pageVO);
PageResult<DemandforecastingDetailRespVO> result = DemandforecastingDetailConvert.INSTANCE.convertPage(pageResult); return success(pageResult);
if(pageResult.getList().size() > 0){
Set<Long> masterIdSet = new HashSet<>();
for(DemandforecastingDetailDO demandforecastingDetailDO:pageResult.getList()){
masterIdSet.add(demandforecastingDetailDO.getMasterId());
}
Map<Long, DemandforecastingMainDO> mainMap = demandforecastingMainMapper.queryMainListToMap(masterIdSet);
CopyOptions options = CopyOptions.create().setIgnoreNullValue(true);
for(DemandforecastingDetailRespVO vo:result.getList()){
vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
DemandforecastingMainDO demandforecastingMainDO = mainMap.get(vo.getMasterId());
demandforecastingMainDO.setId(null);
demandforecastingMainDO.setCreator(null);
demandforecastingMainDO.setCreateTime(null);
demandforecastingMainDO.setUpdateTime(null);
demandforecastingMainDO.setUpdater(null);
BeanUtil.copyProperties(demandforecastingMainDO,vo,options);
}
}
return success(result);
} }
// 因为总共就五个字段,其他字段都是日期,这个查询没有用了
// @PostMapping("/senior")
// @Operation(summary = "高级搜索获得要货预测子分页")
// public CommonResult<PageResult<DemandforecastingDetailRespVO>> getDemandforecastingDetailSenior(@Valid @RequestBody CustomConditions conditions) {
// Long userId = getLoginUserId();
// if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
// List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
// List<CustomConditions.Condition> conditionList = conditions.getFilters();
// if(conditionList==null){
// conditionList = new ArrayList<>();
// conditions.setFilters(conditionList);
// }
// if(supplierCodeList.size() > 0){
// CustomConditions.Condition condition = new CustomConditions.Condition();
// condition.setColumn("supplier_code");
// condition.setAction("in");
// condition.setValue(String.join(",",supplierCodeList));
// conditionList.add(condition);
// }else{
// CustomConditions.Condition condition = new CustomConditions.Condition();
// condition.setColumn("supplier_code");
// condition.setAction("in");
// condition.setValue("999999");//一个不存在的供应商代码
// conditionList.add(condition);
// }
// }
// PageResult<DemandforecastingDetailDO> pageResult = demandforecastingDetailService.getDemandforecastingDetailSenior(conditions);
// PageResult<DemandforecastingDetailRespVO> result = DemandforecastingDetailConvert.INSTANCE.convertPage(pageResult);
// if(pageResult.getList().size() > 0){
// Set<Long> masterIdSet = new HashSet<>();
// for(DemandforecastingDetailDO demandforecastingDetailDO:pageResult.getList()){
// masterIdSet.add(demandforecastingDetailDO.getMasterId());
// }
// Map<Long, DemandforecastingMainDO> mainMap = demandforecastingMainMapper.queryMainListToMap(masterIdSet);
// CopyOptions options = CopyOptions.create().setIgnoreNullValue(true);
// for(DemandforecastingDetailRespVO vo : result.getList()) {
// vo.setCreator(userApi.getUserNickname(vo.getCreator()));
// vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
// DemandforecastingMainDO demandforecastingMainDO = mainMap.get(vo.getMasterId());
// if(demandforecastingMainDO != null){
// demandforecastingMainDO.setId(null);
// demandforecastingMainDO.setCreator(null);
// demandforecastingMainDO.setCreateTime(null);
// demandforecastingMainDO.setUpdateTime(null);
// demandforecastingMainDO.setUpdater(null);
// BeanUtil.copyProperties(demandforecastingMainDO,vo,options);
// }
// }
// }
// return success(result);
// }
@PostMapping("/senior") @GetMapping("/queryPageTableHead")
@Operation(summary = "高级搜索获得要货预测子分页") @Operation(summary = "获取表格头部数据")
public CommonResult<PageResult<DemandforecastingDetailRespVO>> getDemandforecastingDetailSenior(@Valid @RequestBody CustomConditions conditions) { public CommonResult<Map<String,List<String>>> queryPageTableHead(@Valid DemandforecastingDetailPageReqVO pageVO) {
Long userId = getLoginUserId(); Long userId = getLoginUserId();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){ if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId); List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
List<CustomConditions.Condition> conditionList = conditions.getFilters(); if(supplierCodeList.size() == 0){
if(conditionList==null){ supplierCodeList.add("999999");//一个不存在的供应商代码
conditionList = new ArrayList<>();
conditions.setFilters(conditionList);
}
if(supplierCodeList.size() > 0){
CustomConditions.Condition condition = new CustomConditions.Condition();
condition.setColumn("supplier_code");
condition.setAction("in");
condition.setValue(String.join(",",supplierCodeList));
conditionList.add(condition);
}else{
CustomConditions.Condition condition = new CustomConditions.Condition();
condition.setColumn("supplier_code");
condition.setAction("in");
condition.setValue("999999");//一个不存在的供应商代码
conditionList.add(condition);
}
}
PageResult<DemandforecastingDetailDO> pageResult = demandforecastingDetailService.getDemandforecastingDetailSenior(conditions);
PageResult<DemandforecastingDetailRespVO> result = DemandforecastingDetailConvert.INSTANCE.convertPage(pageResult);
if(pageResult.getList().size() > 0){
Set<Long> masterIdSet = new HashSet<>();
for(DemandforecastingDetailDO demandforecastingDetailDO:pageResult.getList()){
masterIdSet.add(demandforecastingDetailDO.getMasterId());
}
Map<Long, DemandforecastingMainDO> mainMap = demandforecastingMainMapper.queryMainListToMap(masterIdSet);
CopyOptions options = CopyOptions.create().setIgnoreNullValue(true);
for(DemandforecastingDetailRespVO vo : result.getList()) {
vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
DemandforecastingMainDO demandforecastingMainDO = mainMap.get(vo.getMasterId());
demandforecastingMainDO.setId(null);
demandforecastingMainDO.setCreator(null);
demandforecastingMainDO.setCreateTime(null);
demandforecastingMainDO.setUpdateTime(null);
demandforecastingMainDO.setUpdater(null);
BeanUtil.copyProperties(demandforecastingMainDO,vo,options);
} }
pageVO.setSupplierCodeList(supplierCodeList);
}else {
pageVO.setSupplierCodeList(null);
} }
return success(result); List<String> curentPageHeaderList = demandforecastingDetailService.queryPageTableHead(pageVO);
Map<String,List<String>> mapData = new HashMap<>();
mapData.put("list",curentPageHeaderList);
return success(mapData);
} }
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出要货预测子 Excel") @Operation(summary = "导出要货预测子 Excel")
@OperateLog(type = EXPORT) @OperateLog(type = EXPORT)
@ -189,4 +188,21 @@ public class DemandforecastingDetailController {
ExcelUtils.write(response, "要货预测子.xls", "数据", DemandforecastingDetailExcelVO.class, datas); ExcelUtils.write(response, "要货预测子.xls", "数据", DemandforecastingDetailExcelVO.class, datas);
} }
@PostMapping("/queryVersion")
@Operation(summary = "获取版本")
public CommonResult<PageResult<DemandforecastingDetailVersionRespVO>> queryVersion(DemandforecastingDetailPageReqVO pageVO) {
Long userId = getLoginUserId();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
if(supplierCodeList.size() == 0){
supplierCodeList.add("999999");//一个不存在的供应商代码
}
pageVO.setSupplierCodeList(supplierCodeList);
}else {
pageVO.setSupplierCodeList(null);
}
PageResult<DemandforecastingDetailVersionRespVO> pageResult= demandforecastingDetailService.queryVersion(pageVO);
return success(pageResult);
}
} }

79
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/DemandforecastingMainController.java

@ -1,5 +1,10 @@
package com.win.module.wms.controller.demandforecasting; package com.win.module.wms.controller.demandforecasting;
import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.alibaba.excel.EasyExcel;
import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.CommonResult;
import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
@ -7,7 +12,10 @@ import com.win.framework.dict.core.util.DictFrameworkUtils;
import com.win.framework.excel.core.util.ConvertUtil; import com.win.framework.excel.core.util.ConvertUtil;
import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.system.api.dept.PostApi;
import com.win.module.system.api.dept.dto.PostRespDTO;
import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.wms.controller.demandforecasting.vo.*; import com.win.module.wms.controller.demandforecasting.vo.*;
import com.win.module.wms.convert.demandforecasting.DemandforecastingMainConvert; import com.win.module.wms.convert.demandforecasting.DemandforecastingMainConvert;
import com.win.module.wms.dal.dataobject.demandforecasting.DemandforecastingDetailDO; import com.win.module.wms.dal.dataobject.demandforecasting.DemandforecastingDetailDO;
@ -27,6 +35,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.IOException; import java.io.IOException;
@ -50,6 +59,7 @@ public class DemandforecastingMainController {
private DemandforecastingDetailService demandforecastingDetailService; private DemandforecastingDetailService demandforecastingDetailService;
@Resource @Resource
private AdminUserApi userApi; private AdminUserApi userApi;
@Resource @Resource
private SupplierUserMapper supplierUserMapper; private SupplierUserMapper supplierUserMapper;
@ -117,11 +127,33 @@ public class DemandforecastingMainController {
return success(result); return success(result);
} }
// @GetMapping("/export-excel")
// @Operation(summary = "导出要货预测 Excel")
// @PreAuthorize("@ss.hasPermission('wms:demandforecasting-main:export')")
// @OperateLog(type = EXPORT)
// public void exportDemandforecastingMainExcel(@Valid DemandforecastingMainExportReqVO exportReqVO,HttpServletResponse response) throws IOException {
// Long userId = getLoginUserId();
// if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
// List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
// if(supplierCodeList.size() == 0){
// supplierCodeList.add("999999");//一个不存在的供应商代码
// }
// exportReqVO.setSupplierCodeList(supplierCodeList);
// }else {
// exportReqVO.setSupplierCodeList(null);
// }
// List<DemandforecastingMainDO> list = demandforecastingMainService.getDemandforecastingMainList(exportReqVO);
// //组装vo
// Map<Integer, String[]> mapDropDown = new HashMap<>();
// List<DemandforecastingMainExcelVO> resultList = this.getExcelVo(list, mapDropDown);
// ExcelUtils.write(response, "要货预测主.xls", "数据", DemandforecastingMainExcelVO.class, resultList,mapDropDown);
// }
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出要货预测主 Excel") @Operation(summary = "导出要货预测 Excel")
@PreAuthorize("@ss.hasPermission('wms:demandforecasting-main:export')") @PreAuthorize("@ss.hasPermission('wms:demandforecasting-main:export')")
@OperateLog(type = EXPORT) @OperateLog(type = EXPORT)
public void exportDemandforecastingMainExcel(@Valid DemandforecastingMainExportReqVO exportReqVO,HttpServletResponse response) throws IOException { public void exportDemandforecastingMainExcel(@Valid DemandforecastingDetailPageReqVO exportReqVO,HttpServletResponse response) throws IOException {
Long userId = getLoginUserId(); Long userId = getLoginUserId();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){ if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId); List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
@ -132,15 +164,13 @@ public class DemandforecastingMainController {
}else { }else {
exportReqVO.setSupplierCodeList(null); exportReqVO.setSupplierCodeList(null);
} }
List<DemandforecastingMainDO> list = demandforecastingMainService.getDemandforecastingMainList(exportReqVO); Map<String,List> dataMap = demandforecastingMainService.getExportInfoList(exportReqVO);
//组装vo ExcelUtils.writeMap(response, "要货预测.xlsx", "数据",(List<List<String>>)dataMap.get("header"),(List<List<Object>>)dataMap.get("data"));
Map<Integer, String[]> mapDropDown = new HashMap<>();
List<DemandforecastingMainExcelVO> resultList = this.getExcelVo(list, mapDropDown);
ExcelUtils.write(response, "要货预测主.xls", "数据", DemandforecastingMainExcelVO.class, resultList,mapDropDown);
}
}
@PostMapping("/export-excel-senior") @PostMapping("/export-excel-senior")
@Operation(summary = "导出要货预测主 Excel") @Operation(summary = "导出要货预测 Excel")
@PreAuthorize("@ss.hasPermission('wms:demandforecasting-main:export')") @PreAuthorize("@ss.hasPermission('wms:demandforecasting-main:export')")
@OperateLog(type = EXPORT) @OperateLog(type = EXPORT)
public void exportDemandforecastingMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException { public void exportDemandforecastingMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException {
@ -266,4 +296,35 @@ public class DemandforecastingMainController {
return success(count > 0); return success(count > 0);
} }
@PostMapping("/queryUserPlanerList")
@Operation(summary = "根据用户角色获取用户列表")
public CommonResult<List<DemandforecastingPlanerRespVO>> queryUserPlanerList() {
List<DemandforecastingPlanerRespVO> linkedList = demandforecastingMainService.queryUserPlanerList();
return CommonResult.success(linkedList);
}
@PostMapping("/querySupplierList")
@Operation(summary = "根据计划员获取取用户列表")
public CommonResult<PageResult<DemandforecastingSupplierRespVO>> querySupplierList(@RequestBody DemandforecastingSupplierReqVO demandforecastingSupplierReqVO) {
Long userId = getLoginUserId();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
if(supplierCodeList.size() == 0){
supplierCodeList.add("999999");//一个不存在的供应商代码
}
demandforecastingSupplierReqVO.setSupplierCodeList(supplierCodeList);
}else {
demandforecastingSupplierReqVO.setSupplierCodeList(null);
}
PageResult<DemandforecastingSupplierRespVO> pageResult = demandforecastingMainService.querySupplierList(demandforecastingSupplierReqVO);
return success(pageResult);
}
@PostMapping("/updateIsRead")
@Operation(summary = "更新是否已读")
public CommonResult<Boolean> updateIsRead(@RequestBody DemandforecastingMainUpdateReqVO demandforecastingMainUpdateReqVO) {
int upCnt = demandforecastingMainService.updateIsRead(demandforecastingMainUpdateReqVO);
return success(upCnt > 0);
}
} }

29
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingDetailBaseVO.java

@ -1,14 +1,13 @@
package com.win.module.wms.controller.demandforecasting.vo; package com.win.module.wms.controller.demandforecasting.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.Data;
import java.util.*; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.time.LocalDateTime; import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ -73,4 +72,22 @@ public class DemandforecastingDetailBaseVO {
@Schema(description = "主表Id") @Schema(description = "主表Id")
private Long masterId; private Long masterId;
@Schema(description = "子表供应商代码")
private String detailSupplierCode;
@Schema(description = "子表版本")
private String detailVersion;
@Schema(description = "到货日期")
private LocalDate dueDate;
@Schema(description = "释放时间")
private LocalDateTime releaseTime;
@Schema(description = "预测类型(F/P)")
private String planType;
@Schema(description = "在途数量(已发货未收货)")
private BigDecimal onTheWayQty;
} }

98
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingDetailPageReqVO.java

@ -1,8 +1,17 @@
package com.win.module.wms.controller.demandforecasting.vo; package com.win.module.wms.controller.demandforecasting.vo;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.win.framework.common.util.date.DateUtils;
import lombok.*; import lombok.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalUnit;
import java.util.*; import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import com.win.framework.common.pojo.PageParam; import com.win.framework.common.pojo.PageParam;
@ -70,6 +79,95 @@ public class DemandforecastingDetailPageReqVO extends PageParam {
@Schema(description = "可访问的供应商代码") @Schema(description = "可访问的供应商代码")
private List<String> supplierCodeList; private List<String> supplierCodeList;
@Schema(description = "可访问的物料编码")
private List<String> itemCodeList;
private Long masterId; private Long masterId;
/**
* 子表供应商代码
*/
private String detailSupplierCode;
/**
* 子表版本
*/
private String detailVersion;
/**
* 到货日期
*/
private String[] dueDate;
/**
* 释放时间
*/
private LocalDateTime releaseTime;
/**
* 预测类型(F/P)
*/
private String planType;
/**
* 在途数量(已发货未收货)
*/
private BigDecimal onTheWayQty;
private String startDate;
private String endDate;
/**
* 供应商代码多条用逗号分隔
*/
private String supplierCodes;
/**
* 物料代码多i套用逗号分隔
*/
private String itemCodes;
/**
* 计划员多条
*/
private String planers;
/**
* 版本
*/
private String versions;
/**add by zhousq*/
private LocalDateTime duDateBegin;
private LocalDateTime duDateEnd;
public LocalDateTime getDuDateBegin(){
if(ObjectUtil.isEmpty(dueDate) || ObjectUtil.isEmpty(dueDate[0]) ){
//开始时间为空设置为当前时间
return LocalDateTimeUtil.parse(DateUtil.formatDate(DateUtil.date())+" 00:00:00", DatePattern.NORM_DATETIME_FORMATTER);
}else{
return LocalDateTimeUtil.parse(this.dueDate[0]+" 00:00:00", DatePattern.NORM_DATETIME_FORMATTER);
}
}
public LocalDateTime getDuDateEnd(){
if(ObjectUtil.isEmpty(dueDate) || ObjectUtil.isEmpty(dueDate[1]) ){
return LocalDateTimeUtil.parse(DateUtil.formatDate(DateUtil.offsetMonth(DateUtil.date(),3))+" 23:59:59", DatePattern.NORM_DATETIME_FORMATTER);
//return LocalDateTimeUtil.offset(LocalDateTimeUtil.now(),90, ChronoUnit.DAYS );
}else {
return LocalDateTimeUtil.parse(this.dueDate[1] + " 23:59:59", DatePattern.NORM_DATETIME_FORMATTER);
}
}
public List<String> getItemCodeList(){
if(ObjectUtil.isEmpty(getItemCode())){
return null;
}else{
this.itemCodeList=new ArrayList<>();
this.itemCodeList.addAll(StrUtil.split(getItemCode()," "));
return this.itemCodeList;
}
}
} }

30
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingDetailVersionRespVO.java

@ -0,0 +1,30 @@
package com.win.module.wms.controller.demandforecasting.vo;
import lombok.Data;
@Data
public class DemandforecastingDetailVersionRespVO {
/**
* 供应商代码
*/
private String supplerCodes;
/**
* 订单号
*/
private String poNumber;
/**
* 订单行
*/
private String poLine;
/**
* 物料代码
*/
private String itemCode;
/**
* 子表版本
*/
private String detailVersion;
}

32
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingExportVo2.java

@ -0,0 +1,32 @@
package com.win.module.wms.controller.demandforecasting.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class DemandforecastingExportVo2 {
private String supplierCode;
private String number;
///"物料代码")
private String itemCode;
//"订单号")
private String poNumber;
//"订单行")
private String poLine;
//"到货日期"
private LocalDateTime dueDate;
//"计划数量")
private BigDecimal planQty;
//版本号
private String detailVersion;
//预测类型()
private String planType;
}

56
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingMainBaseVO.java

@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ -67,4 +68,59 @@ public class DemandforecastingMainBaseVO {
@Schema(description = "是否可用", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "是否可用", requiredMode = Schema.RequiredMode.REQUIRED)
private String available; private String available;
/**
* 主表-订单号
*/
private String mainPoNumber;
/**
* 订单行
*/
private String mainPoLine;
/**
* 生效版本号
*/
private String activeVersion;
/**
* 是否已读(0:未读,1:已读,2:其他版本不显示)
*/
private String isRead;
/**
* 已读时间
*/
private LocalDateTime lastReadTime;
/**
* 采购订单累计计划数量
*/
private BigDecimal totalPlanQty;
/**
* 采购订单累计发货数量
*/
private BigDecimal totalDeliverQty;
/**
* 采购订单累计收货数量
*/
private BigDecimal totalReceiptQty;
/**
* 最后释放时间
*/
private LocalDateTime lastReleaseTime;
/**
* 计划员(多条用逗号分隔)
*/
private String planerId;
/**
* 计划员登录账户(多条用逗号分隔)
*/
private String planerUserName;
} }

5
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingMainUpdateReqVO.java

@ -16,4 +16,9 @@ public class DemandforecastingMainUpdateReqVO extends DemandforecastingMainBaseV
@SubObject @SubObject
@Schema(description = "子表数据") @Schema(description = "子表数据")
private List<DemandforecastingDetailUpdateReqVO> subList; private List<DemandforecastingDetailUpdateReqVO> subList;
/**
* 是否已读更新多条用逗号分隔
*/
private String isReadMainIds;
} }

12
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingMainUserCodeReqVO.java

@ -0,0 +1,12 @@
package com.win.module.wms.controller.demandforecasting.vo;
import lombok.Data;
@Data
public class DemandforecastingMainUserCodeReqVO {
/**
* 角色列表
*/
private String roleCode;
}

14
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingPlanerRespVO.java

@ -0,0 +1,14 @@
package com.win.module.wms.controller.demandforecasting.vo;
import lombok.Data;
@Data
public class DemandforecastingPlanerRespVO {
private Long planerId;
private String planerUsername;
private String planerNickname;
}

34
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingSupplierReqVO.java

@ -0,0 +1,34 @@
package com.win.module.wms.controller.demandforecasting.vo;
import com.win.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DemandforecastingSupplierReqVO extends PageParam {
/**
* 多条计划员
*/
private String planers;
/**
* 供应商
*/
private String supplierCode;
/**
* 计划员用户名查询
*/
private String userName;
@Schema(description = "可访问的供应商代码")
private List<String> supplierCodeList;
}

29
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/demandforecasting/vo/DemandforecastingSupplierRespVO.java

@ -0,0 +1,29 @@
package com.win.module.wms.controller.demandforecasting.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class DemandforecastingSupplierRespVO {
@Schema(description = "用户ID")
private Long id;
@Schema(description = "用户账号")
private String userName;
@Schema(description = "用户昵称")
private String nickName;
@Schema(description = "供应商代码")
private String supplierCode;
@Schema(description = "供应商名称")
private String supplierName;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}

17
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itemarea/ItemareaController.java

@ -8,12 +8,10 @@ import com.win.framework.excel.core.util.ConvertUtil;
import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.wms.controller.itemarea.vo.*; import com.win.module.wms.controller.itemarea.vo.*;
import com.win.module.wms.convert.itemarea.ItemareaConvert; import com.win.module.wms.convert.itemarea.ItemareaConvert;
import com.win.module.wms.dal.dataobject.itemarea.ItemareaDO; import com.win.module.wms.dal.dataobject.itemarea.ItemareaDO;
import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.service.itemarea.ItemareaDetailService;
import com.win.module.wms.service.itemarea.ItemareaService; import com.win.module.wms.service.itemarea.ItemareaService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@ -44,9 +42,6 @@ public class ItemareaController {
@Resource @Resource
private ItemareaService itemareaService; private ItemareaService itemareaService;
@Resource
private ItemareaDetailService itemareaDetailService;
@Resource @Resource
private AdminUserApi userApi; private AdminUserApi userApi;
@ -95,7 +90,7 @@ public class ItemareaController {
public CommonResult<PageResult<ItemareaRespVO>> getItemareaPage(@Valid ItemareaPageReqVO pageVO) { public CommonResult<PageResult<ItemareaRespVO>> getItemareaPage(@Valid ItemareaPageReqVO pageVO) {
PageResult<ItemareaDO> pageResult = itemareaService.getItemareaPage(pageVO); PageResult<ItemareaDO> pageResult = itemareaService.getItemareaPage(pageVO);
PageResult<ItemareaRespVO> result = ItemareaConvert.INSTANCE.convertPage(pageResult); PageResult<ItemareaRespVO> result = ItemareaConvert.INSTANCE.convertPage(pageResult);
for(ItemareaRespVO vo : result.getList()) { for (ItemareaRespVO vo : result.getList()) {
vo.setCreator(userApi.getUserNickname(vo.getCreator())); vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater())); vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
} }
@ -107,13 +102,13 @@ public class ItemareaController {
public CommonResult<PageResult<ItemareaRespVO>> getItemareaPageSenior(@Valid @RequestBody CustomConditions conditions) { public CommonResult<PageResult<ItemareaRespVO>> getItemareaPageSenior(@Valid @RequestBody CustomConditions conditions) {
PageResult<ItemareaDO> pageResult = itemareaService.getItemareaPageSenior(conditions); PageResult<ItemareaDO> pageResult = itemareaService.getItemareaPageSenior(conditions);
PageResult<ItemareaRespVO> result = ItemareaConvert.INSTANCE.convertPage(pageResult); PageResult<ItemareaRespVO> result = ItemareaConvert.INSTANCE.convertPage(pageResult);
for(ItemareaRespVO vo : result.getList()) { for (ItemareaRespVO vo : result.getList()) {
vo.setCreator(userApi.getUserNickname(vo.getCreator())); vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater())); vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
} }
return success(result); return success(result);
} }
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出物料库区配置 Excel") @Operation(summary = "导出物料库区配置 Excel")
@PreAuthorize("@ss.hasPermission('wms:itemarea:export')") @PreAuthorize("@ss.hasPermission('wms:itemarea:export')")
@ -139,7 +134,7 @@ public class ItemareaController {
// 导出 Excel // 导出 Excel
ExcelUtils.write(response, "库存修改申请主.xlsx", "数据", ItemareaExcelVO.class, resultList, mapDropDown); ExcelUtils.write(response, "库存修改申请主.xlsx", "数据", ItemareaExcelVO.class, resultList, mapDropDown);
} }
private List<ItemareaExcelVO> getExcelVo(List<ItemareaDO> list, Map<Integer, String[]> mapDropDown) { private List<ItemareaExcelVO> getExcelVo(List<ItemareaDO> list, Map<Integer, String[]> mapDropDown) {
String[] areaType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.AREA_TYPE); String[] areaType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.AREA_TYPE);
mapDropDown.put(3, areaType); mapDropDown.put(3, areaType);
@ -165,7 +160,7 @@ public class ItemareaController {
List<ItemareaExcelVO> datas = ItemareaConvert.INSTANCE.convertList02(list); List<ItemareaExcelVO> datas = ItemareaConvert.INSTANCE.convertList02(list);
return datas; return datas;
} }
@GetMapping("/get-import-template") @GetMapping("/get-import-template")
@Operation(summary = "获得导入物料库区配置模板") @Operation(summary = "获得导入物料库区配置模板")
public void importTemplate(HttpServletResponse response) throws IOException { public void importTemplate(HttpServletResponse response) throws IOException {
@ -180,7 +175,7 @@ public class ItemareaController {
mapDropDown.put(14, trueFalse); mapDropDown.put(14, trueFalse);
mapDropDown.put(15, trueFalse); mapDropDown.put(15, trueFalse);
// 输出 // 输出
ExcelUtils.write(response, "物料库区配置基本信息导入模板.xls", "物料库区配置基本信息列表", ItemareaImportTempleteVO.class, list,mapDropDown); ExcelUtils.write(response, "物料库区配置基本信息导入模板.xls", "物料库区配置基本信息列表", ItemareaImportTempleteVO.class, list, mapDropDown);
} }
@PostMapping("/import") @PostMapping("/import")

104
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itempackage/ItempackageController.java

@ -5,6 +5,7 @@ import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.framework.dict.core.util.DictFrameworkUtils;
import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO; import com.win.module.system.api.user.dto.AdminUserRespDTO;
@ -12,7 +13,11 @@ import com.win.module.wms.controller.itempackage.vo.*;
import com.win.module.wms.convert.itempackage.ItempackageConvert; import com.win.module.wms.convert.itempackage.ItempackageConvert;
import com.win.module.wms.dal.dataobject.itempackage.ItempackageDO; import com.win.module.wms.dal.dataobject.itempackage.ItempackageDO;
import com.win.module.wms.dal.dataobject.packageunit.PackageunitDO; import com.win.module.wms.dal.dataobject.packageunit.PackageunitDO;
import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO;
import com.win.module.wms.dal.mysql.supplieritem.SupplieritemMapper;
import com.win.module.wms.dal.mysql.supplieruser.SupplierUserMapper;
import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.enums.common.ConstantDataInfo;
import com.win.module.wms.service.itempackage.ItempackageService; import com.win.module.wms.service.itempackage.ItempackageService;
import com.win.module.wms.service.packageunit.PackageunitService; import com.win.module.wms.service.packageunit.PackageunitService;
import groovy.lang.Lazy; import groovy.lang.Lazy;
@ -35,6 +40,7 @@ import java.util.*;
import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - 物料包装信息 ") @Tag(name = "管理后台 - 物料包装信息 ")
@RestController @RestController
@ -44,8 +50,13 @@ public class ItempackageController {
@Lazy @Lazy
@Resource @Resource
private PackageunitService packageunitService; private PackageunitService packageunitService;
@Lazy
@Resource @Resource
private ItempackageService itempackageService; private ItempackageService itempackageService;
@Resource
private SupplierUserMapper supplierUserMapper;
@Resource
private SupplieritemMapper supplieritemMapper;
@Resource @Resource
@ -116,6 +127,99 @@ public class ItempackageController {
return success(result); return success(result);
} }
@GetMapping("/pageTree")
@Operation(summary = "获得物料包装信息分页--树状展示")
public CommonResult<PageResult<ItempackageRespVO>> getItempackagingPageTree(@Valid ItempackagePageReqVO pageVO) {
PageResult<ItempackageRespVO> pageResult = itempackageService.getItempackagingPageTree(pageVO);
return success(pageResult);
}
@PostMapping("/seniorTree")
@Operation(summary = "高级搜索获得物料包装信息分页")
public CommonResult<PageResult<ItempackageRespVO>> getItempackagingSeniorTree(@Valid @RequestBody CustomConditions conditions) {
PageResult<ItempackageRespVO> pageResult = itempackageService.getItempackagingSeniorTree(conditions);
return success(pageResult);
}
@GetMapping("/pageTreeSCP")
@Operation(summary = "获得物料包装信息分页--树状展示--SCP")
public CommonResult<PageResult<ItempackageRespVO>> getItempackagingPageTreeSCP(@Valid ItempackagePageReqVO pageVO) {
Long userId = getLoginUserId();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
if(supplierCodeList.size() == 0){
supplierCodeList.add("999999");//一个不存在的供应商代码
}
pageVO.setSupplierCodeList(supplierCodeList);
}else {
pageVO.setSupplierCodeList(null);
}
LambdaQueryWrapperX<SupplieritemDO> lambdaQueryWrapperX = new LambdaQueryWrapperX<>();
if(pageVO.getSupplierCodeList() != null){
lambdaQueryWrapperX.in(SupplieritemDO::getSupplierCode,pageVO.getSupplierCodeList());
}
List<SupplieritemDO> supplieritemDOList = supplieritemMapper.selectList(lambdaQueryWrapperX);
List<String> itemCodeList = new ArrayList<>();
for(SupplieritemDO supplieritemDO:supplieritemDOList){
itemCodeList.add(supplieritemDO.getItemCode());
}
if(itemCodeList.size() > 0){
pageVO.setItemCodeList(itemCodeList);
}
PageResult<ItempackageRespVO> pageResult = itempackageService.getItempackagingPageTree(pageVO);
return success(pageResult);
}
@PostMapping("/seniorTreeSCP")
@Operation(summary = "高级搜索获得物料包装信息分页")
public CommonResult<PageResult<ItempackageRespVO>> getItempackagingSeniorTreeSCP(@Valid @RequestBody CustomConditions conditions) {
Long userId = getLoginUserId();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
List<CustomConditions.Condition> conditionList = conditions.getFilters();
if(conditionList==null){
conditionList = new ArrayList<>();
conditions.setFilters(conditionList);
}
if(supplierCodeList.size() > 0){
LambdaQueryWrapperX<SupplieritemDO> lambdaQueryWrapperX = new LambdaQueryWrapperX<>();
lambdaQueryWrapperX.in(SupplieritemDO::getSupplierCode,supplierCodeList);
List<SupplieritemDO> supplieritemDOList = supplieritemMapper.selectList(lambdaQueryWrapperX);
List<String> itemCodeList = new ArrayList<>();
for(SupplieritemDO supplieritemDO:supplieritemDOList){
itemCodeList.add(supplieritemDO.getItemCode());
}
if(itemCodeList.size() > 0){
CustomConditions.Condition condition = new CustomConditions.Condition();
condition.setColumn("scp_item_code");
condition.setAction("in");
condition.setValue(String.join(",",itemCodeList));
conditionList.add(condition);
}
}else {
CustomConditions.Condition condition = new CustomConditions.Condition();
condition.setColumn("scp_item_code");
condition.setAction("in");
condition.setValue("ALL");//一个不存在的物料代码
conditionList.add(condition);
}
}else {
List<CustomConditions.Condition> conditionList = conditions.getFilters();
if(conditionList==null){
conditionList = new ArrayList<>();
conditions.setFilters(conditionList);
}
CustomConditions.Condition condition = new CustomConditions.Condition();
condition.setColumn("scp_item_code");
condition.setAction("in");
condition.setValue("ALL");//一个不存在的物料代码
conditionList.add(condition);
}
PageResult<ItempackageRespVO> pageResult = itempackageService.getItempackagingSeniorTree(conditions);
return success(pageResult);
}
@GetMapping("/pageBySupplierdeliver") @GetMapping("/pageBySupplierdeliver")
@Operation(summary = "获得物料包装信息分页--供应商") @Operation(summary = "获得物料包装信息分页--供应商")
public CommonResult<PageResult<ItempackageRespVO>> getItempackagingPageBySupplierdeliver(@Valid ItempackagePageReqVO pageVO) { public CommonResult<PageResult<ItempackageRespVO>> getItempackagingPageBySupplierdeliver(@Valid ItempackagePageReqVO pageVO) {

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itempackage/vo/ItempackagePageReqVO.java

@ -13,6 +13,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ -88,4 +89,10 @@ public class ItempackagePageReqVO extends PageParam {
@Schema(description = "默认包装规格") @Schema(description = "默认包装规格")
private String defaultPackageunit; private String defaultPackageunit;
@Schema(description = "可访问的供应商代码")
private List<String> supplierCodeList;
@Schema(description = "可访问的供应商代码对应的物料代码")
private List<String> itemCodeList;
} }

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itempackage/vo/ItempackageRespVO.java

@ -6,6 +6,7 @@ import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 物料包装信息 Response VO") @Schema(description = "管理后台 - 物料包装信息 Response VO")
@Data @Data
@ -24,4 +25,7 @@ public class ItempackageRespVO extends ItempackageBaseVO {
@Schema(description = "修改者名称", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "修改者名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String updater; private String updater;
@Schema(description = "子表数据")
private List<ItempackageRespVO> children;
} }

39
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/LocationController.java

@ -1,7 +1,10 @@
package com.win.module.wms.controller.location; package com.win.module.wms.controller.location;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
import static com.win.module.wms.enums.ErrorCodeConstants.RULE_PUTAWAY_NOT_EXISTS;
import static com.win.module.wms.enums.ErrorCodeConstants.RULE_PUTAWAY_RECOMMEND_LOCATIONCODE_NOT_EXISTS;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -243,16 +246,44 @@ public class LocationController {
@Operation(summary = "推荐库位") @Operation(summary = "推荐库位")
public CommonResult<LocationDO> inspectLocation(@Valid @RequestBody LocationRecommendVO recommendVO) { public CommonResult<LocationDO> inspectLocation(@Valid @RequestBody LocationRecommendVO recommendVO) {
RuleRespVO ruleRespVO = ruleService.grounding(recommendVO.getSupplierCode(), null, recommendVO.getItemCode(), recommendVO.getInventoryStatus(), null, null, null, null, null); RuleRespVO ruleRespVO = ruleService.grounding(recommendVO.getSupplierCode(), null, recommendVO.getItemCode(), recommendVO.getInventoryStatus(), null, null, null, null, null);
return success(locationService.recommendLocation(ruleRespVO, recommendVO.getItemCode(), recommendVO.getItemCode(), recommendVO.getItemCode())); if(ruleRespVO == null){
throw exception(RULE_PUTAWAY_NOT_EXISTS,recommendVO.getItemCode());
}
LocationDO locationDO = locationService.recommendLocation(ruleRespVO, recommendVO.getItemCode(), recommendVO.getItemCode(), recommendVO.getItemCode());
if(locationDO == null){
throw exception(RULE_PUTAWAY_RECOMMEND_LOCATIONCODE_NOT_EXISTS,ruleRespVO.getStrategyCode(),ruleRespVO.getName(),ruleRespVO.getPriority());
}
return success(locationDO);
} }
// @PermitAll
// @PostMapping("/recommendLocationNew")
// @Operation(summary = "推荐库位")
// public CommonResult<LocationDO> inspectLocationNew(@Valid @RequestBody LocationRecommendVO recommendVO) {
// String locationCode = ruleService.groundingNew(recommendVO.getSupplierCode(), null, recommendVO.getItemCode(), recommendVO.getInventoryStatus(), null, null, null, null, null,
// recommendVO.getBusinessCode(), recommendVO.getItemQty());
// LocationDO locationDO = locationService.queryByCode(locationCode);
// return success(locationDO);
// }
/**
* 废弃不在使用
*
* @param recommendVO
* @return
*/
@PermitAll @PermitAll
@PostMapping("/recommendLocationNew") @PostMapping("/recommendLocationNew")
@Operation(summary = "推荐库位") @Operation(summary = "推荐库位")
public CommonResult<LocationDO> inspectLocationNew(@Valid @RequestBody LocationRecommendVO recommendVO) { public CommonResult<LocationDO> inspectLocationNew(@Valid @RequestBody LocationRecommendVO recommendVO) {
String locationCode = ruleService.groundingNew(recommendVO.getSupplierCode(), null, recommendVO.getItemCode(), recommendVO.getInventoryStatus(), null, null, null, null, null, RuleRespVO ruleRespVO = ruleService.grounding(recommendVO.getSupplierCode(), null, recommendVO.getItemCode(), recommendVO.getInventoryStatus(), null, null, null, null, null);
recommendVO.getBusinessCode(), recommendVO.getItemQty()); if(ruleRespVO == null){
LocationDO locationDO = locationService.queryByCode(locationCode); throw exception(RULE_PUTAWAY_NOT_EXISTS,recommendVO.getItemCode());
}
LocationDO locationDO = locationService.recommendLocation(ruleRespVO, recommendVO.getItemCode(), recommendVO.getItemCode(), recommendVO.getItemCode());
if(locationDO == null){
throw exception(RULE_PUTAWAY_RECOMMEND_LOCATIONCODE_NOT_EXISTS,ruleRespVO.getStrategyCode(),ruleRespVO.getName(),ruleRespVO.getPriority());
}
return success(locationDO); return success(locationDO);
} }

48
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageunit/PackageunitController.java

@ -108,6 +108,54 @@ public class PackageunitController {
return success(result); return success(result);
} }
@GetMapping("/pageTree")
@Operation(summary = "获得物品包装规格信息树状分页")
public CommonResult<PageResult<PackageunitRespVO>> getPackageunitPageTree(@Valid PackageunitPageReqVO pageVO) {
PageResult<PackageunitRespVO> pageResult = packageunitService.getPackageunitPageTree(pageVO);
return success(pageResult);
}
@PostMapping("/seniorTree")
@Operation(summary = "高级搜索获得物品包装规格信息树状分页")
public CommonResult<PageResult<PackageunitRespVO>> getPackageunitSeniorTree(@Valid @RequestBody CustomConditions conditions) {
PageResult<PackageunitRespVO> pageResult = packageunitService.getPackageunitSeniorTree(conditions);
return success(pageResult);
}
@GetMapping("/pageParent")
@Operation(summary = "获得物品包装规格信息分页--父包装")
public CommonResult<PageResult<PackageunitRespVO>> getPackageunitPageParent(@Valid PackageunitPageReqVO pageVO) {
pageVO.setOnlyShowParent("true");
PageResult<PackageunitDO> pageResult = packageunitService.getPackageunitPage(pageVO);
PageResult<PackageunitRespVO> result = PackageunitConvert.INSTANCE.convertPage(pageResult);
for (PackageunitRespVO vo : result.getList()) {
vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
}
return success(result);
}
@PostMapping("/seniorParent")
@Operation(summary = "高级搜索获得物品包装规格信息分页--夫包装")
public CommonResult<PageResult<PackageunitRespVO>> getPackageunitSeniorParent(@Valid @RequestBody CustomConditions conditions) {
CustomConditions.Condition conditionParentCode = new CustomConditions.Condition();
conditionParentCode.setColumn("parentCode");
conditionParentCode.setAction("isNull");
List<CustomConditions.Condition> filters = conditions.getFilters();
if(filters == null || filters.size() == 0){
filters = new ArrayList<>();
filters.add(conditionParentCode);
}
PageResult<PackageunitDO> pageResult = packageunitService.getPackageunitSenior(conditions);
PageResult<PackageunitRespVO> result = PackageunitConvert.INSTANCE.convertPage(pageResult);
for (PackageunitRespVO vo : result.getList()) {
vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
}
return success(result);
}
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出物品包装规格信息 Excel") @Operation(summary = "导出物品包装规格信息 Excel")
@PreAuthorize("@ss.hasPermission('wms:packageunit:export')") @PreAuthorize("@ss.hasPermission('wms:packageunit:export')")

6
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageunit/vo/PackageunitPageReqVO.java

@ -32,4 +32,10 @@ public class PackageunitPageReqVO extends PageParam {
@Schema(description = "是否管理包装库存") @Schema(description = "是否管理包装库存")
private String manageBalance; private String manageBalance;
@Schema(description = "是否树形展示")
private String isShowTree;
@Schema(description = "只展示父包装数据")
private String onlyShowParent;
} }

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/packageunit/vo/PackageunitRespVO.java

@ -3,6 +3,7 @@ package com.win.module.wms.controller.packageunit.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 物品包装规格信息 Response VO") @Schema(description = "管理后台 - 物品包装规格信息 Response VO")
@Data @Data
@ -36,4 +37,7 @@ public class PackageunitRespVO extends PackageunitBaseVO {
@Schema(description = "创建者名称", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "创建者名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String creator; private String creator;
@Schema(description = "子包装")
private List<PackageunitRespVO> children;
} }

187
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/PurchasePlanDetailController.java

@ -2,17 +2,25 @@ package com.win.module.wms.controller.purchasePlan;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.CommonResult;
import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO; import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.wms.controller.purchasePlan.vo.*; import com.win.module.wms.controller.purchasePlan.vo.*;
import com.win.module.wms.convert.purchasePlan.PurchasePlanDetailConvert; import com.win.module.wms.convert.purchasePlan.PurchasePlanDetailConvert;
import com.win.module.wms.dal.dataobject.inventorychangeRequest.InventorychangeRequestDetailDO;
import com.win.module.wms.dal.dataobject.purchase.PurchaseDetailDO;
import com.win.module.wms.dal.dataobject.purchase.PurchaseMainDO;
import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanDetailDO; import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanDetailDO;
import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanMainDO; import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanMainDO;
import com.win.module.wms.dal.mysql.purchase.PurchaseDetailMapper;
import com.win.module.wms.dal.mysql.purchase.PurchaseMainMapper;
import com.win.module.wms.dal.mysql.purchasePlan.PurchasePlanDetailMapper;
import com.win.module.wms.dal.mysql.purchasePlan.PurchasePlanMainMapper; import com.win.module.wms.dal.mysql.purchasePlan.PurchasePlanMainMapper;
import com.win.module.wms.dal.mysql.supplieruser.SupplierUserMapper; import com.win.module.wms.dal.mysql.supplieruser.SupplierUserMapper;
import com.win.module.wms.enums.common.ConstantDataInfo; import com.win.module.wms.enums.common.ConstantDataInfo;
@ -28,7 +36,9 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@ -47,18 +57,26 @@ public class PurchasePlanDetailController {
@Resource @Resource
private PurchasePlanMainMapper purchasePlanMainMapper; private PurchasePlanMainMapper purchasePlanMainMapper;
@Resource @Resource
private PurchasePlanDetailMapper purchasePlanDetailMapper;
@Resource
private PurchaseMainMapper purchaseMainMapper;
@Resource
private PurchaseDetailMapper purchaseDetailMapper;
@Resource
private SupplierUserMapper supplierUserMapper; private SupplierUserMapper supplierUserMapper;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建要货计划子") @Operation(summary = "创建要货计划子")
@PreAuthorize("@ss.hasPermission('wms:purchase-plan-detail:create')") @PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:create')")
public CommonResult<Long> createPurchasePlanDetail(@Valid @RequestBody PurchasePlanDetailCreateReqVO createReqVO) { public CommonResult<Long> createPurchasePlanDetail(@Valid @RequestBody PurchasePlanDetailCreateReqVO createReqVO) {
return success(purchasePlanDetailService.createPurchasePlanDetail(createReqVO)); return success(purchasePlanDetailService.createPurchasePlanDetail(createReqVO));
} }
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "更新要货计划子") @Operation(summary = "更新要货计划子")
@PreAuthorize("@ss.hasPermission('wms:purchase-plan-detail:update')") @PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:update')")
public CommonResult<Boolean> updatePurchasePlanDetail(@Valid @RequestBody PurchasePlanDetailUpdateReqVO updateReqVO) { public CommonResult<Boolean> updatePurchasePlanDetail(@Valid @RequestBody PurchasePlanDetailUpdateReqVO updateReqVO) {
purchasePlanDetailService.updatePurchasePlanDetail(updateReqVO); purchasePlanDetailService.updatePurchasePlanDetail(updateReqVO);
return success(true); return success(true);
@ -68,6 +86,8 @@ public class PurchasePlanDetailController {
@Operation(summary = "获得要货计划子分页") @Operation(summary = "获得要货计划子分页")
public CommonResult<PageResult<PurchasePlanDetailRespVO>> getPurchasePlanDetailPage(@Valid PurchasePlanDetailPageReqVO pageVO) { public CommonResult<PageResult<PurchasePlanDetailRespVO>> getPurchasePlanDetailPage(@Valid PurchasePlanDetailPageReqVO pageVO) {
Long userId = getLoginUserId(); Long userId = getLoginUserId();
String poNumber="";
PurchasePlanDetailRespVO chaofa = new PurchasePlanDetailRespVO();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){ if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId); List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
if(supplierCodeList.size() == 0){ if(supplierCodeList.size() == 0){
@ -82,11 +102,37 @@ public class PurchasePlanDetailController {
if(pageResult.getList().size() > 0){ if(pageResult.getList().size() > 0){
Set<Long> masterIdSet = new HashSet<>(); Set<Long> masterIdSet = new HashSet<>();
for(PurchasePlanDetailDO purchasePlanDetailDO:pageResult.getList()){ for(PurchasePlanDetailDO purchasePlanDetailDO:pageResult.getList()){
poNumber = purchasePlanDetailDO.getPoNumber();
masterIdSet.add(purchasePlanDetailDO.getMasterId()); masterIdSet.add(purchasePlanDetailDO.getMasterId());
} }
Map<Long, PurchasePlanMainDO> mainMap = purchasePlanMainMapper.queryMainListToMap(masterIdSet); Map<Long, PurchasePlanMainDO> mainMap = purchasePlanMainMapper.queryMainListToMap(masterIdSet);
CopyOptions options = CopyOptions.create().setIgnoreNullValue(true); CopyOptions options = CopyOptions.create().setIgnoreNullValue(true);
List<PurchaseDetailDO> purchaseDetailDOS = new ArrayList<>();
List<PurchaseDetailDO> list = new ArrayList<>();
PurchaseMainDO purchaseMainDO = purchaseMainMapper.selectByNumber(poNumber);//这里是发货申请调用要货计划的时候用的
if("SCHEDULE".equals(purchaseMainDO.getType()) && "1".equals(pageVO.getFlag())){//如果flag=1且日程说明是添加发货申请时查询的要货计划子明细,日程订单需要提供要货计划没有且采购订单有的超发物料展示
QueryWrapper<PurchaseDetailDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("number",poNumber);
queryWrapper.inSql("item_code","select d.item_code from basic_supplieritem d where d.deleted = 0 and d.supplier_code = '"+purchaseMainDO.getSupplierCode()+"' and d.allow_over_shipment = 'TRUE'");
purchaseDetailDOS = purchaseDetailMapper.selectList(queryWrapper);
}
for(PurchasePlanDetailRespVO vo : result.getList()) { for(PurchasePlanDetailRespVO vo : result.getList()) {
if(!purchaseDetailDOS.isEmpty()){
chaofa = vo;
for(PurchaseDetailDO en:purchaseDetailDOS){
if(en.getItemCode().equals(vo.getItemCode())){
vo.setAllowOverShipment("TRUE");
}
}
if("1".equals(pageVO.getIsAll())){//0只查询当前要货计划明细1查询当前计划+采购订单多出的超发物料
list = purchaseDetailDOS.stream().filter(//newList 将包含 subDOList 中那些在 historySubDOList 中没有匹配的元素。
item1 -> result.getList().stream().noneMatch(item2 ->
Objects.equals(item1.getItemCode(), item2.getItemCode())
&& Objects.equals(item1.getNumber(), item2.getPoNumber()))).collect(Collectors.toList()
);
}
}
vo.setCreator(userApi.getUserNickname(vo.getCreator())); vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater())); vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
PurchasePlanMainDO purchasePlanMainDO = mainMap.get(vo.getMasterId()); PurchasePlanMainDO purchasePlanMainDO = mainMap.get(vo.getMasterId());
@ -97,7 +143,52 @@ public class PurchasePlanDetailController {
purchasePlanMainDO.setUpdateTime(null); purchasePlanMainDO.setUpdateTime(null);
purchasePlanMainDO.setRemark(null); purchasePlanMainDO.setRemark(null);
BeanUtil.copyProperties(purchasePlanMainDO,vo,options); BeanUtil.copyProperties(purchasePlanMainDO,vo,options);
BigDecimal receivedQty = vo.getReceivedQty()==null?BigDecimal.ZERO:vo.getReceivedQty();//已收货数量
BigDecimal shippedQty = vo.getShippedQty()==null?BigDecimal.ZERO:vo.getShippedQty();//已发货数量
vo.setNotReceiveQty(shippedQty.subtract(receivedQty));//在途数量
PurchaseMainDO purchaseMainDO1 = purchaseMainMapper.selectByNumber(vo.getPoNumber());
if(purchaseMainDO!=null){
vo.setType(purchaseMainDO1.getType());
}
}
if(!list.isEmpty()){//日程单添加要货计划没有且采购与订单有的超发物料
for(PurchaseDetailDO li:list){
PurchasePlanDetailRespVO purchasePlanDetailRespVO = new PurchasePlanDetailRespVO();
purchasePlanDetailRespVO.setAllowOverShipment("TRUE");
purchasePlanDetailRespVO.setPoLine(li.getLineNumber());
purchasePlanDetailRespVO.setPoNumber(li.getNumber());
purchasePlanDetailRespVO.setMasterId(chaofa.getMasterId());
purchasePlanDetailRespVO.setNumber(chaofa.getNumber());
purchasePlanDetailRespVO.setItemCode(li.getItemCode());
purchasePlanDetailRespVO.setPlanQty(BigDecimal.ZERO);
purchasePlanDetailRespVO.setUom(li.getUom());
purchasePlanDetailRespVO.setAvailable("TRUE");
purchasePlanDetailRespVO.setOrderQty(li.getOrderQty());
purchasePlanDetailRespVO.setShippedQty(BigDecimal.ZERO);
purchasePlanDetailRespVO.setReceivedQty(BigDecimal.ZERO);
purchasePlanDetailRespVO.setNotReceiveQty(BigDecimal.ZERO);
purchasePlanDetailRespVO.setDepartmentCode(chaofa.getDepartmentCode());
purchasePlanDetailRespVO.setCreator(chaofa.getCreator());
purchasePlanDetailRespVO.setSupplierCode(chaofa.getSupplierCode());
purchasePlanDetailRespVO.setWarehouseCode(chaofa.getWarehouseCode());
purchasePlanDetailRespVO.setDockCode(chaofa.getDockCode());
purchasePlanDetailRespVO.setBusinessType(chaofa.getBusinessType());
purchasePlanDetailRespVO.setBeginTime(chaofa.getBeginTime());
purchasePlanDetailRespVO.setEndTime(chaofa.getEndTime());
purchasePlanDetailRespVO.setStatus(chaofa.getStatus());
purchasePlanDetailRespVO.setAutoAccept(chaofa.getAutoAccept());
purchasePlanDetailRespVO.setAutoPublish(chaofa.getAutoPublish());
purchasePlanDetailRespVO.setDeliveryDate(chaofa.getDeliveryDate());
purchasePlanDetailRespVO.setContacts(chaofa.getContacts());
purchasePlanDetailRespVO.setPhone(chaofa.getPhone());
purchasePlanDetailRespVO.setType(chaofa.getType());
result.getList().add(purchasePlanDetailRespVO);
}
result.setTotal((long) result.getList().size());
} }
Collections.sort(result.getList(), Comparator.comparing(PurchasePlanDetailRespVO::getSupplierCode, Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(Comparator.comparing(PurchasePlanDetailRespVO::getDeliveryDate, Comparator.nullsLast(Comparator.reverseOrder())))
.thenComparing( Comparator.comparing(PurchasePlanDetailRespVO::getItemCode, Comparator.nullsLast(Comparator.naturalOrder()))));
} }
return success(result); return success(result);
} }
@ -105,6 +196,10 @@ public class PurchasePlanDetailController {
@PostMapping("/senior") @PostMapping("/senior")
@Operation(summary = "高级搜索获得要货计划子信息分页") @Operation(summary = "高级搜索获得要货计划子信息分页")
public CommonResult<PageResult<PurchasePlanDetailRespVO>> getPurchasePlanDetailSenior(@Valid @RequestBody CustomConditions conditions) { public CommonResult<PageResult<PurchasePlanDetailRespVO>> getPurchasePlanDetailSenior(@Valid @RequestBody CustomConditions conditions) {
Boolean flag = false;
String isAll = "";//0只查询当前要货计划明细1查询当前计划+采购订单多出的超发物料
String poNumber = "";
PurchasePlanDetailRespVO chaofa = null;
Long userId = getLoginUserId(); Long userId = getLoginUserId();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){ if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId); List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
@ -127,16 +222,56 @@ public class PurchasePlanDetailController {
conditionList.add(condition); conditionList.add(condition);
} }
} }
//List<String> excludeConditions = new ArrayList<>();
List<CustomConditions.Condition> conditionList = conditions.getFilters();
for(CustomConditions.Condition li:conditionList){
if(li.getColumn().equals("flag") && li.getValue().equals("1")){//发货申请筛选
flag = true;
li.setColumn("available");
li.setValue("TRUE");
}
if(li.getColumn().equals("isAll")){//0只查询当前要货计划明细1查询当前计划+采购订单多出的超发物料
isAll = li.getValue();
li.setColumn("available");
li.setValue("TRUE");
}
}
//QueryWrapper<PurchasePlanDetailDO> queryWrapper = QueryWrapperUtils.structureFilter(conditions, excludeConditions);
PageResult<PurchasePlanDetailDO> pageResult = purchasePlanDetailService.getPurchasePlanDetailSenior(conditions); PageResult<PurchasePlanDetailDO> pageResult = purchasePlanDetailService.getPurchasePlanDetailSenior(conditions);
PageResult<PurchasePlanDetailRespVO> result = PurchasePlanDetailConvert.INSTANCE.convertPage(pageResult); PageResult<PurchasePlanDetailRespVO> result = PurchasePlanDetailConvert.INSTANCE.convertPage(pageResult);
if(pageResult.getList().size() > 0){ if(pageResult.getList().size() > 0){
Set<Long> masterIdSet = new HashSet<>(); Set<Long> masterIdSet = new HashSet<>();
for(PurchasePlanDetailDO purchasePlanDetailDO:pageResult.getList()){ for(PurchasePlanDetailDO purchasePlanDetailDO:pageResult.getList()){
poNumber = purchasePlanDetailDO.getPoNumber();
masterIdSet.add(purchasePlanDetailDO.getMasterId()); masterIdSet.add(purchasePlanDetailDO.getMasterId());
} }
Map<Long, PurchasePlanMainDO> mainMap = purchasePlanMainMapper.queryMainListToMap(masterIdSet); Map<Long, PurchasePlanMainDO> mainMap = purchasePlanMainMapper.queryMainListToMap(masterIdSet);
CopyOptions options = CopyOptions.create().setIgnoreNullValue(true); CopyOptions options = CopyOptions.create().setIgnoreNullValue(true);
List<PurchaseDetailDO> purchaseDetailDOS = new ArrayList<>();
List<PurchaseDetailDO> list = new ArrayList<>();
PurchaseMainDO purchaseMainDO = purchaseMainMapper.selectByNumber(poNumber);
if("SCHEDULE".equals(purchaseMainDO.getType()) && flag){//如果flag=true且日程说明是添加发货申请时查询的要货计划子明细,日程订单需要提供要货计划没有且采购订单有的超发物料展示
QueryWrapper<PurchaseDetailDO> queryWrapper1 = new QueryWrapper<>();
queryWrapper1.eq("number",poNumber);
queryWrapper1.inSql("item_code","select d.item_code from basic_supplieritem d where d.deleted = 0 and d.supplier_code = '"+purchaseMainDO.getSupplierCode()+"' and d.allow_over_shipment = 'TRUE'");
purchaseDetailDOS = purchaseDetailMapper.selectList(queryWrapper1);
}
for(PurchasePlanDetailRespVO vo : result.getList()) { for(PurchasePlanDetailRespVO vo : result.getList()) {
if(!purchaseDetailDOS.isEmpty()){
chaofa = vo;
for(PurchaseDetailDO en:purchaseDetailDOS){
if(en.getItemCode().equals(vo.getItemCode())){
vo.setAllowOverShipment("TRUE");
}
}
if("1".equals(isAll)){//0只查询当前要货计划明细1查询当前计划+采购订单多出的超发物料
list = purchaseDetailDOS.stream().filter(//newList 将包含 subDOList 中那些在 historySubDOList 中没有匹配的元素。
item1 -> result.getList().stream().noneMatch(item2 ->
Objects.equals(item1.getItemCode(), item2.getItemCode())
&& Objects.equals(item1.getNumber(), item2.getPoNumber()))).collect(Collectors.toList()
);
}
}
vo.setCreator(userApi.getUserNickname(vo.getCreator())); vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater())); vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
PurchasePlanMainDO purchasePlanMainDO = mainMap.get(vo.getMasterId()); PurchasePlanMainDO purchasePlanMainDO = mainMap.get(vo.getMasterId());
@ -147,15 +282,61 @@ public class PurchasePlanDetailController {
purchasePlanMainDO.setUpdater(null); purchasePlanMainDO.setUpdater(null);
purchasePlanMainDO.setRemark(null); purchasePlanMainDO.setRemark(null);
BeanUtil.copyProperties(purchasePlanMainDO,vo,options); BeanUtil.copyProperties(purchasePlanMainDO,vo,options);
BigDecimal receivedQty = vo.getReceivedQty()==null?BigDecimal.ZERO:vo.getReceivedQty();//已收货数量
BigDecimal shippedQty = vo.getShippedQty()==null?BigDecimal.ZERO:vo.getShippedQty();//已发货数量
vo.setNotReceiveQty(shippedQty.subtract(receivedQty));//在途数量
PurchaseMainDO purchaseMainDO1 = purchaseMainMapper.selectByNumber(vo.getPoNumber());
if(purchaseMainDO!=null){
vo.setType(purchaseMainDO1.getType());
}
}
if(!list.isEmpty()){//日程单添加要货计划没有且采购与订单有的超发物料
for(PurchaseDetailDO li:list){
PurchasePlanDetailRespVO purchasePlanDetailRespVO = new PurchasePlanDetailRespVO();
purchasePlanDetailRespVO.setAllowOverShipment("TRUE");
purchasePlanDetailRespVO.setPoLine(li.getLineNumber());
purchasePlanDetailRespVO.setPoNumber(li.getNumber());
purchasePlanDetailRespVO.setMasterId(chaofa.getMasterId());
purchasePlanDetailRespVO.setNumber(chaofa.getNumber());
purchasePlanDetailRespVO.setItemCode(li.getItemCode());
purchasePlanDetailRespVO.setPlanQty(BigDecimal.ZERO);
purchasePlanDetailRespVO.setUom(li.getUom());
purchasePlanDetailRespVO.setAvailable("TRUE");
purchasePlanDetailRespVO.setOrderQty(li.getOrderQty());
purchasePlanDetailRespVO.setShippedQty(BigDecimal.ZERO);
purchasePlanDetailRespVO.setReceivedQty(BigDecimal.ZERO);
purchasePlanDetailRespVO.setNotReceiveQty(BigDecimal.ZERO);
purchasePlanDetailRespVO.setDepartmentCode(chaofa.getDepartmentCode());
purchasePlanDetailRespVO.setCreator(chaofa.getCreator());
purchasePlanDetailRespVO.setSupplierCode(chaofa.getSupplierCode());
purchasePlanDetailRespVO.setWarehouseCode(chaofa.getWarehouseCode());
purchasePlanDetailRespVO.setDockCode(chaofa.getDockCode());
purchasePlanDetailRespVO.setBusinessType(chaofa.getBusinessType());
purchasePlanDetailRespVO.setBeginTime(chaofa.getBeginTime());
purchasePlanDetailRespVO.setEndTime(chaofa.getEndTime());
purchasePlanDetailRespVO.setStatus(chaofa.getStatus());
purchasePlanDetailRespVO.setAutoAccept(chaofa.getAutoAccept());
purchasePlanDetailRespVO.setAutoPublish(chaofa.getAutoPublish());
purchasePlanDetailRespVO.setDeliveryDate(chaofa.getDeliveryDate());
purchasePlanDetailRespVO.setContacts(chaofa.getContacts());
purchasePlanDetailRespVO.setPhone(chaofa.getPhone());
purchasePlanDetailRespVO.setType(chaofa.getType());
result.getList().add(purchasePlanDetailRespVO);
}
result.setTotal((long) result.getList().size());
} }
Collections.sort(result.getList(), Comparator.comparing(PurchasePlanDetailRespVO::getSupplierCode, Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(Comparator.comparing(PurchasePlanDetailRespVO::getDeliveryDate, Comparator.nullsLast(Comparator.reverseOrder())))
.thenComparing( Comparator.comparing(PurchasePlanDetailRespVO::getItemCode, Comparator.nullsLast(Comparator.naturalOrder()))));
} }
return success(result); return success(result);
} }
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除要货计划子") @Operation(summary = "删除要货计划子")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:purchase-plan-detail:delete')") @PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:delete')")
public CommonResult<Boolean> deletePurchasePlanDetail(@RequestParam("id") Long id) { public CommonResult<Boolean> deletePurchasePlanDetail(@RequestParam("id") Long id) {
purchasePlanDetailService.deletePurchasePlanDetail(id); purchasePlanDetailService.deletePurchasePlanDetail(id);
return success(true); return success(true);

189
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/PurchasePlanMainController.java

@ -1,8 +1,12 @@
package com.win.module.wms.controller.purchasePlan; package com.win.module.wms.controller.purchasePlan;
import cn.hutool.core.collection.CollUtil;
import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.CommonResult;
import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.framework.common.util.json.JsonUtils;
import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.framework.dict.core.util.DictFrameworkUtils;
import com.win.framework.excel.core.util.ConvertUtil; import com.win.framework.excel.core.util.ConvertUtil;
import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.excel.core.util.ExcelUtils;
@ -17,6 +21,8 @@ import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.enums.common.ConstantDataInfo; import com.win.module.wms.enums.common.ConstantDataInfo;
import com.win.module.wms.service.purchasePlan.PurchasePlanDetailService; import com.win.module.wms.service.purchasePlan.PurchasePlanDetailService;
import com.win.module.wms.service.purchasePlan.PurchasePlanMainService; import com.win.module.wms.service.purchasePlan.PurchasePlanMainService;
import com.win.module.wms.util.ClassFieldUtil;
import com.win.module.wms.util.DymaicExcelImportUtil;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.Parameters;
@ -34,6 +40,7 @@ import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@ -118,8 +125,33 @@ public class PurchasePlanMainController {
return success(result); return success(result);
} }
// @GetMapping("/export-excel-detail")
// @Operation(summary = "导出要货计划明细 Excel")
// @PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:export')")
// @OperateLog(type = EXPORT)
// public void exportPurchasePlanMainExcelDetail(@Valid PurchasePlanMainExportReqVO exportReqVO,HttpServletResponse response) throws IOException {
// Long userId = getLoginUserId();
// if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
// List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
// if(supplierCodeList.size() == 0){
// supplierCodeList.add("999999");//一个不存在的供应商代码
// }
// exportReqVO.setSupplierCodeList(supplierCodeList);
// }else {
// exportReqVO.setSupplierCodeList(null);
// }
// List<PurchasePlanMainDO> list = purchasePlanMainService.getPurchasePlanMainList(exportReqVO);
// //组装vo
// Map<Integer, String[]> mapDropDown = new HashMap<>();
// // 导出 Excel
// List<PurchasePlanMainExcelVO> resultList = this.getExcelVo(list, mapDropDown);
// //List<PurchasePlanMainExcelVO> resultList = purchasePlanMainService.getExportList(exportReqVO);
// ExcelUtils.write(response, "要货计划明细.xlsx", "数据", PurchasePlanMainExcelVO.class, resultList);
//
// }
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出要货计划主 Excel") @Operation(summary = "导出要货计划二维表")
@PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:export')") @PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:export')")
@OperateLog(type = EXPORT) @OperateLog(type = EXPORT)
public void exportPurchasePlanMainExcel(@Valid PurchasePlanMainExportReqVO exportReqVO,HttpServletResponse response) throws IOException { public void exportPurchasePlanMainExcel(@Valid PurchasePlanMainExportReqVO exportReqVO,HttpServletResponse response) throws IOException {
@ -133,16 +165,42 @@ public class PurchasePlanMainController {
}else { }else {
exportReqVO.setSupplierCodeList(null); exportReqVO.setSupplierCodeList(null);
} }
List<PurchasePlanMainDO> list = purchasePlanMainService.getPurchasePlanMainList(exportReqVO); // Map<Integer, String[]> mapDropDown = new HashMap<>();
//组装vo // String[] deviceType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PURCHASE_PLAN_STATUS);
Map<Integer, String[]> mapDropDown = new HashMap<>(); // mapDropDown.put(ClassFieldUtil.getFieldIndex(PurchasePlanMainExcelVO.class,"status"), deviceType);
// 导出 Excel // String[] orderType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PURCHASE_ORDER_TYPE);
List<PurchasePlanMainExcelVO> resultList = this.getExcelVo(list, mapDropDown); // mapDropDown.put(ClassFieldUtil.getFieldIndex(PurchasePlanMainExcelVO.class,"orderType"), orderType);
ExcelUtils.write(response, "要货计划主.xlsx", "数据", PurchasePlanMainExcelVO.class, resultList, mapDropDown); Map<String,List> dataMap = purchasePlanMainService.getExport2(exportReqVO);
ExcelUtils.writeMap(response, "要货计划二维表.xlsx", "数据",(List<List<String>>)dataMap.get("header"),(List<List<Object>>)dataMap.get("data"));
} }
@GetMapping("/export-excel-detail")
@Operation(summary = "导出要货计划明细")
@PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:export')")
@OperateLog(type = EXPORT)
public void exportPurchasePlanMainExcelDetail(@Valid PurchasePlanMainExportReqVO exportReqVO,HttpServletResponse response) throws IOException {
Long userId = getLoginUserId();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
if(supplierCodeList.size() == 0){
supplierCodeList.add("999999");//一个不存在的供应商代码
}
exportReqVO.setSupplierCodeList(supplierCodeList);
}else {
exportReqVO.setSupplierCodeList(null);
}
Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] deviceType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PURCHASE_PLAN_STATUS);
mapDropDown.put(ClassFieldUtil.getFieldIndex(PurchasePlanMainExcelVO.class,"status"), deviceType);
String[] orderType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PURCHASE_ORDER_TYPE);
mapDropDown.put(ClassFieldUtil.getFieldIndex(PurchasePlanMainExcelVO.class,"orderType"), orderType);
List<PurchasePlanMainExcelVO> resultList = purchasePlanMainService.getExportList(exportReqVO);
ExcelUtils.write(response, "要货计划明细.xlsx", "数据", PurchasePlanMainExcelVO.class, resultList, mapDropDown);
@GetMapping("/export-excel-senior") }
@Operation(summary = "导出采购索赔记录主 Excel") @PostMapping("/export-excel-senior")
@Operation(summary = "导出高级搜索明细 Excel")
@PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:export')") @PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:export')")
@OperateLog(type = EXPORT) @OperateLog(type = EXPORT)
public void exportPurchasePlanMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException { public void exportPurchasePlanMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException {
@ -165,29 +223,63 @@ public class PurchasePlanMainController {
conditionList.add(condition); conditionList.add(condition);
} }
} }
List<PurchasePlanMainDO> list = purchasePlanMainService.getPurchasePlanMainList(conditions);
//组装vo //组装vo
Map<Integer, String[]> mapDropDown = new HashMap<>(); Map<Integer, String[]> mapDropDown = new HashMap<>();
List<PurchasePlanMainExcelVO> resultList = this.getExcelVo(list, mapDropDown); String[] deviceType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PURCHASE_PLAN_STATUS);
ExcelUtils.write(response, "要货计划主.xlsx", "数据", PurchasePlanMainExcelVO.class, resultList, mapDropDown); mapDropDown.put(ClassFieldUtil.getFieldIndex(PurchasePlanMainExcelVO.class,"status"), deviceType);
String[] orderType = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PURCHASE_ORDER_TYPE);
mapDropDown.put(ClassFieldUtil.getFieldIndex(PurchasePlanMainExcelVO.class,"orderType"), orderType);
List<PurchasePlanMainExcelVO> resultList = purchasePlanMainService.getExportListSenior(conditions);
ExcelUtils.write(response, "要货计划明细.xlsx", "数据", PurchasePlanMainExcelVO.class, resultList, mapDropDown);
} }
// @GetMapping("/export-excel-senior")
// @Operation(summary = "导出 Excel")
// @PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:export')")
// @OperateLog(type = EXPORT)
// public void exportPurchasePlanMainSeniorExcel(@Valid @RequestBody CustomConditions conditions, HttpServletResponse response) throws IOException {
// Long userId = getLoginUserId();
// if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
// List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
// if(supplierCodeList.size() > 0){
// List<CustomConditions.Condition> conditionList = conditions.getFilters();
// CustomConditions.Condition condition = new CustomConditions.Condition();
// condition.setColumn("supplier_code");
// condition.setAction("in");
// condition.setValue(String.join(",",supplierCodeList));
// conditionList.add(condition);
// }else{
// List<CustomConditions.Condition> conditionList = conditions.getFilters();
// CustomConditions.Condition condition = new CustomConditions.Condition();
// condition.setColumn("supplier_code");
// condition.setAction("in");
// condition.setValue("999999");//一个不存在的供应商代码
// conditionList.add(condition);
// }
// }
//List<PurchasePlanMainDO> list = purchasePlanMainService.getPurchasePlanMainList(conditions);
// //组装vo
// Map<Integer, String[]> mapDropDown = new HashMap<>();
// List<PurchasePlanMainExcelVO> resultList = this.getExcelVo(list, mapDropDown);
// ExcelUtils.write(response, "要货计划明细.xlsx", "数据", PurchasePlanMainExcelVO.class, resultList, mapDropDown);
// }
private List<PurchasePlanMainExcelVO> getExcelVo(List<PurchasePlanMainDO> list, Map<Integer, String[]> mapDropDown) { private List<PurchasePlanMainExcelVO> getExcelVo(List<PurchasePlanMainDO> list, Map<Integer, String[]> mapDropDown) {
List<PurchasePlanMainExcelVO> resultList = new ArrayList<>(); List<PurchasePlanMainExcelVO> resultList = new ArrayList<>();
// 导出 // 导出
for (PurchasePlanMainDO mainDO : list) { list.parallelStream().forEach(item->{
List<PurchasePlanDetailDO> subList = purchasePlanDetailService.selectList(mainDO.getId()); List<PurchasePlanDetailDO> subList = purchasePlanDetailService.selectList(item.getId());
for (PurchasePlanDetailDO detailDO : subList) { subList.parallelStream().forEach(itemSub->{
PurchasePlanMainExcelVO vo = PurchasePlanMainConvert.INSTANCE.convert(mainDO, detailDO); PurchasePlanMainExcelVO vo = PurchasePlanMainConvert.INSTANCE.convert(item, itemSub);
vo.setCreatorDetail(mainDO.getCreator()); // vo.setCreatorDetail(item.getCreator());
vo.setUpdaterDetail(mainDO.getUpdater()); // vo.setUpdaterDetail(item.getUpdater());
vo.setCreateTimeDetail(mainDO.getCreateTime()); // vo.setCreateTimeDetail(item.getCreateTime());
vo.setUpdateTimeDetail(mainDO.getUpdateTime()); // vo.setUpdateTimeDetail(item.getUpdateTime());
vo.setCreatorDetail(userApi.getUserNickname(vo.getCreatorDetail())); // vo.setCreatorDetail(userApi.getUserNickname(vo.getCreatorDetail()));
vo.setUpdaterDetail(userApi.getUserNickname(vo.getUpdaterDetail())); // vo.setUpdaterDetail(userApi.getUserNickname(vo.getUpdaterDetail()));
resultList.add(vo); resultList.add(vo);
} });
} });
return resultList; return resultList;
} }
@ -195,12 +287,12 @@ public class PurchasePlanMainController {
@Operation(summary = "获得导入要货计划信息模板") @Operation(summary = "获得导入要货计划信息模板")
public void importTemplate(HttpServletResponse response) throws IOException { public void importTemplate(HttpServletResponse response) throws IOException {
// 手动创建导出 demo // 手动创建导出 demo
List<PurchasePlanMainImportVO> list = new ArrayList<>(); List<PurchasePlanMainImportVO2> list = new ArrayList<>();
Map<Integer, String[]> mapDropDown = new HashMap<>(); // Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); //String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM);
mapDropDown.put(5, uom); // mapDropDown.put(5, uom);
// 输出 // 输出
ExcelUtils.write(response, "要货计划信息导入模板.xlsx", "要货计划信息列表", PurchasePlanMainImportVO.class, list, mapDropDown); ExcelUtils.write(response, "要货计划信息导入模板.xlsx", "要货计划信息列表", PurchasePlanMainImportVO2.class, list);
} }
@PostMapping("/import") @PostMapping("/import")
@ -215,16 +307,35 @@ public class PurchasePlanMainController {
@RequestParam("file") MultipartFile file, @RequestParam("file") MultipartFile file,
@RequestParam(value = "mode") Integer mode, @RequestParam(value = "mode") Integer mode,
@RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception { @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception {
List<PurchasePlanMainImportVO> list = ExcelUtils.read(file, PurchasePlanMainImportVO.class); /***
ConvertUtil<PurchasePlanMainCreateReqVO> convertUtil = new ConvertUtil<>(PurchasePlanMainCreateReqVO.class); * 增加动态模版的转换
List<PurchasePlanMainCreateReqVO> createReqVOList = convertUtil.invoke(list).getDataList(); * */
List<PurchasePlanMainImportErrorVO> errorList = purchasePlanMainService.importPurchasePlanMainList(createReqVOList, mode, updatePart);
Map<String, Object> returnMap = new HashMap<>(); Map<String, Object> returnMap = new HashMap<>();
returnMap.put("errorCount", errorList.size()); List<PurchasePlanMainImportErrorVO> errorList;
if(!errorList.isEmpty()) { DymaicExcelImportUtil excelImportUtil=new DymaicExcelImportUtil();
List<Map<String, Object>> maps = excelImportUtil.readExcel(file.getInputStream());
Map<String, List> retMap = excelImportUtil.getPurchasePlanMainImportStandard(maps);
errorList = retMap.get("errorList");
boolean errorFlag=false;
if(CollUtil.isEmpty(errorList)){
ConvertUtil<PurchasePlanMainCreateReqVO> convertUtil = new ConvertUtil<>(PurchasePlanMainCreateReqVO.class);
List<PurchasePlanMainImportVO> purchasePlanMainImportStandard = retMap.get("dataList");
List<PurchasePlanMainCreateReqVO> createReqVOList = convertUtil.invoke(purchasePlanMainImportStandard).getDataList();
errorList = purchasePlanMainService.importPurchasePlanMainList(createReqVOList, mode, updatePart);
errorFlag=!CollUtil.isEmpty(errorList);
}else{
errorFlag =true;
}
// ///List<PurchasePlanMainImportVO> list = ExcelUtils.read(file, PurchasePlanMainImportVO.class);
if(errorFlag) {
String url = ExcelUtils.writeLocalFile("要货计划基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList); String url = ExcelUtils.writeLocalFile("要货计划基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList);
returnMap.put("errorFile", url); returnMap.put("errorFile", url);
returnMap.put("errorCount", errorList.size());
}else{
returnMap.put("errorCount", 0);
returnMap.put("errorFile", "");
} }
return success(returnMap); return success(returnMap);
} }
@ -290,4 +401,12 @@ public class PurchasePlanMainController {
return success(purchasePlanMainRespVO); return success(purchasePlanMainRespVO);
} }
@PutMapping("/updateALL")
@Operation(summary = "更新要货计划主除了关闭状态的")
@PreAuthorize("@ss.hasPermission('wms:purchase-plan-main:update')")
public CommonResult<Boolean> updateALLPurchasePlanMain(@Valid @RequestBody PurchasePlanMainUpdateReqVO updateReqVO) {
Long result = purchasePlanMainService.updatePurchasePlanMain(updateReqVO);
return success(result > 0);
}
} }

8
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanDetailBaseVO.java

@ -72,4 +72,12 @@ public class PurchasePlanDetailBaseVO {
@Schema(description = "主表Id--主") @Schema(description = "主表Id--主")
private Long masterId; private Long masterId;
@Schema(description = "在途数量(发货-收货)")
private BigDecimal notReceiveQty;
@Schema(description = "已收货数量")
private BigDecimal receivedQty;
} }

9
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanDetailPageReqVO.java

@ -73,4 +73,13 @@ public class PurchasePlanDetailPageReqVO extends PageParam {
@Schema(description = "送达日期范围") @Schema(description = "送达日期范围")
private List<String> deliveryDate; private List<String> deliveryDate;
@Schema(description = "1发货申请查询")
private String flag;
@Schema(description = "0只查询当前要货计划明细1查询当前计划+采购订单多出的超发物料")
private String isAll;
@Schema(description = "状态多选用逗号分隔")
private String statuss;
} }

10
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanDetailRespVO.java

@ -118,4 +118,14 @@ public class PurchasePlanDetailRespVO extends PurchasePlanDetailBaseVO {
* 联系电话 * 联系电话
*/ */
private String phone; private String phone;
/**
* 采购订单类型
*/
private String type;
/**
* 采购订单类型
*/
private String allowOverShipment;
} }

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainBaseVO.java

@ -89,4 +89,6 @@ public class PurchasePlanMainBaseVO {
@Schema(description = "联系电话", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "联系电话", requiredMode = Schema.RequiredMode.REQUIRED)
private String phone; private String phone;
//导入时使用 标识记录行
private Long rownum;
} }

1
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainCreateReqVO.java

@ -17,4 +17,5 @@ public class PurchasePlanMainCreateReqVO extends PurchasePlanMainBaseVO {
@SubObject @SubObject
@Schema(description = "子表数据") @Schema(description = "子表数据")
private List<PurchasePlanDetailCreateReqVO> subList; private List<PurchasePlanDetailCreateReqVO> subList;
} }

199
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExcelVO.java

@ -1,5 +1,9 @@
package com.win.module.wms.controller.purchasePlan.vo; package com.win.module.wms.controller.purchasePlan.vo;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.win.framework.excel.core.annotations.Colour; import com.win.framework.excel.core.annotations.Colour;
@ -7,6 +11,7 @@ import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.convert.DictConvert; import com.win.framework.excel.core.convert.DictConvert;
import lombok.Data; import lombok.Data;
import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.IndexedColors;
import org.springframework.boot.context.properties.bind.DefaultValue;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -24,44 +29,10 @@ import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY
@Data @Data
public class PurchasePlanMainExcelVO { public class PurchasePlanMainExcelVO {
@ExcelProperty("单据号")
@Colour(IndexedColors.LIGHT_YELLOW)
private String number;
@ExcelProperty("供应商代码") @ExcelProperty("供应商代码")
@Colour(IndexedColors.LIGHT_YELLOW) @Colour(IndexedColors.LIGHT_YELLOW)
private String supplierCode; private String supplierCode;
@ExcelProperty("时间窗口")
@Colour(IndexedColors.LIGHT_YELLOW)
private String timeWindow;
@ExcelProperty("仓库代码")
@Colour(IndexedColors.LIGHT_YELLOW)
private String warehouseCode;
@ExcelProperty("月台代码")
@Colour(IndexedColors.LIGHT_YELLOW)
private String dockCode;
@ExcelProperty("业务类型")
@Colour(IndexedColors.LIGHT_YELLOW)
private String businessType;
@ExcelProperty(value = "状态", converter = DictConvert.class)
@DictFormat("purchase_plan_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@Colour(IndexedColors.LIGHT_YELLOW)
private String status;
@ExcelProperty("开始时间")
@Colour(IndexedColors.LIGHT_YELLOW)
@ColumnWidth(value = 16)
private String beginTime;
@ExcelProperty("结束时间")
@Colour(IndexedColors.LIGHT_YELLOW)
@ColumnWidth(value = 16)
private String endTime;
@ExcelProperty(value = "送达日期") @ExcelProperty(value = "送达日期")
@Colour(IndexedColors.LIGHT_YELLOW) @Colour(IndexedColors.LIGHT_YELLOW)
@ -69,53 +40,143 @@ public class PurchasePlanMainExcelVO {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDateTime deliveryDate; private LocalDateTime deliveryDate;
@ExcelProperty(value = "是否可用", converter = DictConvert.class)
@DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@Colour(IndexedColors.LIGHT_YELLOW)
private String available;
@ExcelProperty("备注")
@Colour(IndexedColors.LIGHT_YELLOW)
private String remark;
//子表
@ExcelProperty("订单号")
private String poNumber;
@ExcelProperty("订单行")
private String poLine;
@ExcelProperty("物料代码") @ExcelProperty("物料代码")
private String itemCode; private String itemCode;
@ExcelProperty("计划数量")
private BigDecimal planQty;
@ExcelProperty("已发货数量") @ExcelProperty("已发货数量")
private BigDecimal shippedQty; private BigDecimal shippedQty;
@ExcelProperty("计划数量") @ExcelProperty("已收货数量")
private BigDecimal planQty; private BigDecimal receivedQty;
@ExcelProperty(value = "计量单位", converter = DictConvert.class) @ExcelProperty("在途数量")
@DictFormat("uom") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 private BigDecimal notReceiveQty;
private String uom;
@ExcelProperty(value = "是否可用", converter = DictConvert.class) //子表
@DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 @ExcelProperty("采购订单单号")
private String availableDetail; private String poNumber;
@ExcelProperty("备注") @ExcelProperty("要货计划单号")
private String remarkDetail; @Colour(IndexedColors.LIGHT_YELLOW)
private String number;
@ExcelProperty("创建时间") @ExcelProperty("订单行")
@ColumnWidth(value = 16) private String poLine;
private LocalDateTime createTimeDetail;
@ExcelProperty("创建者用户名") @ExcelProperty("订单数量")
private String creatorDetail; private BigDecimal orderQty;
@ExcelProperty("最后更新时间") @ExcelProperty(value = "计量单位", converter = DictConvert.class)
@ColumnWidth(value = 16) @DictFormat("uom") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private LocalDateTime updateTimeDetail; private String uom;
@ExcelProperty("最后更新者用户名") @ExcelProperty(value = "状态", converter = DictConvert.class)
private String updaterDetail; @DictFormat("purchase_plan_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@Colour(IndexedColors.LIGHT_YELLOW)
private String status;
@ExcelProperty(value = "采购订单类型", converter = DictConvert.class)
@DictFormat("purchase_order_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@Colour(IndexedColors.LIGHT_YELLOW)
private String orderType;
// @ExcelIgnore
// //("时间窗口")
// //@Colour(IndexedColors.LIGHT_YELLOW)
// private String timeWindow;
//
// @ExcelIgnore//("仓库代码")
// //@Colour(IndexedColors.LIGHT_YELLOW)
// private String warehouseCode;
//
// @ExcelIgnore//("月台代码")
// //@Colour(IndexedColors.LIGHT_YELLOW)
// private String dockCode;
//
// @ExcelIgnore//("业务类型")
// //@Colour(IndexedColors.LIGHT_YELLOW)
// private String businessType;
//
//
//
// @ExcelIgnore//("开始时间")
//// @Colour(IndexedColors.LIGHT_YELLOW)
//// @ColumnWidth(value = 16)
// private String beginTime;
//
// @ExcelIgnore//("结束时间")
//// @Colour(IndexedColors.LIGHT_YELLOW)
//// @ColumnWidth(value = 16)
// private String endTime;
//
//
//
// @ExcelIgnore
// //(value = "是否可用", converter = DictConvert.class)
//// @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
//// @Colour(IndexedColors.LIGHT_YELLOW)
// private String available;
//
// @ExcelIgnore
// //("备注")
// //@Colour(IndexedColors.LIGHT_YELLOW)
// private String remark;
//
//
//
//
//
//
//
//// @ExcelProperty(value = "是否可用", converter = DictConvert.class)
//// @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
//// private String availableDetail;
//
// @ExcelProperty("备注")
// private String remarkDetail;
//
// @ExcelProperty("创建时间")
// @ColumnWidth(value = 16)
// private LocalDateTime createTimeDetail;
//
// @ExcelProperty("创建者用户名")
// private String creatorDetail;
//
// @ExcelProperty("最后更新时间")
// @ColumnWidth(value = 16)
// private LocalDateTime updateTimeDetail;
//
// @ExcelProperty("最后更新者用户名")
// private String updaterDetail;
public LocalDateTime getDeliveryDate(){
if(ObjectUtil.isNull(this.deliveryDate)){
return LocalDateTimeUtil.parse("2000-01-01 00:00:00", DatePattern.NORM_DATETIME_FORMATTER);
}else{
return this.deliveryDate;
}
}
public BigDecimal getShippedQty(){
if(ObjectUtil.isNull(this.shippedQty)){
return BigDecimal.ZERO;
}else{
return this.shippedQty;
}
}
public BigDecimal getNotReceiveQty(){
if(ObjectUtil.isNull(this.notReceiveQty)){
return BigDecimal.ZERO;
}else{
return this.notReceiveQty;
}
}
public BigDecimal getReceivedQty(){
if(ObjectUtil.isNull(this.receivedQty)){
return BigDecimal.ZERO;
}else{
return this.receivedQty;
}
}
} }

150
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExcelVO2.java

@ -0,0 +1,150 @@
package com.win.module.wms.controller.purchasePlan.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.win.framework.excel.core.annotations.Colour;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.convert.DictConvert;
import lombok.Data;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
/**
* 要货计划导出的为二维表
*
* @author 超级管理员
*/
@Data
public class PurchasePlanMainExcelVO2 {
@ExcelProperty("供应商代码")
@Colour(IndexedColors.LIGHT_YELLOW)
private String supplierCode;
@ExcelProperty(value = "送达日期")
@Colour(IndexedColors.LIGHT_YELLOW)
@ColumnWidth(value = 16)
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDateTime deliveryDate;
@ExcelProperty("物料代码")
private String itemCode;
@ExcelProperty("计划数量")
private BigDecimal planQty;
@ExcelProperty("已发货数量")
private BigDecimal shippedQty;
@ExcelProperty("已收货数量")
private BigDecimal receivedQty;
@ExcelProperty("在途数量")
private BigDecimal notReceiveQty;
//子表
@ExcelProperty("采购订单单号")
private String poNumber;
@ExcelProperty("要货计划单号")
@Colour(IndexedColors.LIGHT_YELLOW)
private String number;
@ExcelProperty("订单行")
private String poLine;
@ExcelProperty("订单数量")
private BigDecimal orderQty;
@ExcelProperty(value = "计量单位", converter = DictConvert.class)
@DictFormat("uom") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String uom;
@ExcelProperty(value = "状态", converter = DictConvert.class)
@DictFormat("purchase_plan_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@Colour(IndexedColors.LIGHT_YELLOW)
private String status;
@ExcelProperty(value = "采购订单类型", converter = DictConvert.class)
@DictFormat("purchase_order_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@Colour(IndexedColors.LIGHT_YELLOW)
private String orderType;
@ExcelIgnore
//("时间窗口")
//@Colour(IndexedColors.LIGHT_YELLOW)
private String timeWindow;
@ExcelIgnore//("仓库代码")
//@Colour(IndexedColors.LIGHT_YELLOW)
private String warehouseCode;
@ExcelIgnore//("月台代码")
//@Colour(IndexedColors.LIGHT_YELLOW)
private String dockCode;
@ExcelIgnore//("业务类型")
//@Colour(IndexedColors.LIGHT_YELLOW)
private String businessType;
@ExcelIgnore//("开始时间")
// @Colour(IndexedColors.LIGHT_YELLOW)
// @ColumnWidth(value = 16)
private String beginTime;
@ExcelIgnore//("结束时间")
// @Colour(IndexedColors.LIGHT_YELLOW)
// @ColumnWidth(value = 16)
private String endTime;
@ExcelIgnore
//(value = "是否可用", converter = DictConvert.class)
// @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
// @Colour(IndexedColors.LIGHT_YELLOW)
private String available;
@ExcelIgnore
//("备注")
//@Colour(IndexedColors.LIGHT_YELLOW)
private String remark;
// @ExcelProperty(value = "是否可用", converter = DictConvert.class)
// @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
// private String availableDetail;
@ExcelProperty("备注")
private String remarkDetail;
@ExcelProperty("创建时间")
@ColumnWidth(value = 16)
private LocalDateTime createTimeDetail;
@ExcelProperty("创建者用户名")
private String creatorDetail;
@ExcelProperty("最后更新时间")
@ColumnWidth(value = 16)
private LocalDateTime updateTimeDetail;
@ExcelProperty("最后更新者用户名")
private String updaterDetail;
}

25
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExportReqVO.java

@ -1,5 +1,9 @@
package com.win.module.wms.controller.purchasePlan.vo; package com.win.module.wms.controller.purchasePlan.vo;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -7,6 +11,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 要货计划主 Excel 导出 Request VO,参数和 PurchasePlanMainPageReqVO 是一致的") @Schema(description = "管理后台 - 要货计划主 Excel 导出 Request VO,参数和 PurchasePlanMainPageReqVO 是一致的")
@ -73,4 +78,24 @@ public class PurchasePlanMainExportReqVO {
@Schema(description = "可访问的供应商代码") @Schema(description = "可访问的供应商代码")
private List<String> supplierCodeList; private List<String> supplierCodeList;
@Schema(description = "送达时间")
//@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private String[] deliveryDate;
private LocalDateTime deliveryDateBegin;
private LocalDateTime deliveryDateEnd;
public LocalDateTime getDeliveryDateBegin(){
if(ObjectUtil.isEmpty(deliveryDate) || ObjectUtil.isEmpty(deliveryDate[0])){
return null;
}else {
return LocalDateTimeUtil.parse(this.deliveryDate[0]+" 00:00:00", DatePattern.NORM_DATETIME_FORMATTER);
}
}
public LocalDateTime getDeliveryDateEnd(){
if(ObjectUtil.isEmpty(deliveryDate) || ObjectUtil.isEmpty(deliveryDate[1])){
return null;
}else {
return LocalDateTimeUtil.parse(this.deliveryDate[1] + " 23:59:59", DatePattern.NORM_DATETIME_FORMATTER);
}
}
} }

25
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainImportErrorVO2.java

@ -0,0 +1,25 @@
package com.win.module.wms.controller.purchasePlan.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
* 采购索赔申请子 Excel VO
*
* @author 超级管理员
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class PurchasePlanMainImportErrorVO2 extends PurchasePlanMainImportVO2 {
@ExcelProperty(value = "导入状态", index = 0)
private String importStatus;
@ExcelProperty(value = "导入说明", index = 1)
private String importRemark;
}

19
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainImportVO.java

@ -14,6 +14,7 @@ import lombok.experimental.Accessors;
import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.IndexedColors;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
/** /**
@ -32,6 +33,21 @@ public class PurchasePlanMainImportVO {
@Colour(IndexedColors.LIGHT_YELLOW) @Colour(IndexedColors.LIGHT_YELLOW)
@OnlyOne @OnlyOne
private String supplierCode; private String supplierCode;
//主表数据
@ExcelProperty("采购订单号")
@Colour(IndexedColors.LIGHT_YELLOW)
@OnlyOne
private String purchaseCode;
//主表数据
@ExcelProperty("采购日期")
@Colour(IndexedColors.LIGHT_YELLOW)
@OnlyOne
private LocalDateTime purchaseDate;
//主表数据
@ExcelProperty("送达日期")
@Colour(IndexedColors.LIGHT_YELLOW)
@OnlyOne
private LocalDateTime deliveryDate;
//子表数据 //子表数据
@ExcelProperty("订单号") @ExcelProperty("订单号")
@ -40,7 +56,7 @@ public class PurchasePlanMainImportVO {
@ExcelProperty("订单行") @ExcelProperty("订单行")
@ExcelValid(message = "必填") @ExcelValid(message = "必填")
private BigDecimal poLine; private String poLine;
@ExcelProperty("物料代码") @ExcelProperty("物料代码")
@ExcelValid(message = "必填") @ExcelValid(message = "必填")
@ -54,4 +70,5 @@ public class PurchasePlanMainImportVO {
@DictFormat(DictTypeConstants.UOM) @DictFormat(DictTypeConstants.UOM)
@ExcelValid(message = "必填") @ExcelValid(message = "必填")
private String uom; private String uom;
private Long rownum;
} }

58
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainImportVO2.java

@ -0,0 +1,58 @@
package com.win.module.wms.controller.purchasePlan.vo;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.util.DateUtils;
import com.win.framework.excel.core.annotations.Colour;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.annotations.ExcelValid;
import com.win.framework.excel.core.annotations.OnlyOne;
import com.win.framework.excel.core.convert.DictConvert;
import com.win.module.wms.enums.DictTypeConstants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.poi.ss.usermodel.IndexedColors;
import java.time.LocalDateTime;
/**
* 采购索赔申请子 Excel VO
*
* @author 超级管理员
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
public class PurchasePlanMainImportVO2 {
//主表数据
@ExcelProperty("供应商代码")
@Colour(IndexedColors.LIGHT_YELLOW)
@OnlyOne
private String supplierCode;
//主表数据
@ExcelProperty("采购订单号")
@Colour(IndexedColors.LIGHT_YELLOW)
@OnlyOne
private String purchaseCode;
@ExcelProperty("订单行")
@ExcelValid(message = "必填")
private String poLine;
@ExcelProperty("物料")
@ExcelValid(message = "必填")
private String itemCode;
@ExcelProperty("版本")
private String versionCode;
@ExcelProperty(DateUtils.DATE_FORMAT_10)
@ExcelValid(message = "必填")
private String planQty;
}

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestDetailBaseVO.java

@ -80,4 +80,8 @@ public class RepleinshRequestDetailBaseVO {
@Schema(description = "主表ID") @Schema(description = "主表ID")
private Long masterId; private Long masterId;
@Schema(description = "未执行任务数量")
private BigDecimal unexecutedQty;
} }

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestDetailPageReqVO.java

@ -78,4 +78,8 @@ public class RepleinshRequestDetailPageReqVO extends PageParam {
*/ */
private String status; private String status;
@Schema(description = "未执行任务数量")
private BigDecimal unexecutedQty;
} }

6
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/repleinshRequest/vo/RepleinshRequestDetailRespVO.java

@ -5,6 +5,7 @@ import com.sun.xml.bind.v2.TODO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Schema(description = "管理后台 - 补料申请子 Response VO") @Schema(description = "管理后台 - 补料申请子 Response VO")
@ -127,4 +128,9 @@ public class RepleinshRequestDetailRespVO extends RepleinshRequestDetailBaseVO {
*/ */
private String outInventoryStatuses; private String outInventoryStatuses;
/**
* 未执行任务数量
*/
private BigDecimal unexecutedQty;
} }

194
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/SupplierCycleController.java

@ -0,0 +1,194 @@
package com.win.module.wms.controller.suppliercycle;
import com.win.framework.common.pojo.CommonResult;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.dict.core.util.DictFrameworkUtils;
import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.wms.controller.supplier.vo.SupplierImportErrorVO;
import com.win.module.wms.controller.suppliercycle.vo.*;
import com.win.module.wms.convert.suppliercycle.SupplierCycleConvert;
import com.win.module.wms.dal.dataobject.suppliercycle.SupplierCycleDO;
import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.service.suppliercycle.SupplierCycleService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 要货预测周期")
@RestController
@RequestMapping("/wms/supplier-cycle")
@Validated
public class SupplierCycleController {
@Resource
private SupplierCycleService supplierCycleService;
@PostMapping("/create")
@Operation(summary = "创建要货预测周期")
@PreAuthorize("@ss.hasPermission('wms:supplier-cycle:create')")
public CommonResult<Long> createSupplierCycle(@Valid @RequestBody SupplierCycleCreateReqVO createReqVO) {
return success(supplierCycleService.createSupplierCycle(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新要货预测周期")
@PreAuthorize("@ss.hasPermission('wms:supplier-cycle:update')")
public CommonResult<Boolean> updateSupplierCycle(@Valid @RequestBody SupplierCycleUpdateReqVO updateReqVO) {
int result = supplierCycleService.updateSupplierCycle(updateReqVO);
return success(result > 0);
}
@DeleteMapping("/delete")
@Operation(summary = "删除要货预测周期")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:supplier-cycle:delete')")
public CommonResult<Boolean> deleteSupplierCycle(@RequestParam("id") Long id) {
int result = supplierCycleService.deleteSupplierCycle(id);
return success(result > 0);
}
@GetMapping("/get")
@Operation(summary = "获得要货预测周期")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('wms:supplier-cycle:query')")
public CommonResult<SupplierCycleRespVO> getSupplierCycle(@RequestParam("id") Long id) {
SupplierCycleDO supplierCycle = supplierCycleService.getSupplierCycle(id);
return success(SupplierCycleConvert.INSTANCE.convert(supplierCycle));
}
@GetMapping("/page")
@Operation(summary = "获得要货预测周期分页")
@PreAuthorize("@ss.hasPermission('wms:supplier-cycle:query')")
public CommonResult<PageResult<SupplierCycleRespVO>> getSupplierCyclePage(@Valid SupplierCyclePageReqVO pageVO) {
PageResult<SupplierCycleDO> pageResult = supplierCycleService.getSupplierCyclePage(pageVO);
return success(SupplierCycleConvert.INSTANCE.convertPage(pageResult));
}
@PostMapping("/senior")
@Operation(summary = "高级搜索获得检验任务主分页")
@PreAuthorize("@ss.hasPermission('wms:supplier-cycle:query')")
public CommonResult<PageResult<SupplierCycleRespVO>> getSupplierCycleSenior(@Valid @RequestBody CustomConditions conditions) {
PageResult<SupplierCycleDO> pageResult = supplierCycleService.getSupplierCycleSenior(conditions);
return success(SupplierCycleConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出要货预测周期 Excel")
@PreAuthorize("@ss.hasPermission('wms:supplier-cycle:export')")
@OperateLog(type = EXPORT)
public void exportSupplierCycleExcel(@Valid SupplierCycleExportReqVO exportReqVO, HttpServletResponse response) throws IOException {
List<SupplierCycleDO> list = supplierCycleService.getSupplierCycleList(exportReqVO);
Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] true_false = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE);
mapDropDown.put(1, true_false);
mapDropDown.put(2, true_false);
mapDropDown.put(3, true_false);
mapDropDown.put(4, true_false);
mapDropDown.put(5, true_false);
mapDropDown.put(6, true_false);
mapDropDown.put(7, true_false);
mapDropDown.put(8, true_false);
for(SupplierCycleDO supplierCycleDO:list){
if("1".equals(supplierCycleDO.getMonday())){
supplierCycleDO.setMonday("TRUE");
}else {
supplierCycleDO.setMonday("FALSE");
}
if("1".equals(supplierCycleDO.getTuesday())){
supplierCycleDO.setTuesday("TRUE");
}else {
supplierCycleDO.setTuesday("FALSE");
}
if("1".equals(supplierCycleDO.getWednesday())){
supplierCycleDO.setWednesday("TRUE");
}else {
supplierCycleDO.setWednesday("FALSE");
}
if("1".equals(supplierCycleDO.getThursday())){
supplierCycleDO.setThursday("TRUE");
}else {
supplierCycleDO.setThursday("FALSE");
}
if("1".equals(supplierCycleDO.getFriday())){
supplierCycleDO.setFriday("TRUE");
}else {
supplierCycleDO.setFriday("FALSE");
}
if("1".equals(supplierCycleDO.getSaturday())){
supplierCycleDO.setSaturday("TRUE");
}else {
supplierCycleDO.setSaturday("FALSE");
}
if("1".equals(supplierCycleDO.getSunday())){
supplierCycleDO.setSunday("TRUE");
}else {
supplierCycleDO.setSunday("FALSE");
}
}
// 导出 Excel
List<SupplierCycleExcelVO> datas = SupplierCycleConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "要货预测周期.xls", "数据", SupplierCycleExcelVO.class, datas,mapDropDown);
}
@GetMapping("/get-import-template")
@Operation(summary = "获得导入要货预测周期模板")
public void importTemplate(HttpServletResponse response) throws IOException {
List<SupplierCycleImportExcelVO> list = Arrays.asList();
Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] true_false = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE);
mapDropDown.put(1, true_false);
mapDropDown.put(2, true_false);
mapDropDown.put(3, true_false);
mapDropDown.put(4, true_false);
mapDropDown.put(5, true_false);
mapDropDown.put(6, true_false);
mapDropDown.put(7, true_false);
mapDropDown.put(8, true_false);
// 输出
ExcelUtils.write(response, "要货预测周期导入模板.xls", "要货预测周期列表", SupplierCycleImportExcelVO.class, list,mapDropDown);
}
@PostMapping("/import")
@Operation(summary = "导入要货预测周期基本信息")
@Parameters({
@Parameter(name = "file", description = "Excel 文件", required = true),
@Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"),
@Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true")
})
@PreAuthorize("@ss.hasPermission('wms:supplier-cycle:import')")
public CommonResult<Map<String, Object>> importExcel(HttpServletResponse response,
@RequestParam("file") MultipartFile file,
@RequestParam(value = "mode") Integer mode,
@RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception {
List<SupplierCycleImportExcelVO> list = ExcelUtils.read(file, SupplierCycleImportExcelVO.class);
List<SupplierImportErrorVO> errorList = supplierCycleService.importSupplierCycleList(list, mode, updatePart);
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("errorCount", errorList.size());
if(!errorList.isEmpty()) {
String url = ExcelUtils.writeLocalFile("要货预测周期基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList);
returnMap.put("errorFile", url);
}
return success(returnMap);
}
}

77
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleBaseVO.java

@ -0,0 +1,77 @@
package com.win.module.wms.controller.suppliercycle.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 要货预测周期 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*/
@Data
public class SupplierCycleBaseVO {
@Schema(description = "供应商代码")
private String supplierCode;
@Schema(description = "星期一")
private String monday;
@Schema(description = "星期二")
private String tuesday;
@Schema(description = "星期三")
private String wednesday;
@Schema(description = "星期四")
private String thursday;
@Schema(description = "星期五")
private String friday;
@Schema(description = "星期六")
private String saturday;
@Schema(description = "星期日")
private String sunday;
@Schema(description = "版本号")
private String version;
@Schema(description = "备注", example = "随便")
private String remark;
@Schema(description = "扩展属性")
private String extraProperties;
@Schema(description = "地点ID", example = "6054")
private String siteId;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime beginTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime endTime;
@Schema(description = "是否可用", requiredMode = Schema.RequiredMode.REQUIRED)
private String available;
@Schema(description = "状态", example = "2")
private String status;
@Schema(description = "并发乐观锁")
private String concurrencyStamp;
@Schema(description = "权限所属人员id", example = "21859")
private Long ruleUserId;
@Schema(description = "部门", requiredMode = Schema.RequiredMode.REQUIRED)
private String departmentCode;
}

14
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleCreateReqVO.java

@ -0,0 +1,14 @@
package com.win.module.wms.controller.suppliercycle.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 要货预测周期创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SupplierCycleCreateReqVO extends SupplierCycleBaseVO {
}

62
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleExcelVO.java

@ -0,0 +1,62 @@
package com.win.module.wms.controller.suppliercycle.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.convert.DictConvert;
import com.win.module.wms.enums.DictTypeConstants;
import lombok.Data;
/**
* 要货预测周期 Excel VO
*
* @author 超级管理员
*/
@Data
public class SupplierCycleExcelVO {
@ExcelProperty("供应商代码")
@ColumnWidth(18)
private String supplierCode;
@ExcelProperty(value = "星期一", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String monday;
@ExcelProperty(value = "星期二", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String tuesday;
@ExcelProperty(value = "星期三", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String wednesday;
@ExcelProperty(value = "星期四", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String thursday;
@ExcelProperty(value = "星期五", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String friday;
@ExcelProperty(value = "星期六", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String saturday;
@ExcelProperty(value = "星期日", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String sunday;
@ExcelProperty(value = "是否可用", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String available;
}

79
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleExportReqVO.java

@ -0,0 +1,79 @@
package com.win.module.wms.controller.suppliercycle.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.win.framework.common.pojo.PageParam;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 要货预测周期 Excel 导出 Request VO,参数和 SupplierCyclePageReqVO 是一致的")
@Data
public class SupplierCycleExportReqVO {
@Schema(description = "供应商代码")
private String supplierCode;
@Schema(description = "星期一")
private String monday;
@Schema(description = "星期二")
private String tuesday;
@Schema(description = "星期三")
private String wednesday;
@Schema(description = "星期四")
private String thursday;
@Schema(description = "星期五")
private String friday;
@Schema(description = "星期六")
private String saturday;
@Schema(description = "星期日")
private String sunday;
@Schema(description = "版本号")
private String version;
@Schema(description = "备注", example = "随便")
private String remark;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "扩展属性")
private String extraProperties;
@Schema(description = "地点ID", example = "6054")
private String siteId;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] beginTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] endTime;
@Schema(description = "是否可用")
private String available;
@Schema(description = "状态", example = "2")
private String status;
@Schema(description = "并发乐观锁")
private String concurrencyStamp;
@Schema(description = "权限所属人员id", example = "21859")
private Long ruleUserId;
@Schema(description = "部门")
private String departmentCode;
}

18
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleImportExcelErrorVO.java

@ -0,0 +1,18 @@
package com.win.module.wms.controller.suppliercycle.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SupplierCycleImportExcelErrorVO extends SupplierCycleImportExcelVO{
@ExcelProperty(value = "导入状态", index = 0)
private String importStatus;
@ExcelProperty(value = "导入说明", index = 1)
private String importRemark;
}

65
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleImportExcelVO.java

@ -0,0 +1,65 @@
package com.win.module.wms.controller.suppliercycle.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.annotations.ExcelValid;
import com.win.framework.excel.core.convert.DictConvert;
import com.win.module.wms.enums.DictTypeConstants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
public class SupplierCycleImportExcelVO {
@ExcelProperty("供应商代码")
@ExcelValid(message = "供应商代码必填")
@ColumnWidth(18)
private String supplierCode;
@ExcelProperty(value = "星期一", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String monday;
@ExcelProperty(value = "星期二", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String tuesday;
@ExcelProperty(value = "星期三", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String wednesday;
@ExcelProperty(value = "星期四", converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String thursday;
@ExcelProperty(value = "星期五",converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String friday;
@ExcelProperty(value = "星期六",converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String saturday;
@ExcelProperty(value = "星期日",converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
private String sunday;
@ExcelProperty(value = "是否可用",converter = DictConvert.class)
@DictFormat(DictTypeConstants.TRUE_FALSE)
@ColumnWidth(18)
@ExcelValid(message = "是否可用必填")
private String available;
}

81
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCyclePageReqVO.java

@ -0,0 +1,81 @@
package com.win.module.wms.controller.suppliercycle.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.win.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 要货预测周期分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SupplierCyclePageReqVO extends PageParam {
@Schema(description = "供应商代码")
private String supplierCode;
@Schema(description = "星期一")
private String monday;
@Schema(description = "星期二")
private String tuesday;
@Schema(description = "星期三")
private String wednesday;
@Schema(description = "星期四")
private String thursday;
@Schema(description = "星期五")
private String friday;
@Schema(description = "星期六")
private String saturday;
@Schema(description = "星期日")
private String sunday;
@Schema(description = "版本号")
private String version;
@Schema(description = "备注", example = "随便")
private String remark;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "扩展属性")
private String extraProperties;
@Schema(description = "地点ID", example = "6054")
private String siteId;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] beginTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] endTime;
@Schema(description = "是否可用")
private String available;
@Schema(description = "状态", example = "2")
private String status;
@Schema(description = "并发乐观锁")
private String concurrencyStamp;
@Schema(description = "权限所属人员id", example = "21859")
private Long ruleUserId;
@Schema(description = "部门")
private String departmentCode;
}

19
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleRespVO.java

@ -0,0 +1,19 @@
package com.win.module.wms.controller.suppliercycle.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 要货预测周期 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SupplierCycleRespVO extends SupplierCycleBaseVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3607")
private Long id;
@Schema(description = "创建时间")
private LocalDateTime createTime;
}

18
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/suppliercycle/vo/SupplierCycleUpdateReqVO.java

@ -0,0 +1,18 @@
package com.win.module.wms.controller.suppliercycle.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 要货预测周期更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SupplierCycleUpdateReqVO extends SupplierCycleBaseVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3607")
@NotNull(message = "id不能为空")
private Long id;
}

95
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/SupplierdeliverRequestDetailController.java

@ -8,7 +8,6 @@ import com.win.framework.common.pojo.PageResult;
import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.wms.controller.supplierdeliverRequest.vo.*; import com.win.module.wms.controller.supplierdeliverRequest.vo.*;
import com.win.module.wms.convert.supplierdeliverRequest.SupplierdeliverRequestDetailConvert; import com.win.module.wms.convert.supplierdeliverRequest.SupplierdeliverRequestDetailConvert;
import com.win.module.wms.dal.dataobject.supplierdeliverRequest.SupplierdeliverRequestDetailDO; import com.win.module.wms.dal.dataobject.supplierdeliverRequest.SupplierdeliverRequestDetailDO;
@ -20,6 +19,7 @@ import com.win.module.wms.service.supplierdeliverRequest.SupplierdeliverRequestD
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -81,6 +81,7 @@ public class SupplierdeliverRequestDetailController {
PageResult<SupplierdeliverRequestDetailRespVO> result = SupplierdeliverRequestDetailConvert.INSTANCE.convertPage(pageResult); PageResult<SupplierdeliverRequestDetailRespVO> result = SupplierdeliverRequestDetailConvert.INSTANCE.convertPage(pageResult);
if (pageResult.getList().size() > 0) { if (pageResult.getList().size() > 0) {
Set<Long> masterIdSet = new HashSet<>(); Set<Long> masterIdSet = new HashSet<>();
for (SupplierdeliverRequestDetailDO supplierdeliverRequestDetailDO : pageResult.getList()) { for (SupplierdeliverRequestDetailDO supplierdeliverRequestDetailDO : pageResult.getList()) {
masterIdSet.add(supplierdeliverRequestDetailDO.getMasterId()); masterIdSet.add(supplierdeliverRequestDetailDO.getMasterId());
} }
@ -90,13 +91,15 @@ public class SupplierdeliverRequestDetailController {
vo.setCreator(userApi.getUserNickname(vo.getCreator())); vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater())); vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
SupplierdeliverRequestMainDO supplierdeliverRequestMainDO = mainMap.get(vo.getMasterId()); SupplierdeliverRequestMainDO supplierdeliverRequestMainDO = mainMap.get(vo.getMasterId());
supplierdeliverRequestMainDO.setId(null); if(supplierdeliverRequestMainDO != null){
supplierdeliverRequestMainDO.setCreator(null); supplierdeliverRequestMainDO.setId(null);
supplierdeliverRequestMainDO.setCreateTime(null); supplierdeliverRequestMainDO.setCreator(null);
supplierdeliverRequestMainDO.setUpdateTime(null); supplierdeliverRequestMainDO.setCreateTime(null);
supplierdeliverRequestMainDO.setUpdater(null); supplierdeliverRequestMainDO.setUpdateTime(null);
supplierdeliverRequestMainDO.setRemark(null); supplierdeliverRequestMainDO.setUpdater(null);
BeanUtil.copyProperties(supplierdeliverRequestMainDO, vo, options); supplierdeliverRequestMainDO.setRemark(null);
BeanUtil.copyProperties(supplierdeliverRequestMainDO, vo, options);
}
} }
} }
return success(result); return success(result);
@ -140,18 +143,77 @@ public class SupplierdeliverRequestDetailController {
vo.setCreator(userApi.getUserNickname(vo.getCreator())); vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater())); vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
SupplierdeliverRequestMainDO supplierdeliverRequestMainDO = mainMap.get(vo.getMasterId()); SupplierdeliverRequestMainDO supplierdeliverRequestMainDO = mainMap.get(vo.getMasterId());
supplierdeliverRequestMainDO.setId(null); if(supplierdeliverRequestMainDO != null){
supplierdeliverRequestMainDO.setCreator(null); supplierdeliverRequestMainDO.setId(null);
supplierdeliverRequestMainDO.setCreateTime(null); supplierdeliverRequestMainDO.setCreator(null);
supplierdeliverRequestMainDO.setUpdateTime(null); supplierdeliverRequestMainDO.setCreateTime(null);
supplierdeliverRequestMainDO.setUpdater(null); supplierdeliverRequestMainDO.setUpdateTime(null);
supplierdeliverRequestMainDO.setRemark(null); supplierdeliverRequestMainDO.setUpdater(null);
BeanUtil.copyProperties(supplierdeliverRequestMainDO, vo, options); supplierdeliverRequestMainDO.setRemark(null);
BeanUtil.copyProperties(supplierdeliverRequestMainDO, vo, options);
}
} }
} }
return success(result); return success(result);
} }
@GetMapping("/generateLabelList")
@Operation(summary = "获得供应商发货申请打印标签")
public CommonResult<List<SupplierdeliverRequestDetailRespVO>> generateLabelList(@Valid SupplierdeliverRequestDetailPageReqVO pageVO) {
Long userId = getLoginUserId();
if(!ConstantDataInfo.ADMIN_LIST.contains(userId)){
List<String> supplierCodeList = supplierUserMapper.querySupplierCodeByUserId(userId);
if(supplierCodeList.size() == 0){
supplierCodeList.add("999999");//一个不存在的供应商代码
}
pageVO.setSupplierCodeList(supplierCodeList);
}else {
pageVO.setSupplierCodeList(null);
}
List<SupplierdeliverRequestDetailDO> detailList = supplierdeliverRequestDetailService.generateLabelList(pageVO);
List<SupplierdeliverRequestDetailRespVO> result = SupplierdeliverRequestDetailConvert.INSTANCE.convertList(detailList);
if (detailList.size() > 0) {
Set<Long> masterIdSet = new HashSet<>();
List<String> itemCodeList = new ArrayList<>();
for (SupplierdeliverRequestDetailDO supplierdeliverRequestDetailDO : detailList) {
masterIdSet.add(supplierdeliverRequestDetailDO.getMasterId());
itemCodeList.add(supplierdeliverRequestDetailDO.getItemCode());
}
Map<String,List<SupplierdeliverRequestDetailPackageRespVO>> itemPackageMap = supplierdeliverRequestDetailService.queryItemPackage(itemCodeList);
Map<Long, SupplierdeliverRequestMainDO> mainMap = supplierdeliverRequestMainMapper.queryMainListToMap(masterIdSet);
CopyOptions options = CopyOptions.create().setIgnoreNullValue(true);
for (SupplierdeliverRequestDetailRespVO vo : result) {
vo.setCreator(userApi.getUserNickname(vo.getCreator()));
vo.setUpdater(userApi.getUserNickname(vo.getUpdater()));
SupplierdeliverRequestMainDO supplierdeliverRequestMainDO = mainMap.get(vo.getMasterId());
if(supplierdeliverRequestMainDO != null){
supplierdeliverRequestMainDO.setId(null);
supplierdeliverRequestMainDO.setCreator(null);
supplierdeliverRequestMainDO.setCreateTime(null);
supplierdeliverRequestMainDO.setUpdateTime(null);
supplierdeliverRequestMainDO.setUpdater(null);
supplierdeliverRequestMainDO.setRemark(null);
BeanUtil.copyProperties(supplierdeliverRequestMainDO, vo, options);
}
if(itemPackageMap.containsKey(vo.getItemCode())){
List<SupplierdeliverRequestDetailPackageRespVO> supplierdeliverRequestDetailPackageRespVOS = itemPackageMap.get(vo.getItemCode());
vo.setBoxPackaging(supplierdeliverRequestDetailPackageRespVOS);
}
}
}
return success(result);
}
@GetMapping("/generateLabelParentList")
@Operation(summary = "获得供应商发货申请打印标签")
public CommonResult<List<SupplierdeliverRequestDetailPackageRespVO>> generateLabelParentList(SupplierdeliverRequestDetailPageReqVO pageVO) {
if(StringUtils.isEmpty(pageVO.getItemCode()) || StringUtils.isEmpty(pageVO.getPackUnit())){
return CommonResult.success(new ArrayList<>());
}
List<SupplierdeliverRequestDetailPackageRespVO> itemPackageParentList = supplierdeliverRequestDetailService.queryItemParentPackageList(pageVO.getItemCode(),pageVO.getPackUnit());
return CommonResult.success(itemPackageParentList);
}
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除供应商发货申请子") @Operation(summary = "删除供应商发货申请子")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@ -187,9 +249,8 @@ public class SupplierdeliverRequestDetailController {
// 导出 Excel // 导出 Excel
List<SupplierdeliverRequestDetailExcelVO> datas = SupplierdeliverRequestDetailConvert.INSTANCE.convertList02(list); List<SupplierdeliverRequestDetailExcelVO> datas = SupplierdeliverRequestDetailConvert.INSTANCE.convertList02(list);
for (SupplierdeliverRequestDetailExcelVO vo : datas) { for (SupplierdeliverRequestDetailExcelVO vo : datas) {
AdminUserRespDTO user = userApi.getUser(Long.valueOf(vo.getCreator()));
//后端创建个字段作为前端展示的虚拟字段 //后端创建个字段作为前端展示的虚拟字段
vo.setCreator(user.getNickname()); vo.setCreator(userApi.getUserNickname(vo.getCreator()));
} }
ExcelUtils.write(response, "供应商发货申请子.xls", "数据", SupplierdeliverRequestDetailExcelVO.class, datas); ExcelUtils.write(response, "供应商发货申请子.xls", "数据", SupplierdeliverRequestDetailExcelVO.class, datas);
} }

70
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/SupplierdeliverRequestMainController.java

@ -1,5 +1,6 @@
package com.win.module.wms.controller.supplierdeliverRequest; package com.win.module.wms.controller.supplierdeliverRequest;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@ -13,7 +14,12 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import cn.hutool.core.collection.CollUtil;
import com.win.framework.security.core.util.SecurityFrameworkUtils;
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestMainExcelVO; import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestMainExcelVO;
import com.win.module.wms.dal.dataobject.supplieruser.SupplierUserDO;
import com.win.module.wms.enums.ErrorCodeConstants;
import com.win.module.wms.service.supplieruser.SupplierUserService;
import com.win.module.wms.util.ClassFieldUtil; import com.win.module.wms.util.ClassFieldUtil;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -210,27 +216,65 @@ public class SupplierdeliverRequestMainController {
@Operation(summary = "获得导入供应商发货申请信息模板") @Operation(summary = "获得导入供应商发货申请信息模板")
public void importTemplate(HttpServletResponse response) throws IOException { public void importTemplate(HttpServletResponse response) throws IOException {
// 手动创建导出 demo // 手动创建导出 demo
List<SupplierdeliverRequestMainImportVO> list = new ArrayList<>(); List<SupplierdeliverRequestMainImportVO2> list = new ArrayList<>();
Map<Integer, String[]> mapDropDown = new HashMap<>(); // Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] transferMode = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRANSFER_MODE); //String[] transferMode = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRANSFER_MODE);
mapDropDown.put(10, transferMode); // mapDropDown.put(10, transferMode);
String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM); // String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM);
mapDropDown.put(22, uom); //mapDropDown.put(22, uom);
ExcelUtils.write(response, "供应商发货申请信息导入模板.xlsx", "供应商发货申请信息列表", SupplierdeliverRequestMainImportVO.class, list, mapDropDown); ExcelUtils.write(response, "供应商发货申请信息导入模板.xlsx", "供应商发货申请信息列表", SupplierdeliverRequestMainImportVO2.class, list);
} }
// @PostMapping("/import")
// @Operation(summary = "导入供应商发货申请")
// @Parameters({@Parameter(name = "file", description = "Excel 文件", required = true), @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"),
// @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true")})
// @PreAuthorize("@ss.hasPermission('wms:supplierdeliver-request-main:import')")
// public CommonResult<Map<String, Object>> importExcel(HttpServletResponse response, @RequestParam("file") MultipartFile file, @RequestParam(value = "mode") Integer mode,
// @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception {
// List<SupplierdeliverRequestMainImportVO> list = ExcelUtils.read(file, SupplierdeliverRequestMainImportVO.class);
// ConvertUtil<SupplierdeliverRequestMainCreateReqVO> convertUtil = new ConvertUtil<>(SupplierdeliverRequestMainCreateReqVO.class);
// List<SupplierdeliverRequestMainCreateReqVO> createReqVOList = convertUtil.invoke(list).getDataList();
// List<SupplierdeliverRequestMainImportErrorVO> errorList = supplierdeliverRequestMainService.importSupplierdeliverRequestMainList(createReqVOList, mode, updatePart);
// Map<String, Object> returnMap = new HashMap<>();
// returnMap.put("errorCount", errorList.size());
// if (!errorList.isEmpty()) {
// String url = ExcelUtils.writeLocalFile("供应商发货申请基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList);
// returnMap.put("errorFile", url);
// }
// return success(returnMap);
// }
/**
* 2024-07-02 导入功能版本2
* zhousq 发货申请需要根据要货计划
* 关联 表供应商物料表供应商要货计划表
* 导入逻辑 1数据为主从表
* 主单据 校验供应商代码+要货计划单号 是否存在且状态未已接收
* 发货申请的物料必须是要货计划中的或者可为超发的物料否则不能导入
* 模版中不存在的数据 如果新增为必填字段需要根据关联或者给出缺省值
* */
@Resource
private SupplierUserService supplierUserService;
@PostMapping("/import") @PostMapping("/import")
@Operation(summary = "导入供应商发货申请") @Operation(summary = "导入供应商发货申请")
@Parameters({@Parameter(name = "file", description = "Excel 文件", required = true), @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), @Parameters({@Parameter(name = "file", description = "Excel 文件", required = true), @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"),
@Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true")}) @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true")})
@PreAuthorize("@ss.hasPermission('wms:supplierdeliver-request-main:import')") @PreAuthorize("@ss.hasPermission('wms:supplierdeliver-request-main:import')")
public CommonResult<Map<String, Object>> importExcel(HttpServletResponse response, @RequestParam("file") MultipartFile file, @RequestParam(value = "mode") Integer mode, public CommonResult<Map<String, Object>> importExcel(HttpServletResponse response, @RequestParam("file") MultipartFile file, @RequestParam(value = "mode") Integer mode,
@RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception { @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception {
List<SupplierdeliverRequestMainImportVO> list = ExcelUtils.read(file, SupplierdeliverRequestMainImportVO.class); /***/
Map<String, Object> returnMap = new HashMap<>();
SupplierUserDO supplierUser = supplierUserService.getSupplierUser(getLoginUserId());
if(null==supplierUser){
throw exception(ErrorCodeConstants.SUPPLIER_USER_NOT_EXISTS);
}
List<SupplierdeliverRequestMainImportVO2> list = ExcelUtils.read(file, SupplierdeliverRequestMainImportVO2.class);
list.forEach(item->{
item.setSupplierCode(supplierUser.getSupplierCode());
});
ConvertUtil<SupplierdeliverRequestMainCreateReqVO> convertUtil = new ConvertUtil<>(SupplierdeliverRequestMainCreateReqVO.class); ConvertUtil<SupplierdeliverRequestMainCreateReqVO> convertUtil = new ConvertUtil<>(SupplierdeliverRequestMainCreateReqVO.class);
List<SupplierdeliverRequestMainCreateReqVO> createReqVOList = convertUtil.invoke(list).getDataList(); List<SupplierdeliverRequestMainCreateReqVO> createReqVOList = convertUtil.invoke(list).getDataList();
List<SupplierdeliverRequestMainImportErrorVO> errorList = supplierdeliverRequestMainService.importSupplierdeliverRequestMainList(createReqVOList, mode, updatePart); List<SupplierdeliverRequestMainImportErrorVO> errorList = supplierdeliverRequestMainService.importSupplierdeliverRequestMainList(createReqVOList, mode, updatePart);
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("errorCount", errorList.size()); returnMap.put("errorCount", errorList.size());
if (!errorList.isEmpty()) { if (!errorList.isEmpty()) {
String url = ExcelUtils.writeLocalFile("供应商发货申请基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList); String url = ExcelUtils.writeLocalFile("供应商发货申请基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList);
@ -238,7 +282,6 @@ public class SupplierdeliverRequestMainController {
} }
return success(returnMap); return success(returnMap);
} }
@PostMapping("/close") @PostMapping("/close")
@Operation(summary = "关闭供应商发货申请主") @Operation(summary = "关闭供应商发货申请主")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@ -299,8 +342,7 @@ public class SupplierdeliverRequestMainController {
log.info("请求参数:{}", supplierdeliverRequestMainLabelCreateReqVO); log.info("请求参数:{}", supplierdeliverRequestMainLabelCreateReqVO);
List<SupplierdeliverRequestDetailCreateReqVO> list = supplierdeliverRequestMainLabelCreateReqVO.getSubList(); List<SupplierdeliverRequestDetailCreateReqVO> list = supplierdeliverRequestMainLabelCreateReqVO.getSubList();
SupplierdeliverRequestDetailCreateReqVO supplierdeliverRequestDetailCreateReqVO = list.get(0); SupplierdeliverRequestDetailCreateReqVO supplierdeliverRequestDetailCreateReqVO = list.get(0);
List<SupplierdeliverRequestDetailDO> supplierdeliverRequestDetailDOList = SupplierdeliverRequestDetailConvert.INSTANCE.convertDO(list); supplierdeliverRequestMainService.genLabel(supplierdeliverRequestDetailCreateReqVO.getMasterId(), list);
supplierdeliverRequestMainService.genLabel(supplierdeliverRequestDetailCreateReqVO.getMasterId(), supplierdeliverRequestDetailDOList);
return success(true); return success(true);
} }

10
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestDetailCreateReqVO.java

@ -3,10 +3,20 @@ package com.win.module.wms.controller.supplierdeliverRequest.vo;
import lombok.*; import lombok.*;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
@Schema(description = "管理后台 - 供应商发货申请子创建 Request VO") @Schema(description = "管理后台 - 供应商发货申请子创建 Request VO")
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true) @ToString(callSuper = true)
public class SupplierdeliverRequestDetailCreateReqVO extends SupplierdeliverRequestDetailBaseVO { public class SupplierdeliverRequestDetailCreateReqVO extends SupplierdeliverRequestDetailBaseVO {
@Schema(description = "是否允许超物料")
private String allowOverShipment;
/**
* 包装列表
*/
private List<SupplierdeliverRequestPackageTReqVO> packageList;
} }

24
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestDetailPackageRespVO.java

@ -0,0 +1,24 @@
package com.win.module.wms.controller.supplierdeliverRequest.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class SupplierdeliverRequestDetailPackageRespVO {
/**
* 包装规格
*/
private String packUnit;
/**
* 包装数量
*/
private BigDecimal packQty;
/**
* 包装名称
*/
private String packName;
}

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestDetailPageReqVO.java

@ -50,6 +50,12 @@ public class SupplierdeliverRequestDetailPageReqVO extends PageParam {
@Schema(description = "包装规格") @Schema(description = "包装规格")
private String packUnit; private String packUnit;
@Schema(description = "包装内物品的数量2", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal secondPackQty;
@Schema(description = "包装规格2", requiredMode = Schema.RequiredMode.REQUIRED)
private String secondPackUnit;
@Schema(description = "供应商计量数量") @Schema(description = "供应商计量数量")
private BigDecimal supplierPackQty; private BigDecimal supplierPackQty;
@ -123,4 +129,5 @@ public class SupplierdeliverRequestDetailPageReqVO extends PageParam {
@Schema(description = "可访问的供应商代码") @Schema(description = "可访问的供应商代码")
private List<String> supplierCodeList; private List<String> supplierCodeList;
} }

12
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestDetailRespVO.java

@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 供应商发货申请子 Response VO") @Schema(description = "管理后台 - 供应商发货申请子 Response VO")
@Data @Data
@ -154,4 +155,15 @@ public class SupplierdeliverRequestDetailRespVO extends SupplierdeliverRequestDe
* 标签状态(1:打印,2:已经打印,3:无需打印) * 标签状态(1:打印,2:已经打印,3:无需打印)
*/ */
private String labelStatus; private String labelStatus;
/**
* 箱包装
*/
private List<SupplierdeliverRequestDetailPackageRespVO> boxPackaging;
/**
* 托包装
*/
private List<SupplierdeliverRequestDetailPackageRespVO> palletPackaging;
} }

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestMainBaseVO.java

@ -128,4 +128,8 @@ public class SupplierdeliverRequestMainBaseVO {
@Schema(description = "标签状态(1:打印,2:已经打印,3:无需打印)") @Schema(description = "标签状态(1:打印,2:已经打印,3:无需打印)")
private String labelStatus; private String labelStatus;
@Schema(description = "到货时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime arriveTime;
} }

1
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestMainCreateReqVO.java

@ -23,4 +23,5 @@ public class SupplierdeliverRequestMainCreateReqVO extends SupplierdeliverReques
*/ */
private String onTheWayLocationCode; private String onTheWayLocationCode;
} }

112
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestMainImportVO2.java

@ -0,0 +1,112 @@
package com.win.module.wms.controller.supplierdeliverRequest.vo;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.win.framework.excel.core.annotations.Colour;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.annotations.ExcelValid;
import com.win.framework.excel.core.annotations.OnlyOne;
import com.win.framework.excel.core.convert.DictConvert;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.poi.ss.usermodel.IndexedColors;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Optional;
/**
* 采购索赔申请子 Excel VO
*
* @author 超级管理员
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
public class SupplierdeliverRequestMainImportVO2 {
@OnlyOne
@ExcelProperty(value = "要货计划单号")
@Colour(IndexedColors.LIGHT_YELLOW)
@ExcelValid(message = "要货计划单号必填")
private String ppNumber;
@ExcelProperty("物料代码")
@ExcelValid(message = "必填")
private String itemCode;
@ExcelProperty("申请发货数量")
@ExcelValid(message = "必填")
private BigDecimal qty;
@ExcelProperty("生产日期")
@ColumnWidth(value = 16)
@ExcelValid(message = "必填")
private LocalDateTime produceDate;
@ExcelProperty("供应商批次")
@ExcelValid(message = "必填")
private String supplierBatch;
@OnlyOne
@ExcelProperty("计划到货日期")
@Colour(IndexedColors.LIGHT_YELLOW)
@ExcelValid(message = "计划到货日期必填")
@ColumnWidth(value = 16)
private String planArriveDate;
@OnlyOne
@ExcelProperty("计划到货时间")
@Colour(IndexedColors.LIGHT_YELLOW)
@ColumnWidth(value = 16)
private String planArriveTimeUnit;
@OnlyOne
@ExcelProperty("计划到货时间")
@Colour(IndexedColors.LIGHT_YELLOW)
@ColumnWidth(value = 16)
private LocalDateTime planArriveTime;
@OnlyOne
@ExcelProperty("联系人姓名")
@Colour(IndexedColors.LIGHT_YELLOW)
private String contactName;
@OnlyOne
@ExcelProperty("联系人电话")
@Colour(IndexedColors.LIGHT_YELLOW)
private String contactPhone;
@OnlyOne
@ExcelProperty("承运商")
@Colour(IndexedColors.LIGHT_YELLOW)
private String carrierCode;
@OnlyOne
@ExcelProperty(value = "运输方式", converter = DictConvert.class)
@DictFormat("transfer_mode")
@Colour(IndexedColors.LIGHT_YELLOW)
private String transferMode;
@OnlyOne
@ExcelProperty("车牌号")
@Colour(IndexedColors.LIGHT_YELLOW)
private String vehiclePlateNumber;
@OnlyOne
@ExcelProperty("备注")
@Colour(IndexedColors.LIGHT_YELLOW)
private String remark;
@ExcelIgnore
//供应商代码
private String supplierCode;
public void setPlanArriveTime(){
String time = Optional.ofNullable(this.getPlanArriveTimeUnit()).orElse("08:00:00");
if( StrUtil.isEmptyIfStr(time)){time="08:00:00";}
this.planArriveTime= LocalDateTimeUtil.parse(this.getPlanArriveDate()+" "+time, DatePattern.NORM_DATETIME_PATTERN);
}
}

36
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestPackageTReqVO.java

@ -0,0 +1,36 @@
package com.win.module.wms.controller.supplierdeliverRequest.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class SupplierdeliverRequestPackageTReqVO {
/**
* 托行号
*/
private Integer tPoNumber;
/**
* 箱个数
*/
private Integer xNumber;
/**
* 数量
*/
private BigDecimal qtyOne;
/**
* 是否有托
*/
private String isTuo;
/**
* 箱数量
*/
private List<SupplierdeliverRequestPackageXReqVO> children;
}

20
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplierdeliverRequest/vo/SupplierdeliverRequestPackageXReqVO.java

@ -0,0 +1,20 @@
package com.win.module.wms.controller.supplierdeliverRequest.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class SupplierdeliverRequestPackageXReqVO {
/**
* 箱行号
*/
private String xPoNumber;
/**
* 箱数量
*/
private BigDecimal qtyTwo;
}

21
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/SupplieritemController.java

@ -59,10 +59,18 @@ public class SupplieritemController {
return success(supplieritemService.createSupplieritem(createReqVO)); return success(supplieritemService.createSupplieritem(createReqVO));
} }
@PutMapping("/update") @PostMapping("/createSCP")
@Operation(summary = "创建供应商物料")
@PreAuthorize("@ss.hasPermission('wms:supplieritem:create')")
public CommonResult<Long> createSCP(@Valid @RequestBody SupplieritemCreateReqVO createReqVO) {
return success(supplieritemService.createSupplieritem(createReqVO));
}
@PutMapping("/updateSCP")
@Operation(summary = "更新供应商物料") @Operation(summary = "更新供应商物料")
@PreAuthorize("@ss.hasPermission('wms:supplieritem:update')") @PreAuthorize("@ss.hasPermission('wms:supplieritem:update')")
public CommonResult<Boolean> updateSupplieritem(@Valid @RequestBody SupplieritemUpdateReqVO updateReqVO) { public CommonResult<Boolean> updateSCP(@Valid @RequestBody SupplieritemUpdateReqVO updateReqVO) {
supplieritemService.updateSupplieritem(updateReqVO); supplieritemService.updateSupplieritem(updateReqVO);
return success(true); return success(true);
} }
@ -76,6 +84,15 @@ public class SupplieritemController {
return success(true); return success(true);
} }
@DeleteMapping("/deleteSCP")
@Operation(summary = "删除供应商物料")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:supplieritem:delete')")
public CommonResult<Boolean> deleteSCP(@RequestParam("id") Long id) {
supplieritemService.deleteSupplieritem(id);
return success(true);
}
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得供应商物料") @Operation(summary = "获得供应商物料")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")

3
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/vo/SupplieritemBaseVO.java

@ -70,4 +70,7 @@ public class SupplieritemBaseVO {
@Schema(description = "乐观锁") @Schema(description = "乐观锁")
private Integer concurrencyStamp; private Integer concurrencyStamp;
@Schema(description = "是否允许超发")
private String allowOverShipment;
} }

1
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/vo/SupplieritemCreateReqVO.java

@ -11,4 +11,5 @@ import lombok.ToString;
@ToString(callSuper = true) @ToString(callSuper = true)
public class SupplieritemCreateReqVO extends SupplieritemBaseVO { public class SupplieritemCreateReqVO extends SupplieritemBaseVO {
} }

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/supplieritem/vo/SupplieritemPageReqVO.java

@ -72,5 +72,12 @@ public class SupplieritemPageReqVO extends PageParam {
@Schema(description = "可访问的供应商代码") @Schema(description = "可访问的供应商代码")
private List<String> supplierCodeList; private List<String> supplierCodeList;
@Schema(description = "是否允许超发")
private String allowOverShipment;
/**
* 供应商物料
*/
private String supplierCodes;
} }

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/itemarea/ItemareaConvert.java

@ -41,9 +41,6 @@ public interface ItemareaConvert {
@Mapping(source = "mainDO.itemCode", target = "itemCode"), @Mapping(source = "mainDO.itemCode", target = "itemCode"),
}) })
ItemareaExcelVO convert(ItemareaDO mainDO, ItemareaDetailDO detailDO); ItemareaExcelVO convert(ItemareaDO mainDO, ItemareaDetailDO detailDO);
@Mappings({
@Mapping(source = "mainVo.areaCode", target = "areaCode"), ItemareaImportErrorVO convert03(ItemareaCreateReqVO bean);
@Mapping(source = "mainVo.itemCode", target = "itemCode"),
})
ItemareaImportErrorVO convert(ItemareaCreateReqVO mainVo, ItemareaDetailDO detailDO);
} }

3
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchasePlan/PurchasePlanDetailConvert.java

@ -2,6 +2,7 @@ package com.win.module.wms.convert.purchasePlan;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.purchasePlan.vo.*; import com.win.module.wms.controller.purchasePlan.vo.*;
import com.win.module.wms.dal.dataobject.purchase.PurchaseDetailDO;
import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanDetailDO; import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanDetailDO;
import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanMainDO; import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanMainDO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@ -39,6 +40,8 @@ public interface PurchasePlanDetailConvert {
PurchasePlanDetailCreateReqVO convert1(PurchasePlanDetailDO bean); PurchasePlanDetailCreateReqVO convert1(PurchasePlanDetailDO bean);
List<PurchasePlanDetailRespVO> convertList06(List<PurchaseDetailDO> list);
@Mappings({ @Mappings({
@Mapping(source = "mainDO.number", target = "number"), @Mapping(source = "mainDO.number", target = "number"),
@Mapping(source = "mainDO.remark", target = "remark"), @Mapping(source = "mainDO.remark", target = "remark"),

3
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/supplier/SupplierConvert.java

@ -6,6 +6,7 @@ import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.supplier.vo.*; import com.win.module.wms.controller.supplier.vo.*;
import com.win.module.wms.controller.supplieritem.vo.SupplieriteamImportErrorVO; import com.win.module.wms.controller.supplieritem.vo.SupplieriteamImportErrorVO;
import com.win.module.wms.dal.dataobject.suppliercycle.SupplierCycleDO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import com.win.module.wms.dal.dataobject.supplier.SupplierDO; import com.win.module.wms.dal.dataobject.supplier.SupplierDO;
@ -35,4 +36,6 @@ public interface SupplierConvert {
SupplierDO convert(SupplierImportExcelVo bean); SupplierDO convert(SupplierImportExcelVo bean);
SupplierImportErrorVO convert2(SupplierDO supplierDO); SupplierImportErrorVO convert2(SupplierDO supplierDO);
SupplierImportErrorVO convertImportError(SupplierCycleDO supplierCycleDO);
} }

34
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/suppliercycle/SupplierCycleConvert.java

@ -0,0 +1,34 @@
package com.win.module.wms.convert.suppliercycle;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.suppliercycle.vo.*;
import com.win.module.wms.dal.dataobject.suppliercycle.SupplierCycleDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
* 要货预测周期 Convert
*
* @author 超级管理员
*/
@Mapper
public interface SupplierCycleConvert {
SupplierCycleConvert INSTANCE = Mappers.getMapper(SupplierCycleConvert.class);
SupplierCycleDO convert(SupplierCycleCreateReqVO bean);
SupplierCycleDO convert(SupplierCycleUpdateReqVO bean);
SupplierCycleRespVO convert(SupplierCycleDO bean);
List<SupplierCycleRespVO> convertList(List<SupplierCycleDO> list);
PageResult<SupplierCycleRespVO> convertPage(PageResult<SupplierCycleDO> page);
List<SupplierCycleExcelVO> convertList02(List<SupplierCycleDO> list);
SupplierCycleDO convertImport(SupplierCycleImportExcelVO item);
}

41
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/demandforecasting/DemandforecastingDetailDO.java

@ -1,14 +1,14 @@
package com.win.module.wms.dal.dataobject.demandforecasting; package com.win.module.wms.dal.dataobject.demandforecasting;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.sun.xml.bind.v2.TODO; import com.sun.xml.bind.v2.TODO;
import com.win.framework.mybatis.core.dataobject.BaseDO;
import lombok.*; import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.win.framework.mybatis.core.dataobject.BaseDO;
/** /**
* 要货预测子 DO * 要货预测子 DO
@ -92,4 +92,35 @@ public class DemandforecastingDetailDO extends BaseDO {
* 租户ID * 租户ID
*/ */
private String tenantId; private String tenantId;
/**
* 子表供应商代码
*/
private String detailSupplierCode;
/**
* 子表版本
*/
private String detailVersion;
/**
* 到货日期
*/
private LocalDate dueDate;
/**
* 释放时间
*/
private LocalDateTime releaseTime;
/**
* 预测类型(F/P)
*/
private String planType;
/**
* 在途数量(已发货未收货)
*/
private BigDecimal onTheWayQty;
} }

67
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/demandforecasting/DemandforecastingMainDO.java

@ -1,14 +1,12 @@
package com.win.module.wms.dal.dataobject.demandforecasting; package com.win.module.wms.dal.dataobject.demandforecasting;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.win.framework.mybatis.core.dataobject.BaseDO;
import lombok.*; import lombok.*;
import java.util.*;
import java.time.LocalDateTime; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.win.framework.mybatis.core.dataobject.BaseDO;
/** /**
* 要货预测主 DO * 要货预测主 DO
@ -101,4 +99,59 @@ public class DemandforecastingMainDO extends BaseDO {
*/ */
private String tenantId; private String tenantId;
/**
* 主表-订单号
*/
private String mainPoNumber;
/**
* 订单行
*/
private String mainPoLine;
/**
* 生效版本号
*/
private String activeVersion;
/**
* 是否已读(0:未读,1:已读,2:其他版本不显示)
*/
private String isRead;
/**
* 已读时间
*/
private LocalDateTime lastReadTime;
/**
* 采购订单累计计划数量
*/
private BigDecimal totalPlanQty;
/**
* 采购订单累计发货数量
*/
private BigDecimal totalDeliverQty;
/**
* 采购订单累计收货数量
*/
private BigDecimal totalReceiptQty;
/**
* 最后释放时间
*/
private LocalDateTime lastReleaseTime;
/**
* 计划员(多条用逗号分隔)
*/
private String planerId;
/**
* 计划员登录账户(多条用逗号分隔)
*/
private String planerUserName;
} }

10
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasePlan/PurchasePlanDetailDO.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version; import com.baomidou.mybatisplus.annotation.Version;
import com.sun.xml.bind.v2.TODO; import com.sun.xml.bind.v2.TODO;
import com.win.framework.mybatis.core.dataobject.BaseDO; import com.win.framework.mybatis.core.dataobject.BaseDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -92,4 +93,13 @@ public class PurchasePlanDetailDO extends BaseDO {
*/ */
private BigDecimal orderQty; private BigDecimal orderQty;
/**
* 在途数量发货-收货
*/
private BigDecimal notReceiveQty;
/**
* 已收货数量
*/
private BigDecimal receivedQty;
} }

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/repleinshRequest/RepleinshRequestDetailDO.java

@ -93,5 +93,9 @@ public class RepleinshRequestDetailDO extends BaseDO {
* 到货主代码 * 到货主代码
*/ */
private String toOwnerCode; private String toOwnerCode;
/**
* 未执行任务数量
*/
private BigDecimal unexecutedQty;
} }

108
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/suppliercycle/SupplierCycleDO.java

@ -0,0 +1,108 @@
package com.win.module.wms.dal.dataobject.suppliercycle;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.win.framework.mybatis.core.dataobject.BaseDO;
/**
* 要货预测周期 DO
*
* @author 超级管理员
*/
@TableName("basic_supplier_cycle")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SupplierCycleDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* 供应商代码
*/
private String supplierCode;
/**
* 星期一
*/
private String monday;
/**
* 星期二
*/
private String tuesday;
/**
* 星期三
*/
private String wednesday;
/**
* 星期四
*/
private String thursday;
/**
* 星期五
*/
private String friday;
/**
* 星期六
*/
private String saturday;
/**
* 星期日
*/
private String sunday;
/**
* 版本号
*/
private String version;
/**
* 备注
*/
private String remark;
/**
* 扩展属性
*/
private String extraProperties;
/**
* 地点ID
*/
private String siteId;
/**
* 开始时间
*/
private LocalDateTime beginTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 是否可用
*/
private String available;
/**
* 状态
*/
private String status;
/**
* 并发乐观锁
*/
private String concurrencyStamp;
/**
* 权限所属人员id
*/
private Long ruleUserId;
/**
* 部门
*/
private String departmentCode;
}

5
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/supplierdeliverRequest/SupplierdeliverRequestMainDO.java

@ -171,4 +171,9 @@ public class SupplierdeliverRequestMainDO extends BaseDO {
* 租户ID * 租户ID
*/ */
private String tenantId; private String tenantId;
/**
* 到货时间
*/
private LocalDateTime arriveTime;
} }

10
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/supplieritem/SupplieritemDO.java

@ -120,4 +120,14 @@ public class SupplieritemDO extends BaseDO {
*/ */
private String siteId; private String siteId;
/**
* 是否允许超发默认FALSE
*/
private String allowOverShipment;
/**
* 租户编号
*/
private Long tenantId;
} }

12
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java

@ -598,6 +598,18 @@ public interface BalanceMapper extends BaseMapperX<BalanceDO> {
return this.selectList(queryWrapper); return this.selectList(queryWrapper);
} }
default List<BalanceDO> queryGroupByLocationCode(List<String> locationCodeList) {
QueryWrapper<BalanceDO> queryWrapper = new QueryWrapper<>();
queryWrapper.select("item_code", "location_code", "batch", "sum(qty) as qty");
queryWrapper.in("location_code", locationCodeList);
queryWrapper.eq("frozen", "FALSE");
queryWrapper.gt("expire_date", LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.NORM_DATETIME_FORMATTER));
queryWrapper.groupBy("item_code", "location_code", "batch");
queryWrapper.orderByDesc("qty");
return this.selectList(queryWrapper);
}
default BalanceDO selectOneByWrapper(QueryWrapper<BalanceDO> queryWrapper) { default BalanceDO selectOneByWrapper(QueryWrapper<BalanceDO> queryWrapper) {
queryWrapper.eq("frozen", "FALSE"); queryWrapper.eq("frozen", "FALSE");
queryWrapper.gt("expire_date", LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.NORM_DATETIME_FORMATTER)); queryWrapper.gt("expire_date", LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.NORM_DATETIME_FORMATTER));

9
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/demandforecasting/DemandforecastingMainMapper.java

@ -6,16 +6,15 @@ import com.win.framework.datapermission.annotation.DataScope;
import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.framework.mybatis.core.mapper.BaseMapperX;
import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.demandforecasting.vo.DemandforecastingDetailPageReqVO;
import com.win.module.wms.controller.demandforecasting.vo.DemandforecastingExportVo2;
import com.win.module.wms.controller.demandforecasting.vo.DemandforecastingMainExportReqVO; import com.win.module.wms.controller.demandforecasting.vo.DemandforecastingMainExportReqVO;
import com.win.module.wms.controller.demandforecasting.vo.DemandforecastingMainPageReqVO; import com.win.module.wms.controller.demandforecasting.vo.DemandforecastingMainPageReqVO;
import com.win.module.wms.dal.dataobject.demandforecasting.DemandforecastingMainDO; import com.win.module.wms.dal.dataobject.demandforecasting.DemandforecastingMainDO;
import com.win.module.wms.dal.dataobject.purchase.PurchaseMainDO; import com.win.module.wms.dal.dataobject.purchase.PurchaseMainDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -80,6 +79,7 @@ public interface DemandforecastingMainMapper extends BaseMapperX<Demandforecasti
} }
@DataScope(deptAlias = "plan_demandforecasting_main") @DataScope(deptAlias = "plan_demandforecasting_main")
default List<DemandforecastingMainDO> selectSeniorList(CustomConditions conditions){ default List<DemandforecastingMainDO> selectSeniorList(CustomConditions conditions){
return selectList(QueryWrapperUtils.structure(conditions)); return selectList(QueryWrapperUtils.structure(conditions));
} }
@ -91,4 +91,5 @@ public interface DemandforecastingMainMapper extends BaseMapperX<Demandforecasti
Map<Long,DemandforecastingMainDO> map = list.stream().collect(Collectors.toMap(DemandforecastingMainDO::getId, temp->temp)); Map<Long,DemandforecastingMainDO> map = list.stream().collect(Collectors.toMap(DemandforecastingMainDO::getId, temp->temp));
return map; return map;
} }
LinkedList<DemandforecastingExportVo2> queryDemandforecastingExport(DemandforecastingDetailPageReqVO reqVO);
} }

10
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/itempackage/ItempackageMapper.java

@ -24,7 +24,7 @@ import java.util.List;
public interface ItempackageMapper extends BaseMapperX<ItempackageDO> { public interface ItempackageMapper extends BaseMapperX<ItempackageDO> {
default PageResult<ItempackageDO> selectPage(ItempackagePageReqVO reqVO) { default PageResult<ItempackageDO> selectPage(ItempackagePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ItempackageDO>() LambdaQueryWrapperX<ItempackageDO> lambdaQueryWrapperX = new LambdaQueryWrapperX<ItempackageDO>()
.likeIfPresent(ItempackageDO::getItemCode, reqVO.getItemCode()) .likeIfPresent(ItempackageDO::getItemCode, reqVO.getItemCode())
.eqIfPresent(ItempackageDO::getUom, reqVO.getUom()) .eqIfPresent(ItempackageDO::getUom, reqVO.getUom())
.likeIfPresent(ItempackageDO::getPackUnit, reqVO.getPackUnit()) .likeIfPresent(ItempackageDO::getPackUnit, reqVO.getPackUnit())
@ -34,8 +34,12 @@ public interface ItempackageMapper extends BaseMapperX<ItempackageDO> {
.betweenIfPresent(ItempackageDO::getExpireTime, reqVO.getExpireTime()) .betweenIfPresent(ItempackageDO::getExpireTime, reqVO.getExpireTime())
.likeIfPresent(ItempackageDO::getRemark, reqVO.getRemark()) .likeIfPresent(ItempackageDO::getRemark, reqVO.getRemark())
.betweenIfPresent(ItempackageDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(ItempackageDO::getCreateTime, reqVO.getCreateTime())
.likeIfPresent(ItempackageDO::getCreator, reqVO.getCreator()) .likeIfPresent(ItempackageDO::getCreator, reqVO.getCreator());
.orderByDesc(ItempackageDO::getId)); if(reqVO.getItemCodeList() != null){
lambdaQueryWrapperX.in(ItempackageDO::getItemCode,reqVO.getItemCodeList());
}
lambdaQueryWrapperX.orderByDesc(ItempackageDO::getItemCode,ItempackageDO::getPackUnit);
return selectPage(reqVO, lambdaQueryWrapperX);
} }
default PageResult<ItempackageDO> selectSenior(CustomConditions conditions) { default PageResult<ItempackageDO> selectSenior(CustomConditions conditions) {

17
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/packageunit/PackageunitMapper.java

@ -1,5 +1,6 @@
package com.win.module.wms.dal.mysql.packageunit; package com.win.module.wms.dal.mysql.packageunit;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.framework.mybatis.core.mapper.BaseMapperX;
@ -8,6 +9,7 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.packageunit.vo.PackageunitExportReqVO; import com.win.module.wms.controller.packageunit.vo.PackageunitExportReqVO;
import com.win.module.wms.controller.packageunit.vo.PackageunitPageReqVO; import com.win.module.wms.controller.packageunit.vo.PackageunitPageReqVO;
import com.win.module.wms.dal.dataobject.packageunit.PackageunitDO; import com.win.module.wms.dal.dataobject.packageunit.PackageunitDO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -23,7 +25,7 @@ import java.util.List;
public interface PackageunitMapper extends BaseMapperX<PackageunitDO> { public interface PackageunitMapper extends BaseMapperX<PackageunitDO> {
default PageResult<PackageunitDO> selectPage(PackageunitPageReqVO reqVO) { default PageResult<PackageunitDO> selectPage(PackageunitPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<PackageunitDO>() LambdaQueryWrapperX<PackageunitDO> lambdaQueryWrapperX = new LambdaQueryWrapperX<PackageunitDO>()
.likeIfPresent(PackageunitDO::getCode, reqVO.getCode()) .likeIfPresent(PackageunitDO::getCode, reqVO.getCode())
.likeIfPresent(PackageunitDO::getParentCode, reqVO.getParentCode()) .likeIfPresent(PackageunitDO::getParentCode, reqVO.getParentCode())
.likeIfPresent(PackageunitDO::getName, reqVO.getName()) .likeIfPresent(PackageunitDO::getName, reqVO.getName())
@ -31,7 +33,14 @@ public interface PackageunitMapper extends BaseMapperX<PackageunitDO> {
.likeIfPresent(PackageunitDO::getDesc, reqVO.getDesc()) .likeIfPresent(PackageunitDO::getDesc, reqVO.getDesc())
.likeIfPresent(PackageunitDO::getReuse, reqVO.getReuse()) .likeIfPresent(PackageunitDO::getReuse, reqVO.getReuse())
.likeIfPresent(PackageunitDO::getManageBalance, reqVO.getManageBalance()) .likeIfPresent(PackageunitDO::getManageBalance, reqVO.getManageBalance())
.orderByDesc(PackageunitDO::getId)); .orderByDesc(PackageunitDO::getId);
if("show".equals(reqVO.getIsShowTree())){
lambdaQueryWrapperX.isNull(PackageunitDO::getParentCode);//展示所有父包装
}
if(StringUtils.isNotEmpty(reqVO.getOnlyShowParent())){
lambdaQueryWrapperX.isNull(PackageunitDO::getParentCode);//只展父包装数据
}
return selectPage(reqVO, lambdaQueryWrapperX);
} }
default List<PackageunitDO> selectList(PackageunitExportReqVO reqVO) { default List<PackageunitDO> selectList(PackageunitExportReqVO reqVO) {
@ -57,4 +66,8 @@ public interface PackageunitMapper extends BaseMapperX<PackageunitDO> {
default PackageunitDO selectByCode(String code){ default PackageunitDO selectByCode(String code){
return selectOne(PackageunitDO::getCode,code,PackageunitDO::getAvailable ,"TRUE"); return selectOne(PackageunitDO::getCode,code,PackageunitDO::getAvailable ,"TRUE");
} }
default PageResult<PackageunitDO> getPackageunitSeniorTree(CustomConditions conditions, QueryWrapper<PackageunitDO> queryWrapper){
return selectPage(conditions, queryWrapper);
}
} }

13
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchasePlan/PurchasePlanDetailMapper.java

@ -80,6 +80,19 @@ public interface PurchasePlanDetailMapper extends BaseMapperX<PurchasePlanDetail
queryMainFlag = true; queryMainFlag = true;
mainSbf.append("and `status`='"+reqVO.getStatus()+"'"); mainSbf.append("and `status`='"+reqVO.getStatus()+"'");
} }
if(StringUtils.isNotEmpty(reqVO.getStatuss())){
String[] statusArrays = reqVO.getStatuss().split(",");
StringBuffer sbf = new StringBuffer();
for (int i = 0; i < statusArrays.length; i++) {
String str = statusArrays[i];
sbf.append("'");
sbf.append(statusArrays[i]);
sbf.append("',");
}
String inSql = sbf.substring(0,sbf.length()-1);
queryMainFlag = true;
mainSbf.append("and `status` in ("+inSql+")");
}
if(queryMainFlag){ if(queryMainFlag){
lambdaQueryWrapperX.inSql(PurchasePlanDetailDO::getMasterId,mainSbf.toString()); lambdaQueryWrapperX.inSql(PurchasePlanDetailDO::getMasterId,mainSbf.toString());
} }

34
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchasePlan/PurchasePlanMainMapper.java

@ -6,17 +6,18 @@ import com.win.framework.datapermission.annotation.DataScope;
import com.win.framework.mybatis.core.mapper.BaseMapperX; import com.win.framework.mybatis.core.mapper.BaseMapperX;
import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.purchasePlan.vo.PurchasePlanMainCreateReqVO;
import com.win.module.wms.controller.purchasePlan.vo.PurchasePlanMainExcelVO;
import com.win.module.wms.controller.purchasePlan.vo.PurchasePlanMainExportReqVO; import com.win.module.wms.controller.purchasePlan.vo.PurchasePlanMainExportReqVO;
import com.win.module.wms.controller.purchasePlan.vo.PurchasePlanMainPageReqVO; import com.win.module.wms.controller.purchasePlan.vo.PurchasePlanMainPageReqVO;
import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanMainDO; import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanMainDO;
import com.win.module.wms.dal.dataobject.putawayJob.PutawayJobMainDO; import com.win.module.wms.dal.dataobject.putawayJob.PutawayJobMainDO;
import com.win.module.wms.enums.order.OrderStatusEnum; import com.win.module.wms.enums.order.OrderStatusEnum;
import com.win.module.wms.enums.plan.PurchasePlanStatusEnum;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.ArrayList; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -110,4 +111,29 @@ public interface PurchasePlanMainMapper extends BaseMapperX<PurchasePlanMainDO>
Map<Long,PurchasePlanMainDO> map = list.stream().collect(Collectors.toMap(PurchasePlanMainDO::getId, temp->temp)); Map<Long,PurchasePlanMainDO> map = list.stream().collect(Collectors.toMap(PurchasePlanMainDO::getId, temp->temp));
return map; return map;
} }
/**
* 根据供应商编号+采购订单号+送达日期获取收货状态下的要货计划预测
* @param createReqVO
* @return
*/
default List<PurchasePlanMainDO> selectByUniqueCondition(PurchasePlanMainCreateReqVO createReqVO) {
// 创建一个DateTimeFormatter实例
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:SS");
// 使用formatter格式化LocalDateTime对象
String formattedDate = createReqVO.getDeliveryDate().format(formatter);
Set<String> str = new HashSet<>();
str.add(PurchasePlanStatusEnum.COMPLETED.getCode());
str.add(PurchasePlanStatusEnum.CLOSED.getCode());
return selectList(new LambdaQueryWrapperX<PurchasePlanMainDO>()
.eqIfPresent(PurchasePlanMainDO::getSupplierCode, createReqVO.getSupplierCode())
.eqIfPresent(PurchasePlanMainDO::getDeliveryDate, formattedDate)
.eqIfPresent(PurchasePlanMainDO::getPoNumber, createReqVO.getPoNumber())
.notIn(PurchasePlanMainDO::getStatus, str)
.orderByAsc(PurchasePlanMainDO::getId)
);
}
List<PurchasePlanMainExcelVO> getExportList(PurchasePlanMainExportReqVO reqVO);
List<PurchasePlanMainExcelVO> getExportListSenior(String condition);
} }

80
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/suppliercycle/SupplierCycleMapper.java

@ -0,0 +1,80 @@
package com.win.module.wms.dal.mysql.suppliercycle;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.mybatis.core.mapper.BaseMapperX;
import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.suppliercycle.vo.SupplierCycleExportReqVO;
import com.win.module.wms.controller.suppliercycle.vo.SupplierCyclePageReqVO;
import com.win.module.wms.dal.dataobject.suppliercycle.SupplierCycleDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 要货预测周期 Mapper
*
* @author 超级管理员
*/
@Mapper
public interface SupplierCycleMapper extends BaseMapperX<SupplierCycleDO> {
default PageResult<SupplierCycleDO> selectPage(SupplierCyclePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<SupplierCycleDO>()
.eqIfPresent(SupplierCycleDO::getSupplierCode, reqVO.getSupplierCode())
.eqIfPresent(SupplierCycleDO::getMonday, reqVO.getMonday())
.eqIfPresent(SupplierCycleDO::getTuesday, reqVO.getTuesday())
.eqIfPresent(SupplierCycleDO::getWednesday, reqVO.getWednesday())
.eqIfPresent(SupplierCycleDO::getThursday, reqVO.getThursday())
.eqIfPresent(SupplierCycleDO::getFriday, reqVO.getFriday())
.eqIfPresent(SupplierCycleDO::getSaturday, reqVO.getSaturday())
.eqIfPresent(SupplierCycleDO::getSunday, reqVO.getSunday())
.eqIfPresent(SupplierCycleDO::getVersion, reqVO.getVersion())
.eqIfPresent(SupplierCycleDO::getRemark, reqVO.getRemark())
.betweenIfPresent(SupplierCycleDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(SupplierCycleDO::getExtraProperties, reqVO.getExtraProperties())
.eqIfPresent(SupplierCycleDO::getSiteId, reqVO.getSiteId())
.betweenIfPresent(SupplierCycleDO::getBeginTime, reqVO.getBeginTime())
.betweenIfPresent(SupplierCycleDO::getEndTime, reqVO.getEndTime())
.eqIfPresent(SupplierCycleDO::getAvailable, reqVO.getAvailable())
.eqIfPresent(SupplierCycleDO::getStatus, reqVO.getStatus())
.eqIfPresent(SupplierCycleDO::getConcurrencyStamp, reqVO.getConcurrencyStamp())
.eqIfPresent(SupplierCycleDO::getRuleUserId, reqVO.getRuleUserId())
.eqIfPresent(SupplierCycleDO::getDepartmentCode, reqVO.getDepartmentCode())
.orderByDesc(SupplierCycleDO::getId));
}
default PageResult<SupplierCycleDO> selectSenior(CustomConditions conditions) {
return selectPage(conditions, QueryWrapperUtils.structure(conditions));
}
default List<SupplierCycleDO> selectList(SupplierCycleExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<SupplierCycleDO>()
.eqIfPresent(SupplierCycleDO::getSupplierCode, reqVO.getSupplierCode())
.eqIfPresent(SupplierCycleDO::getMonday, reqVO.getMonday())
.eqIfPresent(SupplierCycleDO::getTuesday, reqVO.getTuesday())
.eqIfPresent(SupplierCycleDO::getWednesday, reqVO.getWednesday())
.eqIfPresent(SupplierCycleDO::getThursday, reqVO.getThursday())
.eqIfPresent(SupplierCycleDO::getFriday, reqVO.getFriday())
.eqIfPresent(SupplierCycleDO::getSaturday, reqVO.getSaturday())
.eqIfPresent(SupplierCycleDO::getSunday, reqVO.getSunday())
.eqIfPresent(SupplierCycleDO::getVersion, reqVO.getVersion())
.eqIfPresent(SupplierCycleDO::getRemark, reqVO.getRemark())
.betweenIfPresent(SupplierCycleDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(SupplierCycleDO::getExtraProperties, reqVO.getExtraProperties())
.eqIfPresent(SupplierCycleDO::getSiteId, reqVO.getSiteId())
.betweenIfPresent(SupplierCycleDO::getBeginTime, reqVO.getBeginTime())
.betweenIfPresent(SupplierCycleDO::getEndTime, reqVO.getEndTime())
.eqIfPresent(SupplierCycleDO::getAvailable, reqVO.getAvailable())
.eqIfPresent(SupplierCycleDO::getStatus, reqVO.getStatus())
.eqIfPresent(SupplierCycleDO::getConcurrencyStamp, reqVO.getConcurrencyStamp())
.eqIfPresent(SupplierCycleDO::getRuleUserId, reqVO.getRuleUserId())
.eqIfPresent(SupplierCycleDO::getDepartmentCode, reqVO.getDepartmentCode())
.orderByDesc(SupplierCycleDO::getId));
}
default SupplierCycleDO selectBySupplierCode(String supplierCode){
return selectOne(new LambdaQueryWrapperX<SupplierCycleDO>().eq(SupplierCycleDO::getSupplierCode,supplierCode));
}
}

49
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplierdeliverRequest/SupplierdeliverRequestDetailMapper.java

@ -9,6 +9,7 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.supplierdeliverRequest.vo.SupplierdeliverRequestDetailExportReqVO; import com.win.module.wms.controller.supplierdeliverRequest.vo.SupplierdeliverRequestDetailExportReqVO;
import com.win.module.wms.controller.supplierdeliverRequest.vo.SupplierdeliverRequestDetailPageReqVO; import com.win.module.wms.controller.supplierdeliverRequest.vo.SupplierdeliverRequestDetailPageReqVO;
import com.win.module.wms.dal.dataobject.supplierdeliverRequest.SupplierdeliverRequestDetailDO; import com.win.module.wms.dal.dataobject.supplierdeliverRequest.SupplierdeliverRequestDetailDO;
import com.win.module.wms.enums.request.RequestStatusEnum;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -191,4 +192,52 @@ public interface SupplierdeliverRequestDetailMapper extends BaseMapperX<Supplier
return selectList(new LambdaQueryWrapperX<SupplierdeliverRequestDetailDO>() return selectList(new LambdaQueryWrapperX<SupplierdeliverRequestDetailDO>()
.eq(SupplierdeliverRequestDetailDO::getMasterId, masterId)); .eq(SupplierdeliverRequestDetailDO::getMasterId, masterId));
} }
/**
* 根据采购订单号查询所有发货申请未关闭的明细
* @param poNumber
* @return
*/
default List<SupplierdeliverRequestDetailDO> selectListBYOpen(String poNumber) {
return selectList(new LambdaQueryWrapperX<SupplierdeliverRequestDetailDO>()
.eq(SupplierdeliverRequestDetailDO::getPoNumber, poNumber)
.inSql(SupplierdeliverRequestDetailDO::getMasterId, "select id from request_supplierdeliver_main where deleted = 0 and status != '"+ RequestStatusEnum.CLOSED.getCode()+"'")
);
}
default List<SupplierdeliverRequestDetailDO> selectLabelList(SupplierdeliverRequestDetailPageReqVO reqVO){
reqVO.setSort("createTime");
reqVO.setBy("DESC");
LambdaQueryWrapperX<SupplierdeliverRequestDetailDO> lambdaQueryWrapperX = new LambdaQueryWrapperX<SupplierdeliverRequestDetailDO>()
.eqIfPresent(SupplierdeliverRequestDetailDO::getMasterId, reqVO.getMasterId())
.likeIfPresent(SupplierdeliverRequestDetailDO::getBatch, reqVO.getBatch())
.likeIfPresent(SupplierdeliverRequestDetailDO::getAltBatch, reqVO.getAltBatch())
.likeIfPresent(SupplierdeliverRequestDetailDO::getSupplierBatch, reqVO.getSupplierBatch())
.betweenIfPresent(SupplierdeliverRequestDetailDO::getArriveDate, reqVO.getArriveDate())
.betweenIfPresent(SupplierdeliverRequestDetailDO::getProduceDate, reqVO.getProduceDate())
.betweenIfPresent(SupplierdeliverRequestDetailDO::getExpireDate, reqVO.getExpireDate())
.likeIfPresent(SupplierdeliverRequestDetailDO::getPoNumber, reqVO.getPoNumber())
.likeIfPresent(SupplierdeliverRequestDetailDO::getPoLine, reqVO.getPoLine())
.eqIfPresent(SupplierdeliverRequestDetailDO::getPackQty, reqVO.getPackQty())
.likeIfPresent(SupplierdeliverRequestDetailDO::getPackUnit, reqVO.getPackUnit())
.eqIfPresent(SupplierdeliverRequestDetailDO::getSupplierPackQty, reqVO.getSupplierPackQty())
.likeIfPresent(SupplierdeliverRequestDetailDO::getSupplierPackUnit, reqVO.getSupplierPackUnit())
.eqIfPresent(SupplierdeliverRequestDetailDO::getConvertRate, reqVO.getConvertRate())
.likeIfPresent(SupplierdeliverRequestDetailDO::getNumber, reqVO.getNumber())
.likeIfPresent(SupplierdeliverRequestDetailDO::getItemCode, reqVO.getItemCode())
.likeIfPresent(SupplierdeliverRequestDetailDO::getRemark, reqVO.getRemark())
.betweenIfPresent(SupplierdeliverRequestDetailDO::getCreateTime, reqVO.getCreateTime())
.likeIfPresent(SupplierdeliverRequestDetailDO::getCreator, reqVO.getCreator())
.likeIfPresent(SupplierdeliverRequestDetailDO::getItemName, reqVO.getItemName())
.likeIfPresent(SupplierdeliverRequestDetailDO::getItemDesc1, reqVO.getItemDesc1())
.likeIfPresent(SupplierdeliverRequestDetailDO::getItemDesc2, reqVO.getItemDesc2())
.likeIfPresent(SupplierdeliverRequestDetailDO::getProjectCode, reqVO.getProjectCode())
.eqIfPresent(SupplierdeliverRequestDetailDO::getQty, reqVO.getQty())
.likeIfPresent(SupplierdeliverRequestDetailDO::getUom, reqVO.getUom())
.betweenIfPresent(SupplierdeliverRequestDetailDO::getUpdateTime, reqVO.getUpdateTime())
.likeIfPresent(SupplierdeliverRequestDetailDO::getUpdater, reqVO.getUpdater())
.likeIfPresent(SupplierdeliverRequestDetailDO::getFromOwnerCode, reqVO.getFromOwnerCode())
.likeIfPresent(SupplierdeliverRequestDetailDO::getToOwnerCode, reqVO.getToOwnerCode());
return selectList(lambdaQueryWrapperX);
}
} }

14
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/supplieritem/SupplieritemMapper.java

@ -9,9 +9,11 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.supplieritem.vo.SupplieritemExportReqVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemExportReqVO;
import com.win.module.wms.controller.supplieritem.vo.SupplieritemPageReqVO; import com.win.module.wms.controller.supplieritem.vo.SupplieritemPageReqVO;
import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO; import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -36,6 +38,7 @@ public interface SupplieritemMapper extends BaseMapperX<SupplieritemDO> {
.likeIfPresent(SupplieritemDO::getSupplierItemCode, reqVO.getSupplierItemCode()) .likeIfPresent(SupplieritemDO::getSupplierItemCode, reqVO.getSupplierItemCode())
.likeIfPresent(SupplieritemDO::getSupplierUom, reqVO.getSupplierUom()) .likeIfPresent(SupplieritemDO::getSupplierUom, reqVO.getSupplierUom())
.eqIfPresent(SupplieritemDO::getConvertRate, reqVO.getConvertRate()) .eqIfPresent(SupplieritemDO::getConvertRate, reqVO.getConvertRate())
.eqIfPresent(SupplieritemDO::getAllowOverShipment, reqVO.getAllowOverShipment())
.likeIfPresent(SupplieritemDO::getPackUnit, reqVO.getPackUnit()) .likeIfPresent(SupplieritemDO::getPackUnit, reqVO.getPackUnit())
.eqIfPresent(SupplieritemDO::getPackQty, reqVO.getPackQty()) .eqIfPresent(SupplieritemDO::getPackQty, reqVO.getPackQty())
.likeIfPresent(SupplieritemDO::getDefaultWarehouseCode, reqVO.getDefaultWarehouseCode()) .likeIfPresent(SupplieritemDO::getDefaultWarehouseCode, reqVO.getDefaultWarehouseCode())
@ -51,6 +54,17 @@ public interface SupplieritemMapper extends BaseMapperX<SupplieritemDO> {
if(reqVO.getSupplierCodeList() != null){ if(reqVO.getSupplierCodeList() != null){
lambdaQueryWrapperX.in(SupplieritemDO::getSupplierCode,reqVO.getSupplierCodeList()); lambdaQueryWrapperX.in(SupplieritemDO::getSupplierCode,reqVO.getSupplierCodeList());
} }
if(StringUtils.isNotEmpty(reqVO.getSupplierCodes())){
String[] supplierCodes = reqVO.getSupplierCodes().split(",");
List<String> supplerCodeList = new ArrayList<>();
for(int i=0;i<supplierCodes.length;i++){
supplerCodeList.add(supplierCodes[i]);
}
if(supplerCodeList.size() > 0){
lambdaQueryWrapperX.in(SupplieritemDO::getSupplierCode,supplerCodeList);
}
}
return selectPage(reqVO, lambdaQueryWrapperX); return selectPage(reqVO, lambdaQueryWrapperX);
} }

3
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/enums/common/InterfaceTypeEnum.java

@ -33,7 +33,8 @@ public enum InterfaceTypeEnum {
RECORD_UNPLANNEDISSUE_MAIN("26A", "record_unplannedissue_main"), RECORD_UNPLANNEDISSUE_MAIN("26A", "record_unplannedissue_main"),
RECORD_UNPLANNEDRECEIPT_MAIN("27A", "record_unplannedreceipt_main"), RECORD_UNPLANNEDRECEIPT_MAIN("27A", "record_unplannedreceipt_main"),
BASIC_PACKAGEUNIT("28A", "basic_packageunit"), BASIC_PACKAGEUNIT("28A", "basic_packageunit"),
REQUEST_SALE_SHIPMENT_MAIN("29A", "request_sale_shipment_main"); REQUEST_SALE_SHIPMENT_MAIN("29A", "request_sale_shipment_main"),
BASIC_SUPPLIERITEM("30A", "basic_supplieritem");
private String code; private String code;
private String tableName; private String tableName;

31
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/PurchasePlanOffOneJob.java

@ -0,0 +1,31 @@
package com.win.module.wms.job;
import com.win.framework.quartz.core.handler.JobHandler;
import com.win.framework.tenant.core.context.TenantContextHolder;
import com.win.module.wms.service.purchasePlan.PurchasePlanMainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 租户1 每天凌晨查询所有要货计划两天前未完成的执行关闭
*/
@Component
@Slf4j
public class PurchasePlanOffOneJob implements JobHandler {
@Lazy
@Resource
private PurchasePlanMainService purchasePlanMainService;
@Override
public String execute(String param) throws Exception {
log.info("【要货计划执行关闭】----开始");
TenantContextHolder.setTenantId(1l);
purchasePlanMainService.autoOffPurchasePlan();
log.info("【要货计划执行关闭】----结束");
return "要货计划执行关闭";
}
}

31
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/PurchasePlanOffTwoJob.java

@ -0,0 +1,31 @@
package com.win.module.wms.job;
import com.win.framework.quartz.core.handler.JobHandler;
import com.win.framework.tenant.core.context.TenantContextHolder;
import com.win.module.wms.service.purchasePlan.PurchasePlanMainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 租户1 每天凌晨查询所有要货计划两天前未完成的执行关闭
*/
@Component
@Slf4j
public class PurchasePlanOffTwoJob implements JobHandler {
@Lazy
@Resource
private PurchasePlanMainService purchasePlanMainService;
@Override
public String execute(String param) throws Exception {
log.info("【要货计划执行关闭】----开始");
TenantContextHolder.setTenantId(2l);
purchasePlanMainService.autoOffPurchasePlan();
log.info("【要货计划执行关闭】----结束");
return "要货计划执行关闭";
}
}

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/PurchasePlanTenantOneJob.java

@ -24,7 +24,7 @@ public class PurchasePlanTenantOneJob implements JobHandler {
public String execute(String param) throws Exception { public String execute(String param) throws Exception {
log.info("【要货计划主自动接收】----开始"); log.info("【要货计划主自动接收】----开始");
TenantContextHolder.setTenantId(1l); TenantContextHolder.setTenantId(1l);
purchasePlanMainService.autoAccPurchasePlan(); //purchasePlanMainService.autoAccPurchasePlan();
log.info("【要货计划主自动接收】----结束"); log.info("【要货计划主自动接收】----结束");
return "要货计划主自动接收"; return "要货计划主自动接收";
} }

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save