From 2500067e4a6b755a220097455f42cced5f83a52e Mon Sep 17 00:00:00 2001 From: dev <182542500@qq.com> Date: Fri, 21 Mar 2025 19:10:18 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=B5=81=E5=95=86=E6=8A=A5=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- asinkj-biz/asinkj-amz/pom.xml | 115 +++++ .../java/org/asinkj/AsinKjAmzApplication.java | 17 + .../BizInquiryRequestController.java | 117 +++++ .../BizLogisticsChannelController.java | 112 +++++ .../BizLogisticsQuoteController.java | 119 +++++ .../controller/BizShipmentItemController.java | 106 +++++ .../controller/BizShipmentPlanController.java | 121 +++++ .../BizShipmentTrackingController.java | 106 +++++ .../controller/SysAmazonStoreController.java | 137 ++++++ .../asinkj/amz/domain/BizInquiryRequest.java | 95 ++++ .../amz/domain/BizLogisticsChannel.java | 66 +++ .../amz/domain/BizLogisticsCustomChannel.java | 51 +++ .../asinkj/amz/domain/BizLogisticsQuote.java | 93 ++++ .../asinkj/amz/domain/BizShipmentItem.java | 83 ++++ .../asinkj/amz/domain/BizShipmentPlan.java | 137 ++++++ .../amz/domain/BizShipmentTracking.java | 51 +++ .../org/asinkj/amz/domain/SysAmazonStore.java | 104 +++++ .../amz/domain/bo/BizInquiryRequestBo.java | 96 ++++ .../amz/domain/bo/BizLogisticsChannelBo.java | 66 +++ .../bo/BizLogisticsCustomChannelBo.java | 48 ++ .../amz/domain/bo/BizLogisticsQuoteBo.java | 98 ++++ .../amz/domain/bo/BizShipmentItemBo.java | 86 ++++ .../amz/domain/bo/BizShipmentPlanBo.java | 147 ++++++ .../amz/domain/bo/BizShipmentTrackingBo.java | 48 ++ .../amz/domain/bo/SysAmazonStoreBo.java | 102 +++++ .../amz/domain/vo/BizInquiryRequestVo.java | 115 +++++ .../amz/domain/vo/BizLogisticsChannelVo.java | 76 ++++ .../vo/BizLogisticsCustomChannelVo.java | 57 +++ .../amz/domain/vo/BizLogisticsQuoteVo.java | 113 +++++ .../amz/domain/vo/BizShipmentItemVo.java | 94 ++++ .../amz/domain/vo/BizShipmentPlanVo.java | 168 +++++++ .../amz/domain/vo/BizShipmentTrackingVo.java | 56 +++ .../amz/domain/vo/SysAmazonStoreVo.java | 113 +++++ .../amz/hanlder/AddressTypeHandler.java | 51 +++ .../org/asinkj/amz/hanlder/MyBatisConfig.java | 17 + .../amz/mapper/BizInquiryRequestMapper.java | 15 + .../amz/mapper/BizLogisticsChannelMapper.java | 15 + .../BizLogisticsCustomChannelMapper.java | 15 + .../amz/mapper/BizLogisticsQuoteMapper.java | 15 + .../amz/mapper/BizShipmentItemMapper.java | 15 + .../amz/mapper/BizShipmentPlanMapper.java | 23 + .../amz/mapper/BizShipmentTrackingMapper.java | 15 + .../amz/mapper/SysAmazonStoreMapper.java | 19 + .../service/IBizInquiryRequestService.java | 73 +++ .../service/IBizLogisticsChannelService.java | 71 +++ .../service/IBizLogisticsQuoteService.java | 77 ++++ .../amz/service/IBizShipmentItemService.java | 69 +++ .../amz/service/IBizShipmentPlanService.java | 73 +++ .../service/IBizShipmentTrackingService.java | 69 +++ .../amz/service/ISysAmazonStoreService.java | 78 ++++ .../impl/BizInquiryRequestServiceImpl.java | 213 +++++++++ .../impl/BizLogisticsChannelServiceImpl.java | 156 +++++++ .../impl/BizLogisticsQuoteServiceImpl.java | 185 ++++++++ .../impl/BizShipmentItemServiceImpl.java | 137 ++++++ .../impl/BizShipmentPlanServiceImpl.java | 159 +++++++ .../impl/BizShipmentTrackingServiceImpl.java | 131 ++++++ .../impl/SysAmazonStoreServiceImpl.java | 430 ++++++++++++++++++ .../asinking/constant/ClientConstants.java | 0 .../java/org/asinkj/asinking/core/Config.java | 0 .../org/asinkj/asinking/core/HttpMethod.java | 0 .../org/asinkj/asinking/core/HttpRequest.java | 0 .../asinkj/asinking/core/HttpResponse.java | 0 .../asinking/core/HttpResponseImpl.java | 1 + .../asinking/core/ObjectMapperSingleton.java | 4 + .../entity/FbaShipmentApiResponse.java | 225 +++++++++ .../org/asinkj/asinking/entity/Result.java | 0 .../entity/SellerAccountResponse.java | 43 ++ .../org/asinkj/asinking/entity/Shipment.java | 101 ++++ .../org/asinkj/asinking/entity/Token.java | 0 .../org/asinkj/asinking/entity/TokenInfo.java | 36 ++ .../asinking/logger/HttpLoggingFilter.java | 0 .../asinkj/asinking/okhttp/AKRestClient.java | 1 + .../asinking/okhttp/AKRestClientBuild.java | 0 .../asinkj/asinking/okhttp/HttpCommand.java | 0 .../asinkj/asinking/okhttp/HttpExecutor.java | 0 .../asinking/samples/AccessTokenDemo.java | 18 +- .../org/asinkj/asinking/samples/GetDemo.java | 0 .../asinkj/asinking/samples/GetFBADemo.java | 41 ++ .../asinkj/asinking/samples/OrderDemo.java | 1 - .../asinking/samples/OrderListDemo.java | 1 - .../asinking/samples/SetCategoryDemo.java | 1 - .../asinking/samples/SetProductDemo.java | 1 - .../org/asinkj/asinking/sign/AesUtil.java | 0 .../org/asinkj/asinking/sign/ApiSign.java | 0 .../org/asinkj/config/HttpUtilConfig.java | 25 + .../main/java/org/asinkj/utils/HttpUtil.java | 193 ++++++++ .../src/main/resources/application.yml | 117 +++++ .../asinkj-amz}/src/main/resources/banner.txt | 0 .../src/main/resources/logback-plus.xml | 26 ++ .../mapper/amz/BizInquiryRequestMapper.xml | 7 + .../mapper/amz/BizLogisticsChannelMapper.xml | 7 + .../mapper/amz/BizLogisticsQuoteMapper.xml | 7 + .../mapper/amz/BizShipmentItemMapper.xml | 7 + .../mapper/amz/BizShipmentPlanMapper.xml | 16 + .../mapper/amz/BizShipmentTrackingMapper.xml | 7 + .../mapper/amz/SysAmazonStoreMapper.xml | 43 ++ .../asinkj-demo/README.md | 0 .../asinkj-demo/pom.xml | 9 +- .../asinkj/demo/AsinKjDemoApplication.java | 0 .../demo/controller/EsCrudController.java | 0 .../demo/controller/MailController.java | 0 .../demo/controller/RedisCacheController.java | 0 .../demo/controller/RedisLockController.java | 0 .../controller/RedisPubSubController.java | 0 .../asinkj/demo/controller/SmsController.java | 0 .../controller/Swagger3DemoController.java | 0 .../demo/controller/TestBatchController.java | 0 .../demo/controller/TestBusController.java | 0 .../demo/controller/TestDemoController.java | 0 .../controller/TestEncryptController.java | 0 .../demo/controller/TestExcelController.java | 0 .../demo/controller/TestI18nController.java | 0 .../controller/TestSensitiveController.java | 0 .../controller/TestShardingController.java | 0 .../demo/controller/TestTreeController.java | 0 .../asinkj/demo/controller/package-info.java | 0 .../java/org/asinkj/demo/domain/Document.java | 0 .../org/asinkj/demo/domain/ShardingOrder.java | 0 .../asinkj/demo/domain/ShardingOrderItem.java | 0 .../java/org/asinkj/demo/domain/TestDemo.java | 0 .../asinkj/demo/domain/TestDemoEncrypt.java | 0 .../java/org/asinkj/demo/domain/TestTree.java | 0 .../org/asinkj/demo/domain/bo/TestDemoBo.java | 0 .../demo/domain/bo/TestDemoImportVo.java | 0 .../org/asinkj/demo/domain/bo/TestTreeBo.java | 0 .../org/asinkj/demo/domain/package-info.java | 0 .../asinkj/demo/domain/vo/ExportDemoVo.java | 0 .../org/asinkj/demo/domain/vo/TestDemoVo.java | 0 .../org/asinkj/demo/domain/vo/TestTreeVo.java | 0 .../asinkj/demo/esmapper/DocumentMapper.java | 0 .../demo/listener/ExportDemoListener.java | 0 .../demo/mapper/ShardingOrderItemMapper.java | 0 .../demo/mapper/ShardingOrderMapper.java | 0 .../demo/mapper/TestDemoEncryptMapper.java | 0 .../asinkj/demo/mapper/TestDemoMapper.java | 0 .../asinkj/demo/mapper/TestTreeMapper.java | 0 .../org/asinkj/demo/mapper/package-info.java | 0 .../demo/service/IExportExcelService.java | 0 .../asinkj/demo/service/ITestDemoService.java | 0 .../asinkj/demo/service/ITestTreeService.java | 0 .../service/impl/ExportExcelServiceImpl.java | 0 .../service/impl/SensitiveServiceImpl.java | 0 .../service/impl/TestDemoServiceImpl.java | 0 .../service/impl/TestTreeServiceImpl.java | 0 .../demo/service/impl/package-info.java | 0 .../org/asinkj/demo/service/package-info.java | 0 .../src/main/resources/application.yml | 0 .../asinkj-demo/src/main/resources/banner.txt | 0 .../src/main/resources/excel/单列表.xlsx | Bin .../src/main/resources/excel/多sheet列表.xlsx | Bin .../src/main/resources/excel/多列表.xlsx | Bin .../src/main/resources/logback-plus.xml | 0 .../mapper/demo/ShardingOrderItemMapper.xml | 0 .../mapper/demo/ShardingOrderMapper.xml | 0 .../resources/mapper/demo/TestDemoMapper.xml | 0 .../resources/mapper/demo/TestTreeMapper.xml | 0 .../src/main/resources/mapper/package-info.md | 0 .../java/org/asinkj/demo/AssertUnitTest.java | 0 .../java/org/asinkj/demo/DemoUnitTest.java | 0 .../java/org/asinkj/demo/ParamUnitTest.java | 0 .../test/java/org/asinkj/demo/TOrderTest.java | 0 .../java/org/asinkj/demo/TagUnitTest.java | 0 .../asinkj-lpm/pom.xml | 2 +- .../java/org/asinkj/AsinKjLpmApplication.java | 0 .../org/asinkj/controller/MailController.java | 49 ++ .../src/main/resources/application.yml | 0 .../asinkj-lpm/src/main/resources/banner.txt | 8 + .../src/main/resources/logback-plus.xml | 0 .../asinkj-test-mq/README.md | 0 .../asinkj-test-mq/pom.xml | 2 +- .../stream/AsinKjTestMqApplication.java | 0 .../asinkj/stream/config/RabbitConfig.java | 0 .../stream/config/RabbitTtlQueueConfig.java | 0 .../stream/consumer/KafkaNormalConsumer.java | 0 .../stream/consumer/NormalRocketConsumer.java | 0 .../stream/consumer/RabbitConsumer.java | 0 .../consumer/TransactionRocketConsumer.java | 0 .../controller/PushMessageController.java | 0 .../listener/TranscationRocketListener.java | 0 .../stream/producer/DelayRabbitProducer.java | 0 .../stream/producer/KafkaNormalProducer.java | 0 .../stream/producer/NormalRabbitProducer.java | 0 .../stream/producer/NormalRocketProducer.java | 0 .../producer/TransactionRocketProducer.java | 0 .../src/main/resources/application.yml | 0 .../src/main/resources/logback-plus.xml | 0 {asinkj-example => asinkj-biz}/pom.xml | 5 +- .../common/json/config/JacksonConfig.java | 3 + asinkj-common/asinkj-common-mybatis/pom.xml | 1 - asinkj-modules/asinkj-gen/pom.xml | 10 +- pom.xml | 6 +- 191 files changed, 6240 insertions(+), 18 deletions(-) create mode 100644 asinkj-biz/asinkj-amz/pom.xml create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/AsinKjAmzApplication.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizInquiryRequestController.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsChannelController.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentItemController.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentPlanController.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentTrackingController.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/SysAmazonStoreController.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizInquiryRequest.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsChannel.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsCustomChannel.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsQuote.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentItem.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentTracking.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/SysAmazonStore.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizInquiryRequestBo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsChannelBo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsCustomChannelBo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteBo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentItemBo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentPlanBo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentTrackingBo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/SysAmazonStoreBo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsChannelVo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsCustomChannelVo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsQuoteVo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentItemVo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanVo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentTrackingVo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/SysAmazonStoreVo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/hanlder/AddressTypeHandler.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/hanlder/MyBatisConfig.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizInquiryRequestMapper.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsChannelMapper.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsCustomChannelMapper.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsQuoteMapper.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentItemMapper.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentPlanMapper.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentTrackingMapper.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/SysAmazonStoreMapper.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizInquiryRequestService.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsChannelService.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentItemService.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentTrackingService.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsChannelServiceImpl.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentItemServiceImpl.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentTrackingServiceImpl.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/SysAmazonStoreServiceImpl.java rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/constant/ClientConstants.java (100%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/core/Config.java (100%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/core/HttpMethod.java (100%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/core/HttpRequest.java (100%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/core/HttpResponse.java (100%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/core/HttpResponseImpl.java (99%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/core/ObjectMapperSingleton.java (91%) create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/FbaShipmentApiResponse.java rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/entity/Result.java (100%) create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/SellerAccountResponse.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/Shipment.java rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/entity/Token.java (100%) create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/TokenInfo.java rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/logger/HttpLoggingFilter.java (100%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/okhttp/AKRestClient.java (97%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/okhttp/AKRestClientBuild.java (100%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/okhttp/HttpCommand.java (100%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/okhttp/HttpExecutor.java (100%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/samples/AccessTokenDemo.java (54%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/samples/GetDemo.java (100%) create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/GetFBADemo.java rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/samples/OrderDemo.java (99%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/samples/OrderListDemo.java (99%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/samples/SetCategoryDemo.java (99%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/samples/SetProductDemo.java (99%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/sign/AesUtil.java (100%) rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/java/org/asinkj/asinking/sign/ApiSign.java (100%) create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/config/HttpUtilConfig.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/utils/HttpUtil.java create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/application.yml rename {asinkj-example/asinkj-lpm => asinkj-biz/asinkj-amz}/src/main/resources/banner.txt (100%) create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/logback-plus.xml create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizInquiryRequestMapper.xml create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsChannelMapper.xml create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsQuoteMapper.xml create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentItemMapper.xml create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentTrackingMapper.xml create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/SysAmazonStoreMapper.xml rename {asinkj-example => asinkj-biz}/asinkj-demo/README.md (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/pom.xml (95%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/AsinKjDemoApplication.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/EsCrudController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/MailController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisCacheController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisLockController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisPubSubController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/SmsController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/Swagger3DemoController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestBatchController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestBusController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestDemoController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestEncryptController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestExcelController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestI18nController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestSensitiveController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestShardingController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestTreeController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/controller/package-info.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/Document.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/ShardingOrder.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/ShardingOrderItem.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestDemo.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestDemoEncrypt.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestTree.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestDemoBo.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestDemoImportVo.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestTreeBo.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/package-info.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/ExportDemoVo.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/TestDemoVo.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/TestTreeVo.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/esmapper/DocumentMapper.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/listener/ExportDemoListener.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/mapper/ShardingOrderItemMapper.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/mapper/ShardingOrderMapper.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestDemoEncryptMapper.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestDemoMapper.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestTreeMapper.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/mapper/package-info.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/service/IExportExcelService.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/service/ITestDemoService.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/service/ITestTreeService.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/ExportExcelServiceImpl.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/SensitiveServiceImpl.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/TestDemoServiceImpl.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/TestTreeServiceImpl.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/package-info.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/java/org/asinkj/demo/service/package-info.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/application.yml (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/banner.txt (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/excel/单列表.xlsx (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/excel/多sheet列表.xlsx (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/excel/多列表.xlsx (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/logback-plus.xml (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/mapper/demo/ShardingOrderItemMapper.xml (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/mapper/demo/ShardingOrderMapper.xml (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/mapper/demo/TestDemoMapper.xml (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/mapper/demo/TestTreeMapper.xml (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/main/resources/mapper/package-info.md (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/test/java/org/asinkj/demo/AssertUnitTest.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/test/java/org/asinkj/demo/DemoUnitTest.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/test/java/org/asinkj/demo/ParamUnitTest.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/test/java/org/asinkj/demo/TOrderTest.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-demo/src/test/java/org/asinkj/demo/TagUnitTest.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-lpm/pom.xml (98%) rename {asinkj-example => asinkj-biz}/asinkj-lpm/src/main/java/org/asinkj/AsinKjLpmApplication.java (100%) create mode 100644 asinkj-biz/asinkj-lpm/src/main/java/org/asinkj/controller/MailController.java rename {asinkj-example => asinkj-biz}/asinkj-lpm/src/main/resources/application.yml (100%) create mode 100644 asinkj-biz/asinkj-lpm/src/main/resources/banner.txt rename {asinkj-example => asinkj-biz}/asinkj-lpm/src/main/resources/logback-plus.xml (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/README.md (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/pom.xml (98%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/AsinKjTestMqApplication.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/config/RabbitConfig.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/config/RabbitTtlQueueConfig.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/KafkaNormalConsumer.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/NormalRocketConsumer.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/RabbitConsumer.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/TransactionRocketConsumer.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/controller/PushMessageController.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/listener/TranscationRocketListener.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/DelayRabbitProducer.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/KafkaNormalProducer.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/NormalRabbitProducer.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/NormalRocketProducer.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/TransactionRocketProducer.java (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/resources/application.yml (100%) rename {asinkj-example => asinkj-biz}/asinkj-test-mq/src/main/resources/logback-plus.xml (100%) rename {asinkj-example => asinkj-biz}/pom.xml (92%) diff --git a/asinkj-biz/asinkj-amz/pom.xml b/asinkj-biz/asinkj-amz/pom.xml new file mode 100644 index 0000000..5ffcd9e --- /dev/null +++ b/asinkj-biz/asinkj-amz/pom.xml @@ -0,0 +1,115 @@ + + + 4.0.0 + + org.asinkj + asinkj-cloud-plus + 2.2.2 + ../../pom.xml + + + asinkj-amz + + + 17 + 17 + UTF-8 + + + + org.asinkj + asinkj-common-nacos + + + + org.asinkj + asinkj-common-sentinel + + + + + org.asinkj + asinkj-common-log + + + + org.asinkj + asinkj-common-dict + + + + org.asinkj + asinkj-common-doc + + + + org.asinkj + asinkj-common-web + + + + org.asinkj + asinkj-common-mybatis + + + + org.asinkj + asinkj-common-dubbo + + + + org.asinkj + asinkj-common-seata + + + + org.asinkj + asinkj-common-idempotent + + + + org.asinkj + asinkj-common-tenant + + + + org.asinkj + asinkj-common-security + + + + org.asinkj + asinkj-common-translation + + + + org.asinkj + asinkj-common-sensitive + + + + org.asinkj + asinkj-common-encrypt + + + + + org.asinkj + asinkj-api-system + + + + org.asinkj + asinkj-api-resource + + + + com.squareup.okhttp3 + okhttp + 4.9.0 + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/AsinKjAmzApplication.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/AsinKjAmzApplication.java new file mode 100644 index 0000000..2fd5c38 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/AsinKjAmzApplication.java @@ -0,0 +1,17 @@ +package org.asinkj; + +import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup; + +@EnableDubbo +@SpringBootApplication +public class AsinKjAmzApplication { + public static void main(String[] args) { + SpringApplication application = new SpringApplication(AsinKjAmzApplication.class); + application.setApplicationStartup(new BufferingApplicationStartup(2048)); + application.run(args); + System.out.println("(♥◠‿◠)ノ゙ 亚马逊模块启动成功 ლ(´ڡ`ლ)゙ "); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizInquiryRequestController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizInquiryRequestController.java new file mode 100644 index 0000000..3002413 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizInquiryRequestController.java @@ -0,0 +1,117 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.asinkj.common.idempotent.annotation.RepeatSubmit; +import org.asinkj.common.log.annotation.Log; +import org.asinkj.common.web.core.BaseController; +import org.asinkj.common.mybatis.core.page.PageQuery; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.log.enums.BusinessType; +import org.asinkj.common.excel.utils.ExcelUtil; +import org.asinkj.amz.domain.vo.BizInquiryRequestVo; +import org.asinkj.amz.domain.bo.BizInquiryRequestBo; +import org.asinkj.amz.service.IBizInquiryRequestService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 物流询价 + * 前端访问路由地址为:/amz/inquiryRequest + * + * @author shuo hu + * @date 2025-03-21 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/inquiryRequest") +public class BizInquiryRequestController extends BaseController { + + private final IBizInquiryRequestService bizInquiryRequestService; + + /** + * 查询物流询价列表 + */ + @SaCheckPermission("amz:inquiryRequest:list") + @GetMapping("/list") + public TableDataInfo list(BizInquiryRequestBo bo, PageQuery pageQuery) { + return bizInquiryRequestService.queryPageList(bo, pageQuery); + } + + + /** + * 根据目的地仓库和渠道创建物流报价列表 + */ + @SaCheckPermission("amz:inquiryRequest:list") + @GetMapping("/create/{destination}/{channelId}") + public R createWithDesAndChannel(@PathVariable("destination") @NotNull(message = "目的地不能为空") String destination, + @PathVariable("channelId") @NotNull(message = "渠道不能为空") String channelId) { + return bizInquiryRequestService.createWithDesAndChannel(destination, channelId); + } + + /** + * 导出物流询价列表 + */ + @SaCheckPermission("amz:inquiryRequest:export") + @Log(title = "物流询价", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizInquiryRequestBo bo, HttpServletResponse response) { + List list = bizInquiryRequestService.queryList(bo); + ExcelUtil.exportExcel(list, "物流询价", BizInquiryRequestVo.class, response); + } + + /** + * 获取物流询价详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:inquiryRequest:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizInquiryRequestService.queryById(id)); + } + + /** + * 新增物流询价 + */ + @SaCheckPermission("amz:inquiryRequest:add") + @Log(title = "物流询价", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizInquiryRequestBo bo) { + return toAjax(bizInquiryRequestService.insertByBo(bo)); + } + + /** + * 修改物流询价 + */ + @SaCheckPermission("amz:inquiryRequest:edit") + @Log(title = "物流询价", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizInquiryRequestBo bo) { + return toAjax(bizInquiryRequestService.updateByBo(bo)); + } + + /** + * 删除物流询价 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:inquiryRequest:remove") + @Log(title = "物流询价", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizInquiryRequestService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsChannelController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsChannelController.java new file mode 100644 index 0000000..21cdd4b --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsChannelController.java @@ -0,0 +1,112 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.asinkj.common.idempotent.annotation.RepeatSubmit; +import org.asinkj.common.log.annotation.Log; +import org.asinkj.common.web.core.BaseController; +import org.asinkj.common.mybatis.core.page.PageQuery; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.log.enums.BusinessType; +import org.asinkj.common.excel.utils.ExcelUtil; +import org.asinkj.amz.domain.vo.BizLogisticsChannelVo; +import org.asinkj.amz.domain.bo.BizLogisticsChannelBo; +import org.asinkj.amz.service.IBizLogisticsChannelService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 物流商渠道 + * 前端访问路由地址为:/amz/logisticsChannel + * + * @author shuo hu + * @date 2025-03-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/logisticsChannel") +public class BizLogisticsChannelController extends BaseController { + + private final IBizLogisticsChannelService bizLogisticsChannelService; + + /** + * 查询物流商渠道列表 + */ + @SaCheckPermission("amz:logisticsChannel:list") + @GetMapping("/list") + public TableDataInfo list(BizLogisticsChannelBo bo, PageQuery pageQuery) { + return bizLogisticsChannelService.queryPageList(bo, pageQuery); + } + + @SaCheckPermission("amz:logisticsChannel:list") + @GetMapping("/list/all") + public TableDataInfo listAll() { + return bizLogisticsChannelService.queryListAll(); + } + + /** + * 导出物流商渠道列表 + */ + @SaCheckPermission("amz:logisticsChannel:export") + @Log(title = "物流商渠道", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizLogisticsChannelBo bo, HttpServletResponse response) { + List list = bizLogisticsChannelService.queryList(bo); + ExcelUtil.exportExcel(list, "物流商渠道", BizLogisticsChannelVo.class, response); + } + + /** + * 获取物流商渠道详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:logisticsChannel:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizLogisticsChannelService.queryById(id)); + } + + /** + * 新增物流商渠道 + */ + @SaCheckPermission("amz:logisticsChannel:add") + @Log(title = "物流商渠道", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizLogisticsChannelBo bo) { + return toAjax(bizLogisticsChannelService.insertByBo(bo)); + } + + /** + * 修改物流商渠道 + */ + @SaCheckPermission("amz:logisticsChannel:edit") + @Log(title = "物流商渠道", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizLogisticsChannelBo bo) { + return toAjax(bizLogisticsChannelService.updateByBo(bo)); + } + + /** + * 删除物流商渠道 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:logisticsChannel:remove") + @Log(title = "物流商渠道", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizLogisticsChannelService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java new file mode 100644 index 0000000..a58e33a --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java @@ -0,0 +1,119 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.asinkj.common.idempotent.annotation.RepeatSubmit; +import org.asinkj.common.log.annotation.Log; +import org.asinkj.common.web.core.BaseController; +import org.asinkj.common.mybatis.core.page.PageQuery; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.log.enums.BusinessType; +import org.asinkj.common.excel.utils.ExcelUtil; +import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; +import org.asinkj.amz.domain.bo.BizLogisticsQuoteBo; +import org.asinkj.amz.service.IBizLogisticsQuoteService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 物流报价 + * 前端访问路由地址为:/amz/logisticsQuote + * + * @author shuo hu + * @date 2025-03-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/logisticsQuote") +public class BizLogisticsQuoteController extends BaseController { + + private final IBizLogisticsQuoteService bizLogisticsQuoteService; + + /** + * 查询物流报价列表 + */ + @SaCheckPermission("amz:logisticsQuote:list") + @GetMapping("/list") + public TableDataInfo list(BizLogisticsQuoteBo bo, PageQuery pageQuery) { + return bizLogisticsQuoteService.queryPageList(bo, pageQuery); + } + + /** + * 根据目的地仓库和渠道查询物流报价列表 + */ + @SaCheckPermission("amz:logisticsQuote:list") + @GetMapping("/query/{destination}/{channelId}") + public TableDataInfo queryWithDesAndChannel(@PathVariable("destination") @NotNull(message = "目的地不能为空") String destination, + @PathVariable("channelId") @NotNull(message = "渠道不能为空") String channelId) { + return bizLogisticsQuoteService.listWithDesAndChannel(destination, channelId); + } + + + + + /** + * 导出物流报价列表 + */ + @SaCheckPermission("amz:logisticsQuote:export") + @Log(title = "物流报价", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizLogisticsQuoteBo bo, HttpServletResponse response) { + List list = bizLogisticsQuoteService.queryList(bo); + ExcelUtil.exportExcel(list, "物流报价", BizLogisticsQuoteVo.class, response); + } + + /** + * 获取物流报价详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:logisticsQuote:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizLogisticsQuoteService.queryById(id)); + } + + /** + * 新增物流报价 + */ + @SaCheckPermission("amz:logisticsQuote:add") + @Log(title = "物流报价", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizLogisticsQuoteBo bo) { + return toAjax(bizLogisticsQuoteService.insertByBo(bo)); + } + + /** + * 修改物流报价 + */ + @SaCheckPermission("amz:logisticsQuote:edit") + @Log(title = "物流报价", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizLogisticsQuoteBo bo) { + return toAjax(bizLogisticsQuoteService.updateByBo(bo)); + } + + /** + * 删除物流报价 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:logisticsQuote:remove") + @Log(title = "物流报价", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizLogisticsQuoteService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentItemController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentItemController.java new file mode 100644 index 0000000..ba706b1 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentItemController.java @@ -0,0 +1,106 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.asinkj.common.idempotent.annotation.RepeatSubmit; +import org.asinkj.common.log.annotation.Log; +import org.asinkj.common.web.core.BaseController; +import org.asinkj.common.mybatis.core.page.PageQuery; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.log.enums.BusinessType; +import org.asinkj.common.excel.utils.ExcelUtil; +import org.asinkj.amz.domain.vo.BizShipmentItemVo; +import org.asinkj.amz.domain.bo.BizShipmentItemBo; +import org.asinkj.amz.service.IBizShipmentItemService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 货品明细 + * 前端访问路由地址为:/amz/shipmentItem + * + * @author shuo hu + * @date 2025-03-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/shipmentItem") +public class BizShipmentItemController extends BaseController { + + private final IBizShipmentItemService bizShipmentItemService; + + /** + * 查询货品明细列表 + */ + @SaCheckPermission("amz:shipmentItem:list") + @GetMapping("/list") + public TableDataInfo list(BizShipmentItemBo bo, PageQuery pageQuery) { + return bizShipmentItemService.queryPageList(bo, pageQuery); + } + + /** + * 导出货品明细列表 + */ + @SaCheckPermission("amz:shipmentItem:export") + @Log(title = "货品明细", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizShipmentItemBo bo, HttpServletResponse response) { + List list = bizShipmentItemService.queryList(bo); + ExcelUtil.exportExcel(list, "货品明细", BizShipmentItemVo.class, response); + } + + /** + * 获取货品明细详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:shipmentItem:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizShipmentItemService.queryById(id)); + } + + /** + * 新增货品明细 + */ + @SaCheckPermission("amz:shipmentItem:add") + @Log(title = "货品明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizShipmentItemBo bo) { + return toAjax(bizShipmentItemService.insertByBo(bo)); + } + + /** + * 修改货品明细 + */ + @SaCheckPermission("amz:shipmentItem:edit") + @Log(title = "货品明细", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizShipmentItemBo bo) { + return toAjax(bizShipmentItemService.updateByBo(bo)); + } + + /** + * 删除货品明细 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:shipmentItem:remove") + @Log(title = "货品明细", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizShipmentItemService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentPlanController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentPlanController.java new file mode 100644 index 0000000..30108ff --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentPlanController.java @@ -0,0 +1,121 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.asinkj.common.idempotent.annotation.RepeatSubmit; +import org.asinkj.common.log.annotation.Log; +import org.asinkj.common.web.core.BaseController; +import org.asinkj.common.mybatis.core.page.PageQuery; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.log.enums.BusinessType; +import org.asinkj.common.excel.utils.ExcelUtil; +import org.asinkj.amz.domain.vo.BizShipmentPlanVo; +import org.asinkj.amz.domain.bo.BizShipmentPlanBo; +import org.asinkj.amz.service.IBizShipmentPlanService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 货件计划 + * 前端访问路由地址为:/amz/shipmentPlan + * + * @author shuo hu + * @date 2025-03-19 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/shipmentPlan") +public class BizShipmentPlanController extends BaseController { + + private final IBizShipmentPlanService bizShipmentPlanService; + + /** + * 查询货件计划列表 + */ + @SaCheckPermission("amz:shipmentPlan:list") + @GetMapping("/list") + public TableDataInfo list(BizShipmentPlanBo bo, PageQuery pageQuery) { + return bizShipmentPlanService.queryPageList(bo, pageQuery); + } + + /** + * 导出货件计划列表 + */ + @SaCheckPermission("amz:shipmentPlan:export") + @Log(title = "货件计划", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizShipmentPlanBo bo, HttpServletResponse response) { + List list = bizShipmentPlanService.queryList(bo); + ExcelUtil.exportExcel(list, "货件计划", BizShipmentPlanVo.class, response); + } + + /** + * 获取货件计划详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:shipmentPlan:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizShipmentPlanService.queryById(id)); + } + + /** + * 新增货件计划 + */ + @SaCheckPermission("amz:shipmentPlan:add") + @Log(title = "货件计划", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizShipmentPlanBo bo) { + return toAjax(bizShipmentPlanService.insertByBo(bo)); + } + + /** + * 修改货件计划 + */ + @SaCheckPermission("amz:shipmentPlan:edit") + @Log(title = "货件计划", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizShipmentPlanBo bo) { + return toAjax(bizShipmentPlanService.updateByBo(bo)); + } + + /** + * 删除货件计划 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:shipmentPlan:remove") + @Log(title = "货件计划", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizShipmentPlanService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 获取货件计划详细信息 + * + * + */ + @SaCheckPermission("amz:shipmentPlan:query") + @GetMapping("/quote/{destination}/{channel}") + public R> getQuote(@NotNull(message = "主键不能为空") + @PathVariable String destination, + @PathVariable String channel) { + return R.ok(bizShipmentPlanService.getQuote(destination,channel)); + } + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentTrackingController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentTrackingController.java new file mode 100644 index 0000000..ae16fa0 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentTrackingController.java @@ -0,0 +1,106 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.asinkj.common.idempotent.annotation.RepeatSubmit; +import org.asinkj.common.log.annotation.Log; +import org.asinkj.common.web.core.BaseController; +import org.asinkj.common.mybatis.core.page.PageQuery; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.log.enums.BusinessType; +import org.asinkj.common.excel.utils.ExcelUtil; +import org.asinkj.amz.domain.vo.BizShipmentTrackingVo; +import org.asinkj.amz.domain.bo.BizShipmentTrackingBo; +import org.asinkj.amz.service.IBizShipmentTrackingService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 物流追踪 + * 前端访问路由地址为:/amz/shipmentTracking + * + * @author shuo hu + * @date 2025-03-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/shipmentTracking") +public class BizShipmentTrackingController extends BaseController { + + private final IBizShipmentTrackingService bizShipmentTrackingService; + + /** + * 查询物流追踪列表 + */ + @SaCheckPermission("amz:shipmentTracking:list") + @GetMapping("/list") + public TableDataInfo list(BizShipmentTrackingBo bo, PageQuery pageQuery) { + return bizShipmentTrackingService.queryPageList(bo, pageQuery); + } + + /** + * 导出物流追踪列表 + */ + @SaCheckPermission("amz:shipmentTracking:export") + @Log(title = "物流追踪", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizShipmentTrackingBo bo, HttpServletResponse response) { + List list = bizShipmentTrackingService.queryList(bo); + ExcelUtil.exportExcel(list, "物流追踪", BizShipmentTrackingVo.class, response); + } + + /** + * 获取物流追踪详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:shipmentTracking:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizShipmentTrackingService.queryById(id)); + } + + /** + * 新增物流追踪 + */ + @SaCheckPermission("amz:shipmentTracking:add") + @Log(title = "物流追踪", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizShipmentTrackingBo bo) { + return toAjax(bizShipmentTrackingService.insertByBo(bo)); + } + + /** + * 修改物流追踪 + */ + @SaCheckPermission("amz:shipmentTracking:edit") + @Log(title = "物流追踪", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizShipmentTrackingBo bo) { + return toAjax(bizShipmentTrackingService.updateByBo(bo)); + } + + /** + * 删除物流追踪 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:shipmentTracking:remove") + @Log(title = "物流追踪", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizShipmentTrackingService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/SysAmazonStoreController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/SysAmazonStoreController.java new file mode 100644 index 0000000..fe7a4ea --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/SysAmazonStoreController.java @@ -0,0 +1,137 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.asinkj.common.idempotent.annotation.RepeatSubmit; +import org.asinkj.common.log.annotation.Log; +import org.asinkj.common.web.core.BaseController; +import org.asinkj.common.mybatis.core.page.PageQuery; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.log.enums.BusinessType; +import org.asinkj.common.excel.utils.ExcelUtil; +import org.asinkj.amz.domain.vo.SysAmazonStoreVo; +import org.asinkj.amz.domain.bo.SysAmazonStoreBo; +import org.asinkj.amz.service.ISysAmazonStoreService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 亚马逊店铺信息 + * 前端访问路由地址为:/amz/amazonStore + * + * @author shuo hu + * @date 2025-03-17 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/amazonStore") +public class SysAmazonStoreController extends BaseController { + + private final ISysAmazonStoreService sysAmazonStoreService; + + /** + * 查询亚马逊店铺信息列表 + */ + @SaCheckPermission("amz:amazonStore:list") + @GetMapping("/list") + public TableDataInfo list(SysAmazonStoreBo bo, PageQuery pageQuery) { + return sysAmazonStoreService.queryPageList(bo, pageQuery); + } + + /** + * 导出亚马逊店铺信息列表 + */ + @SaCheckPermission("amz:amazonStore:export") + @Log(title = "亚马逊店铺信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysAmazonStoreBo bo, HttpServletResponse response) { + List list = sysAmazonStoreService.queryList(bo); + ExcelUtil.exportExcel(list, "亚马逊店铺信息", SysAmazonStoreVo.class, response); + } + + /** + * 获取亚马逊店铺信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:amazonStore:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(sysAmazonStoreService.queryById(id)); + } + + /** + * 新增亚马逊店铺信息 + */ + @SaCheckPermission("amz:amazonStore:add") + @Log(title = "亚马逊店铺信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysAmazonStoreBo bo) { + return toAjax(sysAmazonStoreService.insertByBo(bo)); + } + + /** + * 修改亚马逊店铺信息 + */ + @SaCheckPermission("amz:amazonStore:edit") + @Log(title = "亚马逊店铺信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysAmazonStoreBo bo) { + return toAjax(sysAmazonStoreService.updateByBo(bo)); + } + + /** + * 删除亚马逊店铺信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:amazonStore:remove") + @Log(title = "亚马逊店铺信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(sysAmazonStoreService.deleteWithValidByIds(List.of(ids), true)); + } + + + /** + * 亚马逊api + * + * + */ + @SaCheckPermission("amz:amazonStore:remove") + @Log(title = "获取亚马逊店铺数据", businessType = BusinessType.OTHER) + @GetMapping("/amz-store") + public R getAmzApiToken() { + sysAmazonStoreService.collectAmzStoreData(); + return R.ok(); + } + + /** + * 亚马逊api + * + * + */ + @SaCheckPermission("amz:amazonStore:remove") + @Log(title = "亚马逊FBA", businessType = BusinessType.OTHER) + @GetMapping("/amz-fba/{startDate}/{endDate}") + public R getAmzFbaToken(@PathVariable String startDate, @PathVariable String endDate) { + try { + sysAmazonStoreService.pullAmzFBAData(startDate,endDate); + } catch (Exception e) { + throw new RuntimeException(e); + } + return R.ok(); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizInquiryRequest.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizInquiryRequest.java new file mode 100644 index 0000000..6686112 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizInquiryRequest.java @@ -0,0 +1,95 @@ +package org.asinkj.amz.domain; + +import org.asinkj.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 物流询价对象 biz_inquiry_request + * + * @author shuo hu + * @date 2025-03-21 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_inquiry_request") +public class BizInquiryRequest extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID(自增序列) + */ + private Long id; + + /** + * 询价单号(规则:INQ+年月+6位序列) + */ + private String inquiryNo; + + /** + * 发起人id + */ + private Long requesterId; + + /** + * 目标物流商ID列表(JSON数组格式,示例:[101,202,303]) + */ + private String targetProviders; + + /** + * 目的地(存储四级行政编码,如CN310115) + */ + private String destination; + + /** + * 运输方式(枚举值:AIR-空运/SEA-海运/LAND-公路/RAIL-铁路) + */ + private String transportChannel; + + /** + * 询价状态(状态机:OPEN-开放中/CLOSED-已关闭/COMPLETED-已完成) + */ + private String inquiryStatus; + + /** + * 报价截止时间(超过此时限自动关闭询价) + */ + private LocalDateTime deadline; + + /** + * $column.columnComment + */ + @TableLogic + private String delFlag; + + /** + * 渠道ID(system=dict_code,custom=自定义渠道ID) + */ + private Long channelId; + + /** + * 渠道名称 + */ + private String channelName; + + /** + * 报价有效的开始日期 + */ + private Date effectiveStartTime; + + /** + * 报价有效的结束日期 + */ + private Date effectiveEndTime; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsChannel.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsChannel.java new file mode 100644 index 0000000..af1e40d --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsChannel.java @@ -0,0 +1,66 @@ +package org.asinkj.amz.domain; + +import org.asinkj.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 物流商渠道对象 biz_logistics_channel + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_logistics_channel") +public class BizLogisticsChannel extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 渠道ID + */ + private Long id; + + /** + * 物流商用户ID(关联sys_user) + */ + private Long userId; + + /** + * 渠道名称 + */ + private String channelName; + + /** + * 渠道描述 + */ + private String description; + + /** + * 删除标志(0正常 2删除) + */ + @TableLogic + private String delFlag; + + /** + * 渠道类型(system=系统/custom=自定义) + */ + private String channelType; + + /** + * 国家 + */ + private String country; + + /** + * 运输方式 + */ + private String shippingMethod; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsCustomChannel.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsCustomChannel.java new file mode 100644 index 0000000..102b3c8 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsCustomChannel.java @@ -0,0 +1,51 @@ +package org.asinkj.amz.domain; + +import org.asinkj.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 物流商自定义渠道对象 biz_logistics_custom_channel + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_logistics_channel") +public class BizLogisticsCustomChannel extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 渠道ID + */ + private Long id; + + /** + * 物流商用户ID(关联sys_user) + */ + private Long userId; + + /** + * 渠道名称 + */ + private String channelName; + + /** + * 渠道描述 + */ + private String description; + + /** + * 删除标志(0正常 2删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsQuote.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsQuote.java new file mode 100644 index 0000000..9435023 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsQuote.java @@ -0,0 +1,93 @@ +package org.asinkj.amz.domain; + +import org.asinkj.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 物流报价对象 biz_logistics_quote + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_logistics_quote") +public class BizLogisticsQuote extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + private Long id; + + /** + * 物流商用户ID(关联sys_user表) + */ + private Long userId; + + /** + * 目的地(建议使用ISO国家代码如CN/US/GB) + */ + private String destination; + + /** + * 渠道名称(冗余存储,保证查询效率) + */ + private String transportChannel; + + /** + * 基础价格 + */ + private Long price; + + /** + * 时效(单位:天) + */ + private Long leadTime; + + /** + * 附加费 + */ + private Long surcharge; + + /** + * 报价生效日期 + */ + private Date quoteDate; + + /** + * 提交状态(Y已提交 N未提交) + */ + private String isSubmitted; + + /** + * 报价备注 + */ + private String remark; + + /** + * 删除标志(0正常 2删除) + */ + @TableLogic + private String delFlag; + + /** + * 渠道类型(system=系统/custom=自定义) + */ + private String channelType; + + /** + * 渠道ID(system=dict_code,custom=自定义渠道ID) + */ + private Long channelId; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentItem.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentItem.java new file mode 100644 index 0000000..a2bd8d6 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentItem.java @@ -0,0 +1,83 @@ +package org.asinkj.amz.domain; + +import org.asinkj.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 货品明细对象 biz_shipment_item + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_shipment_item") +public class BizShipmentItem extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + private Long id; + + /** + * 关联货件ID + */ + private String shipmentId; + + /** + * 商家SKU + */ + private String msku; + + /** + * 仓储编码 + */ + private String fnsku; + + /** + * 发货量 + */ + private Long quantityShipped; + + /** + * 收货量 + */ + private Long quantityReceived; + + /** + * 预处理说明 + */ + private String prepInstruction; + + /** + * 责任方 + */ + private String prepOwner; + + /** + * 商品SKU + */ + private String sku; + + /** + * 有效期 + */ + private Date expiration; + + /** + * $column.columnComment + */ + @TableLogic + private String delFlag; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java new file mode 100644 index 0000000..7f1e63c --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java @@ -0,0 +1,137 @@ +package org.asinkj.amz.domain; + +import org.asinkj.amz.hanlder.AddressTypeHandler; +import org.asinkj.asinking.entity.FbaShipmentApiResponse; +import org.asinkj.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 货件计划对象 biz_shipment_plan + * + * @author shuo hu + * @date 2025-03-19 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_shipment_plan") +public class BizShipmentPlan extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + private Long id; + + /** + * 关联系统ID + */ + private Long sid; + + /** + * 货件编号 + */ + private String shipmentId; + + /** + * 货件名称 + */ + private String shipmentName; + + /** + * 是否关闭 + */ + private String isClosed; + + /** + * 货件状态 + */ + private String shipmentStatus; + + /** + * 物流中心编码 + */ + private String destinationFulfillmentCenterId; + + /** + * 运输模式 + */ + private String shippingMode; + + /** + * 运输方案 + */ + private String shippingSolution; + + /** + * 最后更新时间 + */ + private Date gmtModified; + + /** + * 创建时间 + */ + private Date gmtCreate; + + /** + * 同步时间 + */ + private Date syncTime; + + /** + * 计划发货日期 + */ + private Date staShipmentDate; + + /** + * 预计到货开始日 + */ + private Date staDeliveryStartDate; + + /** + * 预计到货截止日 + */ + private Date staDeliveryEndDate; + + /** + * 发货地址 + */ + @TableField(typeHandler = AddressTypeHandler.class) + private FbaShipmentApiResponse.Address shipFromAddress; + + /** + * 收货地址 + */ + @TableField(typeHandler = AddressTypeHandler.class) + private FbaShipmentApiResponse.Address shipToAddress; + + /** + * 参考编号 + */ + private String referenceId; + + /** + * 入库计划ID + */ + private String staInboundPlanId; + + /** + * 是否STA计划 + */ + private String isSta; + + /** + * 删除标记 + */ + @TableLogic + private String delFlag; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentTracking.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentTracking.java new file mode 100644 index 0000000..a44f9f1 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentTracking.java @@ -0,0 +1,51 @@ +package org.asinkj.amz.domain; + +import org.asinkj.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 物流追踪对象 biz_shipment_tracking + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_shipment_tracking") +public class BizShipmentTracking extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + private Long id; + + /** + * 关联货件ID + */ + private String shipmentId; + + /** + * 箱号 + */ + private String boxId; + + /** + * 物流单号 + */ + private String trackingNumber; + + /** + * $column.columnComment + */ + @TableLogic + private String delFlag; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/SysAmazonStore.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/SysAmazonStore.java new file mode 100644 index 0000000..495339c --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/SysAmazonStore.java @@ -0,0 +1,104 @@ +package org.asinkj.amz.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import org.asinkj.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 亚马逊店铺信息对象 sys_amazon_store + * + * @author shuo hu + * @date 2025-03-17 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_amazon_store") +public class SysAmazonStore extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 所属用户ID(关联sys_user) + */ + private Long userId; + + /** + * 领星ERP店铺标识ID + */ + private Long sid; + + /** + * 站点ID + */ + private Long mid; + + /** + * 店铺名称 + */ + @JsonProperty("name") + private String storeName; + + /** + * 亚马逊店铺ID(如AZTOL**) + */ + @JsonProperty("seller_id") + private String sellerId; + + /** + * 店铺账户名称 + */ + @JsonProperty("account_name") + private String accountName; + + /** + * 店铺账号ID + */ + @JsonProperty("seller_account_id") + private Long sellerAccountId; + + /** + * 站点简称(如NA/EU) + */ + private String region; + + /** + * 商城所在国家 + */ + private String country; + + /** + * 亚马逊市场ID + */ + @JsonProperty("marketplace_id") + private String marketplaceId; + + /** + * 广告授权 0未授权 1已授权 + */ + @JsonProperty("has_ads_setting") + private Long hasAdsSetting; + + /** + * 店铺状态 0停用 1正常 2异常 3欠费 + */ + private Long status; + + /** + * 删除标志(0存在 2删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizInquiryRequestBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizInquiryRequestBo.java new file mode 100644 index 0000000..a2c9a20 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizInquiryRequestBo.java @@ -0,0 +1,96 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizInquiryRequest; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 物流询价业务对象 biz_inquiry_request + * + * @author shuo hu + * @date 2025-03-21 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizInquiryRequest.class, reverseConvertGenerate = false) +public class BizInquiryRequestBo extends BaseEntity { + + /** + * 主键ID(自增序列) + */ + private Long id; + + /** + * 询价单号(规则:INQ+年月+6位序列) + */ + private String inquiryNo; + + /** + * 发起人id + */ + @NotNull(message = "发起人id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long requesterId; + + /** + * 目标物流商ID列表(JSON数组格式,示例:[101,202,303]) + */ + @NotBlank(message = "目标物流商ID列表(JSON数组格式,示例:[101,202,303])不能为空", groups = { AddGroup.class, EditGroup.class }) + private String targetProviders; + + /** + * 目的地(存储四级行政编码,如CN310115) + */ + @NotBlank(message = "目的地(存储四级行政编码,如CN310115)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String destination; + + /** + * 运输方式(枚举值:AIR-空运/SEA-海运/LAND-公路/RAIL-铁路) + */ + @NotBlank(message = "运输方式(枚举值:AIR-空运/SEA-海运/LAND-公路/RAIL-铁路)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String transportChannel; + + /** + * 询价状态(状态机:OPEN-开放中/CLOSED-已关闭/COMPLETED-已完成) + */ + @NotBlank(message = "询价状态(状态机:OPEN-开放中/CLOSED-已关闭/COMPLETED-已完成)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String inquiryStatus; + + /** + * 报价截止时间(超过此时限自动关闭询价) + */ + @NotNull(message = "报价截止时间(超过此时限自动关闭询价)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date deadline; + + /** + * 渠道ID(system=dict_code,custom=自定义渠道ID) + */ + @NotNull(message = "渠道ID(system=dict_code,custom=自定义渠道ID)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long channelId; + + /** + * 渠道名称 + */ + @NotBlank(message = "渠道名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String channelName; + + /** + * 报价有效的开始日期 + */ + @NotNull(message = "报价有效的开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date effectiveStartTime; + + /** + * 报价有效的结束日期 + */ + @NotNull(message = "报价有效的结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date effectiveEndTime; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsChannelBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsChannelBo.java new file mode 100644 index 0000000..56a629b --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsChannelBo.java @@ -0,0 +1,66 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizLogisticsChannel; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 物流商渠道业务对象 biz_logistics_channel + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizLogisticsChannel.class, reverseConvertGenerate = false) +public class BizLogisticsChannelBo extends BaseEntity { + + /** + * 渠道ID + */ +// @NotNull(message = "渠道ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * 物流商用户ID(关联sys_user) + */ +// @NotNull(message = "物流商用户ID(关联sys_user)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + /** + * 渠道名称 + */ + @NotBlank(message = "渠道名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String channelName; + + /** + * 渠道描述 + */ + @NotBlank(message = "渠道描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String description; + + /** + * 渠道类型(system=系统/custom=自定义) + */ +// @NotBlank(message = "渠道类型(system=系统/custom=自定义)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String channelType; + + /** + * 国家 + */ + @NotBlank(message = "国家不能为空", groups = { AddGroup.class, EditGroup.class }) + private String country; + + /** + * 运输方式 + */ + @NotBlank(message = "运输方式不能为空", groups = { AddGroup.class, EditGroup.class }) + private String shippingMethod; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsCustomChannelBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsCustomChannelBo.java new file mode 100644 index 0000000..d1cfe8d --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsCustomChannelBo.java @@ -0,0 +1,48 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizLogisticsCustomChannel; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 物流商自定义渠道业务对象 biz_logistics_custom_channel + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizLogisticsCustomChannel.class, reverseConvertGenerate = false) +public class BizLogisticsCustomChannelBo extends BaseEntity { + + /** + * 渠道ID + */ + @NotNull(message = "渠道ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * 物流商用户ID(关联sys_user) + */ + @NotNull(message = "物流商用户ID(关联sys_user)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + /** + * 渠道名称 + */ + @NotBlank(message = "渠道名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String channelName; + + /** + * 渠道描述 + */ + @NotBlank(message = "渠道描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String description; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteBo.java new file mode 100644 index 0000000..86412fa --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteBo.java @@ -0,0 +1,98 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizLogisticsQuote; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 物流报价业务对象 biz_logistics_quote + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizLogisticsQuote.class, reverseConvertGenerate = false) +public class BizLogisticsQuoteBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * 物流商用户ID(关联sys_user表) + */ + @NotNull(message = "物流商用户ID(关联sys_user表)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + /** + * 目的地(建议使用ISO国家代码如CN/US/GB) + */ + @NotBlank(message = "目的地(建议使用ISO国家代码如CN/US/GB)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String destination; + + /** + * 渠道名称(冗余存储,保证查询效率) + */ + @NotBlank(message = "渠道名称(冗余存储,保证查询效率)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String transportChannel; + + /** + * 基础价格 + */ + @NotNull(message = "基础价格不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long price; + + /** + * 时效(单位:天) + */ + @NotNull(message = "时效(单位:天)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long leadTime; + + /** + * 附加费 + */ + @NotNull(message = "附加费不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long surcharge; + + /** + * 报价生效日期 + */ + @NotNull(message = "报价生效日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date quoteDate; + + /** + * 提交状态(Y已提交 N未提交) + */ + @NotBlank(message = "提交状态(Y已提交 N未提交)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String isSubmitted; + + /** + * 报价备注 + */ + @NotBlank(message = "报价备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + /** + * 渠道类型(system=系统/custom=自定义) + */ + @NotBlank(message = "渠道类型(system=系统/custom=自定义)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String channelType; + + /** + * 渠道ID(system=dict_code,custom=自定义渠道ID) + */ + @NotNull(message = "渠道ID(system=dict_code,custom=自定义渠道ID)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long channelId; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentItemBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentItemBo.java new file mode 100644 index 0000000..4bb1755 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentItemBo.java @@ -0,0 +1,86 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizShipmentItem; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 货品明细业务对象 biz_shipment_item + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizShipmentItem.class, reverseConvertGenerate = false) +public class BizShipmentItemBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * 关联货件ID + */ + @NotBlank(message = "关联货件ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private String shipmentId; + + /** + * 商家SKU + */ + @NotBlank(message = "商家SKU不能为空", groups = { AddGroup.class, EditGroup.class }) + private String msku; + + /** + * 仓储编码 + */ + @NotBlank(message = "仓储编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fnsku; + + /** + * 发货量 + */ + @NotNull(message = "发货量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long quantityShipped; + + /** + * 收货量 + */ + @NotNull(message = "收货量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long quantityReceived; + + /** + * 预处理说明 + */ + @NotBlank(message = "预处理说明不能为空", groups = { AddGroup.class, EditGroup.class }) + private String prepInstruction; + + /** + * 责任方 + */ + @NotBlank(message = "责任方不能为空", groups = { AddGroup.class, EditGroup.class }) + private String prepOwner; + + /** + * 商品SKU + */ + @NotBlank(message = "商品SKU不能为空", groups = { AddGroup.class, EditGroup.class }) + private String sku; + + /** + * 有效期 + */ + @NotNull(message = "有效期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date expiration; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentPlanBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentPlanBo.java new file mode 100644 index 0000000..2532308 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentPlanBo.java @@ -0,0 +1,147 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizShipmentPlan; +import org.asinkj.asinking.entity.FbaShipmentApiResponse; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 货件计划业务对象 biz_shipment_plan + * + * @author shuo hu + * @date 2025-03-19 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizShipmentPlan.class, reverseConvertGenerate = false) +public class BizShipmentPlanBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * 关联系统ID + */ + @NotNull(message = "关联系统ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long sid; + + /** + * 货件编号 + */ + @NotBlank(message = "货件编号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String shipmentId; + + /** + * 货件名称 + */ + @NotBlank(message = "货件名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String shipmentName; + + /** + * 是否关闭 + */ + @NotBlank(message = "是否关闭不能为空", groups = { AddGroup.class, EditGroup.class }) + private String isClosed; + + /** + * 货件状态 + */ + @NotBlank(message = "货件状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String shipmentStatus; + + /** + * 物流中心编码 + */ + @NotBlank(message = "物流中心编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private String destinationFulfillmentCenterId; + + /** + * 运输模式 + */ + @NotBlank(message = "运输模式不能为空", groups = { AddGroup.class, EditGroup.class }) + private String shippingMode; + + /** + * 运输方案 + */ + @NotBlank(message = "运输方案不能为空", groups = { AddGroup.class, EditGroup.class }) + private String shippingSolution; + + /** + * 最后更新时间 + */ + @NotNull(message = "最后更新时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date gmtModified; + + /** + * 创建时间 + */ + @NotNull(message = "创建时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date gmtCreate; + + /** + * 同步时间 + */ + @NotNull(message = "同步时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date syncTime; + + /** + * 计划发货日期 + */ + @NotNull(message = "计划发货日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date staShipmentDate; + + /** + * 预计到货开始日 + */ + @NotNull(message = "预计到货开始日不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date staDeliveryStartDate; + + /** + * 预计到货截止日 + */ + @NotNull(message = "预计到货截止日不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date staDeliveryEndDate; + + /** + * 发货地址 + */ + @NotBlank(message = "发货地址不能为空", groups = { AddGroup.class, EditGroup.class }) + private FbaShipmentApiResponse.Address shipFromAddress; + + /** + * 收货地址 + */ + @NotBlank(message = "收货地址不能为空", groups = { AddGroup.class, EditGroup.class }) + private FbaShipmentApiResponse.Address shipToAddress; + + /** + * 参考编号 + */ + @NotBlank(message = "参考编号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String referenceId; + + /** + * 入库计划ID + */ + @NotBlank(message = "入库计划ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private String staInboundPlanId; + + /** + * 是否STA计划 + */ + @NotBlank(message = "是否STA计划不能为空", groups = { AddGroup.class, EditGroup.class }) + private String isSta; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentTrackingBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentTrackingBo.java new file mode 100644 index 0000000..35f641d --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentTrackingBo.java @@ -0,0 +1,48 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizShipmentTracking; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 物流追踪业务对象 biz_shipment_tracking + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizShipmentTracking.class, reverseConvertGenerate = false) +public class BizShipmentTrackingBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * 关联货件ID + */ + @NotBlank(message = "关联货件ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private String shipmentId; + + /** + * 箱号 + */ + @NotBlank(message = "箱号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String boxId; + + /** + * 物流单号 + */ + @NotBlank(message = "物流单号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String trackingNumber; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/SysAmazonStoreBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/SysAmazonStoreBo.java new file mode 100644 index 0000000..1c270d0 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/SysAmazonStoreBo.java @@ -0,0 +1,102 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.SysAmazonStore; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 亚马逊店铺信息业务对象 sys_amazon_store + * + * @author shuo hu + * @date 2025-03-17 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SysAmazonStore.class, reverseConvertGenerate = false) +public class SysAmazonStoreBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 所属用户ID(关联sys_user) + */ + @NotNull(message = "所属用户ID(关联sys_user)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + /** + * 领星ERP店铺标识ID + */ + @NotNull(message = "领星ERP店铺标识ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long sid; + + /** + * 站点ID + */ + @NotNull(message = "站点ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long mid; + + /** + * 店铺名称 + */ + @NotBlank(message = "店铺名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String storeName; + + /** + * 亚马逊店铺ID(如AZTOL**) + */ + @NotBlank(message = "亚马逊店铺ID(如AZTOL**)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String sellerId; + + /** + * 店铺账户名称 + */ + @NotBlank(message = "店铺账户名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String accountName; + + /** + * 店铺账号ID + */ + @NotNull(message = "店铺账号ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long sellerAccountId; + + /** + * 站点简称(如NA/EU) + */ + @NotBlank(message = "站点简称(如NA/EU)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String region; + + /** + * 商城所在国家 + */ + @NotBlank(message = "商城所在国家不能为空", groups = { AddGroup.class, EditGroup.class }) + private String country; + + /** + * 亚马逊市场ID + */ + @NotBlank(message = "亚马逊市场ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private String marketplaceId; + + /** + * 广告授权 0未授权 1已授权 + */ + @NotNull(message = "广告授权 0未授权 1已授权不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long hasAdsSetting; + + /** + * 店铺状态 0停用 1正常 2异常 3欠费 + */ + @NotNull(message = "店铺状态 0停用 1正常 2异常 3欠费不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long status; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java new file mode 100644 index 0000000..f456ed0 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java @@ -0,0 +1,115 @@ +package org.asinkj.amz.domain.vo; + +import java.time.LocalDateTime; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.asinkj.amz.domain.BizInquiryRequest; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 物流询价视图对象 biz_inquiry_request + * + * @author shuo hu + * @date 2025-03-21 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizInquiryRequest.class) +public class BizInquiryRequestVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID(自增序列) + */ + @ExcelProperty(value = "主键ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "自=增序列") + private Long id; + + /** + * 询价单号(规则:INQ+年月+6位序列) + */ + @ExcelProperty(value = "询价单号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "规=则:INQ+年月+6位序列") + private String inquiryNo; + + /** + * 发起人id + */ + @ExcelProperty(value = "发起人id") + private Long requesterId; + + /** + * 目标物流商ID列表(JSON数组格式,示例:[101,202,303]) + */ + @ExcelProperty(value = "目标物流商ID列表", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "J=SON数组格式,示例:[101,202,303]") + private String targetProviders; + + /** + * 目的地(存储四级行政编码,如CN310115) + */ + @ExcelProperty(value = "目的地", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "存=储四级行政编码,如CN310115") + private String destination; + + /** + * 运输方式(枚举值:AIR-空运/SEA-海运/LAND-公路/RAIL-铁路) + */ + @ExcelProperty(value = "运输方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "枚=举值:AIR-空运/SEA-海运/LAND-公路/RAIL-铁路") + private String transportChannel; + + /** + * 询价状态(状态机:OPEN-开放中/CLOSED-已关闭/COMPLETED-已完成) + */ + @ExcelProperty(value = "询价状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "状=态机:OPEN-开放中/CLOSED-已关闭/COMPLETED-已完成") + private String inquiryStatus; + + /** + * 报价截止时间(超过此时限自动关闭询价) + */ + @ExcelProperty(value = "报价截止时间", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "超=过此时限自动关闭询价") + private LocalDateTime deadline; + + /** + * 渠道ID(system=dict_code,custom=自定义渠道ID) + */ + @ExcelProperty(value = "渠道ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "s=ystem=dict_code,custom=自定义渠道ID") + private Long channelId; + + /** + * 渠道名称 + */ + @ExcelProperty(value = "渠道名称") + private String channelName; + + /** + * 报价有效的开始日期 + */ + @ExcelProperty(value = "报价有效的开始日期") + private Date effectiveStartTime; + + /** + * 报价有效的结束日期 + */ + @ExcelProperty(value = "报价有效的结束日期") + private Date effectiveEndTime; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsChannelVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsChannelVo.java new file mode 100644 index 0000000..9a38796 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsChannelVo.java @@ -0,0 +1,76 @@ +package org.asinkj.amz.domain.vo; + +import org.asinkj.amz.domain.BizLogisticsChannel; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 物流商渠道视图对象 biz_logistics_channel + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizLogisticsChannel.class) +public class BizLogisticsChannelVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 渠道ID + */ + @ExcelProperty(value = "渠道ID") + private Long id; + + /** + * 物流商用户ID(关联sys_user) + */ + @ExcelProperty(value = "物流商用户ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "关=联sys_user") + private Long userId; + + /** + * 渠道名称 + */ + @ExcelProperty(value = "渠道名称") + private String channelName; + + /** + * 渠道描述 + */ + @ExcelProperty(value = "渠道描述") + private String description; + + /** + * 渠道类型(system=系统/custom=自定义) + */ + @ExcelProperty(value = "渠道类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "s=ystem=系统/custom=自定义") + private String channelType; + + /** + * 国家 + */ + @ExcelProperty(value = "国家") + private String country; + + /** + * 运输方式 + */ + @ExcelProperty(value = "运输方式") + private String shippingMethod; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsCustomChannelVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsCustomChannelVo.java new file mode 100644 index 0000000..48f007c --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsCustomChannelVo.java @@ -0,0 +1,57 @@ +package org.asinkj.amz.domain.vo; + +import org.asinkj.amz.domain.BizLogisticsCustomChannel; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 物流商自定义渠道视图对象 biz_logistics_custom_channel + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizLogisticsCustomChannel.class) +public class BizLogisticsCustomChannelVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 渠道ID + */ + @ExcelProperty(value = "渠道ID") + private Long id; + + /** + * 物流商用户ID(关联sys_user) + */ + @ExcelProperty(value = "物流商用户ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "关=联sys_user") + private Long userId; + + /** + * 渠道名称 + */ + @ExcelProperty(value = "渠道名称") + private String channelName; + + /** + * 渠道描述 + */ + @ExcelProperty(value = "渠道描述") + private String description; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsQuoteVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsQuoteVo.java new file mode 100644 index 0000000..769a18a --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsQuoteVo.java @@ -0,0 +1,113 @@ +package org.asinkj.amz.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.asinkj.amz.domain.BizLogisticsQuote; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 物流报价视图对象 biz_logistics_quote + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizLogisticsQuote.class) +public class BizLogisticsQuoteVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 物流商用户ID(关联sys_user表) + */ + @ExcelProperty(value = "物流商用户ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "关=联sys_user表") + private Long userId; + + /** + * 目的地(建议使用ISO国家代码如CN/US/GB) + */ + @ExcelProperty(value = "目的地", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "建=议使用ISO国家代码如CN/US/GB") + private String destination; + + /** + * 渠道名称(冗余存储,保证查询效率) + */ + @ExcelProperty(value = "渠道名称", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "冗=余存储,保证查询效率") + private String transportChannel; + + /** + * 基础价格 + */ + @ExcelProperty(value = "基础价格") + private Long price; + + /** + * 时效(单位:天) + */ + @ExcelProperty(value = "时效", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "单=位:天") + private Long leadTime; + + /** + * 附加费 + */ + @ExcelProperty(value = "附加费") + private Long surcharge; + + /** + * 报价生效日期 + */ + @ExcelProperty(value = "报价生效日期") + private Date quoteDate; + + /** + * 提交状态(Y已提交 N未提交) + */ + @ExcelProperty(value = "提交状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "Y=已提交,N=未提交") + private String isSubmitted; + + /** + * 报价备注 + */ + @ExcelProperty(value = "报价备注") + private String remark; + + /** + * 渠道类型(system=系统/custom=自定义) + */ + @ExcelProperty(value = "渠道类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "s=ystem=系统/custom=自定义") + private String channelType; + + /** + * 渠道ID(system=dict_code,custom=自定义渠道ID) + */ + @ExcelProperty(value = "渠道ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "s=ystem=dict_code,custom=自定义渠道ID") + private Long channelId; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentItemVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentItemVo.java new file mode 100644 index 0000000..be055c8 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentItemVo.java @@ -0,0 +1,94 @@ +package org.asinkj.amz.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.asinkj.amz.domain.BizShipmentItem; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 货品明细视图对象 biz_shipment_item + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizShipmentItem.class) +public class BizShipmentItemVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 关联货件ID + */ + @ExcelProperty(value = "关联货件ID") + private String shipmentId; + + /** + * 商家SKU + */ + @ExcelProperty(value = "商家SKU") + private String msku; + + /** + * 仓储编码 + */ + @ExcelProperty(value = "仓储编码") + private String fnsku; + + /** + * 发货量 + */ + @ExcelProperty(value = "发货量") + private Long quantityShipped; + + /** + * 收货量 + */ + @ExcelProperty(value = "收货量") + private Long quantityReceived; + + /** + * 预处理说明 + */ + @ExcelProperty(value = "预处理说明") + private String prepInstruction; + + /** + * 责任方 + */ + @ExcelProperty(value = "责任方") + private String prepOwner; + + /** + * 商品SKU + */ + @ExcelProperty(value = "商品SKU") + private String sku; + + /** + * 有效期 + */ + @ExcelProperty(value = "有效期") + private Date expiration; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanVo.java new file mode 100644 index 0000000..e6cd85a --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanVo.java @@ -0,0 +1,168 @@ +package org.asinkj.amz.domain.vo; + +import java.util.Date; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.asinkj.amz.domain.BizShipmentPlan; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.amz.hanlder.AddressTypeHandler; +import org.asinkj.asinking.entity.FbaShipmentApiResponse; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 货件计划视图对象 biz_shipment_plan + * + * @author shuo hu + * @date 2025-03-19 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizShipmentPlan.class) +public class BizShipmentPlanVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 关联系统ID + */ + @ExcelProperty(value = "关联系统ID") + private Long sid; + + /** + * 货件编号 + */ + @ExcelProperty(value = "货件编号") + private String shipmentId; + + /** + * 货件名称 + */ + @ExcelProperty(value = "货件名称") + private String shipmentName; + + /** + * 是否关闭 + */ + @ExcelProperty(value = "是否关闭") + private String isClosed; + + /** + * 货件状态 + */ + @ExcelProperty(value = "货件状态") + private String shipmentStatus; + + /** + * 物流中心编码 + */ + @ExcelProperty(value = "物流中心编码") + private String destinationFulfillmentCenterId; + + /** + * 运输模式 + */ + @ExcelProperty(value = "运输模式") + private String shippingMode; + + /** + * 运输方案 + */ + @ExcelProperty(value = "运输方案") + private String shippingSolution; + + /** + * 最后更新时间 + */ + @ExcelProperty(value = "最后更新时间") + private Date gmtModified; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date gmtCreate; + + /** + * 同步时间 + */ + @ExcelProperty(value = "同步时间") + private Date syncTime; + + /** + * 计划发货日期 + */ + @ExcelProperty(value = "计划发货日期") + private Date staShipmentDate; + + /** + * 预计到货开始日 + */ + @ExcelProperty(value = "预计到货开始日") + private Date staDeliveryStartDate; + + /** + * 预计到货截止日 + */ + @ExcelProperty(value = "预计到货截止日") + private Date staDeliveryEndDate; + + /** + * 发货地址 + */ + @ExcelProperty(value = "发货地址") + @TableField(value = "ship_from_address", typeHandler = AddressTypeHandler.class) + private FbaShipmentApiResponse.Address shipFromAddress; + + /** + * 收货地址 + */ + @ExcelProperty(value = "收货地址") + @TableField(value = "ship_to_address", typeHandler = AddressTypeHandler.class) + private FbaShipmentApiResponse.Address shipToAddress; + + /** + * 参考编号 + */ + @ExcelProperty(value = "参考编号") + private String referenceId; + + /** + * 入库计划ID + */ + @ExcelProperty(value = "入库计划ID") + private String staInboundPlanId; + + /** + * 是否STA计划 + */ + @ExcelProperty(value = "是否STA计划") + private String isSta; + + + // 显式添加 Setter(即使使用 @Data) + public void setShipFromAddress(FbaShipmentApiResponse.Address shipFromAddress) { + System.out.printf(String.valueOf(shipToAddress)); + this.shipFromAddress = shipFromAddress; + } + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentTrackingVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentTrackingVo.java new file mode 100644 index 0000000..d50ea35 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentTrackingVo.java @@ -0,0 +1,56 @@ +package org.asinkj.amz.domain.vo; + +import org.asinkj.amz.domain.BizShipmentTracking; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 物流追踪视图对象 biz_shipment_tracking + * + * @author shuo hu + * @date 2025-03-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizShipmentTracking.class) +public class BizShipmentTrackingVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 关联货件ID + */ + @ExcelProperty(value = "关联货件ID") + private String shipmentId; + + /** + * 箱号 + */ + @ExcelProperty(value = "箱号") + private String boxId; + + /** + * 物流单号 + */ + @ExcelProperty(value = "物流单号") + private String trackingNumber; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/SysAmazonStoreVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/SysAmazonStoreVo.java new file mode 100644 index 0000000..badcab2 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/SysAmazonStoreVo.java @@ -0,0 +1,113 @@ +package org.asinkj.amz.domain.vo; + +import org.asinkj.amz.domain.SysAmazonStore; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 亚马逊店铺信息视图对象 sys_amazon_store + * + * @author shuo hu + * @date 2025-03-17 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SysAmazonStore.class) +public class SysAmazonStoreVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 所属用户ID(关联sys_user) + */ + @ExcelProperty(value = "所属用户ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "关=联sys_user") + private Long userId; + + /** + * 领星ERP店铺标识ID + */ + @ExcelProperty(value = "领星ERP店铺标识ID") + private Long sid; + + /** + * 站点ID + */ + @ExcelProperty(value = "站点ID") + private Long mid; + + /** + * 店铺名称 + */ + @ExcelProperty(value = "店铺名称") + private String storeName; + + /** + * 亚马逊店铺ID(如AZTOL**) + */ + @ExcelProperty(value = "亚马逊店铺ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=AZTOL**") + private String sellerId; + + /** + * 店铺账户名称 + */ + @ExcelProperty(value = "店铺账户名称") + private String accountName; + + /** + * 店铺账号ID + */ + @ExcelProperty(value = "店铺账号ID") + private Long sellerAccountId; + + /** + * 站点简称(如NA/EU) + */ + @ExcelProperty(value = "站点简称", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=NA/EU") + private String region; + + /** + * 商城所在国家 + */ + @ExcelProperty(value = "商城所在国家") + private String country; + + /** + * 亚马逊市场ID + */ + @ExcelProperty(value = "亚马逊市场ID") + private String marketplaceId; + + /** + * 广告授权 0未授权 1已授权 + */ + @ExcelProperty(value = "广告授权 0未授权 1已授权") + private Long hasAdsSetting; + + /** + * 店铺状态 0停用 1正常 2异常 3欠费 + */ + @ExcelProperty(value = "店铺状态 0停用 1正常 2异常 3欠费") + private Long status; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/hanlder/AddressTypeHandler.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/hanlder/AddressTypeHandler.java new file mode 100644 index 0000000..a9d76ea --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/hanlder/AddressTypeHandler.java @@ -0,0 +1,51 @@ +package org.asinkj.amz.hanlder; + +import com.alibaba.fastjson2.JSON; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; +import org.asinkj.asinking.entity.FbaShipmentApiResponse; +import org.asinkj.asinking.entity.FbaShipmentApiResponse.Address; +import org.postgresql.util.PGobject; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@Slf4j +@MappedTypes(FbaShipmentApiResponse.Address.class) +@MappedJdbcTypes(JdbcType.VARCHAR) +public class AddressTypeHandler extends BaseTypeHandler { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, Address address, JdbcType jdbcType) throws SQLException { + PGobject jsonObject = new PGobject(); + jsonObject.setType("jsonb"); + jsonObject.setValue(com.alibaba.fastjson2.JSON.toJSONString(address)); + ps.setObject(i, jsonObject); + } + + @Override + public Address getNullableResult(ResultSet rs, String columnName) throws SQLException { + log.info("getNullableResult: {}", columnName); + return parseJsonb(rs.getString(columnName)); + } + + @Override + public Address getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return parseJsonb(rs.getString(columnIndex)); + } + + @Override + public Address getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return parseJsonb(cs.getString(columnIndex)); + } + + private Address parseJsonb(String json) { + log.info("parseJsonb: {}", json); + return com.alibaba.fastjson2.JSON.parseObject(json, Address.class); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/hanlder/MyBatisConfig.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/hanlder/MyBatisConfig.java new file mode 100644 index 0000000..c9148f6 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/hanlder/MyBatisConfig.java @@ -0,0 +1,17 @@ +package org.asinkj.amz.hanlder; + +import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; +import com.baomidou.mybatisplus.core.MybatisConfiguration; +import org.asinkj.asinking.entity.FbaShipmentApiResponse; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MyBatisConfig implements ConfigurationCustomizer { + + + + @Override + public void customize(MybatisConfiguration configuration) { + configuration.getTypeHandlerRegistry().register(FbaShipmentApiResponse.Address.class, AddressTypeHandler.class); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizInquiryRequestMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizInquiryRequestMapper.java new file mode 100644 index 0000000..bf6e0ec --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizInquiryRequestMapper.java @@ -0,0 +1,15 @@ +package org.asinkj.amz.mapper; + +import org.asinkj.amz.domain.BizInquiryRequest; +import org.asinkj.amz.domain.vo.BizInquiryRequestVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 物流询价Mapper接口 + * + * @author shuo hu + * @date 2025-03-21 + */ +public interface BizInquiryRequestMapper extends BaseMapperPlus { + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsChannelMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsChannelMapper.java new file mode 100644 index 0000000..c6a9a10 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsChannelMapper.java @@ -0,0 +1,15 @@ +package org.asinkj.amz.mapper; + +import org.asinkj.amz.domain.BizLogisticsChannel; +import org.asinkj.amz.domain.vo.BizLogisticsChannelVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 物流商渠道Mapper接口 + * + * @author shuo hu + * @date 2025-03-20 + */ +public interface BizLogisticsChannelMapper extends BaseMapperPlus { + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsCustomChannelMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsCustomChannelMapper.java new file mode 100644 index 0000000..13dc3da --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsCustomChannelMapper.java @@ -0,0 +1,15 @@ +package org.asinkj.amz.mapper; + +import org.asinkj.amz.domain.BizLogisticsCustomChannel; +import org.asinkj.amz.domain.vo.BizLogisticsCustomChannelVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 物流商自定义渠道Mapper接口 + * + * @author shuo hu + * @date 2025-03-20 + */ +public interface BizLogisticsCustomChannelMapper extends BaseMapperPlus { + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsQuoteMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsQuoteMapper.java new file mode 100644 index 0000000..381ee51 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizLogisticsQuoteMapper.java @@ -0,0 +1,15 @@ +package org.asinkj.amz.mapper; + +import org.asinkj.amz.domain.BizLogisticsQuote; +import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 物流报价Mapper接口 + * + * @author shuo hu + * @date 2025-03-20 + */ +public interface BizLogisticsQuoteMapper extends BaseMapperPlus { + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentItemMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentItemMapper.java new file mode 100644 index 0000000..e21f4ce --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentItemMapper.java @@ -0,0 +1,15 @@ +package org.asinkj.amz.mapper; + +import org.asinkj.amz.domain.BizShipmentItem; +import org.asinkj.amz.domain.vo.BizShipmentItemVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 货品明细Mapper接口 + * + * @author shuo hu + * @date 2025-03-20 + */ +public interface BizShipmentItemMapper extends BaseMapperPlus { + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentPlanMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentPlanMapper.java new file mode 100644 index 0000000..989abf7 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentPlanMapper.java @@ -0,0 +1,23 @@ +package org.asinkj.amz.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.asinkj.amz.domain.BizShipmentPlan; +import org.asinkj.amz.domain.vo.BizShipmentPlanVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; + +import java.util.Collection; +import java.util.List; + +/** + * 货件计划Mapper接口 + * + * @author shuo hu + * @date 2025-03-19 + */ +@Mapper +public interface BizShipmentPlanMapper extends BaseMapperPlus { + + List selectExistingShipmentIds(@Param("batchIds") Collection batchIds); + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentTrackingMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentTrackingMapper.java new file mode 100644 index 0000000..9b37089 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentTrackingMapper.java @@ -0,0 +1,15 @@ +package org.asinkj.amz.mapper; + +import org.asinkj.amz.domain.BizShipmentTracking; +import org.asinkj.amz.domain.vo.BizShipmentTrackingVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 物流追踪Mapper接口 + * + * @author shuo hu + * @date 2025-03-20 + */ +public interface BizShipmentTrackingMapper extends BaseMapperPlus { + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/SysAmazonStoreMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/SysAmazonStoreMapper.java new file mode 100644 index 0000000..aaf5fa6 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/SysAmazonStoreMapper.java @@ -0,0 +1,19 @@ +package org.asinkj.amz.mapper; + +import org.asinkj.amz.domain.SysAmazonStore; +import org.asinkj.amz.domain.vo.SysAmazonStoreVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; +import org.mapstruct.Mapper; + +import java.util.List; + +/** + * 亚马逊店铺信息Mapper接口 + * + * @author shuo hu + * @date 2025-03-17 + */ +public interface SysAmazonStoreMapper extends BaseMapperPlus { + + void batchInsertOrUpdate(List dataList); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizInquiryRequestService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizInquiryRequestService.java new file mode 100644 index 0000000..e0d003f --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizInquiryRequestService.java @@ -0,0 +1,73 @@ +package org.asinkj.amz.service; + +import jakarta.validation.constraints.NotNull; +import org.asinkj.amz.domain.BizInquiryRequest; +import org.asinkj.amz.domain.vo.BizInquiryRequestVo; +import org.asinkj.amz.domain.bo.BizInquiryRequestBo; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 物流询价Service接口 + * + * @author shuo hu + * @date 2025-03-21 + */ +public interface IBizInquiryRequestService { + + /** + * 查询物流询价 + * + * @param id 主键 + * @return 物流询价 + */ + BizInquiryRequestVo queryById(Long id); + + /** + * 分页查询物流询价列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物流询价分页列表 + */ + TableDataInfo queryPageList(BizInquiryRequestBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的物流询价列表 + * + * @param bo 查询条件 + * @return 物流询价列表 + */ + List queryList(BizInquiryRequestBo bo); + + /** + * 新增物流询价 + * + * @param bo 物流询价 + * @return 是否新增成功 + */ + Boolean insertByBo(BizInquiryRequestBo bo); + + /** + * 修改物流询价 + * + * @param bo 物流询价 + * @return 是否修改成功 + */ + Boolean updateByBo(BizInquiryRequestBo bo); + + /** + * 校验并批量删除物流询价信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + R createWithDesAndChannel(@NotNull(message = "目的地不能为空") String destination, @NotNull(message = "渠道不能为空") String channelId); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsChannelService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsChannelService.java new file mode 100644 index 0000000..e9a4387 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsChannelService.java @@ -0,0 +1,71 @@ +package org.asinkj.amz.service; + +import org.asinkj.amz.domain.BizLogisticsChannel; +import org.asinkj.amz.domain.vo.BizLogisticsChannelVo; +import org.asinkj.amz.domain.bo.BizLogisticsChannelBo; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 物流商渠道Service接口 + * + * @author shuo hu + * @date 2025-03-20 + */ +public interface IBizLogisticsChannelService { + + /** + * 查询物流商渠道 + * + * @param id 主键 + * @return 物流商渠道 + */ + BizLogisticsChannelVo queryById(Long id); + + /** + * 分页查询物流商渠道列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物流商渠道分页列表 + */ + TableDataInfo queryPageList(BizLogisticsChannelBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的物流商渠道列表 + * + * @param bo 查询条件 + * @return 物流商渠道列表 + */ + List queryList(BizLogisticsChannelBo bo); + + /** + * 新增物流商渠道 + * + * @param bo 物流商渠道 + * @return 是否新增成功 + */ + Boolean insertByBo(BizLogisticsChannelBo bo); + + /** + * 修改物流商渠道 + * + * @param bo 物流商渠道 + * @return 是否修改成功 + */ + Boolean updateByBo(BizLogisticsChannelBo bo); + + /** + * 校验并批量删除物流商渠道信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + TableDataInfo queryListAll(); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java new file mode 100644 index 0000000..1507217 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java @@ -0,0 +1,77 @@ +package org.asinkj.amz.service; + +import jakarta.validation.constraints.NotNull; +import org.asinkj.amz.domain.BizLogisticsQuote; +import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; +import org.asinkj.amz.domain.bo.BizLogisticsQuoteBo; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 物流报价Service接口 + * + * @author shuo hu + * @date 2025-03-20 + */ +public interface IBizLogisticsQuoteService { + + /** + * 查询物流报价 + * + * @param id 主键 + * @return 物流报价 + */ + BizLogisticsQuoteVo queryById(Long id); + + /** + * 分页查询物流报价列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物流报价分页列表 + */ + TableDataInfo queryPageList(BizLogisticsQuoteBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的物流报价列表 + * + * @param bo 查询条件 + * @return 物流报价列表 + */ + List queryList(BizLogisticsQuoteBo bo); + + /** + * 新增物流报价 + * + * @param bo 物流报价 + * @return 是否新增成功 + */ + Boolean insertByBo(BizLogisticsQuoteBo bo); + + /** + * 修改物流报价 + * + * @param bo 物流报价 + * @return 是否修改成功 + */ + Boolean updateByBo(BizLogisticsQuoteBo bo); + + /** + * 校验并批量删除物流报价信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + List queryQuoteWithDestination(String destination, String channel); + + TableDataInfo listWithDesAndChannel(@NotNull(message = "目的地不能为空") String destination, @NotNull(message = "渠道不能为空") String channel); + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentItemService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentItemService.java new file mode 100644 index 0000000..d5bba4c --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentItemService.java @@ -0,0 +1,69 @@ +package org.asinkj.amz.service; + +import org.asinkj.amz.domain.BizShipmentItem; +import org.asinkj.amz.domain.vo.BizShipmentItemVo; +import org.asinkj.amz.domain.bo.BizShipmentItemBo; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 货品明细Service接口 + * + * @author shuo hu + * @date 2025-03-20 + */ +public interface IBizShipmentItemService { + + /** + * 查询货品明细 + * + * @param id 主键 + * @return 货品明细 + */ + BizShipmentItemVo queryById(Long id); + + /** + * 分页查询货品明细列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 货品明细分页列表 + */ + TableDataInfo queryPageList(BizShipmentItemBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的货品明细列表 + * + * @param bo 查询条件 + * @return 货品明细列表 + */ + List queryList(BizShipmentItemBo bo); + + /** + * 新增货品明细 + * + * @param bo 货品明细 + * @return 是否新增成功 + */ + Boolean insertByBo(BizShipmentItemBo bo); + + /** + * 修改货品明细 + * + * @param bo 货品明细 + * @return 是否修改成功 + */ + Boolean updateByBo(BizShipmentItemBo bo); + + /** + * 校验并批量删除货品明细信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java new file mode 100644 index 0000000..d57b66f --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java @@ -0,0 +1,73 @@ +package org.asinkj.amz.service; + +import jakarta.validation.constraints.NotNull; +import org.asinkj.amz.domain.BizShipmentPlan; +import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; +import org.asinkj.amz.domain.vo.BizShipmentPlanVo; +import org.asinkj.amz.domain.bo.BizShipmentPlanBo; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 货件计划Service接口 + * + * @author shuo hu + * @date 2025-03-19 + */ +public interface IBizShipmentPlanService { + + /** + * 查询货件计划 + * + * @param id 主键 + * @return 货件计划 + */ + BizShipmentPlanVo queryById(Long id); + + /** + * 分页查询货件计划列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 货件计划分页列表 + */ + TableDataInfo queryPageList(BizShipmentPlanBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的货件计划列表 + * + * @param bo 查询条件 + * @return 货件计划列表 + */ + List queryList(BizShipmentPlanBo bo); + + /** + * 新增货件计划 + * + * @param bo 货件计划 + * @return 是否新增成功 + */ + Boolean insertByBo(BizShipmentPlanBo bo); + + /** + * 修改货件计划 + * + * @param bo 货件计划 + * @return 是否修改成功 + */ + Boolean updateByBo(BizShipmentPlanBo bo); + + /** + * 校验并批量删除货件计划信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + List getQuote(@NotNull(message = "主键不能为空") String destination, String channel); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentTrackingService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentTrackingService.java new file mode 100644 index 0000000..f8f4ec8 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentTrackingService.java @@ -0,0 +1,69 @@ +package org.asinkj.amz.service; + +import org.asinkj.amz.domain.BizShipmentTracking; +import org.asinkj.amz.domain.vo.BizShipmentTrackingVo; +import org.asinkj.amz.domain.bo.BizShipmentTrackingBo; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 物流追踪Service接口 + * + * @author shuo hu + * @date 2025-03-20 + */ +public interface IBizShipmentTrackingService { + + /** + * 查询物流追踪 + * + * @param id 主键 + * @return 物流追踪 + */ + BizShipmentTrackingVo queryById(Long id); + + /** + * 分页查询物流追踪列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物流追踪分页列表 + */ + TableDataInfo queryPageList(BizShipmentTrackingBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的物流追踪列表 + * + * @param bo 查询条件 + * @return 物流追踪列表 + */ + List queryList(BizShipmentTrackingBo bo); + + /** + * 新增物流追踪 + * + * @param bo 物流追踪 + * @return 是否新增成功 + */ + Boolean insertByBo(BizShipmentTrackingBo bo); + + /** + * 修改物流追踪 + * + * @param bo 物流追踪 + * @return 是否修改成功 + */ + Boolean updateByBo(BizShipmentTrackingBo bo); + + /** + * 校验并批量删除物流追踪信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java new file mode 100644 index 0000000..781e777 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java @@ -0,0 +1,78 @@ +package org.asinkj.amz.service; + +import org.asinkj.amz.domain.SysAmazonStore; +import org.asinkj.amz.domain.vo.SysAmazonStoreVo; +import org.asinkj.amz.domain.bo.SysAmazonStoreBo; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 亚马逊店铺信息Service接口 + * + * @author shuo hu + * @date 2025-03-17 + */ +public interface ISysAmazonStoreService { + + /** + * 查询亚马逊店铺信息 + * + * @param id 主键 + * @return 亚马逊店铺信息 + */ + SysAmazonStoreVo queryById(Long id); + + /** + * 分页查询亚马逊店铺信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 亚马逊店铺信息分页列表 + */ + TableDataInfo queryPageList(SysAmazonStoreBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的亚马逊店铺信息列表 + * + * @param bo 查询条件 + * @return 亚马逊店铺信息列表 + */ + List queryList(SysAmazonStoreBo bo); + + /** + * 新增亚马逊店铺信息 + * + * @param bo 亚马逊店铺信息 + * @return 是否新增成功 + */ + Boolean insertByBo(SysAmazonStoreBo bo); + + /** + * 修改亚马逊店铺信息 + * + * @param bo 亚马逊店铺信息 + * @return 是否修改成功 + */ + Boolean updateByBo(SysAmazonStoreBo bo); + + /** + * 校验并批量删除亚马逊店铺信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + void collectAmzStoreData(); + + void pullAmzStoreData() throws Exception; + + void pullAmzFBAData(String startDate,String endDate) throws Exception; + + void getAmzStoreTokenData() throws Exception; +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java new file mode 100644 index 0000000..0443945 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java @@ -0,0 +1,213 @@ +package org.asinkj.amz.service.impl; + +import cn.hutool.core.util.NumberUtil; +import lombok.extern.slf4j.Slf4j; +import org.asinkj.amz.domain.vo.BizLogisticsChannelVo; +import org.asinkj.amz.service.IBizLogisticsChannelService; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.utils.MapstructUtils; +import org.asinkj.common.core.utils.StringUtils; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.asinkj.common.satoken.utils.LoginHelper; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.BizInquiryRequestBo; +import org.asinkj.amz.domain.vo.BizInquiryRequestVo; +import org.asinkj.amz.domain.BizInquiryRequest; +import org.asinkj.amz.mapper.BizInquiryRequestMapper; +import org.asinkj.amz.service.IBizInquiryRequestService; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 物流询价Service业务层处理 + * + * @author shuo hu + * @date 2025-03-21 + */ +@RequiredArgsConstructor +@Service +@Slf4j +public class BizInquiryRequestServiceImpl implements IBizInquiryRequestService { + + private final BizInquiryRequestMapper baseMapper; + + + private static final AtomicInteger sequence = new AtomicInteger(0); + + + @Resource + private IBizLogisticsChannelService bizLogisticsChannelService; + + @Resource + private BizInquiryRequestMapper billingRequestMapper; + + /** + * 查询物流询价 + * + * @param id 主键 + * @return 物流询价 + */ + @Override + public BizInquiryRequestVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询物流询价列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物流询价分页列表 + */ + @Override + public TableDataInfo queryPageList(BizInquiryRequestBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的物流询价列表 + * + * @param bo 查询条件 + * @return 物流询价列表 + */ + @Override + public List queryList(BizInquiryRequestBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizInquiryRequestBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getInquiryNo()), BizInquiryRequest::getInquiryNo, bo.getInquiryNo()); + lqw.eq(bo.getRequesterId() != null, BizInquiryRequest::getRequesterId, bo.getRequesterId()); + lqw.eq(StringUtils.isNotBlank(bo.getTargetProviders()), BizInquiryRequest::getTargetProviders, bo.getTargetProviders()); + lqw.eq(StringUtils.isNotBlank(bo.getDestination()), BizInquiryRequest::getDestination, bo.getDestination()); + lqw.eq(StringUtils.isNotBlank(bo.getTransportChannel()), BizInquiryRequest::getTransportChannel, bo.getTransportChannel()); + lqw.eq(StringUtils.isNotBlank(bo.getInquiryStatus()), BizInquiryRequest::getInquiryStatus, bo.getInquiryStatus()); + lqw.eq(bo.getDeadline() != null, BizInquiryRequest::getDeadline, bo.getDeadline()); + lqw.eq(bo.getChannelId() != null, BizInquiryRequest::getChannelId, bo.getChannelId()); + lqw.like(StringUtils.isNotBlank(bo.getChannelName()), BizInquiryRequest::getChannelName, bo.getChannelName()); + lqw.eq(bo.getEffectiveStartTime() != null, BizInquiryRequest::getEffectiveStartTime, bo.getEffectiveStartTime()); + lqw.eq(bo.getEffectiveEndTime() != null, BizInquiryRequest::getEffectiveEndTime, bo.getEffectiveEndTime()); + return lqw; + } + + /** + * 新增物流询价 + * + * @param bo 物流询价 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizInquiryRequestBo bo) { + BizInquiryRequest add = MapstructUtils.convert(bo, BizInquiryRequest.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改物流询价 + * + * @param bo 物流询价 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizInquiryRequestBo bo) { + BizInquiryRequest update = MapstructUtils.convert(bo, BizInquiryRequest.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizInquiryRequest entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除物流询价信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public R createWithDesAndChannel(String destination, String channelId) { + BizInquiryRequest bizInquiryRequest = new BizInquiryRequest(); + bizInquiryRequest.setDestination(destination); + bizInquiryRequest.setChannelId(NumberUtil.parseLong(channelId)); + if (bizInquiryRequest.getChannelId() == null) { + return R.fail("渠道不能为空"); + } + if (bizInquiryRequest.getDestination() == null) { + return R.fail("目的地不能为空"); + } + //询价单号(规则:INQ+年月+6位序列) + bizInquiryRequest.setInquiryNo(generateInquiryNo()); + //查询出渠道信息 + + BizLogisticsChannelVo bizLogisticsChannelVo = bizLogisticsChannelService.queryById(bizInquiryRequest.getChannelId()); + if (bizLogisticsChannelVo == null){ + log.info("渠道信息为空"); + } + if ("air".equals(bizLogisticsChannelVo.getShippingMethod())){ + bizInquiryRequest.setEffectiveStartTime(new Date()); + bizInquiryRequest.setEffectiveEndTime(new Date()); + }else if("sea".equals(bizLogisticsChannelVo.getShippingMethod())){ + //获取下周一的日期 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_WEEK, 8 - calendar.get(Calendar.DAY_OF_WEEK)); + bizInquiryRequest.setEffectiveStartTime(calendar.getTime()); + //获取下下周一的日期 + calendar.add(Calendar.DAY_OF_WEEK, 7); + bizInquiryRequest.setEffectiveEndTime(calendar.getTime()); + } + + bizInquiryRequest.setChannelName(bizLogisticsChannelVo.getChannelName()); + bizInquiryRequest.setTransportChannel(bizLogisticsChannelVo.getShippingMethod()); + //获取当天上午11点的时间 ? + bizInquiryRequest.setDeadline(LocalDate.now() + .atTime(11, 0)); + bizInquiryRequest.setRequesterId(LoginHelper.getUserId()); + + billingRequestMapper.insert(bizInquiryRequest); + + return R.ok(); + } + + private String generateInquiryNo() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM"); + String datePart = sdf.format(new Date()); + int seq = sequence.incrementAndGet(); + if (seq > 999999) { // 处理溢出,例如重置或抛出异常 + sequence.set(0); + seq = 0; + } + return String.format("INQ%s%06d", datePart, seq); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsChannelServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsChannelServiceImpl.java new file mode 100644 index 0000000..32cf1fa --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsChannelServiceImpl.java @@ -0,0 +1,156 @@ +package org.asinkj.amz.service.impl; + +import cn.hutool.core.util.StrUtil; +import org.asinkj.common.core.utils.MapstructUtils; +import org.asinkj.common.core.utils.StringUtils; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.asinkj.common.satoken.utils.LoginHelper; +import org.asinkj.system.api.model.LoginUser; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.BizLogisticsChannelBo; +import org.asinkj.amz.domain.vo.BizLogisticsChannelVo; +import org.asinkj.amz.domain.BizLogisticsChannel; +import org.asinkj.amz.mapper.BizLogisticsChannelMapper; +import org.asinkj.amz.service.IBizLogisticsChannelService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 物流商渠道Service业务层处理 + * + * @author shuo hu + * @date 2025-03-20 + */ +@RequiredArgsConstructor +@Service +public class BizLogisticsChannelServiceImpl implements IBizLogisticsChannelService { + + private final BizLogisticsChannelMapper baseMapper; + + /** + * 查询物流商渠道 + * + * @param id 主键 + * @return 物流商渠道 + */ + @Override + public BizLogisticsChannelVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询物流商渠道列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物流商渠道分页列表 + */ + @Override + public TableDataInfo queryPageList(BizLogisticsChannelBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的物流商渠道列表 + * + * @param bo 查询条件 + * @return 物流商渠道列表 + */ + @Override + public List queryList(BizLogisticsChannelBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizLogisticsChannelBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getUserId() != null, BizLogisticsChannel::getUserId, bo.getUserId()); + lqw.like(StringUtils.isNotBlank(bo.getChannelName()), BizLogisticsChannel::getChannelName, bo.getChannelName()); + lqw.eq(StringUtils.isNotBlank(bo.getDescription()), BizLogisticsChannel::getDescription, bo.getDescription()); + lqw.eq(StringUtils.isNotBlank(bo.getChannelType()), BizLogisticsChannel::getChannelType, bo.getChannelType()); + lqw.eq(StringUtils.isNotBlank(bo.getCountry()), BizLogisticsChannel::getCountry, bo.getCountry()); + lqw.eq(StringUtils.isNotBlank(bo.getShippingMethod()), BizLogisticsChannel::getShippingMethod, bo.getShippingMethod()); + lqw.in(BizLogisticsChannel::getUserId, LoginHelper.getUserId(), 1L); + return lqw; + } + + /** + * 新增物流商渠道 + * + * @param bo 物流商渠道 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizLogisticsChannelBo bo) { + BizLogisticsChannel add = MapstructUtils.convert(bo, BizLogisticsChannel.class); + validEntityBeforeSave(add); + LoginUser loginUser = LoginHelper.getLoginUser(); + assert add != null; + if (LoginHelper.isSuperAdmin()) { + add.setUserId(1L); + add.setChannelType("system"); + } else { + add.setUserId(loginUser.getUserId()); + add.setChannelType("custom"); + } + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改物流商渠道 + * + * @param bo 物流商渠道 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizLogisticsChannelBo bo) { + BizLogisticsChannel update = MapstructUtils.convert(bo, BizLogisticsChannel.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizLogisticsChannel entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除物流商渠道信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public TableDataInfo queryListAll() { + + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(BizLogisticsChannel::getChannelType, "system"); + return TableDataInfo.build(baseMapper.selectVoList(lqw)); + + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java new file mode 100644 index 0000000..562dd7e --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java @@ -0,0 +1,185 @@ +package org.asinkj.amz.service.impl; + +import cn.hutool.core.util.NumberUtil; +import lombok.extern.slf4j.Slf4j; +import org.asinkj.amz.domain.BizInquiryRequest; +import org.asinkj.amz.domain.BizLogisticsChannel; +import org.asinkj.amz.domain.vo.BizLogisticsChannelVo; +import org.asinkj.amz.mapper.BizInquiryRequestMapper; +import org.asinkj.amz.service.IBizInquiryRequestService; +import org.asinkj.amz.service.IBizLogisticsChannelService; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.utils.MapstructUtils; +import org.asinkj.common.core.utils.StringUtils; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.BizLogisticsQuoteBo; +import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; +import org.asinkj.amz.domain.BizLogisticsQuote; +import org.asinkj.amz.mapper.BizLogisticsQuoteMapper; +import org.asinkj.amz.service.IBizLogisticsQuoteService; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 物流报价Service业务层处理 + * + * @author shuo hu + * @date 2025-03-20 + */ +@RequiredArgsConstructor +@Service +@Slf4j +public class BizLogisticsQuoteServiceImpl implements IBizLogisticsQuoteService { + + private final BizLogisticsQuoteMapper baseMapper; + + + + + @Resource + private IBizLogisticsChannelService bizLogisticsChannelService; + + @Resource + private BizInquiryRequestMapper billingRequestMapper; + + /** + * 查询物流报价 + * + * @param id 主键 + * @return 物流报价 + */ + @Override + public BizLogisticsQuoteVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询物流报价列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物流报价分页列表 + */ + @Override + public TableDataInfo queryPageList(BizLogisticsQuoteBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的物流报价列表 + * + * @param bo 查询条件 + * @return 物流报价列表 + */ + @Override + public List queryList(BizLogisticsQuoteBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizLogisticsQuoteBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getUserId() != null, BizLogisticsQuote::getUserId, bo.getUserId()); + lqw.eq(StringUtils.isNotBlank(bo.getDestination()), BizLogisticsQuote::getDestination, bo.getDestination()); + lqw.eq(StringUtils.isNotBlank(bo.getTransportChannel()), BizLogisticsQuote::getTransportChannel, bo.getTransportChannel()); + lqw.eq(bo.getPrice() != null, BizLogisticsQuote::getPrice, bo.getPrice()); + lqw.eq(bo.getLeadTime() != null, BizLogisticsQuote::getLeadTime, bo.getLeadTime()); + lqw.eq(bo.getSurcharge() != null, BizLogisticsQuote::getSurcharge, bo.getSurcharge()); + lqw.eq(bo.getQuoteDate() != null, BizLogisticsQuote::getQuoteDate, bo.getQuoteDate()); + lqw.eq(StringUtils.isNotBlank(bo.getIsSubmitted()), BizLogisticsQuote::getIsSubmitted, bo.getIsSubmitted()); + lqw.eq(StringUtils.isNotBlank(bo.getChannelType()), BizLogisticsQuote::getChannelType, bo.getChannelType()); + lqw.eq(bo.getChannelId() != null, BizLogisticsQuote::getChannelId, bo.getChannelId()); + return lqw; + } + + /** + * 新增物流报价 + * + * @param bo 物流报价 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizLogisticsQuoteBo bo) { + BizLogisticsQuote add = MapstructUtils.convert(bo, BizLogisticsQuote.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改物流报价 + * + * @param bo 物流报价 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizLogisticsQuoteBo bo) { + BizLogisticsQuote update = MapstructUtils.convert(bo, BizLogisticsQuote.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizLogisticsQuote entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除物流报价信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public List queryQuoteWithDestination(String destination, String channel) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BizLogisticsQuote::getDestination, destination); + queryWrapper.eq(BizLogisticsQuote::getTransportChannel, channel); + return baseMapper.selectVoList(queryWrapper); + } + + @Override + public TableDataInfo listWithDesAndChannel(String destination, String channel) { + + + if (StringUtils.isNotBlank(destination) && StringUtils.isNotBlank(channel)) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BizLogisticsQuote::getDestination, destination); + queryWrapper.eq(BizLogisticsQuote::getChannelId, NumberUtil.parseLong(channel)); + return TableDataInfo.build(baseMapper.selectVoList(queryWrapper)); + } + return null; + } + + + + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentItemServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentItemServiceImpl.java new file mode 100644 index 0000000..14d25e6 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentItemServiceImpl.java @@ -0,0 +1,137 @@ +package org.asinkj.amz.service.impl; + +import org.asinkj.common.core.utils.MapstructUtils; +import org.asinkj.common.core.utils.StringUtils; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.BizShipmentItemBo; +import org.asinkj.amz.domain.vo.BizShipmentItemVo; +import org.asinkj.amz.domain.BizShipmentItem; +import org.asinkj.amz.mapper.BizShipmentItemMapper; +import org.asinkj.amz.service.IBizShipmentItemService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 货品明细Service业务层处理 + * + * @author shuo hu + * @date 2025-03-20 + */ +@RequiredArgsConstructor +@Service +public class BizShipmentItemServiceImpl implements IBizShipmentItemService { + + private final BizShipmentItemMapper baseMapper; + + /** + * 查询货品明细 + * + * @param id 主键 + * @return 货品明细 + */ + @Override + public BizShipmentItemVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询货品明细列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 货品明细分页列表 + */ + @Override + public TableDataInfo queryPageList(BizShipmentItemBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的货品明细列表 + * + * @param bo 查询条件 + * @return 货品明细列表 + */ + @Override + public List queryList(BizShipmentItemBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizShipmentItemBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getShipmentId()), BizShipmentItem::getShipmentId, bo.getShipmentId()); + lqw.eq(StringUtils.isNotBlank(bo.getMsku()), BizShipmentItem::getMsku, bo.getMsku()); + lqw.eq(StringUtils.isNotBlank(bo.getFnsku()), BizShipmentItem::getFnsku, bo.getFnsku()); + lqw.eq(bo.getQuantityShipped() != null, BizShipmentItem::getQuantityShipped, bo.getQuantityShipped()); + lqw.eq(bo.getQuantityReceived() != null, BizShipmentItem::getQuantityReceived, bo.getQuantityReceived()); + lqw.eq(StringUtils.isNotBlank(bo.getPrepInstruction()), BizShipmentItem::getPrepInstruction, bo.getPrepInstruction()); + lqw.eq(StringUtils.isNotBlank(bo.getPrepOwner()), BizShipmentItem::getPrepOwner, bo.getPrepOwner()); + lqw.eq(StringUtils.isNotBlank(bo.getSku()), BizShipmentItem::getSku, bo.getSku()); + lqw.eq(bo.getExpiration() != null, BizShipmentItem::getExpiration, bo.getExpiration()); + return lqw; + } + + /** + * 新增货品明细 + * + * @param bo 货品明细 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizShipmentItemBo bo) { + BizShipmentItem add = MapstructUtils.convert(bo, BizShipmentItem.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改货品明细 + * + * @param bo 货品明细 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizShipmentItemBo bo) { + BizShipmentItem update = MapstructUtils.convert(bo, BizShipmentItem.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizShipmentItem entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除货品明细信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java new file mode 100644 index 0000000..675a2a7 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java @@ -0,0 +1,159 @@ +package org.asinkj.amz.service.impl; + +import org.asinkj.amz.domain.BizLogisticsQuote; +import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; +import org.asinkj.amz.service.IBizLogisticsQuoteService; +import org.asinkj.common.core.utils.MapstructUtils; +import org.asinkj.common.core.utils.StringUtils; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.BizShipmentPlanBo; +import org.asinkj.amz.domain.vo.BizShipmentPlanVo; +import org.asinkj.amz.domain.BizShipmentPlan; +import org.asinkj.amz.mapper.BizShipmentPlanMapper; +import org.asinkj.amz.service.IBizShipmentPlanService; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 货件计划Service业务层处理 + * + * @author shuo hu + * @date 2025-03-19 + */ +@RequiredArgsConstructor +@Service +public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { + + private final BizShipmentPlanMapper baseMapper; + + @Resource + private IBizLogisticsQuoteService iLogisticsQuoteService;; + + /** + * 查询货件计划 + * + * @param id 主键 + * @return 货件计划 + */ + @Override + public BizShipmentPlanVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询货件计划列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 货件计划分页列表 + */ + @Override + public TableDataInfo queryPageList(BizShipmentPlanBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的货件计划列表 + * + * @param bo 查询条件 + * @return 货件计划列表 + */ + @Override + public List queryList(BizShipmentPlanBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizShipmentPlanBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSid() != null, BizShipmentPlan::getSid, bo.getSid()); + lqw.eq(StringUtils.isNotBlank(bo.getShipmentId()), BizShipmentPlan::getShipmentId, bo.getShipmentId()); + lqw.like(StringUtils.isNotBlank(bo.getShipmentName()), BizShipmentPlan::getShipmentName, bo.getShipmentName()); + lqw.eq(StringUtils.isNotBlank(bo.getIsClosed()), BizShipmentPlan::getIsClosed, bo.getIsClosed()); + lqw.eq(StringUtils.isNotBlank(bo.getShipmentStatus()), BizShipmentPlan::getShipmentStatus, bo.getShipmentStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getDestinationFulfillmentCenterId()), BizShipmentPlan::getDestinationFulfillmentCenterId, bo.getDestinationFulfillmentCenterId()); + lqw.eq(StringUtils.isNotBlank(bo.getShippingMode()), BizShipmentPlan::getShippingMode, bo.getShippingMode()); + lqw.eq(StringUtils.isNotBlank(bo.getShippingSolution()), BizShipmentPlan::getShippingSolution, bo.getShippingSolution()); + lqw.eq(bo.getGmtModified() != null, BizShipmentPlan::getGmtModified, bo.getGmtModified()); + lqw.eq(bo.getGmtCreate() != null, BizShipmentPlan::getGmtCreate, bo.getGmtCreate()); + lqw.eq(bo.getSyncTime() != null, BizShipmentPlan::getSyncTime, bo.getSyncTime()); + lqw.eq(bo.getStaShipmentDate() != null, BizShipmentPlan::getStaShipmentDate, bo.getStaShipmentDate()); + lqw.eq(bo.getStaDeliveryStartDate() != null, BizShipmentPlan::getStaDeliveryStartDate, bo.getStaDeliveryStartDate()); + lqw.eq(bo.getStaDeliveryEndDate() != null, BizShipmentPlan::getStaDeliveryEndDate, bo.getStaDeliveryEndDate()); +// lqw.eq(StringUtils.isNotBlank(bo.getShipFromAddress()), BizShipmentPlan::getShipFromAddress, bo.getShipFromAddress()); +// lqw.eq(StringUtils.isNotBlank(bo.getShipToAddress()), BizShipmentPlan::getShipToAddress, bo.getShipToAddress()); + lqw.eq(StringUtils.isNotBlank(bo.getReferenceId()), BizShipmentPlan::getReferenceId, bo.getReferenceId()); + lqw.eq(StringUtils.isNotBlank(bo.getStaInboundPlanId()), BizShipmentPlan::getStaInboundPlanId, bo.getStaInboundPlanId()); + lqw.eq(StringUtils.isNotBlank(bo.getIsSta()), BizShipmentPlan::getIsSta, bo.getIsSta()); + return lqw; + } + + /** + * 新增货件计划 + * + * @param bo 货件计划 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizShipmentPlanBo bo) { + BizShipmentPlan add = MapstructUtils.convert(bo, BizShipmentPlan.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改货件计划 + * + * @param bo 货件计划 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizShipmentPlanBo bo) { + BizShipmentPlan update = MapstructUtils.convert(bo, BizShipmentPlan.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizShipmentPlan entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除货件计划信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public List getQuote(String destination, String channel) { + return iLogisticsQuoteService.queryQuoteWithDestination(destination, channel); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentTrackingServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentTrackingServiceImpl.java new file mode 100644 index 0000000..1a0b829 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentTrackingServiceImpl.java @@ -0,0 +1,131 @@ +package org.asinkj.amz.service.impl; + +import org.asinkj.common.core.utils.MapstructUtils; +import org.asinkj.common.core.utils.StringUtils; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.BizShipmentTrackingBo; +import org.asinkj.amz.domain.vo.BizShipmentTrackingVo; +import org.asinkj.amz.domain.BizShipmentTracking; +import org.asinkj.amz.mapper.BizShipmentTrackingMapper; +import org.asinkj.amz.service.IBizShipmentTrackingService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 物流追踪Service业务层处理 + * + * @author shuo hu + * @date 2025-03-20 + */ +@RequiredArgsConstructor +@Service +public class BizShipmentTrackingServiceImpl implements IBizShipmentTrackingService { + + private final BizShipmentTrackingMapper baseMapper; + + /** + * 查询物流追踪 + * + * @param id 主键 + * @return 物流追踪 + */ + @Override + public BizShipmentTrackingVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询物流追踪列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物流追踪分页列表 + */ + @Override + public TableDataInfo queryPageList(BizShipmentTrackingBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的物流追踪列表 + * + * @param bo 查询条件 + * @return 物流追踪列表 + */ + @Override + public List queryList(BizShipmentTrackingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizShipmentTrackingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getShipmentId()), BizShipmentTracking::getShipmentId, bo.getShipmentId()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxId()), BizShipmentTracking::getBoxId, bo.getBoxId()); + lqw.eq(StringUtils.isNotBlank(bo.getTrackingNumber()), BizShipmentTracking::getTrackingNumber, bo.getTrackingNumber()); + return lqw; + } + + /** + * 新增物流追踪 + * + * @param bo 物流追踪 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizShipmentTrackingBo bo) { + BizShipmentTracking add = MapstructUtils.convert(bo, BizShipmentTracking.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改物流追踪 + * + * @param bo 物流追踪 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizShipmentTrackingBo bo) { + BizShipmentTracking update = MapstructUtils.convert(bo, BizShipmentTracking.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizShipmentTracking entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除物流追踪信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/SysAmazonStoreServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/SysAmazonStoreServiceImpl.java new file mode 100644 index 0000000..da027c5 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/SysAmazonStoreServiceImpl.java @@ -0,0 +1,430 @@ +package org.asinkj.amz.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Response; +import org.apache.dubbo.config.annotation.DubboReference; +import org.asinkj.amz.domain.BizShipmentItem; +import org.asinkj.amz.domain.BizShipmentPlan; +import org.asinkj.amz.domain.BizShipmentTracking; +import org.asinkj.amz.mapper.BizShipmentItemMapper; +import org.asinkj.amz.mapper.BizShipmentPlanMapper; +import org.asinkj.amz.mapper.BizShipmentTrackingMapper; +import org.asinkj.asinking.entity.FbaShipmentApiResponse; +import org.asinkj.asinking.entity.Result; +import org.asinkj.asinking.entity.SellerAccountResponse; +import org.asinkj.asinking.entity.TokenInfo; +import org.asinkj.asinking.okhttp.AKRestClientBuild; +import org.asinkj.common.core.utils.MapstructUtils; +import org.asinkj.common.core.utils.StringUtils; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.asinkj.common.redis.utils.RedisUtils; +import org.asinkj.common.satoken.utils.LoginHelper; +import org.asinkj.resource.api.RemoteMessageService; +import org.asinkj.system.api.model.LoginUser; +import org.asinkj.utils.HttpUtil; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.SysAmazonStoreBo; +import org.asinkj.amz.domain.vo.SysAmazonStoreVo; +import org.asinkj.amz.domain.SysAmazonStore; +import org.asinkj.amz.mapper.SysAmazonStoreMapper; +import org.asinkj.amz.service.ISysAmazonStoreService; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +import javax.annotation.Resource; +import java.io.IOException; +import java.time.Duration; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 亚马逊店铺信息Service业务层处理 + * + * @author shuo hu + * @date 2025-03-17 + */ +@RequiredArgsConstructor +@Service +@Slf4j +public class SysAmazonStoreServiceImpl implements ISysAmazonStoreService { + + public static final String REFRESH_TOKEN = "refresh_token"; + public static final String ACCESS_TOKEN = "access_token"; + + @DubboReference(stub = "true") + private final RemoteMessageService remoteMessageService; + + private final SysAmazonStoreMapper baseMapper; + + @Resource + private BizShipmentPlanMapper bizShipmentPlanMapper; + + @Resource + private BizShipmentItemMapper bizShipmentItemMapper; + + @Resource + private BizShipmentTrackingMapper bizShipmentTrackingMapper; + + @Value("${lingxing.appId}") + private String appId; + + @Value("${lingxing.appSecret}") + private String appSecret; + + @Value("${lingxing.url}") + private String url; + + /** + * 查询亚马逊店铺信息 + * + * @param id 主键 + * @return 亚马逊店铺信息 + */ + @Override + public SysAmazonStoreVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询亚马逊店铺信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 亚马逊店铺信息分页列表 + */ + @Override + public TableDataInfo queryPageList(SysAmazonStoreBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的亚马逊店铺信息列表 + * + * @param bo 查询条件 + * @return 亚马逊店铺信息列表 + */ + @Override + public List queryList(SysAmazonStoreBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SysAmazonStoreBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getUserId() != null, SysAmazonStore::getUserId, bo.getUserId()); + lqw.eq(bo.getSid() != null, SysAmazonStore::getSid, bo.getSid()); + lqw.eq(bo.getMid() != null, SysAmazonStore::getMid, bo.getMid()); + lqw.like(StringUtils.isNotBlank(bo.getStoreName()), SysAmazonStore::getStoreName, bo.getStoreName()); + lqw.eq(StringUtils.isNotBlank(bo.getSellerId()), SysAmazonStore::getSellerId, bo.getSellerId()); + lqw.like(StringUtils.isNotBlank(bo.getAccountName()), SysAmazonStore::getAccountName, bo.getAccountName()); + lqw.eq(bo.getSellerAccountId() != null, SysAmazonStore::getSellerAccountId, bo.getSellerAccountId()); + lqw.eq(StringUtils.isNotBlank(bo.getRegion()), SysAmazonStore::getRegion, bo.getRegion()); + lqw.eq(StringUtils.isNotBlank(bo.getCountry()), SysAmazonStore::getCountry, bo.getCountry()); + lqw.eq(StringUtils.isNotBlank(bo.getMarketplaceId()), SysAmazonStore::getMarketplaceId, bo.getMarketplaceId()); + lqw.eq(bo.getHasAdsSetting() != null, SysAmazonStore::getHasAdsSetting, bo.getHasAdsSetting()); + lqw.eq(bo.getStatus() != null, SysAmazonStore::getStatus, bo.getStatus()); + lqw.orderByDesc(SysAmazonStore::getSid); + return lqw; + } + + /** + * 新增亚马逊店铺信息 + * + * @param bo 亚马逊店铺信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SysAmazonStoreBo bo) { + SysAmazonStore add = MapstructUtils.convert(bo, SysAmazonStore.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改亚马逊店铺信息 + * + * @param bo 亚马逊店铺信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SysAmazonStoreBo bo) { + SysAmazonStore update = MapstructUtils.convert(bo, SysAmazonStore.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SysAmazonStore entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除亚马逊店铺信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public void collectAmzStoreData() { + + + try { + pullAmzStoreData(); + } catch (Exception e) { + log.error("error", e); + } + } + + + @Override + public void pullAmzStoreData() throws Exception { +// if (ObjectUtil.isNull(RedisUtils.getCacheObject(ACCESS_TOKEN))){ +// getAmzStoreTokenData(); +// } +// +// Map queryParam = new HashMap<>(); +// queryParam.put("timestamp", System.currentTimeMillis() / 1000 + ""); +// queryParam.put("access_token", RedisUtils.getCacheObject(ACCESS_TOKEN)); +// queryParam.put("app_key", appId); +//// queryParam.put("offset", 0); +//// queryParam.put("length", 20); +// +// String sign = ApiSign.sign(queryParam, appId); +// queryParam.put("sign", sign); +// log.info("sign:{}", sign); +// +// HttpRequest build = HttpRequest.builder(Object.class) +// .method(HttpMethod.GET) +// .endpoint(url) +// .path("erp/sc/data/seller/lists") +// .queryParams(queryParam) +// .build(); +// HttpResponse execute = HttpExecutor.create().execute(build); +//// log.info("HttpResponse:{}",execute.readEntity(Object.class)); +// SellerAccountResponse sellerAccountResponse = execute.readEntity(SellerAccountResponse.class); +// List dataList = sellerAccountResponse.getData(); +// for (SysAmazonStore datum : dataList) { +// datum.setUserId(1L); +// } +// log.info("execute:{}", sellerAccountResponse); +// baseMapper.insertBatch(dataList); + + Map queryParam = new HashMap<>(); + Long userId = LoginHelper.getLoginUser().getUserId(); + HttpUtil.postWithUrlParams("/erp/sc/data/seller/lists", queryParam, new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + + log.info("onFailure"); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + String string = response.body().string(); + SellerAccountResponse sellerAccountResponse = JSONObject.parseObject(string, SellerAccountResponse.class); +// SellerAccountResponse sellerAccountResponse = JSON.parseObject(string, SellerAccountResponse.class); + List dataList = sellerAccountResponse.getData(); + for (SysAmazonStore datum : dataList) { + datum.setUserId(1L); + datum.setCreateBy(1L); + datum.setTenantId("000000"); + datum.setDelFlag("0"); + datum.setUpdateBy(0L); + + } + log.info("execute:{}", sellerAccountResponse); + baseMapper.batchInsertOrUpdate(dataList); + remoteMessageService.publishMessage(userId, "获取亚马逊店铺信息完成"); + } + }); + + } + + @Override + public void pullAmzFBAData(String startDate, String endDate) throws Exception { + + Map queryParam = new HashMap<>(); + queryParam.put("sid", String.valueOf(143)); + queryParam.put("start_date", startDate); + queryParam.put("end_date", endDate); + queryParam.put("shipment_status", "READY_TO_SHIP"); + + RequestAttributes ra = RequestContextHolder.getRequestAttributes(); + + HttpUtil.postWithUrlParams("/erp/sc/data/fba_report/shipmentList", queryParam, new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + + log.info("onFailure"); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + + RequestContextHolder.setRequestAttributes(ra); + try { + + String string = response.body().string(); + log.info("string:{}", string); + JSONObject jsonObject = JSONObject.parse(string); + JSONObject data = jsonObject.getJSONObject("data"); + if (ObjectUtil.isEmpty(data)) { + log.info("未获取到库存"); + return; + } + + JSONArray list = data.getJSONArray("list"); + if (CollectionUtil.isEmpty(list)) { + log.info("未获取到库存"); + return; + } + log.info("data:{}", list); + List listData = list.toList(FbaShipmentApiResponse.ShipmentPlan.class); + log.info("fbaShipmentApiResponse:{}", listData); + Set shipmentIds = listData.stream().map(FbaShipmentApiResponse.ShipmentPlan::getShipmentId).collect(Collectors.toSet()); + // 查询数据库中存在的shipmentId 使用mybatis-plus批量查询 + Set selectExistingShipmentIds = bizShipmentPlanMapper.selectList(new LambdaQueryWrapper().in(BizShipmentPlan::getShipmentId, shipmentIds)).stream().map(BizShipmentPlan::getShipmentId).collect(Collectors.toSet()); + + + ArrayList bizShipmentItemsList = new ArrayList<>(); + ArrayList bizShipmentTrackingsList = new ArrayList<>(); + ArrayList BizShipmentPlanList = new ArrayList<>(); + + listData.removeIf(shipmentPlan -> selectExistingShipmentIds.contains(shipmentPlan.getShipmentId())); + for (FbaShipmentApiResponse.ShipmentPlan listDatum : listData) { + listDatum.setId(null); + BizShipmentPlan bizShipmentPlan = BeanUtil.copyProperties(listDatum, BizShipmentPlan.class); + BizShipmentPlanList.add(bizShipmentPlan); + listDatum.getItemList().forEach(item -> { + item.setId(null); + item.setZid(null); + item.setShipmentPlanList(null); + }); + List bizShipmentItems = BeanUtil.copyToList(listDatum.getItemList(), BizShipmentItem.class); + for (BizShipmentItem bizShipmentItem : bizShipmentItems) { + bizShipmentItem.setId(null); + bizShipmentItem.setShipmentId(bizShipmentPlan.getShipmentId()); + } + + bizShipmentItemsList.addAll(bizShipmentItems); + List bizShipmentTrackings = BeanUtil.copyToList(listDatum.getTrackingNumberList(), BizShipmentTracking.class); + for (BizShipmentTracking bizShipmentTracking : bizShipmentTrackings) { + bizShipmentTracking.setId(null); + bizShipmentTracking.setShipmentId(bizShipmentPlan.getShipmentId()); + } + bizShipmentTrackingsList.addAll(bizShipmentTrackings); + log.info("bizShipmentPlan:{}", bizShipmentPlan); + } + bizShipmentPlanMapper.insertBatch(BizShipmentPlanList); + bizShipmentItemMapper.insertBatch(bizShipmentItemsList); + bizShipmentTrackingMapper.insertBatch(bizShipmentTrackingsList); + } finally { + RequestContextHolder.resetRequestAttributes(); + } + } + }); +// if (ObjectUtil.isNull(RedisUtils.getCacheObject(ACCESS_TOKEN))){ +// getAmzStoreTokenData(); +// } +// +// Map queryParam = new HashMap<>(); +// queryParam.put("timestamp", System.currentTimeMillis() / 1000 + ""); +// queryParam.put("access_token", RedisUtils.getCacheObject(ACCESS_TOKEN)); +// queryParam.put("app_key", appId); +// queryParam.put("sid",536); +// queryParam.put("start_date","2025-01-17"); +// queryParam.put("end_date","2025-03-18"); +//// queryParam.put("offset", 0); +//// queryParam.put("length", 20); +// +// String sign = ApiSign.sign(queryParam, appId); +// queryParam.put("sign", sign); +// +// log.info("sign:{}", sign); +// +// HttpRequest build = HttpRequest.builder(Object.class) +// .method(HttpMethod.POST) +// .endpoint(url) +// .path("erp/sc/data/fba_report/shipmentList") +// .queryParams(queryParam) +// .build(); +// HttpResponse execute = HttpExecutor.create().execute(build); +// Object o = execute.readEntity(Object.class); +// log.info("execute:{}", o); +// Shipment shipment = execute.readEntity(Shipment.class); +// log.info("HttpResponse:{}", JSON.toJSON(shipment)); + + } + + + @Override + public void getAmzStoreTokenData() throws Exception { + + // 如果用postman等其他工具调试时,需要将appSecret用urlencode.encode()进行转义 + if (ObjectUtil.isNull(RedisUtils.getCacheObject(REFRESH_TOKEN))) { + Result result = AKRestClientBuild.builder().endpoint(url).getAccessToken(appId, appSecret); + Object data = result.getData(); + if (data instanceof LinkedHashMap) { + // 将LinkedHashMap转为TokenInfo + ObjectMapper mapper = new ObjectMapper(); + TokenInfo tokenInfo = mapper.convertValue(data, TokenInfo.class); // 关键点 + log.info("token:{}", tokenInfo.getRefreshToken()); + RedisUtils.setCacheObject(REFRESH_TOKEN, tokenInfo.getRefreshToken(), Duration.ofHours(2)); + RedisUtils.setCacheObject(ACCESS_TOKEN, tokenInfo.getAccessToken(), Duration.ofSeconds(tokenInfo.getExpiresIn())); + } else { + throw new IllegalStateException("data字段类型不匹配"); + } + } else { + Object result = AKRestClientBuild.builder().endpoint(url).refreshToken(appId, RedisUtils.getCacheObject(REFRESH_TOKEN)); + ObjectMapper mapper = new ObjectMapper(); + Result result1 = mapper.convertValue(result, Result.class); // 关键点 + if (result1.getData() != null && result1.getData() instanceof LinkedHashMap) { + TokenInfo tokenInfo = mapper.convertValue(result1.getData(), TokenInfo.class); // 关键点 + log.info("tokenInfo:{}", tokenInfo.getRefreshToken()); + RedisUtils.setCacheObject(REFRESH_TOKEN, tokenInfo.getRefreshToken(), Duration.ofHours(2)); + RedisUtils.setCacheObject(ACCESS_TOKEN, tokenInfo.getAccessToken(), Duration.ofSeconds(tokenInfo.getExpiresIn())); + + } else { + log.info("删除Redis存储的token"); + RedisUtils.deleteObject(REFRESH_TOKEN); + RedisUtils.deleteObject(ACCESS_TOKEN); + } + + + } + + } +} diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/constant/ClientConstants.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/constant/ClientConstants.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/constant/ClientConstants.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/constant/ClientConstants.java diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/Config.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/Config.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/Config.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/Config.java diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/HttpMethod.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/HttpMethod.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/HttpMethod.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/HttpMethod.java diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/HttpRequest.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/HttpRequest.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/HttpRequest.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/HttpRequest.java diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/HttpResponse.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/HttpResponse.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/HttpResponse.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/HttpResponse.java diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/HttpResponseImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/HttpResponseImpl.java similarity index 99% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/HttpResponseImpl.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/HttpResponseImpl.java index 188fb86..ac51369 100644 --- a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/HttpResponseImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/HttpResponseImpl.java @@ -1,5 +1,6 @@ package org.asinkj.asinking.core; + import okhttp3.Headers; import okhttp3.Response; import org.asinkj.asinking.constant.ClientConstants; diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/ObjectMapperSingleton.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/ObjectMapperSingleton.java similarity index 91% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/ObjectMapperSingleton.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/ObjectMapperSingleton.java index 21abd68..a40c83c 100644 --- a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/core/ObjectMapperSingleton.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/core/ObjectMapperSingleton.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonRootName; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.SerializationFeature; public class ObjectMapperSingleton { @@ -22,6 +23,9 @@ public class ObjectMapperSingleton { mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); + + rootMapper = new ObjectMapper(); rootMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); rootMapper.enable(SerializationFeature.INDENT_OUTPUT); diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/FbaShipmentApiResponse.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/FbaShipmentApiResponse.java new file mode 100644 index 0000000..628a8ee --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/FbaShipmentApiResponse.java @@ -0,0 +1,225 @@ +package org.asinkj.asinking.entity; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.Builder; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class FbaShipmentApiResponse { + private Integer code; + private String message; + private List error_details; + private String request_id; + private String response_time; + private List data; + private Integer total; + + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class ShipmentPlan { + private Long id; + private Integer sid; + private Integer uid; + + @JSONField(name = "shipment_id") + private String shipmentId; + + @JSONField(name = "shipment_name") + private String shipmentName; + + @JSONField(name = "is_closed") + private Integer isClosed; + + @JSONField(name = "shipment_status") + private String shipmentStatus; + + @JSONField(name = "gmt_modified") + private String gmtModified; + + @JSONField(name = "gmt_create") + private String gmtCreate; + + @JSONField(name = "sync_time") + private String syncTime; + + @JSONField(name = "destination_fulfillment_center_id") + private String destinationFulfillmentCenterId; + + private String username; + private String seller; + + @JSONField(name = "item_list") + private List itemList; + + @JSONField(name = "is_synchronous") + private Integer isSynchronous; + + @JSONField(name = "is_uploaded_box") + private Integer isUploadedBox; + + @JSONField(name = "working_time") + private String workingTime; + + @JSONField(name = "shipped_time") + private String shippedTime; + + @JSONField(name = "receiving_time") + private String receivingTime; + + @JSONField(name = "closed_time") + private String closedTime; + + @JSONField(name = "reference_id") + private String referenceId; + + @JSONField(name = "is_sta") + private Integer isSta; + + @JSONField(name = "sta_plan_name") + private String staPlanName; + + @JSONField(name = "sta_inbound_plan_id") + private String staInboundPlanId; + + @JSONField(name = "sta_shipment_date") + private String staShipmentDate; + + @JSONField(name = "sta_delivery_start_date") + private String staDeliveryStartDate; + + @JSONField(name = "sta_delivery_end_date") + private String staDeliveryEndDate; + + @JSONField(name = "ship_from_address") + private Address shipFromAddress; + + @JSONField(name = "ship_to_address") + private Address shipToAddress; + + @JSONField(name = "shipping_mode") + private String shippingMode; + + @JSONField(name = "shipping_solution") + private String shippingSolution; + + @JSONField(name = "alpha_code") + private String alphaCode; + + @JSONField(name = "alpha_name") + private String alphaName; + + @JSONField(name = "tracking_number_list") + private List trackingNumberList; + + @JSONField(name = "bill_of_lading_number") + private String billOfLadingNumber; + + @JSONField(name = "freight_bill_number") + private String freightBillNumber; + + @JSONField(name = "sta_shipment_id") + private String staShipmentId; + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class Item { + private Long id; + private Integer zid; + private String msku; + private String fnsku; + + @JSONField(name = "quantity_shipped") + private Integer quantityShipped; + + @JSONField(name = "init_quantity_shipped") + private Integer initQuantityShipped; + + @JSONField(name = "quantity_received") + private Integer quantityReceived; + + @JSONField(name = "quantity_shipped_local") + private Integer quantityShippedLocal; + + @JSONField(name = "quantity_in_case") + private Integer quantityInCase; + + @JSONField(name = "prep_details") + private String prepDetails; + + @JSONField(name = "prep_instruction") + private String prepInstruction; + + @JSONField(name = "prep_owner") + private String prepOwner; + + @JSONField(name = "release_date") + private String releaseDate; + + @JSONField(name = "ware_house_storage_id") + private Integer wareHouseStorageId; + + @JSONField(name = "shipment_plan_list") + private List shipmentPlanList; // 空数组类型保持通用 + + private String sku; + + @JSONField(name = "prep_labelowner") + private String prepLabelOwner; + + private String expiration; + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class Address { + private String name; + + @JSONField(name = "country_code") + private String countryCode; + + @JSONField(name = "state_or_province_code") + private String stateOrProvinceCode; + + private String city; + private String region; + + @JSONField(name = "address_line1") + private String addressLine1; + + @JSONField(name = "address_line2") + private String addressLine2; + + @JSONField(name = "postal_code") + private String postalCode; + + private String phone; + private String doorplate; + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class TrackingNumber { + @JSONField(name = "box_id") + private String boxId; + + @JSONField(name = "tracking_number") + private String trackingNumber; + } +} diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/entity/Result.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/Result.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/entity/Result.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/Result.java diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/SellerAccountResponse.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/SellerAccountResponse.java new file mode 100644 index 0000000..b929c04 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/SellerAccountResponse.java @@ -0,0 +1,43 @@ +package org.asinkj.asinking.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.asinkj.amz.domain.SysAmazonStore; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class SellerAccountResponse implements Serializable { + + @Serial + private static final long serialVersionUID = 6717170236221300711L; + private String code; + private String message; + private List error_details; // 根据实际错误数据结构调整 + private String request_id; + + private String response_time; + + private List data; + private Integer total; +} + +@Data +class SellerAccount implements Serializable { + @Serial + private static final long serialVersionUID = -2568726414949839482L; + private Long sid; + private Long mid; + private String name; + private String seller_id; + private String account_name; + private Long seller_account_id; + private String region; + private String country; + private String marketplace_id; + private String status; + private String has_ads_setting; +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/Shipment.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/Shipment.java new file mode 100644 index 0000000..31f1092 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/Shipment.java @@ -0,0 +1,101 @@ +package org.asinkj.asinking.entity; + +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.time.LocalDateTime; + +@Data +public class Shipment { + private Integer id; + private Integer sid; + private Integer uid; + + @JsonProperty("shipment_id") + private String shipmentId; // 处理空字符串 + + @JsonProperty("shipment_name") + private String shipmentName; + + @JsonProperty("is_closed") + private Integer isClosed; + + @JsonProperty("shipment_status") + private String shipmentStatus; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + @JsonProperty("gmt_modified") + private LocalDateTime gmtModified; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + @JsonProperty("gmt_create") + private LocalDateTime gmtCreate; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + @JsonProperty("sync_time") + private LocalDateTime syncTime; // 空字符串会反序列化为null + + @JsonProperty("destination_fulfillment_center_id") + private String destinationFulfillmentCenterId; + + private String username; + private String seller; + + @JsonProperty("is_synchronous") + private Integer isSynchronous; + + @JsonProperty("is_uploaded_box") + private Integer isUploadedBox; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + @JsonProperty("working_time") + private LocalDateTime workingTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + @JsonProperty("shipped_time") + private LocalDateTime shippedTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + @JsonProperty("receiving_time") + private LocalDateTime receivingTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + @JsonProperty("closed_time") + private LocalDateTime closedTime; + + @JsonProperty("reference_id") + private String referenceId; + + @JsonProperty("ship_from_address") + private Address shipFromAddress; + + @JsonProperty("ship_to_address") + private Address shipToAddress; + + @Data + public static class Address { + private String name; + + @JsonProperty("country_code") + private String countryCode; + + @JsonProperty("state_or_province_code") + private String stateOrProvinceCode; + + private String city; + private String region; + + @JsonProperty("address_line1") + private String addressLine1; + + @JsonProperty("address_line2") + private String addressLine2; + + @JsonProperty("postal_code") + private String postalCode; + + // 特殊字段(不同地址类型特有) + private String phone; // ship_from_address特有 + private String doorplate; // ship_to_address特有 + } +} diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/entity/Token.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/Token.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/entity/Token.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/Token.java diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/TokenInfo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/TokenInfo.java new file mode 100644 index 0000000..8be831a --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/TokenInfo.java @@ -0,0 +1,36 @@ +package org.asinkj.asinking.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class TokenInfo { + /** + * 访问令牌 + */ + @JsonProperty("access_token") + private String accessToken; + + /** + * 刷新令牌 + */ + @JsonProperty("refresh_token") + private String refreshToken; + + /** + * 过期时间(秒) + */ + @JsonProperty("expires_in") + private int expiresIn; + + @Override + public String toString() { + return "TokenInfo{" + + "accessToken='" + accessToken + '\'' + + ", refreshToken='" + refreshToken + '\'' + + ", expiresIn=" + expiresIn + + '}'; + } +} diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/logger/HttpLoggingFilter.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/logger/HttpLoggingFilter.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/logger/HttpLoggingFilter.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/logger/HttpLoggingFilter.java diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/okhttp/AKRestClient.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/okhttp/AKRestClient.java similarity index 97% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/okhttp/AKRestClient.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/okhttp/AKRestClient.java index 8b40e06..bfc5be0 100644 --- a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/okhttp/AKRestClient.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/okhttp/AKRestClient.java @@ -7,6 +7,7 @@ import org.asinkj.asinking.core.HttpMethod; import org.asinkj.asinking.core.HttpRequest; import org.asinkj.asinking.core.HttpResponse; import org.asinkj.asinking.entity.Result; +import org.asinkj.asinking.entity.TokenInfo; import java.util.Map; diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/okhttp/AKRestClientBuild.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/okhttp/AKRestClientBuild.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/okhttp/AKRestClientBuild.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/okhttp/AKRestClientBuild.java diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/okhttp/HttpCommand.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/okhttp/HttpCommand.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/okhttp/HttpCommand.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/okhttp/HttpCommand.java diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/okhttp/HttpExecutor.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/okhttp/HttpExecutor.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/okhttp/HttpExecutor.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/okhttp/HttpExecutor.java diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/AccessTokenDemo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/AccessTokenDemo.java similarity index 54% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/AccessTokenDemo.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/AccessTokenDemo.java index 2f78245..ffa6772 100644 --- a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/AccessTokenDemo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/AccessTokenDemo.java @@ -1,10 +1,15 @@ package org.asinkj.asinking.samples; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.asinkj.asinking.entity.Result; +import org.asinkj.asinking.entity.TokenInfo; import org.asinkj.asinking.okhttp.AKRestClientBuild; +import java.io.DataInput; +import java.util.LinkedHashMap; + @Slf4j public class AccessTokenDemo { @@ -18,8 +23,17 @@ public class AccessTokenDemo { String appId = "ak_XNNp2fMr6JPF5"; // 如果用postman等其他工具调试时,需要将appSecret用urlencode.encode()进行转义 String appSecret = "923QKLc3Y4m7brPYHPXBIQ=="; - Result result = AKRestClientBuild.builder().endpoint("https://openapi.lingxing.com").getAccessToken(appId, appSecret); - log.info("token:{}", result); + Result result = AKRestClientBuild.builder().endpoint("http://112.74.106.216:12526").getAccessToken(appId, appSecret); + + Object data = result.getData(); + if (data instanceof LinkedHashMap) { + // 将LinkedHashMap转为TokenInfo + ObjectMapper mapper = new ObjectMapper(); + TokenInfo tokenInfo = mapper.convertValue(data, TokenInfo.class); // 关键点 + log.info("token:{}", tokenInfo.getRefreshToken()); + } else { + throw new IllegalStateException("data字段类型不匹配"); + } } } diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/GetDemo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/GetDemo.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/GetDemo.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/GetDemo.java diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/GetFBADemo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/GetFBADemo.java new file mode 100644 index 0000000..0534c57 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/GetFBADemo.java @@ -0,0 +1,41 @@ +package org.asinkj.asinking.samples; + + +import lombok.extern.slf4j.Slf4j; +import org.asinkj.asinking.core.HttpMethod; +import org.asinkj.asinking.core.HttpRequest; +import org.asinkj.asinking.core.HttpResponse; +import org.asinkj.asinking.okhttp.HttpExecutor; +import org.asinkj.asinking.sign.ApiSign; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +public class GetFBADemo { + + public static void main(String[] args) throws Exception { + String appId = "ak_XNNp2fMr6JPF5"; + + Map queryParam = new HashMap<>(); + queryParam.put("timestamp", System.currentTimeMillis() / 1000 + ""); + queryParam.put("access_token", "e3141db5-0e0a-4c41-a25d-df4a809fb573"); + queryParam.put("app_key", appId); +// queryParam.put("offset", 0); +// queryParam.put("length", 20); + + String sign = ApiSign.sign(queryParam, appId); + queryParam.put("sign", sign); + log.info("sign:{}", sign); + + HttpRequest build = HttpRequest.builder(Object.class) + .method(HttpMethod.GET) + .endpoint("http://112.74.106.216:12526") + .path("/erp/sc/data/fba_report/shipmentList") + .queryParams(queryParam) + .build(); + HttpResponse execute = HttpExecutor.create().execute(build); + log.info("execute:{}", execute.readEntity(Object.class)); + } + +} diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/OrderDemo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/OrderDemo.java similarity index 99% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/OrderDemo.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/OrderDemo.java index 1924690..b6dbd89 100644 --- a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/OrderDemo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/OrderDemo.java @@ -1,7 +1,6 @@ package org.asinkj.asinking.samples; import com.alibaba.fastjson.JSON; - import lombok.extern.slf4j.Slf4j; import org.asinkj.asinking.core.Config; import org.asinkj.asinking.core.HttpMethod; diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/OrderListDemo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/OrderListDemo.java similarity index 99% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/OrderListDemo.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/OrderListDemo.java index 5bc032c..99d2131 100644 --- a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/OrderListDemo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/OrderListDemo.java @@ -2,7 +2,6 @@ package org.asinkj.asinking.samples; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; - import lombok.extern.slf4j.Slf4j; import org.asinkj.asinking.core.Config; import org.asinkj.asinking.core.HttpMethod; diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/SetCategoryDemo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/SetCategoryDemo.java similarity index 99% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/SetCategoryDemo.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/SetCategoryDemo.java index 0ebc3f4..b77eb08 100644 --- a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/SetCategoryDemo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/SetCategoryDemo.java @@ -2,7 +2,6 @@ package org.asinkj.asinking.samples; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; - import lombok.extern.slf4j.Slf4j; import org.asinkj.asinking.core.HttpMethod; import org.asinkj.asinking.core.HttpRequest; diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/SetProductDemo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/SetProductDemo.java similarity index 99% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/SetProductDemo.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/SetProductDemo.java index e979967..2038cac 100644 --- a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/samples/SetProductDemo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/samples/SetProductDemo.java @@ -1,7 +1,6 @@ package org.asinkj.asinking.samples; import com.alibaba.fastjson.JSON; - import lombok.extern.slf4j.Slf4j; import org.asinkj.asinking.core.HttpMethod; import org.asinkj.asinking.core.HttpRequest; diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/sign/AesUtil.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/sign/AesUtil.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/sign/AesUtil.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/sign/AesUtil.java diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/sign/ApiSign.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/sign/ApiSign.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/asinking/sign/ApiSign.java rename to asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/sign/ApiSign.java diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/config/HttpUtilConfig.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/config/HttpUtilConfig.java new file mode 100644 index 0000000..2fb10b8 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/config/HttpUtilConfig.java @@ -0,0 +1,25 @@ +package org.asinkj.config; + +import org.asinkj.utils.HttpUtil; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.PostConstruct; + +@Configuration +public class HttpUtilConfig { + + @Value("${lingxing.appId}") + String appId; + @Value("${lingxing.appSecret}") + String appSecret; + @Value("${lingxing.url}") + String url; + + + @PostConstruct + public void initHttpUtil() { + // 通过Supplier关联TokenManager + HttpUtil.init(appId, appSecret,url); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/utils/HttpUtil.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/utils/HttpUtil.java new file mode 100644 index 0000000..ad02726 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/utils/HttpUtil.java @@ -0,0 +1,193 @@ +package org.asinkj.utils; + +import cn.hutool.core.util.ObjectUtil; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import okhttp3.HttpUrl; +import org.asinkj.asinking.entity.Result; +import org.asinkj.asinking.entity.TokenInfo; +import org.asinkj.asinking.okhttp.AKRestClientBuild; +import org.asinkj.asinking.sign.ApiSign; +import org.asinkj.common.redis.utils.RedisUtils; +import org.springframework.beans.factory.annotation.Value; +import java.io.IOException; +import java.time.Duration; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.HashMap; +import java.util.concurrent.TimeUnit; +import java.util.function.Supplier; + +@Slf4j +public class HttpUtil { + + public static final String REFRESH_TOKEN = "refresh_token"; + public static final String ACCESS_TOKEN = "access_token"; + // 静态配置 + private static String appId; + private static String baseurl; + private static String appSecret; + private static Supplier accessTokenSupplier; + private static final OkHttpClient client = createHttpClient(); + private static final Object lock = new Object(); + + + + + // 防止实例化 + private HttpUtil() {} + + /** + * 初始化方法(需在Spring启动后调用) + * @param appId 应用ID + */ + public static void init(@Value("${lingxing.appId}") String appId, + @Value("${lingxing.appSecret}") String appSecret, + @Value("${lingxing.url}") String baseurl + ) { + synchronized (lock) { + HttpUtil.appId = appId; + HttpUtil.baseurl = baseurl; + HttpUtil.appSecret = appSecret; + } + } + + // GET 请求 + public static void get(String url, Map customParams, Callback callback) { + Map allParams = mergeParams(customParams); + Map queryParams = convertToStringMap(allParams); + buildAndSendRequest(url, queryParams, "GET", null, callback); + } + + // POST 表单 + public static void postForm(String url, Map customParams, Callback callback) { + Map allParams = mergeParams(customParams); + Map formParams = convertToStringMap(allParams); + FormBody formBody = buildFormBody(formParams); + buildAndSendRequest(url, null, "POST", formBody, callback); + } + + // POST 请求(参数在URL,无请求体) + public static void postWithUrlParams(String url, Map customParams, Callback callback) { + Map allParams = mergeParams(customParams); + Map queryParams = convertToStringMap(allParams); + buildAndSendRequest(url, queryParams, "POST", RequestBody.create(new byte[0], null), callback); + } + + // POST JSON + public static void postJson(String url, String jsonBody, Callback callback) { + RequestBody body = RequestBody.create(jsonBody, MediaType.get("application/json")); + buildAndSendRequest(url, null, "POST", body, callback); + } + + private static Map mergeParams(Map customParams) { + checkInitialized(); + Map allParams = new HashMap<>(); + if (customParams != null) allParams.putAll(customParams); + + // 动态获取最新access_token + allParams.put("app_key", appId); + allParams.put("access_token", RedisUtils.getCacheObject(ACCESS_TOKEN)); + allParams.put("timestamp", System.currentTimeMillis() / 1000); + + String sign = ApiSign.sign(allParams, appId); + allParams.put("sign", sign); + return allParams; + } + + public static void getAmzStoreTokenData() throws Exception { + + // 如果用postman等其他工具调试时,需要将appSecret用urlencode.encode()进行转义 + if (ObjectUtil.isNull(RedisUtils.getCacheObject(REFRESH_TOKEN))) { + Result result = AKRestClientBuild.builder().endpoint(baseurl).getAccessToken(appId, appSecret); + Object data = result.getData(); + if (data instanceof LinkedHashMap) { + // 将LinkedHashMap转为TokenInfo + ObjectMapper mapper = new ObjectMapper(); + TokenInfo tokenInfo = mapper.convertValue(data, TokenInfo.class); // 关键点 + log.info("token:{}", tokenInfo.getRefreshToken()); + RedisUtils.setCacheObject(REFRESH_TOKEN, tokenInfo.getRefreshToken(), Duration.ofHours(2)); + RedisUtils.setCacheObject(ACCESS_TOKEN, tokenInfo.getAccessToken(), Duration.ofSeconds(tokenInfo.getExpiresIn())); + } else { + throw new IllegalStateException("data字段类型不匹配"); + } + }else { + Object result = AKRestClientBuild.builder().endpoint(baseurl).refreshToken(appId, RedisUtils.getCacheObject(REFRESH_TOKEN)); + ObjectMapper mapper = new ObjectMapper(); + Result result1 = mapper.convertValue(result, Result.class); // 关键点 + if (result1.getData() != null && result1.getData() instanceof LinkedHashMap) { + TokenInfo tokenInfo = mapper.convertValue(result1.getData(), TokenInfo.class); // 关键点 + log.info("tokenInfo:{}", tokenInfo.getRefreshToken()); + RedisUtils.setCacheObject(REFRESH_TOKEN, tokenInfo.getRefreshToken(),Duration.ofHours(2)); + RedisUtils.setCacheObject(ACCESS_TOKEN, tokenInfo.getAccessToken(), Duration.ofSeconds(tokenInfo.getExpiresIn())); + + }else { + log.info("删除Redis存储的token"); + RedisUtils.deleteObject(REFRESH_TOKEN); + RedisUtils.deleteObject(ACCESS_TOKEN); + } + + + } + + } + + private static void checkInitialized() { + if (appId == null) { + throw new IllegalStateException("HttpUtil未初始化,请先调用init方法"); + } + + if (ObjectUtil.isNull(RedisUtils.getCacheObject(ACCESS_TOKEN))){ + try { + getAmzStoreTokenData(); + } catch (Exception e) { + log.error("获取ACCESS_TOKEN出错",e); + } + } + } + + // 其余工具方法保持不变... + private static Map convertToStringMap(Map sourceMap) { + Map stringMap = new HashMap<>(); + for (Map.Entry entry : sourceMap.entrySet()) { + Object value = entry.getValue(); + if (value != null) { + stringMap.put(entry.getKey(), value.toString()); + } + } + return stringMap; + } + + private static FormBody buildFormBody(Map params) { + FormBody.Builder builder = new FormBody.Builder(); + params.forEach(builder::add); + return builder.build(); + } + + private static OkHttpClient createHttpClient() { + return new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .build(); + } + + private static void buildAndSendRequest(String url, Map queryParams, + String method, RequestBody body, Callback callback) { + try { + HttpUrl.Builder urlBuilder = HttpUrl.parse(baseurl+url).newBuilder(); + if (queryParams != null) queryParams.forEach(urlBuilder::addQueryParameter); + Request.Builder requestBuilder = new Request.Builder().url(urlBuilder.build()); + + if ("POST".equalsIgnoreCase(method)) { + requestBuilder.post(body); + } else { + requestBuilder.get(); + } + + client.newCall(requestBuilder.build()).enqueue(callback); + } catch (Exception e) { + callback.onFailure(null, new IOException("请求配置错误", e)); + } + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/resources/application.yml b/asinkj-biz/asinkj-amz/src/main/resources/application.yml new file mode 100644 index 0000000..a413c62 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/application.yml @@ -0,0 +1,117 @@ +# Tomcat +server: + port: 9404 + +# Spring +spring: + application: + # 应用名称 + name: asinkj-amz + profiles: + # 环境配置 + active: @profiles.active@ + +--- # nacos 配置 +spring: + cloud: + nacos: + # nacos 服务地址 + server-addr: @nacos.server@ + username: @nacos.username@ + password: @nacos.password@ + discovery: + # 注册组 + group: @nacos.discovery.group@ + namespace: ${spring.profiles.active} + config: + # 配置组 + group: @nacos.config.group@ + namespace: ${spring.profiles.active} + config: + import: + - optional:nacos:application-common.yml + - optional:nacos:asinkj-resource.yml + - optional:nacos:datasource.yml + - optional:nacos:${spring.application.name}.yml + +--- # 数据源设置 需在 system 数据源下 执行 test.sql 文件 +#spring: +# datasource: +# dynamic: +# seata: false +# # 设置默认的数据源或者数据源组,默认值即为 master +# primary: master +# datasource: +# # 主库数据源 +# master: +# type: ${spring.datasource.type} +# driver-class-name: com.mysql.cj.jdbc.Driver +# url: ${datasource.system-master.url} +# username: ${datasource.system-master.username} +# password: ${datasource.system-master.password} +# sharding: +# lazy: true +# type: ${spring.datasource.type} +# driver-class-name: com.mysql.cj.jdbc.Driver +# # shardingproxy 服务的ip地址 +# url: jdbc:mysql://127.0.0.1:3307/data-center_db?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true +# username: root +# password: root +## oracle: +## type: ${spring.datasource.type} +## driverClassName: oracle.jdbc.OracleDriver +## url: ${datasource.system-oracle.url} +## username: ${datasource.system-oracle.username} +## password: ${datasource.system-oracle.password} +## hikari: +## connectionTestQuery: SELECT 1 FROM DUAL +## postgres: +## type: ${spring.datasource.type} +## driverClassName: org.postgresql.Driver +## url: ${datasource.system-postgres.url} +## username: ${datasource.system-postgres.username} +## password: ${datasource.system-postgres.password} +# +#--- # elasticsearch 功能配置 +## 文档地址: https://www.easy-es.cn/ +## 更改包名需要去 EasyEsConfiguration 修改包扫描(后续版本支持配置文件读取) +#easy-es: +# # 是否开启EE自动配置 +# enable: false +# # es连接地址+端口 格式必须为ip:port,如果是集群则可用逗号隔开 +# address : localhost:9200 +# # 默认为http +# schema: http +# # 注意ES建议使用账号认证 不使用会报警告日志 +# #如果无账号密码则可不配置此行 +# #username: +# #如果无账号密码则可不配置此行 +# #password: +# # 心跳策略时间 单位:ms +# keep-alive-millis: 18000 +# # 连接超时时间 单位:ms +# connectTimeout: 5000 +# # 通信超时时间 单位:ms +# socketTimeout: 5000 +# # 连接请求超时时间 单位:ms +# connectionRequestTimeout: 5000 +# # 最大连接数 单位:个 +# maxConnTotal: 100 +# # 最大连接路由数 单位:个 +# maxConnPerRoute: 100 +# global-config: +# # 开启控制台打印通过本框架生成的DSL语句,默认为开启,测试稳定后的生产环境建议关闭,以提升少量性能 +# print-dsl: true +# # 异步处理索引是否阻塞主线程 默认阻塞 数据量过大时调整为非阻塞异步进行 项目启动更快 +# asyncProcessIndexBlocking: true +# db-config: +# # 是否开启下划线转驼峰 默认为false +# map-underscore-to-camel-case: true +# # id生成策略 customize为自定义,id值由用户生成,比如取MySQL中的数据id,如缺省此项配置,则id默认策略为es自动生成 +# id-type: customize +# # 字段更新策略 默认为not_null +# field-strategy: not_null +# # 默认开启,查询若指定了size超过1w条时也会自动开启,开启后查询所有匹配数据,若不开启,会导致无法获取数据总条数,其它功能不受影响. +# enable-track-total-hits: true +# # 数据刷新策略,默认为不刷新 +# refresh-policy: immediate diff --git a/asinkj-example/asinkj-lpm/src/main/resources/banner.txt b/asinkj-biz/asinkj-amz/src/main/resources/banner.txt similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/resources/banner.txt rename to asinkj-biz/asinkj-amz/src/main/resources/banner.txt diff --git a/asinkj-biz/asinkj-amz/src/main/resources/logback-plus.xml b/asinkj-biz/asinkj-amz/src/main/resources/logback-plus.xml new file mode 100644 index 0000000..183396a --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/logback-plus.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + ${console.log.pattern} + utf-8 + + + + + + + + + + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizInquiryRequestMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizInquiryRequestMapper.xml new file mode 100644 index 0000000..b44e392 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizInquiryRequestMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsChannelMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsChannelMapper.xml new file mode 100644 index 0000000..eb6334b --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsChannelMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsQuoteMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsQuoteMapper.xml new file mode 100644 index 0000000..6fbbddd --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsQuoteMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentItemMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentItemMapper.xml new file mode 100644 index 0000000..1192f53 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentItemMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml new file mode 100644 index 0000000..63076c1 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentTrackingMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentTrackingMapper.xml new file mode 100644 index 0000000..3931d21 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentTrackingMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/SysAmazonStoreMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/SysAmazonStoreMapper.xml new file mode 100644 index 0000000..72cde4a --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/SysAmazonStoreMapper.xml @@ -0,0 +1,43 @@ + + + + + INSERT INTO sys_amazon_store ( + tenant_id, user_id, sid, mid, store_name, seller_id, + account_name, seller_account_id, region, country, + marketplace_id, has_ads_setting, status, del_flag, + create_by, create_time, update_by, create_dept + ) VALUES + + ( + #{item.tenantId}, #{item.userId}, #{item.sid}, #{item.mid}, + #{item.storeName}, #{item.sellerId}, #{item.accountName}, + #{item.sellerAccountId}, #{item.region}, #{item.country}, + #{item.marketplaceId}, #{item.hasAdsSetting}, #{item.status}, + #{item.delFlag}, #{item.createBy}, #{item.createTime}, + #{item.updateBy}, #{item.createDept} + ) + + ON CONFLICT (sid) DO UPDATE SET + tenant_id = EXCLUDED.tenant_id, + mid = EXCLUDED.mid, + store_name = EXCLUDED.store_name, + seller_id = EXCLUDED.seller_id, + account_name = EXCLUDED.account_name, + seller_account_id = EXCLUDED.seller_account_id, + region = EXCLUDED.region, + country = EXCLUDED.country, + marketplace_id = EXCLUDED.marketplace_id, + has_ads_setting = EXCLUDED.has_ads_setting, + status = EXCLUDED.status, + del_flag = EXCLUDED.del_flag, + create_by = EXCLUDED.create_by, + create_time = EXCLUDED.create_time, + update_by = EXCLUDED.update_by, + create_dept = EXCLUDED.create_dept; + + + + diff --git a/asinkj-example/asinkj-demo/README.md b/asinkj-biz/asinkj-demo/README.md similarity index 100% rename from asinkj-example/asinkj-demo/README.md rename to asinkj-biz/asinkj-demo/README.md diff --git a/asinkj-example/asinkj-demo/pom.xml b/asinkj-biz/asinkj-demo/pom.xml similarity index 95% rename from asinkj-example/asinkj-demo/pom.xml rename to asinkj-biz/asinkj-demo/pom.xml index a9a30ee..1c65baf 100644 --- a/asinkj-example/asinkj-demo/pom.xml +++ b/asinkj-biz/asinkj-demo/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> org.asinkj - asinkj-example + asinkj-biz ${revision} 4.0.0 @@ -22,6 +22,11 @@ asinkj-common-nacos + + org.asinkj + asinkj-common-dubbo + + org.asinkj asinkj-common-sentinel @@ -104,6 +109,8 @@ test + + diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/AsinKjDemoApplication.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/AsinKjDemoApplication.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/AsinKjDemoApplication.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/AsinKjDemoApplication.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/EsCrudController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/EsCrudController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/EsCrudController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/EsCrudController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/MailController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/MailController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/MailController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/MailController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisCacheController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisCacheController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisCacheController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisCacheController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisLockController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisLockController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisLockController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisLockController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisPubSubController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisPubSubController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisPubSubController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/RedisPubSubController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/SmsController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/SmsController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/SmsController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/SmsController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/Swagger3DemoController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/Swagger3DemoController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/Swagger3DemoController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/Swagger3DemoController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestBatchController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestBatchController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestBatchController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestBatchController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestBusController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestBusController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestBusController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestBusController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestDemoController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestDemoController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestDemoController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestDemoController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestEncryptController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestEncryptController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestEncryptController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestEncryptController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestExcelController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestExcelController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestExcelController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestExcelController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestI18nController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestI18nController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestI18nController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestI18nController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestSensitiveController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestSensitiveController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestSensitiveController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestSensitiveController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestShardingController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestShardingController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestShardingController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestShardingController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestTreeController.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestTreeController.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestTreeController.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/TestTreeController.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/package-info.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/package-info.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/controller/package-info.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/controller/package-info.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/Document.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/Document.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/Document.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/Document.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/ShardingOrder.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/ShardingOrder.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/ShardingOrder.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/ShardingOrder.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/ShardingOrderItem.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/ShardingOrderItem.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/ShardingOrderItem.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/ShardingOrderItem.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestDemo.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestDemo.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestDemo.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestDemo.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestDemoEncrypt.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestDemoEncrypt.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestDemoEncrypt.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestDemoEncrypt.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestTree.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestTree.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestTree.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/TestTree.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestDemoBo.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestDemoBo.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestDemoBo.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestDemoBo.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestDemoImportVo.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestDemoImportVo.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestDemoImportVo.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestDemoImportVo.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestTreeBo.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestTreeBo.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestTreeBo.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/bo/TestTreeBo.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/package-info.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/package-info.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/package-info.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/package-info.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/ExportDemoVo.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/ExportDemoVo.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/ExportDemoVo.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/ExportDemoVo.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/TestDemoVo.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/TestDemoVo.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/TestDemoVo.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/TestDemoVo.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/TestTreeVo.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/TestTreeVo.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/TestTreeVo.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/domain/vo/TestTreeVo.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/esmapper/DocumentMapper.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/esmapper/DocumentMapper.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/esmapper/DocumentMapper.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/esmapper/DocumentMapper.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/listener/ExportDemoListener.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/listener/ExportDemoListener.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/listener/ExportDemoListener.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/listener/ExportDemoListener.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/ShardingOrderItemMapper.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/ShardingOrderItemMapper.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/ShardingOrderItemMapper.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/ShardingOrderItemMapper.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/ShardingOrderMapper.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/ShardingOrderMapper.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/ShardingOrderMapper.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/ShardingOrderMapper.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestDemoEncryptMapper.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestDemoEncryptMapper.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestDemoEncryptMapper.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestDemoEncryptMapper.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestDemoMapper.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestDemoMapper.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestDemoMapper.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestDemoMapper.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestTreeMapper.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestTreeMapper.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestTreeMapper.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/TestTreeMapper.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/package-info.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/package-info.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/mapper/package-info.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/mapper/package-info.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/IExportExcelService.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/IExportExcelService.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/IExportExcelService.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/IExportExcelService.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/ITestDemoService.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/ITestDemoService.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/ITestDemoService.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/ITestDemoService.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/ITestTreeService.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/ITestTreeService.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/ITestTreeService.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/ITestTreeService.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/ExportExcelServiceImpl.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/ExportExcelServiceImpl.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/ExportExcelServiceImpl.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/ExportExcelServiceImpl.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/SensitiveServiceImpl.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/SensitiveServiceImpl.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/SensitiveServiceImpl.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/SensitiveServiceImpl.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/TestDemoServiceImpl.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/TestDemoServiceImpl.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/TestDemoServiceImpl.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/TestDemoServiceImpl.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/TestTreeServiceImpl.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/TestTreeServiceImpl.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/TestTreeServiceImpl.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/TestTreeServiceImpl.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/package-info.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/package-info.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/package-info.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/impl/package-info.java diff --git a/asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/package-info.java b/asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/package-info.java similarity index 100% rename from asinkj-example/asinkj-demo/src/main/java/org/asinkj/demo/service/package-info.java rename to asinkj-biz/asinkj-demo/src/main/java/org/asinkj/demo/service/package-info.java diff --git a/asinkj-example/asinkj-demo/src/main/resources/application.yml b/asinkj-biz/asinkj-demo/src/main/resources/application.yml similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/application.yml rename to asinkj-biz/asinkj-demo/src/main/resources/application.yml diff --git a/asinkj-example/asinkj-demo/src/main/resources/banner.txt b/asinkj-biz/asinkj-demo/src/main/resources/banner.txt similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/banner.txt rename to asinkj-biz/asinkj-demo/src/main/resources/banner.txt diff --git a/asinkj-example/asinkj-demo/src/main/resources/excel/单列表.xlsx b/asinkj-biz/asinkj-demo/src/main/resources/excel/单列表.xlsx similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/excel/单列表.xlsx rename to asinkj-biz/asinkj-demo/src/main/resources/excel/单列表.xlsx diff --git a/asinkj-example/asinkj-demo/src/main/resources/excel/多sheet列表.xlsx b/asinkj-biz/asinkj-demo/src/main/resources/excel/多sheet列表.xlsx similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/excel/多sheet列表.xlsx rename to asinkj-biz/asinkj-demo/src/main/resources/excel/多sheet列表.xlsx diff --git a/asinkj-example/asinkj-demo/src/main/resources/excel/多列表.xlsx b/asinkj-biz/asinkj-demo/src/main/resources/excel/多列表.xlsx similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/excel/多列表.xlsx rename to asinkj-biz/asinkj-demo/src/main/resources/excel/多列表.xlsx diff --git a/asinkj-example/asinkj-demo/src/main/resources/logback-plus.xml b/asinkj-biz/asinkj-demo/src/main/resources/logback-plus.xml similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/logback-plus.xml rename to asinkj-biz/asinkj-demo/src/main/resources/logback-plus.xml diff --git a/asinkj-example/asinkj-demo/src/main/resources/mapper/demo/ShardingOrderItemMapper.xml b/asinkj-biz/asinkj-demo/src/main/resources/mapper/demo/ShardingOrderItemMapper.xml similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/mapper/demo/ShardingOrderItemMapper.xml rename to asinkj-biz/asinkj-demo/src/main/resources/mapper/demo/ShardingOrderItemMapper.xml diff --git a/asinkj-example/asinkj-demo/src/main/resources/mapper/demo/ShardingOrderMapper.xml b/asinkj-biz/asinkj-demo/src/main/resources/mapper/demo/ShardingOrderMapper.xml similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/mapper/demo/ShardingOrderMapper.xml rename to asinkj-biz/asinkj-demo/src/main/resources/mapper/demo/ShardingOrderMapper.xml diff --git a/asinkj-example/asinkj-demo/src/main/resources/mapper/demo/TestDemoMapper.xml b/asinkj-biz/asinkj-demo/src/main/resources/mapper/demo/TestDemoMapper.xml similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/mapper/demo/TestDemoMapper.xml rename to asinkj-biz/asinkj-demo/src/main/resources/mapper/demo/TestDemoMapper.xml diff --git a/asinkj-example/asinkj-demo/src/main/resources/mapper/demo/TestTreeMapper.xml b/asinkj-biz/asinkj-demo/src/main/resources/mapper/demo/TestTreeMapper.xml similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/mapper/demo/TestTreeMapper.xml rename to asinkj-biz/asinkj-demo/src/main/resources/mapper/demo/TestTreeMapper.xml diff --git a/asinkj-example/asinkj-demo/src/main/resources/mapper/package-info.md b/asinkj-biz/asinkj-demo/src/main/resources/mapper/package-info.md similarity index 100% rename from asinkj-example/asinkj-demo/src/main/resources/mapper/package-info.md rename to asinkj-biz/asinkj-demo/src/main/resources/mapper/package-info.md diff --git a/asinkj-example/asinkj-demo/src/test/java/org/asinkj/demo/AssertUnitTest.java b/asinkj-biz/asinkj-demo/src/test/java/org/asinkj/demo/AssertUnitTest.java similarity index 100% rename from asinkj-example/asinkj-demo/src/test/java/org/asinkj/demo/AssertUnitTest.java rename to asinkj-biz/asinkj-demo/src/test/java/org/asinkj/demo/AssertUnitTest.java diff --git a/asinkj-example/asinkj-demo/src/test/java/org/asinkj/demo/DemoUnitTest.java b/asinkj-biz/asinkj-demo/src/test/java/org/asinkj/demo/DemoUnitTest.java similarity index 100% rename from asinkj-example/asinkj-demo/src/test/java/org/asinkj/demo/DemoUnitTest.java rename to asinkj-biz/asinkj-demo/src/test/java/org/asinkj/demo/DemoUnitTest.java diff --git a/asinkj-example/asinkj-demo/src/test/java/org/asinkj/demo/ParamUnitTest.java b/asinkj-biz/asinkj-demo/src/test/java/org/asinkj/demo/ParamUnitTest.java similarity index 100% rename from asinkj-example/asinkj-demo/src/test/java/org/asinkj/demo/ParamUnitTest.java rename to asinkj-biz/asinkj-demo/src/test/java/org/asinkj/demo/ParamUnitTest.java diff --git a/asinkj-example/asinkj-demo/src/test/java/org/asinkj/demo/TOrderTest.java b/asinkj-biz/asinkj-demo/src/test/java/org/asinkj/demo/TOrderTest.java similarity index 100% rename from asinkj-example/asinkj-demo/src/test/java/org/asinkj/demo/TOrderTest.java rename to asinkj-biz/asinkj-demo/src/test/java/org/asinkj/demo/TOrderTest.java diff --git a/asinkj-example/asinkj-demo/src/test/java/org/asinkj/demo/TagUnitTest.java b/asinkj-biz/asinkj-demo/src/test/java/org/asinkj/demo/TagUnitTest.java similarity index 100% rename from asinkj-example/asinkj-demo/src/test/java/org/asinkj/demo/TagUnitTest.java rename to asinkj-biz/asinkj-demo/src/test/java/org/asinkj/demo/TagUnitTest.java diff --git a/asinkj-example/asinkj-lpm/pom.xml b/asinkj-biz/asinkj-lpm/pom.xml similarity index 98% rename from asinkj-example/asinkj-lpm/pom.xml rename to asinkj-biz/asinkj-lpm/pom.xml index b7ce57f..94a3800 100644 --- a/asinkj-example/asinkj-lpm/pom.xml +++ b/asinkj-biz/asinkj-lpm/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> org.asinkj - asinkj-example + asinkj-biz ${revision} 4.0.0 diff --git a/asinkj-example/asinkj-lpm/src/main/java/org/asinkj/AsinKjLpmApplication.java b/asinkj-biz/asinkj-lpm/src/main/java/org/asinkj/AsinKjLpmApplication.java similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/java/org/asinkj/AsinKjLpmApplication.java rename to asinkj-biz/asinkj-lpm/src/main/java/org/asinkj/AsinKjLpmApplication.java diff --git a/asinkj-biz/asinkj-lpm/src/main/java/org/asinkj/controller/MailController.java b/asinkj-biz/asinkj-lpm/src/main/java/org/asinkj/controller/MailController.java new file mode 100644 index 0000000..595ae6c --- /dev/null +++ b/asinkj-biz/asinkj-lpm/src/main/java/org/asinkj/controller/MailController.java @@ -0,0 +1,49 @@ +package org.asinkj.controller; + +import org.asinkj.common.core.domain.R; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +/** + * 邮件发送案例 + * + * @author shuo hu + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/mail") +public class MailController { + + /** + * 发送邮件 + * + * @param to 接收人 + * @param subject 标题 + * @param text 内容 + */ + @GetMapping("/sendSimpleMessage") + public R sendSimpleMessage(String to, String subject, String text) { + + return R.ok(); + } + + /** + * 发送邮件(带附件) + * + * @param to 接收人 + * @param subject 标题 + * @param text 内容 + * @param filePath 附件路径 + */ + @GetMapping("/sendMessageWithAttachment") + public R sendMessageWithAttachment(String to, String subject, String text, String filePath) { + + return R.ok(); + } + +} diff --git a/asinkj-example/asinkj-lpm/src/main/resources/application.yml b/asinkj-biz/asinkj-lpm/src/main/resources/application.yml similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/resources/application.yml rename to asinkj-biz/asinkj-lpm/src/main/resources/application.yml diff --git a/asinkj-biz/asinkj-lpm/src/main/resources/banner.txt b/asinkj-biz/asinkj-lpm/src/main/resources/banner.txt new file mode 100644 index 0000000..4e4d6cb --- /dev/null +++ b/asinkj-biz/asinkj-lpm/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + _____ .__ ____ __. __ .____ + / _ \ _____|__| ____ | |/ _| |__| | | ______ _____ + / /_\ \ / ___/ |/ \| < | | ______ | | \____ \ / \ +/ | \\___ \| | | \ | \ | | /_____/ | |___| |_> > Y Y \ +\____|__ /____ >__|___| /____|__ \/\__| | |_______ \ __/|__|_| / + \/ \/ \/ \/\______| \/__| \/ diff --git a/asinkj-example/asinkj-lpm/src/main/resources/logback-plus.xml b/asinkj-biz/asinkj-lpm/src/main/resources/logback-plus.xml similarity index 100% rename from asinkj-example/asinkj-lpm/src/main/resources/logback-plus.xml rename to asinkj-biz/asinkj-lpm/src/main/resources/logback-plus.xml diff --git a/asinkj-example/asinkj-test-mq/README.md b/asinkj-biz/asinkj-test-mq/README.md similarity index 100% rename from asinkj-example/asinkj-test-mq/README.md rename to asinkj-biz/asinkj-test-mq/README.md diff --git a/asinkj-example/asinkj-test-mq/pom.xml b/asinkj-biz/asinkj-test-mq/pom.xml similarity index 98% rename from asinkj-example/asinkj-test-mq/pom.xml rename to asinkj-biz/asinkj-test-mq/pom.xml index 152462e..0a2bca3 100644 --- a/asinkj-example/asinkj-test-mq/pom.xml +++ b/asinkj-biz/asinkj-test-mq/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> org.asinkj - asinkj-example + asinkj-biz ${revision} 4.0.0 diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/AsinKjTestMqApplication.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/AsinKjTestMqApplication.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/AsinKjTestMqApplication.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/AsinKjTestMqApplication.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/config/RabbitConfig.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/config/RabbitConfig.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/config/RabbitConfig.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/config/RabbitConfig.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/config/RabbitTtlQueueConfig.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/config/RabbitTtlQueueConfig.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/config/RabbitTtlQueueConfig.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/config/RabbitTtlQueueConfig.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/KafkaNormalConsumer.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/KafkaNormalConsumer.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/KafkaNormalConsumer.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/KafkaNormalConsumer.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/NormalRocketConsumer.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/NormalRocketConsumer.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/NormalRocketConsumer.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/NormalRocketConsumer.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/RabbitConsumer.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/RabbitConsumer.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/RabbitConsumer.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/RabbitConsumer.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/TransactionRocketConsumer.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/TransactionRocketConsumer.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/TransactionRocketConsumer.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/consumer/TransactionRocketConsumer.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/controller/PushMessageController.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/controller/PushMessageController.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/controller/PushMessageController.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/controller/PushMessageController.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/listener/TranscationRocketListener.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/listener/TranscationRocketListener.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/listener/TranscationRocketListener.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/listener/TranscationRocketListener.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/DelayRabbitProducer.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/DelayRabbitProducer.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/DelayRabbitProducer.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/DelayRabbitProducer.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/KafkaNormalProducer.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/KafkaNormalProducer.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/KafkaNormalProducer.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/KafkaNormalProducer.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/NormalRabbitProducer.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/NormalRabbitProducer.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/NormalRabbitProducer.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/NormalRabbitProducer.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/NormalRocketProducer.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/NormalRocketProducer.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/NormalRocketProducer.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/NormalRocketProducer.java diff --git a/asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/TransactionRocketProducer.java b/asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/TransactionRocketProducer.java similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/TransactionRocketProducer.java rename to asinkj-biz/asinkj-test-mq/src/main/java/org/asinkj/stream/producer/TransactionRocketProducer.java diff --git a/asinkj-example/asinkj-test-mq/src/main/resources/application.yml b/asinkj-biz/asinkj-test-mq/src/main/resources/application.yml similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/resources/application.yml rename to asinkj-biz/asinkj-test-mq/src/main/resources/application.yml diff --git a/asinkj-example/asinkj-test-mq/src/main/resources/logback-plus.xml b/asinkj-biz/asinkj-test-mq/src/main/resources/logback-plus.xml similarity index 100% rename from asinkj-example/asinkj-test-mq/src/main/resources/logback-plus.xml rename to asinkj-biz/asinkj-test-mq/src/main/resources/logback-plus.xml diff --git a/asinkj-example/pom.xml b/asinkj-biz/pom.xml similarity index 92% rename from asinkj-example/pom.xml rename to asinkj-biz/pom.xml index e75aa3c..72d30b5 100644 --- a/asinkj-example/pom.xml +++ b/asinkj-biz/pom.xml @@ -12,13 +12,14 @@ asinkj-demo asinkj-test-mq asinkj-lpm + asinkj-amz - asinkj-example + asinkj-biz pom - asinkj-example 例子模块 + asinkj-biz 例子模块 diff --git a/asinkj-common/asinkj-common-json/src/main/java/org/asinkj/common/json/config/JacksonConfig.java b/asinkj-common/asinkj-common-json/src/main/java/org/asinkj/common/json/config/JacksonConfig.java index d9b7ad9..a65821c 100644 --- a/asinkj-common/asinkj-common-json/src/main/java/org/asinkj/common/json/config/JacksonConfig.java +++ b/asinkj-common/asinkj-common-json/src/main/java/org/asinkj/common/json/config/JacksonConfig.java @@ -1,5 +1,6 @@ package org.asinkj.common.json.config; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; @@ -29,6 +30,8 @@ public class JacksonConfig { @Bean public Jackson2ObjectMapperBuilderCustomizer customizer() { return builder -> { +// builder.propertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); + // 全局配置序列化返回 JSON 处理 JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(Long.class, BigNumberSerializer.INSTANCE); diff --git a/asinkj-common/asinkj-common-mybatis/pom.xml b/asinkj-common/asinkj-common-mybatis/pom.xml index 42f39f5..ba467f1 100644 --- a/asinkj-common/asinkj-common-mybatis/pom.xml +++ b/asinkj-common/asinkj-common-mybatis/pom.xml @@ -64,7 +64,6 @@ org.postgresql postgresql - diff --git a/asinkj-modules/asinkj-gen/pom.xml b/asinkj-modules/asinkj-gen/pom.xml index 3a442a5..c1434bb 100644 --- a/asinkj-modules/asinkj-gen/pom.xml +++ b/asinkj-modules/asinkj-gen/pom.xml @@ -83,11 +83,11 @@ - - - - - + + org.anyline + anyline-data-jdbc-postgresql + ${anyline.version} + diff --git a/pom.xml b/pom.xml index 07ac8ec..fe7d6b8 100644 --- a/pom.xml +++ b/pom.xml @@ -96,6 +96,10 @@ nacos 127.0.0.1:4560 + + + false + @@ -381,7 +385,7 @@ asinkj-modules asinkj-api asinkj-common - asinkj-example + asinkj-biz pom