xiongzhu 3 лет назад
Сommit
2fd09f2fc2
100 измененных файлов с 7413 добавлено и 0 удалено
  1. 7 0
      .gitignore
  2. 2335 0
      db/init.sql
  3. 10 0
      install-jar.sh
  4. BIN
      lib/merchant-integration-api-core.jar
  5. BIN
      lib/mozjpeg4j-1.1.jar
  6. BIN
      lib/mychain-rest-client-0.10.2.11-with-dependencies.jar
  7. BIN
      lib/mychainx-java-sdk-0.10.2.9-with-dependencies.jar
  8. BIN
      lib/pngquant4j-1.0.1.jar
  9. 472 0
      pom.xml
  10. 25 0
      src/main/java/com/izouma/nineth/Application.java
  11. 12 0
      src/main/java/com/izouma/nineth/annotations/Debounce.java
  12. 14 0
      src/main/java/com/izouma/nineth/annotations/MobileRestController.java
  13. 13 0
      src/main/java/com/izouma/nineth/annotations/NoLoginRestController.java
  14. 14 0
      src/main/java/com/izouma/nineth/annotations/OperLog.java
  15. 12 0
      src/main/java/com/izouma/nineth/annotations/Searchable.java
  16. 22 0
      src/main/java/com/izouma/nineth/aspect/CipherParam.java
  17. 71 0
      src/main/java/com/izouma/nineth/aspect/DebounceAspect.java
  18. 16 0
      src/main/java/com/izouma/nineth/aspect/RequestCipher.java
  19. 92 0
      src/main/java/com/izouma/nineth/aspect/RequestCipherInterceptor.java
  20. 33 0
      src/main/java/com/izouma/nineth/aspect/debounce/DebounceTask.java
  21. 34 0
      src/main/java/com/izouma/nineth/config/AdapayConfig.java
  22. 21 0
      src/main/java/com/izouma/nineth/config/AdapayProperties.java
  23. 33 0
      src/main/java/com/izouma/nineth/config/AlipayConfig.java
  24. 20 0
      src/main/java/com/izouma/nineth/config/AlipayProperties.java
  25. 48 0
      src/main/java/com/izouma/nineth/config/AliyunProperties.java
  26. 78 0
      src/main/java/com/izouma/nineth/config/CacheConfig.java
  27. 100 0
      src/main/java/com/izouma/nineth/config/CaptchaConfig.java
  28. 23 0
      src/main/java/com/izouma/nineth/config/Constants.java
  29. 52 0
      src/main/java/com/izouma/nineth/config/CustomRedisCacheManager.java
  30. 148 0
      src/main/java/com/izouma/nineth/config/DateConfig.java
  31. 5 0
      src/main/java/com/izouma/nineth/config/EventNames.java
  32. 42 0
      src/main/java/com/izouma/nineth/config/GeneralProperties.java
  33. 30 0
      src/main/java/com/izouma/nineth/config/HibernateJsonConfig.java
  34. 24 0
      src/main/java/com/izouma/nineth/config/IPFSProperties.java
  35. 23 0
      src/main/java/com/izouma/nineth/config/IkudotpayConfig.java
  36. 31 0
      src/main/java/com/izouma/nineth/config/IkudotpayProperties.java
  37. 24 0
      src/main/java/com/izouma/nineth/config/LianlianpayConfig.java
  38. 43 0
      src/main/java/com/izouma/nineth/config/LianlianpayProperties.java
  39. 36 0
      src/main/java/com/izouma/nineth/config/LocalDateTimeSerializerConfig.java
  40. 24 0
      src/main/java/com/izouma/nineth/config/PayeasenetConfig.java
  41. 47 0
      src/main/java/com/izouma/nineth/config/PayeasenetProperties.java
  42. 29 0
      src/main/java/com/izouma/nineth/config/PushConfig.java
  43. 25 0
      src/main/java/com/izouma/nineth/config/PushProperties.java
  44. 128 0
      src/main/java/com/izouma/nineth/config/RedisKeys.java
  45. 7 0
      src/main/java/com/izouma/nineth/config/RedisView.java
  46. 29 0
      src/main/java/com/izouma/nineth/config/RequestCipherProperties.java
  47. 47 0
      src/main/java/com/izouma/nineth/config/SandpayConfig.java
  48. 94 0
      src/main/java/com/izouma/nineth/config/SandpayProperties.java
  49. 19 0
      src/main/java/com/izouma/nineth/config/SchedulingConfig.java
  50. 43 0
      src/main/java/com/izouma/nineth/config/SiweipayProperties.java
  51. 16 0
      src/main/java/com/izouma/nineth/config/SnowflakeIdWorkerConfig.java
  52. 24 0
      src/main/java/com/izouma/nineth/config/SpringSecurityAuditorAware.java
  53. 28 0
      src/main/java/com/izouma/nineth/config/SumpayConfig.java
  54. 50 0
      src/main/java/com/izouma/nineth/config/SumpayProperties.java
  55. 215 0
      src/main/java/com/izouma/nineth/config/SysConstants.java
  56. 109 0
      src/main/java/com/izouma/nineth/config/WebMvcConfig.java
  57. 30 0
      src/main/java/com/izouma/nineth/config/WxMaConfiguration.java
  58. 14 0
      src/main/java/com/izouma/nineth/config/WxMaProperties.java
  59. 78 0
      src/main/java/com/izouma/nineth/config/WxMpConfiguration.java
  60. 13 0
      src/main/java/com/izouma/nineth/config/WxMpProperties.java
  61. 47 0
      src/main/java/com/izouma/nineth/config/WxPayConfiguration.java
  62. 52 0
      src/main/java/com/izouma/nineth/config/WxPayProperties.java
  63. 78 0
      src/main/java/com/izouma/nineth/converter/CustomBeanResultTransformer.java
  64. 26 0
      src/main/java/com/izouma/nineth/converter/FileObjectConverter.java
  65. 41 0
      src/main/java/com/izouma/nineth/converter/FileObjectListConverter.java
  66. 30 0
      src/main/java/com/izouma/nineth/converter/InvitePrizeConverter.java
  67. 40 0
      src/main/java/com/izouma/nineth/converter/InvitePrizeListConverter.java
  68. 33 0
      src/main/java/com/izouma/nineth/converter/JSONObjectArrayConverter.java
  69. 30 0
      src/main/java/com/izouma/nineth/converter/JSONObjectConverter.java
  70. 28 0
      src/main/java/com/izouma/nineth/converter/LongArrayConverter.java
  71. 32 0
      src/main/java/com/izouma/nineth/converter/PreEmptionPrivilegeConverter.java
  72. 34 0
      src/main/java/com/izouma/nineth/converter/PrivilegeListConverter.java
  73. 34 0
      src/main/java/com/izouma/nineth/converter/PropertyListConverter.java
  74. 27 0
      src/main/java/com/izouma/nineth/converter/StringArrayConverter.java
  75. 24 0
      src/main/java/com/izouma/nineth/converter/StringToMapConverter.java
  76. 32 0
      src/main/java/com/izouma/nineth/converter/SurpriseBoxContentListConverter.java
  77. 46 0
      src/main/java/com/izouma/nineth/domain/Activity.java
  78. 85 0
      src/main/java/com/izouma/nineth/domain/ActivityCollection.java
  79. 50 0
      src/main/java/com/izouma/nineth/domain/ActivityCollectionInfo.java
  80. 83 0
      src/main/java/com/izouma/nineth/domain/ActivityInvite.java
  81. 44 0
      src/main/java/com/izouma/nineth/domain/ActivityMaterial.java
  82. 33 0
      src/main/java/com/izouma/nineth/domain/ActivityOrder.java
  83. 83 0
      src/main/java/com/izouma/nineth/domain/ActivityPriorityDocument.java
  84. 51 0
      src/main/java/com/izouma/nineth/domain/ActivitySurpriseBox.java
  85. 21 0
      src/main/java/com/izouma/nineth/domain/AdaTrade.java
  86. 40 0
      src/main/java/com/izouma/nineth/domain/AdapayMerchant.java
  87. 91 0
      src/main/java/com/izouma/nineth/domain/AirDrop.java
  88. 69 0
      src/main/java/com/izouma/nineth/domain/AppVersion.java
  89. 22 0
      src/main/java/com/izouma/nineth/domain/Appointment.java
  90. 247 0
      src/main/java/com/izouma/nineth/domain/Asset.java
  91. 47 0
      src/main/java/com/izouma/nineth/domain/AssetSellLimit.java
  92. 83 0
      src/main/java/com/izouma/nineth/domain/AuditedEntity.java
  93. 65 0
      src/main/java/com/izouma/nineth/domain/AwardActivityCollectionInfo.java
  94. 50 0
      src/main/java/com/izouma/nineth/domain/Banner.java
  95. 93 0
      src/main/java/com/izouma/nineth/domain/BaseEntity.java
  96. 89 0
      src/main/java/com/izouma/nineth/domain/BaseEntityNoID.java
  97. 106 0
      src/main/java/com/izouma/nineth/domain/BlindBoxItem.java
  98. 185 0
      src/main/java/com/izouma/nineth/domain/Collection.java
  99. 74 0
      src/main/java/com/izouma/nineth/domain/CollectionCategory.java
  100. 36 0
      src/main/java/com/izouma/nineth/domain/CollectionNumber.java

+ 7 - 0
.gitignore

@@ -0,0 +1,7 @@
+.idea
+*.iml
+target
+/logs
+/src/main/resources/application-dev.yaml
+/captchaImg
+.DS_Store

+ 2335 - 0
db/init.sql

@@ -0,0 +1,2335 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : 第九空间-测试服-47.107.237.230
+ Source Server Type    : MySQL
+ Source Server Version : 80029
+ Source Host           : 47.107.237.230:53306
+ Source Schema         : starepoch_test
+
+ Target Server Type    : MySQL
+ Target Server Version : 80029
+ File Encoding         : 65001
+
+ Date: 15/06/2022 15:24:27
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for activity
+-- ----------------------------
+
+CREATE TABLE `activity`  (
+                             `id` bigint NOT NULL,
+                             `created_at` datetime NULL DEFAULT NULL,
+                             `created_by` varchar(255)  NULL DEFAULT NULL,
+                             `del` bit(1) NOT NULL,
+                             `modified_at` datetime NULL DEFAULT NULL,
+                             `modified_by` varchar(255)  NULL DEFAULT NULL,
+                             `cover` varchar(255)  NULL DEFAULT NULL,
+                             `detail` text  NULL,
+                             `name` varchar(255)  NULL DEFAULT NULL,
+                             `project_id` int NOT NULL,
+                             `content` text  NULL,
+                             PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of activity
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for activity_collection
+-- ----------------------------
+
+CREATE TABLE `activity_collection`  (
+                                        `id` bigint NOT NULL,
+                                        `created_at` datetime NULL DEFAULT NULL,
+                                        `created_by` varchar(255)  NULL DEFAULT NULL,
+                                        `del` bit(1) NOT NULL,
+                                        `modified_at` datetime NULL DEFAULT NULL,
+                                        `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                        `award_collection_id` bigint NULL DEFAULT NULL,
+                                        `award_collection_name` varchar(255)  NULL DEFAULT NULL,
+                                        `collection_id` bigint NULL DEFAULT NULL,
+                                        `collection_name` varchar(255)  NULL DEFAULT NULL,
+                                        `name` varchar(255)  NULL DEFAULT NULL,
+                                        `num` int NOT NULL,
+                                        `pic` text  NULL,
+                                        `stock` int NOT NULL,
+                                        `total` int NOT NULL,
+                                        `project_id` int NOT NULL,
+                                        `end_time` datetime NULL DEFAULT NULL,
+                                        `need_collected_num` int NULL DEFAULT NULL,
+                                        `start_time` datetime NULL DEFAULT NULL,
+                                        `type` int NULL DEFAULT NULL,
+                                        PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of activity_collection
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for activity_collection_info
+-- ----------------------------
+
+CREATE TABLE `activity_collection_info`  (
+                                             `id` bigint NOT NULL,
+                                             `created_at` datetime NULL DEFAULT NULL,
+                                             `created_by` varchar(255)  NULL DEFAULT NULL,
+                                             `del` bit(1) NOT NULL,
+                                             `modified_at` datetime NULL DEFAULT NULL,
+                                             `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                             `collection_id` bigint NULL DEFAULT NULL,
+                                             `collection_name` varchar(255)  NULL DEFAULT NULL,
+                                             `must_need_collected` bit(1) NULL DEFAULT NULL,
+                                             `num` int NULL DEFAULT NULL,
+                                             `activity_id` bigint NULL DEFAULT NULL,
+                                             PRIMARY KEY (`id`) USING BTREE,
+                                             INDEX `FK1v9a5r3gurk2erxvd49lv89u5`(`activity_id`) USING BTREE,
+                                             CONSTRAINT `FK1v9a5r3gurk2erxvd49lv89u5` FOREIGN KEY (`activity_id`) REFERENCES `activity_collection` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of activity_collection_info
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for activity_invite
+-- ----------------------------
+
+CREATE TABLE `activity_invite`  (
+                                    `id` bigint NOT NULL,
+                                    `created_at` datetime NULL DEFAULT NULL,
+                                    `created_by` varchar(255)  NULL DEFAULT NULL,
+                                    `del` bit(1) NOT NULL,
+                                    `modified_at` datetime NULL DEFAULT NULL,
+                                    `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                    `award_distribution_type` varchar(255)  NULL DEFAULT NULL,
+                                    `by_invite_prize` text  NULL,
+                                    `content` text  NULL,
+                                    `invite_enddatetime` datetime NULL DEFAULT NULL,
+                                    `invite_prize_list` text  NULL,
+                                    `invite_startdatetime` datetime NULL DEFAULT NULL,
+                                    `name` varchar(255)  NULL DEFAULT NULL,
+                                    `phones` text  NULL,
+                                    `poster` varchar(255)  NULL DEFAULT NULL,
+                                    `prl` varchar(255)  NULL DEFAULT NULL,
+                                    `project_id` int NOT NULL,
+                                    `hold_collection_id` bigint NULL DEFAULT NULL,
+                                    `inviter_qualifications` int NULL DEFAULT NULL,
+                                    `hold_collection_ids` text  NULL,
+                                    PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Records of activity_invite
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for activity_material
+-- ----------------------------
+
+CREATE TABLE `activity_material`  (
+                                      `id` bigint NOT NULL,
+                                      `created_at` datetime NULL DEFAULT NULL,
+                                      `created_by` varchar(255)  NULL DEFAULT NULL,
+                                      `del` bit(1) NOT NULL,
+                                      `modified_at` datetime NULL DEFAULT NULL,
+                                      `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                      `asset_id` bigint NULL DEFAULT NULL,
+                                      `category` varchar(255)  NULL DEFAULT NULL,
+                                      `collection_id` bigint NULL DEFAULT NULL,
+                                      `name` varchar(255)  NULL DEFAULT NULL,
+                                      `number` int NULL DEFAULT NULL,
+                                      `order_id` bigint NULL DEFAULT NULL,
+                                      `pic` text  NULL,
+                                      PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of activity_material
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for activity_order
+-- ----------------------------
+
+CREATE TABLE `activity_order`  (
+                                   `id` bigint NOT NULL,
+                                   `created_at` datetime NULL DEFAULT NULL,
+                                   `created_by` varchar(255)  NULL DEFAULT NULL,
+                                   `del` bit(1) NOT NULL,
+                                   `modified_at` datetime NULL DEFAULT NULL,
+                                   `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                   `activity_collection` varchar(255)  NULL DEFAULT NULL,
+                                   `activity_collection_id` bigint NULL DEFAULT NULL,
+                                   `phone` varchar(255)  NULL DEFAULT NULL,
+                                   `user_id` bigint NULL DEFAULT NULL,
+                                   PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of activity_order
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for activity_priority_document
+-- ----------------------------
+
+CREATE TABLE `activity_priority_document`  (
+                                               `id` bigint NOT NULL,
+                                               `created_at` datetime NULL DEFAULT NULL,
+                                               `created_by` varchar(255)  NULL DEFAULT NULL,
+                                               `del` bit(1) NOT NULL,
+                                               `modified_at` datetime NULL DEFAULT NULL,
+                                               `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                               `advance_purchase_count` int NOT NULL,
+                                               `advance_purchase_time` int NOT NULL,
+                                               `collection_id` bigint NULL DEFAULT NULL,
+                                               `collection_name` varchar(255)  NULL DEFAULT NULL,
+                                               `name` varchar(255)  NULL DEFAULT NULL,
+                                               `pic` text  NULL,
+                                               `project_id` int NOT NULL,
+                                               `item_id` int NULL DEFAULT NULL,
+                                               `item_name` int NULL DEFAULT NULL,
+                                               `minter_id` bigint NULL DEFAULT NULL,
+                                               `overdue_time` datetime NULL DEFAULT NULL,
+                                               `reset` bit(1) NOT NULL,
+                                               `target_collection_id` bigint NULL DEFAULT NULL,
+                                               `target_collection_id_list` text  NULL,
+                                               `text` text  NULL,
+                                               PRIMARY KEY (`id`) USING BTREE,
+                                               INDEX `IDXh1jya5ssbfe165hmv9y5b69ae`(`minter_id`) USING BTREE,
+                                               INDEX `IDX3v2etk7srccalesftyf5rfyq`(`reset`) USING BTREE,
+                                               INDEX `IDXt764tmbb5k35ws8hn6mmu7wuu`(`collection_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of activity_priority_document
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for activity_priority_document_detail
+-- ----------------------------
+
+CREATE TABLE `activity_priority_document_detail`  (
+                                                      `id` bigint NOT NULL,
+                                                      `created_at` datetime NULL DEFAULT NULL,
+                                                      `created_by` varchar(255)  NULL DEFAULT NULL,
+                                                      `del` bit(1) NOT NULL,
+                                                      `modified_at` datetime NULL DEFAULT NULL,
+                                                      `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                                      `advance_purchase_count` int NOT NULL,
+                                                      `advance_purchase_time` int NOT NULL,
+                                                      `asset_id` bigint NULL DEFAULT NULL,
+                                                      `collection_id` bigint NULL DEFAULT NULL,
+                                                      `disabled` bit(1) NOT NULL,
+                                                      PRIMARY KEY (`id`) USING BTREE,
+                                                      INDEX `IDXh3qt65qhxieeyk1o4mpe1fqxf`(`collection_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of activity_priority_document_detail
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for activity_surprise_box
+-- ----------------------------
+
+CREATE TABLE `activity_surprise_box`  (
+                                          `id` bigint NOT NULL,
+                                          `created_at` datetime NULL DEFAULT NULL,
+                                          `created_by` varchar(255)  NULL DEFAULT NULL,
+                                          `del` bit(1) NOT NULL,
+                                          `modified_at` datetime NULL DEFAULT NULL,
+                                          `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                          `box_sum` int NULL DEFAULT NULL,
+                                          `grant_count` int NULL DEFAULT NULL,
+                                          `name` varchar(255)  NULL DEFAULT NULL,
+                                          `project_id` int NOT NULL,
+                                          `properties` text  NULL,
+                                          PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of activity_surprise_box
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for adapay_merchant
+-- ----------------------------
+
+CREATE TABLE `adapay_merchant`  (
+                                    `id` bigint NOT NULL,
+                                    `created_at` datetime NULL DEFAULT NULL,
+                                    `created_by` varchar(255)  NULL DEFAULT NULL,
+                                    `del` bit(1) NOT NULL,
+                                    `modified_at` datetime NULL DEFAULT NULL,
+                                    `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                    `api_key` varchar(255)  NULL DEFAULT NULL,
+                                    `app_id` varchar(72)  NULL DEFAULT NULL,
+                                    `mock_key` varchar(255)  NULL DEFAULT NULL,
+                                    `name` varchar(72)  NULL DEFAULT NULL,
+                                    `priv_key` text  NULL,
+                                    `public_key` text  NULL,
+                                    `selected` bit(1) NOT NULL,
+                                    `status` varchar(255)  NULL DEFAULT NULL,
+                                    `wx_app_id` varchar(255)  NULL DEFAULT NULL,
+                                    PRIMARY KEY (`id`) USING BTREE,
+                                    UNIQUE INDEX `UK_t7m2745vm5owxivq45g6lmsut`(`app_id`) USING BTREE,
+                                    UNIQUE INDEX `UK_226ho9bovclgwjf8pvuxdb04s`(`name`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of adapay_merchant
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for air_drop
+-- ----------------------------
+
+CREATE TABLE `air_drop`  (
+                             `id` bigint NOT NULL,
+                             `created_at` datetime NULL DEFAULT NULL,
+                             `created_by` varchar(255)  NULL DEFAULT NULL,
+                             `del` bit(1) NOT NULL,
+                             `modified_at` datetime NULL DEFAULT NULL,
+                             `modified_by` varchar(255)  NULL DEFAULT NULL,
+                             `collection_id` bigint NULL DEFAULT NULL,
+                             `coupon_id` bigint NULL DEFAULT NULL,
+                             `name` varchar(255)  NULL DEFAULT NULL,
+                             `phone` text  NULL,
+                             `remark` varchar(255)  NULL DEFAULT NULL,
+                             `result` text  NULL,
+                             `type` varchar(255)  NULL DEFAULT NULL,
+                             `user_ids` text  NULL,
+                             `project_id` int NOT NULL,
+                             `drop_count` int NULL DEFAULT NULL,
+                             `drop_price` decimal(10, 2) NULL DEFAULT NULL,
+                             `operation` varchar(255)  NULL DEFAULT NULL,
+                             `surprise_box_id` bigint NULL DEFAULT NULL,
+                             PRIMARY KEY (`id`) USING BTREE,
+                             INDEX `IDXf8xftc1c2yg8y5baijk0070rl`(`name`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of air_drop
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for appointment
+-- ----------------------------
+
+CREATE TABLE `appointment`  (
+                                `id` bigint NOT NULL,
+                                `created_at` datetime NULL DEFAULT NULL,
+                                `created_by` varchar(255)  NULL DEFAULT NULL,
+                                `del` bit(1) NOT NULL,
+                                `modified_at` datetime NULL DEFAULT NULL,
+                                `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                `blind_box_id` bigint NULL DEFAULT NULL,
+                                `user_id` bigint NULL DEFAULT NULL,
+                                PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of appointment
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for asset
+-- ----------------------------
+
+CREATE TABLE `asset`  (
+                          `id` bigint NOT NULL,
+                          `created_at` datetime NULL DEFAULT NULL,
+                          `created_by` varchar(255)  NULL DEFAULT NULL,
+                          `del` bit(1) NOT NULL,
+                          `modified_at` datetime NULL DEFAULT NULL,
+                          `modified_by` varchar(255)  NULL DEFAULT NULL,
+                          `block_number` decimal(19, 2) NULL DEFAULT NULL,
+                          `gas_used` decimal(19, 2) NULL DEFAULT NULL,
+                          `ipfs_url` varchar(255)  NULL DEFAULT NULL,
+                          `minter` varchar(255)  NULL DEFAULT NULL,
+                          `minter_avatar` varchar(255)  NULL DEFAULT NULL,
+                          `minter_id` bigint NULL DEFAULT NULL,
+                          `name` varchar(255)  NULL DEFAULT NULL,
+                          `order_id` bigint NULL DEFAULT NULL,
+                          `out_order_id` bigint NULL DEFAULT NULL,
+                          `out_tx_hash` varchar(255)  NULL DEFAULT NULL,
+                          `pic` text  NULL,
+                          `price` decimal(10, 2) NULL DEFAULT NULL,
+                          `sell_price` decimal(10, 2) NULL DEFAULT NULL,
+                          `status` varchar(255)  NULL DEFAULT NULL,
+                          `token_id` varchar(255)  NULL DEFAULT NULL,
+                          `tx_hash` varchar(255)  NULL DEFAULT NULL,
+                          `user_id` bigint NULL DEFAULT NULL,
+                          `properties` text  NULL,
+                          `collection_id` bigint NULL DEFAULT NULL,
+                          `number` int NOT NULL,
+                          `owner_name` varchar(255)  NULL DEFAULT NULL,
+                          `can_resale` bit(1) NOT NULL,
+                          `detail` text  NULL,
+                          `public_collection_id` bigint NULL DEFAULT NULL,
+                          `public_show` bit(1) NOT NULL,
+                          `royalties` int NOT NULL,
+                          `service_charge` int NOT NULL,
+                          `category` varchar(255)  NULL DEFAULT NULL,
+                          `consignment` bit(1) NOT NULL,
+                          `likes` int NOT NULL,
+                          `owner` varchar(255)  NULL DEFAULT NULL,
+                          `owner_avatar` varchar(255)  NULL DEFAULT NULL,
+                          `owner_id` bigint NULL DEFAULT NULL,
+                          `privileges` text  NULL,
+                          `from_asset_id` bigint NULL DEFAULT NULL,
+                          `chain_token_id` varchar(255)  NULL DEFAULT NULL,
+                          `model3d` text  NULL,
+                          `project_id` int NOT NULL,
+                          `out_time` datetime NULL DEFAULT NULL,
+                          `compose_name` varchar(255)  NULL DEFAULT NULL,
+                          `blind_box_id` bigint NULL DEFAULT NULL,
+                          `categories` varchar(255)  NULL DEFAULT NULL,
+                          `variable_type` bit(1) NOT NULL,
+                          PRIMARY KEY (`id`) USING BTREE,
+                          INDEX `IDXn5os9jehi865ew1aw69c3n0gs`(`user_id`) USING BTREE,
+                          INDEX `IDXqygqn7xpy21iotp7863h3440i`(`token_id`) USING BTREE,
+                          INDEX `IDXl88c0btbqwdphcq6tkt1lvrf7`(`collection_id`) USING BTREE,
+                          INDEX `IDXa9re3fexerlxmhcrccqn7xho8`(`minter_id`) USING BTREE,
+                          INDEX `IDXi2s6wcjil5l6331nt3sk2sows`(`owner_id`) USING BTREE,
+                          INDEX `asset_order_id_index`(`order_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of asset
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for asset_sell_limit
+-- ----------------------------
+
+CREATE TABLE `asset_sell_limit`  (
+                                     `id` bigint NOT NULL,
+                                     `created_at` datetime NULL DEFAULT NULL,
+                                     `created_by` varchar(255)  NULL DEFAULT NULL,
+                                     `del` bit(1) NOT NULL,
+                                     `modified_at` datetime NULL DEFAULT NULL,
+                                     `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                     `collection_id` bigint NULL DEFAULT NULL,
+                                     `collection_name` varchar(255)  NULL DEFAULT NULL,
+                                     `expire_date_time` datetime NULL DEFAULT NULL,
+                                     `expire_seconds` int NULL DEFAULT NULL,
+                                     `min_price` decimal(19, 2) NULL DEFAULT NULL,
+                                     `project_id` int NOT NULL,
+                                     PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of asset_sell_limit
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for authority
+-- ----------------------------
+
+CREATE TABLE `authority`  (
+                              `name` varchar(50)  NOT NULL,
+                              `description` varchar(50)  NOT NULL,
+                              `hide` bit(1) NOT NULL,
+                              PRIMARY KEY (`name`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of authority
+-- ----------------------------
+INSERT INTO `authority` VALUES ('ROLE_ADMIN', '高级管理员', b'0');
+INSERT INTO `authority` VALUES ('ROLE_DEV', '开发者', b'0');
+INSERT INTO `authority` VALUES ('ROLE_MINTER', '铸造者', b'0');
+INSERT INTO `authority` VALUES ('ROLE_OPERATOR', '普通管理员', b'0');
+INSERT INTO `authority` VALUES ('ROLE_USER', '普通用户', b'0');
+
+-- ----------------------------
+-- Table structure for award_activity_collection_info
+-- ----------------------------
+
+CREATE TABLE `award_activity_collection_info`  (
+                                                   `id` bigint NOT NULL,
+                                                   `created_at` datetime NULL DEFAULT NULL,
+                                                   `created_by` varchar(255)  NULL DEFAULT NULL,
+                                                   `del` bit(1) NOT NULL,
+                                                   `modified_at` datetime NULL DEFAULT NULL,
+                                                   `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                                   `activity_id` bigint NULL DEFAULT NULL,
+                                                   `collection_id` bigint NULL DEFAULT NULL,
+                                                   `collection_name` varchar(255)  NULL DEFAULT NULL,
+                                                   `drop_type` int NOT NULL DEFAULT 0,
+                                                   `exchange_num` int NOT NULL DEFAULT 1,
+                                                   `num` int NULL DEFAULT NULL,
+                                                   `stock` int NULL DEFAULT NULL,
+                                                   PRIMARY KEY (`id`) USING BTREE,
+                                                   INDEX `FKla58velkvjd4hcueqjjtgte50`(`activity_id`) USING BTREE,
+                                                   CONSTRAINT `FKla58velkvjd4hcueqjjtgte50` FOREIGN KEY (`activity_id`) REFERENCES `activity_collection` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of award_activity_collection_info
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for banner
+-- ----------------------------
+
+CREATE TABLE `banner`  (
+                           `id` bigint NOT NULL,
+                           `created_at` datetime NULL DEFAULT NULL,
+                           `created_by` varchar(255)  NULL DEFAULT NULL,
+                           `del` bit(1) NOT NULL,
+                           `modified_at` datetime NULL DEFAULT NULL,
+                           `modified_by` varchar(255)  NULL DEFAULT NULL,
+                           `link` bit(1) NOT NULL,
+                           `link_content` varchar(255)  NULL DEFAULT NULL,
+                           `link_type` varchar(255)  NULL DEFAULT NULL,
+                           `name` varchar(255)  NULL DEFAULT NULL,
+                           `pic` varchar(255)  NULL DEFAULT NULL,
+                           `remark` varchar(255)  NULL DEFAULT NULL,
+                           `sort` int NOT NULL,
+                           `type` varchar(255)  NULL DEFAULT NULL,
+                           `project_id` int NOT NULL,
+                           PRIMARY KEY (`id`) USING BTREE,
+                           INDEX `IDXkah06yhlxm824q81ru3aomxic`(`type`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of banner
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for blind_box_item
+-- ----------------------------
+
+CREATE TABLE `blind_box_item`  (
+                                   `id` bigint NOT NULL,
+                                   `created_at` datetime NULL DEFAULT NULL,
+                                   `created_by` varchar(255)  NULL DEFAULT NULL,
+                                   `del` bit(1) NOT NULL,
+                                   `modified_at` datetime NULL DEFAULT NULL,
+                                   `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                   `blind_box_id` bigint NULL DEFAULT NULL,
+                                   `can_resale` bit(1) NOT NULL,
+                                   `collection_id` bigint NULL DEFAULT NULL,
+                                   `detail` text  NULL,
+                                   `minter` varchar(255)  NULL DEFAULT NULL,
+                                   `minter_avatar` varchar(255)  NULL DEFAULT NULL,
+                                   `minter_id` bigint NULL DEFAULT NULL,
+                                   `name` varchar(255)  NULL DEFAULT NULL,
+                                   `pic` text  NULL,
+                                   `price` decimal(10, 2) NULL DEFAULT NULL,
+                                   `properties` text  NULL,
+                                   `rare` bit(1) NOT NULL,
+                                   `royalties` int NOT NULL,
+                                   `sale` int NOT NULL,
+                                   `service_charge` int NOT NULL,
+                                   `stock` int NOT NULL,
+                                   `total` int NOT NULL,
+                                   `category` varchar(255)  NULL DEFAULT NULL,
+                                   `privileges` text  NULL,
+                                   `model3d` text  NULL,
+                                   `project_id` int NOT NULL,
+                                   `pic_pattern` varchar(255)  NULL DEFAULT NULL,
+                                   PRIMARY KEY (`id`) USING BTREE,
+                                   INDEX `IDX2a0v9ix4r7xa0c9e0mysp8vcv`(`blind_box_id`) USING BTREE,
+                                   INDEX `IDXpts7ljwe64og1h05ssm75ee9j`(`collection_id`) USING BTREE,
+                                   INDEX `IDXsn5pqgm83nd6xmdrh7qujdri8`(`minter_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of blind_box_item
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for blink_box
+-- ----------------------------
+
+CREATE TABLE `blink_box`  (
+                              `id` bigint NOT NULL,
+                              `created_at` datetime NULL DEFAULT NULL,
+                              `created_by` varchar(255)  NULL DEFAULT NULL,
+                              `del` bit(1) NOT NULL,
+                              `modified_at` datetime NULL DEFAULT NULL,
+                              `modified_by` varchar(255)  NULL DEFAULT NULL,
+                              `detail` text  NULL,
+                              `likes` int NOT NULL,
+                              `minter` varchar(255)  NULL DEFAULT NULL,
+                              `minter_avatar` varchar(255)  NULL DEFAULT NULL,
+                              `minter_id` bigint NULL DEFAULT NULL,
+                              `name` varchar(255)  NULL DEFAULT NULL,
+                              `on_shelf` bit(1) NOT NULL,
+                              `pics` text  NULL,
+                              `price` decimal(10, 2) NULL DEFAULT NULL,
+                              `properties` text  NULL,
+                              `salable` bit(1) NOT NULL,
+                              `sale` int NOT NULL,
+                              `source` varchar(255)  NULL DEFAULT NULL,
+                              `stock` int NOT NULL,
+                              `type` varchar(255)  NULL DEFAULT NULL,
+                              PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of blink_box
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for child
+-- ----------------------------
+
+CREATE TABLE `child`  (
+                          `id` bigint NOT NULL,
+                          `created_at` datetime NULL DEFAULT NULL,
+                          `created_by` varchar(255)  NULL DEFAULT NULL,
+                          `modified_at` datetime NULL DEFAULT NULL,
+                          `modified_by` varchar(255)  NULL DEFAULT NULL,
+                          `child_name` varchar(255)  NULL DEFAULT NULL,
+                          `parent_id` bigint NULL DEFAULT NULL,
+                          PRIMARY KEY (`id`) USING BTREE,
+                          INDEX `FK7dag1cncltpyhoc2mbwka356h`(`parent_id`) USING BTREE,
+                          CONSTRAINT `FK7dag1cncltpyhoc2mbwka356h` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of child
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for city
+-- ----------------------------
+
+CREATE TABLE `city`  (
+                         `id` bigint NOT NULL,
+                         `created_at` datetime NULL DEFAULT NULL,
+                         `created_by` varchar(255)  NULL DEFAULT NULL,
+                         `modified_at` datetime NULL DEFAULT NULL,
+                         `modified_by` varchar(255)  NULL DEFAULT NULL,
+                         `name` varchar(255)  NULL DEFAULT NULL,
+                         `remark` varchar(255)  NULL DEFAULT NULL,
+                         PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of city
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for collection_category
+-- ----------------------------
+
+CREATE TABLE `collection_category`  (
+                                        `id` bigint NOT NULL,
+                                        `created_at` datetime NULL DEFAULT NULL,
+                                        `created_by` varchar(255)  NULL DEFAULT NULL,
+                                        `del` bit(1) NOT NULL,
+                                        `modified_at` datetime NULL DEFAULT NULL,
+                                        `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                        `name` varchar(255)  NULL DEFAULT NULL,
+                                        `parent_id` bigint NULL DEFAULT NULL,
+                                        `project_id` int NOT NULL,
+                                        `sort` int NULL DEFAULT NULL,
+                                        PRIMARY KEY (`id`) USING BTREE,
+                                        INDEX `IDXkkey1va7wkboxpa3t9o04ke79`(`name`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of collection_category
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for collection_info
+-- ----------------------------
+
+CREATE TABLE `collection_info`  (
+                                    `id` bigint NOT NULL,
+                                    `created_at` datetime NULL DEFAULT NULL,
+                                    `created_by` varchar(255)  NULL DEFAULT NULL,
+                                    `del` bit(1) NOT NULL,
+                                    `modified_at` datetime NULL DEFAULT NULL,
+                                    `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                    `detail` text  NULL,
+                                    `likes` int NOT NULL,
+                                    `minter` varchar(255)  NULL DEFAULT NULL,
+                                    `minter_avatar` varchar(255)  NULL DEFAULT NULL,
+                                    `minter_id` bigint NULL DEFAULT NULL,
+                                    `name` varchar(255)  NULL DEFAULT NULL,
+                                    `on_shelf` bit(1) NOT NULL,
+                                    `pic` text  NULL,
+                                    `price` decimal(10, 2) NULL DEFAULT NULL,
+                                    `sale` int NOT NULL,
+                                    `source` varchar(255)  NULL DEFAULT NULL,
+                                    `stock` int NOT NULL,
+                                    `type` varchar(255)  NULL DEFAULT NULL,
+                                    `properties` text  NULL,
+                                    `salable` bit(1) NOT NULL,
+                                    `can_resale` bit(1) NOT NULL,
+                                    `blind_box_id` bigint NULL DEFAULT NULL,
+                                    `total` int NOT NULL,
+                                    `royalties` int NOT NULL,
+                                    `service_charge` int NOT NULL,
+                                    `start_time` datetime NULL DEFAULT NULL,
+                                    `owner` varchar(255)  NULL DEFAULT NULL,
+                                    `owner_avatar` varchar(255)  NULL DEFAULT NULL,
+                                    `owner_id` bigint NULL DEFAULT NULL,
+                                    `category` varchar(255)  NULL DEFAULT NULL,
+                                    `schedule_sale` bit(1) NOT NULL,
+                                    `sort` int NOT NULL,
+                                    `privileges` text  NULL,
+                                    `asset_id` bigint NULL DEFAULT NULL,
+                                    `current_number` int NULL DEFAULT NULL,
+                                    `number` int NULL DEFAULT NULL,
+                                    `original_price` decimal(19, 2) NULL DEFAULT NULL,
+                                    `model3d` text  NULL,
+                                    `project_id` int NOT NULL,
+                                    `pic_pattern` varchar(255)  NULL DEFAULT NULL,
+                                    `categories` varchar(255)  NULL DEFAULT NULL,
+                                    `collection_category_id` bigint NULL DEFAULT NULL,
+                                    `limit_buy_count` int NULL DEFAULT NULL,
+                                    `variable_collection_id` bigint NULL DEFAULT NULL,
+                                    `variable_type` bit(1) NOT NULL,
+                                    PRIMARY KEY (`id`) USING BTREE,
+                                    INDEX `IDXe68e3dajiefqmfc0jmvvt9l7g`(`type`, `source`) USING BTREE,
+                                    INDEX `IDXemw5rwa38vgrskx1b166mveh3`(`minter_id`) USING BTREE,
+                                    INDEX `IDX9cqxsb7x36cqj2cxu2l3kk77o`(`on_shelf`) USING BTREE,
+                                    INDEX `IDXni57xpcx1cnw1mcfxks7kljcq`(`owner_id`) USING BTREE,
+                                    INDEX `IDXjghwfjav02axd296ug2bbekxk`(`asset_id`) USING BTREE,
+                                    INDEX `FKqmc45wlywxqeegk6f8v9kunhe`(`collection_category_id`) USING BTREE,
+                                    CONSTRAINT `FKqmc45wlywxqeegk6f8v9kunhe` FOREIGN KEY (`collection_category_id`) REFERENCES `collection_category` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of collection_info
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for commission_record
+-- ----------------------------
+
+CREATE TABLE `commission_record`  (
+                                      `id` bigint NOT NULL,
+                                      `created_at` datetime NULL DEFAULT NULL,
+                                      `created_by` varchar(255)  NULL DEFAULT NULL,
+                                      `del` bit(1) NOT NULL,
+                                      `modified_at` datetime NULL DEFAULT NULL,
+                                      `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                      `nickname` varchar(255)  NULL DEFAULT NULL,
+                                      `order_id` bigint NULL DEFAULT NULL,
+                                      `phone` varchar(255)  NULL DEFAULT NULL,
+                                      `share_amount` decimal(19, 2) NULL DEFAULT NULL,
+                                      `share_ratio` decimal(19, 2) NULL DEFAULT NULL,
+                                      `total_price` decimal(19, 2) NULL DEFAULT NULL,
+                                      `user_id` bigint NULL DEFAULT NULL,
+                                      PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of commission_record
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for coupon
+-- ----------------------------
+
+CREATE TABLE `coupon`  (
+                           `id` bigint NOT NULL,
+                           `created_at` datetime NULL DEFAULT NULL,
+                           `created_by` varchar(255)  NULL DEFAULT NULL,
+                           `del` bit(1) NOT NULL,
+                           `modified_at` datetime NULL DEFAULT NULL,
+                           `modified_by` varchar(255)  NULL DEFAULT NULL,
+                           `collection_ids` text  NULL,
+                           `expiration` datetime NULL DEFAULT NULL,
+                           `limited` bit(1) NOT NULL,
+                           `name` varchar(255)  NULL DEFAULT NULL,
+                           `need_gas` bit(1) NOT NULL,
+                           `remark` varchar(255)  NULL DEFAULT NULL,
+                           `project_id` int NOT NULL,
+                           PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of coupon
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for district
+-- ----------------------------
+
+CREATE TABLE `district`  (
+                             `id` bigint NOT NULL,
+                             `created_at` datetime NULL DEFAULT NULL,
+                             `created_by` varchar(255)  NULL DEFAULT NULL,
+                             `modified_at` datetime NULL DEFAULT NULL,
+                             `modified_by` varchar(255)  NULL DEFAULT NULL,
+                             `full_name` varchar(255)  NULL DEFAULT NULL,
+                             `lat` double NOT NULL,
+                             `leaf` bit(1) NOT NULL,
+                             `level` int NOT NULL,
+                             `lng` double NOT NULL,
+                             `name` varchar(255)  NULL DEFAULT NULL,
+                             `parent` bigint NULL DEFAULT NULL,
+                             `pinyin` varchar(255)  NULL DEFAULT NULL,
+                             `child_count` int NOT NULL,
+                             `city_code` varchar(10)  NULL DEFAULT NULL,
+                             `city_count` int NOT NULL,
+                             `district_count` int NOT NULL,
+                             `street_count` int NOT NULL,
+                             `del` bit(1) NOT NULL,
+                             PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of district
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for div_money
+-- ----------------------------
+
+CREATE TABLE `div_money`  (
+                              `id` bigint NOT NULL,
+                              `created_at` datetime NULL DEFAULT NULL,
+                              `created_by` varchar(255)  NULL DEFAULT NULL,
+                              `del` bit(1) NOT NULL,
+                              `modified_at` datetime NULL DEFAULT NULL,
+                              `modified_by` varchar(255)  NULL DEFAULT NULL,
+                              `amount` decimal(10, 2) NULL DEFAULT NULL,
+                              `fee_flag` bit(1) NOT NULL,
+                              `member_id` varchar(255)  NULL DEFAULT NULL,
+                              `order_id` bigint NOT NULL,
+                              `ratio` int NULL DEFAULT NULL,
+                              `rest_amount` decimal(10, 2) NULL DEFAULT NULL,
+                              `status` varchar(255)  NULL DEFAULT NULL,
+                              `total_amount` decimal(10, 2) NULL DEFAULT NULL,
+                              `user_id` bigint NULL DEFAULT NULL,
+                              `process_time` datetime NULL DEFAULT NULL,
+                              `transfer_money_id` bigint NULL DEFAULT NULL,
+                              `transfer_result` varchar(255)  NULL DEFAULT NULL,
+                              `order_amount` decimal(10, 2) NULL DEFAULT NULL,
+                              `pay_platform` varchar(255)  NULL DEFAULT NULL,
+                              `third_account_id` varchar(255)  NULL DEFAULT NULL,
+                              `user_fund_account_id` bigint NULL DEFAULT NULL,
+                              PRIMARY KEY (`id`) USING BTREE,
+                              INDEX `IDXg84omvvl6eysqoi1i1l7n089f`(`user_id`) USING BTREE,
+                              INDEX `IDXgi6jes62mg7i6hp7mw4e2j17y`(`order_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of div_money
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for error_order
+-- ----------------------------
+
+CREATE TABLE `error_order`  (
+                                `id` bigint NOT NULL,
+                                `created_at` datetime NULL DEFAULT NULL,
+                                `created_by` varchar(255)  NULL DEFAULT NULL,
+                                `del` bit(1) NOT NULL,
+                                `modified_at` datetime NULL DEFAULT NULL,
+                                `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                `error_message` varchar(255)  NULL DEFAULT NULL,
+                                `order_id` bigint NULL DEFAULT NULL,
+                                `pay_method` int NULL DEFAULT NULL,
+                                `transaction_id` varchar(255)  NULL DEFAULT NULL,
+                                `type` varchar(255)  NULL DEFAULT NULL,
+                                PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of error_order
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for exception_log
+-- ----------------------------
+
+CREATE TABLE `exception_log`  (
+                                  `id` bigint NOT NULL,
+                                  `description` varchar(255)  NULL DEFAULT NULL,
+                                  `message` longtext  NULL,
+                                  `name` varchar(255)  NULL DEFAULT NULL,
+                                  `req_ip` varchar(255)  NULL DEFAULT NULL,
+                                  `req_method` varchar(255)  NULL DEFAULT NULL,
+                                  `req_params` longtext  NULL,
+                                  `req_url` varchar(255)  NULL DEFAULT NULL,
+                                  `resp` longtext  NULL,
+                                  `stack_trace` longtext  NULL,
+                                  `time` datetime NULL DEFAULT NULL,
+                                  `type` varchar(255)  NULL DEFAULT NULL,
+                                  `user_id` varchar(255)  NULL DEFAULT NULL,
+                                  `username` varchar(255)  NULL DEFAULT NULL,
+                                  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of exception_log
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for follow
+-- ----------------------------
+
+CREATE TABLE `follow`  (
+                           `id` bigint NOT NULL,
+                           `created_at` datetime NULL DEFAULT NULL,
+                           `created_by` varchar(255)  NULL DEFAULT NULL,
+                           `del` bit(1) NOT NULL,
+                           `modified_at` datetime NULL DEFAULT NULL,
+                           `modified_by` varchar(255)  NULL DEFAULT NULL,
+                           `follow_user_id` bigint NULL DEFAULT NULL,
+                           `user_id` bigint NULL DEFAULT NULL,
+                           PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of follow
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for gift_order
+-- ----------------------------
+
+CREATE TABLE `gift_order`  (
+                               `id` bigint NOT NULL,
+                               `created_at` datetime NULL DEFAULT NULL,
+                               `created_by` varchar(255)  NULL DEFAULT NULL,
+                               `del` bit(1) NOT NULL,
+                               `modified_at` datetime NULL DEFAULT NULL,
+                               `modified_by` varchar(255)  NULL DEFAULT NULL,
+                               `asset_id` bigint NULL DEFAULT NULL,
+                               `block_number` decimal(19, 2) NULL DEFAULT NULL,
+                               `cancel_time` datetime NULL DEFAULT NULL,
+                               `gas_price` decimal(10, 2) NULL DEFAULT NULL,
+                               `gas_used` decimal(19, 2) NULL DEFAULT NULL,
+                               `pay_method` varchar(255)  NULL DEFAULT NULL,
+                               `pay_time` datetime NULL DEFAULT NULL,
+                               `status` int NULL DEFAULT NULL,
+                               `to_user_id` bigint NULL DEFAULT NULL,
+                               `transaction_id` varchar(255)  NULL DEFAULT NULL,
+                               `tx_hash` varchar(255)  NULL DEFAULT NULL,
+                               `user_id` bigint NULL DEFAULT NULL,
+                               `collection_id` bigint NULL DEFAULT NULL,
+                               `name` varchar(255)  NULL DEFAULT NULL,
+                               `project_id` int NOT NULL,
+                               `order_no` varchar(255)  NULL DEFAULT NULL,
+                               `ip` varchar(255)  NULL DEFAULT NULL,
+                               PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of gift_order
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for guid_package
+-- ----------------------------
+
+CREATE TABLE `guid_package`  (
+                                 `id` bigint NOT NULL,
+                                 `created_at` datetime NULL DEFAULT NULL,
+                                 `created_by` varchar(255)  NULL DEFAULT NULL,
+                                 `modified_at` datetime NULL DEFAULT NULL,
+                                 `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                 `name` varchar(255)  NULL DEFAULT NULL,
+                                 `price` decimal(10, 2) NULL DEFAULT NULL,
+                                 PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of guid_package
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for guide
+-- ----------------------------
+
+CREATE TABLE `guide`  (
+                          `id` bigint NOT NULL,
+                          `created_at` datetime NULL DEFAULT NULL,
+                          `created_by` varchar(255)  NULL DEFAULT NULL,
+                          `modified_at` datetime NULL DEFAULT NULL,
+                          `modified_by` varchar(255)  NULL DEFAULT NULL,
+                          `pic` varchar(255)  NULL DEFAULT NULL,
+                          `sort` int NOT NULL,
+                          `text` text  NULL,
+                          `type` varchar(255)  NULL DEFAULT NULL,
+                          `video` varchar(255)  NULL DEFAULT NULL,
+                          `voice` varchar(255)  NULL DEFAULT NULL,
+                          PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of guide
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for hibernate_sequence
+-- ----------------------------
+
+CREATE TABLE `hibernate_sequence`  (
+    `next_val` bigint NULL DEFAULT NULL
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of hibernate_sequence
+-- ----------------------------
+INSERT INTO `hibernate_sequence` VALUES (2910579);
+INSERT INTO `hibernate_sequence` VALUES (2910579);
+INSERT INTO `hibernate_sequence` VALUES (2910579);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (1);
+
+-- ----------------------------
+-- Table structure for identity_auth
+-- ----------------------------
+
+CREATE TABLE `identity_auth`  (
+                                  `id` bigint NOT NULL,
+                                  `created_at` datetime NULL DEFAULT NULL,
+                                  `created_by` varchar(255)  NULL DEFAULT NULL,
+                                  `del` bit(1) NOT NULL,
+                                  `modified_at` datetime NULL DEFAULT NULL,
+                                  `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                  `email` varchar(255)  NULL DEFAULT NULL,
+                                  `id_back` varchar(255)  NULL DEFAULT NULL,
+                                  `id_front` varchar(255)  NULL DEFAULT NULL,
+                                  `id_no` varchar(255)  NULL DEFAULT NULL,
+                                  `phone` varchar(255)  NULL DEFAULT NULL,
+                                  `real_name` varchar(255)  NULL DEFAULT NULL,
+                                  `status` varchar(255)  NULL DEFAULT NULL,
+                                  `user_id` bigint NULL DEFAULT NULL,
+                                  `org` bit(1) NOT NULL,
+                                  `org_license` varchar(255)  NULL DEFAULT NULL,
+                                  `org_license_expire` varchar(255)  NULL DEFAULT NULL,
+                                  `org_name` varchar(255)  NULL DEFAULT NULL,
+                                  `org_no` varchar(255)  NULL DEFAULT NULL,
+                                  `id_end_date` date NULL DEFAULT NULL,
+                                  `id_start_date` date NULL DEFAULT NULL,
+                                  PRIMARY KEY (`id`) USING BTREE,
+                                  INDEX `idx_userid`(`user_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of identity_auth
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for invite
+-- ----------------------------
+
+CREATE TABLE `invite`  (
+                           `id` bigint NOT NULL,
+                           `created_at` datetime NULL DEFAULT NULL,
+                           `created_by` varchar(255)  NULL DEFAULT NULL,
+                           `del` bit(1) NOT NULL,
+                           `modified_at` datetime NULL DEFAULT NULL,
+                           `modified_by` varchar(255)  NULL DEFAULT NULL,
+                           `code` varchar(255)  NULL DEFAULT NULL,
+                           `invite_num` int NOT NULL,
+                           `name` varchar(255)  NULL DEFAULT NULL,
+                           `phone` varchar(255)  NULL DEFAULT NULL,
+                           `remark` varchar(255)  NULL DEFAULT NULL,
+                           PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of invite
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for invite_date
+-- ----------------------------
+
+CREATE TABLE `invite_date`  (
+                                `id` bigint NOT NULL,
+                                `created_at` datetime NULL DEFAULT NULL,
+                                `created_by` varchar(255)  NULL DEFAULT NULL,
+                                `del` bit(1) NOT NULL,
+                                `modified_at` datetime NULL DEFAULT NULL,
+                                `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                `activity_id` bigint NULL DEFAULT NULL,
+                                `air_drop_award` int NOT NULL,
+                                `automatic_rewards` bit(1) NOT NULL,
+                                `by_invite_prize` text  NULL,
+                                `invite_prize_list` text  NULL,
+                                `invitee_user_id` bigint NULL DEFAULT NULL,
+                                `inviter_phone` varchar(255)  NULL DEFAULT NULL,
+                                `inviter_user_id` bigint NULL DEFAULT NULL,
+                                `name` varchar(255)  NULL DEFAULT NULL,
+                                `remark` varchar(255)  NULL DEFAULT NULL,
+                                `status` int NOT NULL,
+                                PRIMARY KEY (`id`) USING BTREE,
+                                INDEX `IDXshlxc528pkxkcpvepnvctbe5h`(`activity_id`) USING BTREE,
+                                INDEX `IDX4pn4g9thbds7f312pmvn1be4t`(`inviter_user_id`) USING BTREE,
+                                INDEX `IDXcn9grsrdjmjdu9sqde5rne80h`(`automatic_rewards`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of invite_date
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for like_info
+-- ----------------------------
+
+CREATE TABLE `like_info`  (
+                              `id` bigint NOT NULL,
+                              `created_at` datetime NULL DEFAULT NULL,
+                              `created_by` varchar(255)  NULL DEFAULT NULL,
+                              `del` bit(1) NOT NULL,
+                              `modified_at` datetime NULL DEFAULT NULL,
+                              `modified_by` varchar(255)  NULL DEFAULT NULL,
+                              `collection_id` bigint NULL DEFAULT NULL,
+                              `user_id` bigint NULL DEFAULT NULL,
+                              PRIMARY KEY (`id`) USING BTREE,
+                              INDEX `IDXpca5elfm2bntg0a7n6wtk09uk`(`user_id`) USING BTREE,
+                              INDEX `IDXosauimvwrf686ni346rsvllur`(`collection_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of like_info
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for login_log
+-- ----------------------------
+
+CREATE TABLE `login_log`  (
+                              `id` bigint NOT NULL,
+                              `created_at` datetime NULL DEFAULT NULL,
+                              `created_by` varchar(255)  NULL DEFAULT NULL,
+                              `del` bit(1) NOT NULL,
+                              `modified_at` datetime NULL DEFAULT NULL,
+                              `modified_by` varchar(255)  NULL DEFAULT NULL,
+                              `browser` varchar(255)  NULL DEFAULT NULL,
+                              `client_type` varchar(255)  NULL DEFAULT NULL,
+                              `ip_address` varchar(255)  NULL DEFAULT NULL,
+                              `login_success` bit(1) NOT NULL,
+                              `login_time` datetime NULL DEFAULT NULL,
+                              `login_type` varchar(255)  NULL DEFAULT NULL,
+                              `os` varchar(255)  NULL DEFAULT NULL,
+                              `phone` varchar(255)  NULL DEFAULT NULL,
+                              `user_id` bigint NULL DEFAULT NULL,
+                              PRIMARY KEY (`id`) USING BTREE,
+                              INDEX `IDXt9ufvgoi0e1n92n695khl0p2c`(`user_id`) USING BTREE,
+                              INDEX `IDXq9e7sxajk53cm6yap2riknj5s`(`phone`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of login_log
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for menu
+-- ----------------------------
+
+CREATE TABLE `menu`  (
+                         `id` bigint NOT NULL,
+                         `created_at` datetime NULL DEFAULT NULL,
+                         `created_by` varchar(255)  NULL DEFAULT NULL,
+                         `modified_at` datetime NULL DEFAULT NULL,
+                         `modified_by` varchar(255)  NULL DEFAULT NULL,
+                         `active` bit(1) NULL DEFAULT NULL,
+                         `enabled` bit(1) NULL DEFAULT NULL,
+                         `icon` varchar(255)  NULL DEFAULT NULL,
+                         `name` varchar(255)  NULL DEFAULT NULL,
+                         `parent` bigint NULL DEFAULT NULL,
+                         `path` varchar(255)  NULL DEFAULT NULL,
+                         `root` bit(1) NULL DEFAULT NULL,
+                         `sort` int NULL DEFAULT NULL,
+                         `category` varchar(255)  NULL DEFAULT NULL,
+                         `del` bit(1) NOT NULL,
+                         PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of menu
+-- ----------------------------
+INSERT INTO `menu` VALUES (3, NULL, NULL, '2021-10-29 14:30:29', '管理员01(724)', b'0', b'1', 'fas fa-desktop', '开发', 2, '', b'1', 15, '开发', b'0');
+INSERT INTO `menu` VALUES (4, NULL, NULL, '2020-07-31 14:31:51', '管理员(1)', b'1', b'1', 'fas fa-code', '代码生成', 3, '/genCodeList', b'0', 5, '开发', b'0');
+INSERT INTO `menu` VALUES (5, NULL, NULL, '2020-07-31 14:31:56', '管理员(1)', b'1', b'1', 'fas fa-bug', '接口调试', 3, '/api', b'0', 6, '开发', b'0');
+INSERT INTO `menu` VALUES (6, NULL, NULL, '2022-05-07 13:58:20', 'guangsheng(2645288)', b'1', b'1', 'fas fa-user', '用户管理', 2, '', b'1', 14, '用户', b'0');
+INSERT INTO `menu` VALUES (8, '2020-07-09 15:01:40', NULL, '2020-07-09 15:01:45', '管理员(1)', b'1', b'1', '', '菜单权限', 9, '/menuAuthority', b'0', 8, NULL, b'0');
+INSERT INTO `menu` VALUES (9, NULL, NULL, '2022-05-07 14:09:12', 'guangsheng(2645288)', b'1', b'1', 'fas fa-cog', '配置', 2, '', b'1', 63, '系统', b'0');
+INSERT INTO `menu` VALUES (10, NULL, NULL, '2020-07-29 16:54:21', '管理员(1)', b'1', b'1', '', '菜单配置', 9, '/menus', b'0', 7, '系统', b'0');
+INSERT INTO `menu` VALUES (14, NULL, NULL, '2020-07-09 15:01:45', '管理员(1)', b'1', b'1', '', '参数配置', 9, '/sysConfigList', b'0', 9, '系统', b'0');
+INSERT INTO `menu` VALUES (16, '2021-10-11 11:10:36', NULL, '2022-05-07 13:56:57', 'guangsheng(2645288)', b'0', NULL, 'fas fa-gift', '藏品管理', NULL, '/collectionList', b'1', 3, '', b'0');
+INSERT INTO `menu` VALUES (17, '2021-10-11 11:13:02', NULL, '2022-05-07 14:09:24', 'guangsheng(2645288)', b'1', NULL, 'fas fa-bars', '订单管理', NULL, '', b'1', 4, NULL, b'0');
+INSERT INTO `menu` VALUES (18, '2021-10-11 11:22:18', NULL, '2022-05-07 13:58:35', 'guangsheng(2645288)', b'0', NULL, 'fas fa-hammer', '铸造者', NULL, '/minterList', b'1', 13, '', b'0');
+INSERT INTO `menu` VALUES (31, '2021-10-13 10:07:58', NULL, '2022-05-07 13:58:40', 'guangsheng(2645288)', b'0', NULL, 'fas fa-address-card', '实名审核', NULL, '/identityAuthList', b'1', 19, NULL, b'0');
+INSERT INTO `menu` VALUES (52, '2021-10-14 16:48:39', NULL, '2022-05-07 14:07:29', 'guangsheng(2645288)', b'0', NULL, 'fas fa-images', '轮播图', NULL, '/bannerList', b'1', 20, NULL, b'0');
+INSERT INTO `menu` VALUES (197, '2021-10-21 11:06:24', NULL, '2022-05-07 13:57:02', 'guangsheng(2645288)', b'0', NULL, 'fas fa-box-open', '盲盒', NULL, '/blindBoxList', b'1', 10, '', b'0');
+INSERT INTO `menu` VALUES (875, '2021-10-29 14:31:18', '管理员01(724)', '2021-10-29 14:31:18', '管理员01(724)', b'1', NULL, '', '账号管理', 9, '/adminList', b'0', 16, NULL, b'0');
+INSERT INTO `menu` VALUES (937, '2021-11-01 13:25:17', NULL, '2021-11-11 15:49:49', '管理员(1)', b'0', NULL, 'fas fa-bars', '普通管理员', NULL, '', b'1', 17, NULL, b'0');
+INSERT INTO `menu` VALUES (1083, '2021-11-02 15:25:23', '管理员01(724)', '2021-11-02 15:25:23', '管理员01(724)', b'1', NULL, '', '特权配置', 9, '/privilegeOptionList', b'0', 18, NULL, b'0');
+INSERT INTO `menu` VALUES (1582, '2021-11-11 15:49:34', NULL, '2021-11-11 15:50:24', '管理员(1)', b'0', NULL, 'fas fa-parachute-box', '空投', NULL, '/airDropList', b'1', 14, NULL, b'0');
+INSERT INTO `menu` VALUES (1583, '2021-11-11 15:51:05', NULL, '2022-05-07 13:57:06', 'guangsheng(2645288)', b'0', NULL, 'fas fa-parachute-box', '空投', NULL, '/airDropList', b'1', 11, NULL, b'0');
+INSERT INTO `menu` VALUES (1597, '2021-11-11 18:06:10', NULL, '2022-05-07 13:57:09', 'guangsheng(2645288)', b'0', NULL, 'fas fa-sticky-note', '兑换券', NULL, '/couponList', b'1', 12, '', b'0');
+INSERT INTO `menu` VALUES (4396, '2021-11-19 21:04:28', NULL, '2022-05-07 14:06:22', 'guangsheng(2645288)', b'0', NULL, 'fas fa-bars', '分销统计', NULL, '/commissionRecordList', b'1', 21, NULL, b'0');
+INSERT INTO `menu` VALUES (4614, '2021-11-23 14:41:27', NULL, '2022-05-07 14:07:34', 'guangsheng(2645288)', b'0', NULL, 'fas fa-bars', '首页推荐', NULL, '/recommendList', b'1', 22, NULL, b'0');
+INSERT INTO `menu` VALUES (81707, '2022-01-20 09:42:36', NULL, '2022-05-07 13:59:44', 'guangsheng(2645288)', b'1', NULL, 'fas fa-bars', '活动管理', NULL, '', b'1', 23, NULL, b'0');
+INSERT INTO `menu` VALUES (571073, '2022-01-26 17:54:12', NULL, '2022-01-26 17:55:09', '管理员(79227)', b'0', NULL, '', '官方订单', 17, '/orderList', b'0', 24, NULL, b'0');
+INSERT INTO `menu` VALUES (571076, '2022-01-26 17:54:27', NULL, '2022-01-26 17:55:12', '管理员(79227)', b'0', NULL, '', '二手订单', 17, '/orderUsedList', b'0', 25, NULL, b'0');
+INSERT INTO `menu` VALUES (571082, '2022-01-26 17:54:49', NULL, '2022-01-26 17:55:14', '管理员(79227)', b'0', NULL, '', '转赠订单', 17, '/giftOrderList', b'0', 26, NULL, b'0');
+INSERT INTO `menu` VALUES (571217, '2022-01-26 18:05:41', NULL, '2022-01-27 10:01:00', '管理员(79227)', b'1', NULL, '', '官方订单', 17, '/orderList', b'0', 27, NULL, b'0');
+INSERT INTO `menu` VALUES (571220, '2022-01-26 18:06:05', NULL, '2022-01-27 10:01:04', '管理员(79227)', b'1', NULL, '', '二手订单', 17, '/orderUsedList', b'0', 28, NULL, b'0');
+INSERT INTO `menu` VALUES (571225, '2022-01-26 18:06:32', NULL, '2022-01-26 18:08:40', '管理员(79227)', b'1', NULL, '', '转赠订单', 17, '/giftOrderList', b'0', 29, NULL, b'0');
+INSERT INTO `menu` VALUES (1234589, '2022-03-02 12:07:32', 'admin(1866)', '2022-03-02 12:07:32', 'admin(1866)', b'1', NULL, '', '支付通道配置', 9, '/adapayMerchantList', b'0', 30, NULL, b'0');
+INSERT INTO `menu` VALUES (2020975, '2022-03-25 19:14:02', NULL, '2022-05-07 14:00:58', 'guangsheng(2645288)', b'0', NULL, 'fas fa-bars', '收集活动', NULL, '/activityCollectionList', b'1', 31, NULL, b'0');
+INSERT INTO `menu` VALUES (2644274, '2022-04-26 21:18:34', NULL, '2022-05-07 14:06:14', 'guangsheng(2645288)', b'0', NULL, 'fas fa-bars', '支付信息记录', NULL, '/paymentInfoList', b'1', 38, NULL, b'0');
+INSERT INTO `menu` VALUES (2644275, '2022-04-26 21:19:00', NULL, '2022-05-07 14:06:16', 'guangsheng(2645288)', b'0', NULL, 'fas fa-bars', '分账信息记录', NULL, '/divMoneyList', b'1', 40, NULL, b'0');
+INSERT INTO `menu` VALUES (2644321, '2022-04-27 17:46:26', NULL, '2022-05-07 14:04:19', 'guangsheng(2645288)', b'0', NULL, 'fas fa-bars', '优先购', NULL, '', b'1', 34, NULL, b'0');
+INSERT INTO `menu` VALUES (2644322, '2022-04-27 17:46:47', '管理员(1)', '2022-04-27 17:46:47', '管理员(1)', b'1', NULL, '', '活动配置', 2644321, '/preemptionList', b'0', 35, NULL, b'0');
+INSERT INTO `menu` VALUES (2644323, '2022-04-27 17:47:04', '管理员(1)', '2022-04-27 17:47:04', '管理员(1)', b'1', NULL, '', '白名单', 2644321, '/preemptionWhiteList', b'0', 36, NULL, b'0');
+INSERT INTO `menu` VALUES (2644438, '2022-04-28 10:55:58', '管理员(1)', '2022-04-28 10:55:58', '管理员(1)', b'1', NULL, '', '项目管理', 9, '/projectList', b'0', 37, NULL, b'0');
+INSERT INTO `menu` VALUES (2644682, '2022-04-28 21:51:35', NULL, '2022-05-07 14:09:34', 'guangsheng(2645288)', b'0', NULL, 'fas fa-bars', '项目管理', NULL, '/projectList', b'1', 32, NULL, b'0');
+INSERT INTO `menu` VALUES (2644683, '2022-04-28 21:52:45', NULL, '2022-04-28 21:53:43', 'bx(2644677)', b'0', NULL, 'fas fa-bars', '项目管理', NULL, '/projectList', b'1', 39, NULL, b'0');
+INSERT INTO `menu` VALUES (2646022, '2022-05-05 18:08:30', NULL, '2022-05-07 14:06:18', 'guangsheng(2645288)', b'0', NULL, 'fas fa-bars', '资产售卖限制', NULL, '/assetSellLimitList', b'1', 41, NULL, b'0');
+INSERT INTO `menu` VALUES (2646112, '2022-05-06 14:50:22', NULL, '2022-05-07 14:04:13', 'guangsheng(2645288)', b'0', NULL, 'fas fa-bars', '惊喜盒子', NULL, '', b'1', 33, NULL, b'0');
+INSERT INTO `menu` VALUES (2646113, '2022-05-06 14:55:18', NULL, '2022-05-06 15:01:50', 'guangsheng(2645288)', b'1', NULL, '', '活动配置', 2646112, '/surpriseBoxList', b'0', 42, NULL, b'0');
+INSERT INTO `menu` VALUES (2646180, '2022-05-07 13:18:11', 'guangsheng(2645288)', '2022-05-07 13:18:11', 'guangsheng(2645288)', b'1', NULL, '', '中奖名单', 2646112, '/supBoxList', b'0', 43, NULL, b'0');
+INSERT INTO `menu` VALUES (2646250, '2022-05-07 13:54:06', NULL, '2022-05-07 13:54:57', 'guangsheng(2645288)', b'1', NULL, 'fas fa-bars', '藏品管理', NULL, '', b'1', 2, NULL, b'0');
+INSERT INTO `menu` VALUES (2646251, '2022-05-07 13:55:19', NULL, '2022-05-24 16:15:14', 'a*01(2644858)', b'1', NULL, '', '藏品', 2646250, '/collectionList', b'0', 45, NULL, b'0');
+INSERT INTO `menu` VALUES (2646252, '2022-05-07 13:55:34', NULL, '2022-05-24 16:15:14', 'a*01(2644858)', b'1', NULL, '', '盲盒', 2646250, '/blindBoxList', b'0', 46, NULL, b'0');
+INSERT INTO `menu` VALUES (2646253, '2022-05-07 13:55:58', 'guangsheng(2645288)', '2022-05-07 13:55:58', 'guangsheng(2645288)', b'1', NULL, '', '空投', 2646250, '/airDropList', b'0', 47, NULL, b'0');
+INSERT INTO `menu` VALUES (2646254, '2022-05-07 13:56:10', 'guangsheng(2645288)', '2022-05-07 13:56:10', 'guangsheng(2645288)', b'1', NULL, '', '兑换卷', 2646250, 'couponList', b'0', 48, NULL, b'0');
+INSERT INTO `menu` VALUES (2646255, '2022-05-07 13:57:38', 'guangsheng(2645288)', '2022-05-07 13:57:38', 'guangsheng(2645288)', b'1', NULL, '', '铸造者', 6, '/minterList', b'0', 49, NULL, b'0');
+INSERT INTO `menu` VALUES (2646256, '2022-05-07 13:57:54', 'guangsheng(2645288)', '2022-05-07 13:57:54', 'guangsheng(2645288)', b'1', NULL, '', '实名审核', 6, '/identityAuthList', b'0', 50, NULL, b'0');
+INSERT INTO `menu` VALUES (2646257, '2022-05-07 13:58:10', 'guangsheng(2645288)', '2022-05-07 13:58:10', 'guangsheng(2645288)', b'1', NULL, '', '用户', 6, '/userList', b'0', 51, NULL, b'0');
+INSERT INTO `menu` VALUES (2646258, '2022-05-07 13:59:32', NULL, '2022-05-13 18:11:07', '*(2647152)', b'1', NULL, '', '邀请管理', 81707, '/inviteList', b'0', 53, NULL, b'0');
+INSERT INTO `menu` VALUES (2646259, '2022-05-07 13:59:58', NULL, '2022-05-13 18:11:06', '*(2647152)', b'1', NULL, '', '收集活动', 81707, '/activityCollectionList', b'0', 54, NULL, b'0');
+INSERT INTO `menu` VALUES (2646260, '2022-05-07 14:01:08', NULL, '2022-05-13 18:11:04', '*(2647152)', b'1', NULL, '', '优先购', 81707, '/preemptionList', b'0', 55, NULL, b'0');
+INSERT INTO `menu` VALUES (2646261, '2022-05-07 14:01:13', NULL, '2022-05-13 18:11:03', '*(2647152)', b'1', NULL, '', '惊喜盒子', 81707, '/surpriseBoxList', b'0', 56, NULL, b'0');
+INSERT INTO `menu` VALUES (2646262, '2022-05-07 14:02:34', NULL, '2022-05-13 18:11:01', '*(2647152)', b'1', NULL, '', '中奖名单', 81707, '/supBoxList', b'0', 57, NULL, b'0');
+INSERT INTO `menu` VALUES (2646263, '2022-05-07 14:04:07', NULL, '2022-05-13 18:11:00', '*(2647152)', b'1', NULL, '', '白名单', 81707, '/preemptionWhiteList', b'0', 68, NULL, b'0');
+INSERT INTO `menu` VALUES (2646264, '2022-05-07 14:04:31', NULL, '2022-05-07 14:09:10', 'guangsheng(2645288)', b'1', NULL, 'fas fa-bars', '统计管理', NULL, '', b'1', 44, NULL, b'0');
+INSERT INTO `menu` VALUES (2646265, '2022-05-07 14:04:50', NULL, '2022-06-08 13:57:05', 'oujihong(2644265)', b'1', NULL, '', '分销统计', 2646264, '/commissionRecordList', b'0', 60, NULL, b'0');
+INSERT INTO `menu` VALUES (2646266, '2022-05-07 14:05:15', NULL, '2022-06-08 13:57:02', 'oujihong(2644265)', b'1', NULL, '', '支付信息记录', 2646264, '/paymentInfoList', b'0', 61, NULL, b'0');
+INSERT INTO `menu` VALUES (2646267, '2022-05-07 14:05:54', NULL, '2022-06-08 13:56:58', 'oujihong(2644265)', b'1', NULL, '', '分账信息记录', 2646264, '/divMoneyList', b'0', 62, NULL, b'0');
+INSERT INTO `menu` VALUES (2646268, '2022-05-07 14:06:10', NULL, '2022-06-08 13:57:05', 'oujihong(2644265)', b'1', NULL, '', '资产售卖限制', 2646264, '/assetSellLimitList', b'0', 59, NULL, b'0');
+INSERT INTO `menu` VALUES (2646269, '2022-05-07 14:06:39', NULL, '2022-05-07 14:09:12', 'guangsheng(2645288)', b'1', NULL, 'fas fa-bars', '首页管理', NULL, '', b'1', 58, NULL, b'0');
+INSERT INTO `menu` VALUES (2646270, '2022-05-07 14:06:56', 'guangsheng(2645288)', '2022-05-07 14:06:56', 'guangsheng(2645288)', b'1', NULL, '', '轮播图', 2646269, '/bannerList', b'0', 64, NULL, b'0');
+INSERT INTO `menu` VALUES (2646271, '2022-05-07 14:07:10', 'guangsheng(2645288)', '2022-05-07 14:07:10', 'guangsheng(2645288)', b'1', NULL, '', '首页推荐', 2646269, '/recommendList', b'0', 65, NULL, b'0');
+INSERT INTO `menu` VALUES (2646272, '2022-05-07 14:15:02', 'guangsheng(2645288)', '2022-05-07 14:15:02', 'guangsheng(2645288)', b'1', NULL, '', '银行卡', 6, '/cardInfoList', b'0', 66, NULL, b'0');
+INSERT INTO `menu` VALUES (2646945, '2022-05-09 15:18:05', 'guangsheng(2645288)', '2022-05-09 15:18:05', 'guangsheng(2645288)', b'1', NULL, '', '分类', 2646250, '/collectionClassList', b'0', 67, NULL, b'0');
+INSERT INTO `menu` VALUES (2647375, '2022-05-13 18:10:43', NULL, '2022-05-13 18:11:07', '*(2647152)', b'1', NULL, '', '邀请有礼', 81707, '/invitationList', b'0', 52, NULL, b'0');
+INSERT INTO `menu` VALUES (2855588, '2022-05-18 19:30:26', '*(2647152)', '2022-05-18 19:30:26', '*(2647152)', b'1', NULL, '', '活动公告', 81707, '/activityList', b'0', 69, NULL, b'0');
+INSERT INTO `menu` VALUES (2865564, '2022-05-27 16:04:34', 'oujihong(2644265)', '2022-05-27 16:04:34', 'oujihong(2644265)', b'1', NULL, '', '资产', 6, '/assetList', b'0', 70, NULL, b'0');
+INSERT INTO `menu` VALUES (2905582, '2022-06-05 13:39:52', NULL, '2022-06-05 13:40:11', 'oujihong(2644265)', b'1', NULL, '', '转账记录', 2646264, 'transferMoneyInfoList', b'0', 71, NULL, b'0');
+INSERT INTO `menu` VALUES (2905671, '2022-06-08 13:56:30', 'oujihong(2644265)', '2022-06-08 13:56:30', 'oujihong(2644265)', b'1', NULL, '', '充值记录', 2646264, '/rechargeOrderList', b'0', 72, NULL, b'0');
+INSERT INTO `menu` VALUES (2905672, '2022-06-08 13:56:51', 'oujihong(2644265)', '2022-06-08 13:56:51', 'oujihong(2644265)', b'1', NULL, '', '提现记录', 2646264, '/withdrawApplyList', b'0', 73, NULL, b'0');
+
+-- ----------------------------
+-- Table structure for menu_authority
+-- ----------------------------
+
+CREATE TABLE `menu_authority`  (
+                                   `menu_id` bigint NOT NULL,
+                                   `authority` varchar(50)  NOT NULL,
+                                   PRIMARY KEY (`menu_id`, `authority`) USING BTREE,
+                                   INDEX `FKlj7sftrck7uk1kcjsy0doo56`(`authority`) USING BTREE,
+                                   CONSTRAINT `FK4hopjqfvkhdagmk110y1jk17q` FOREIGN KEY (`menu_id`) REFERENCES `menu` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+                                   CONSTRAINT `FKlj7sftrck7uk1kcjsy0doo56` FOREIGN KEY (`authority`) REFERENCES `authority` (`name`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of menu_authority
+-- ----------------------------
+INSERT INTO `menu_authority` VALUES (6, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (8, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (9, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (10, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (14, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (16, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (17, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (18, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (31, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (52, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (197, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (875, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (1083, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (1583, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (1597, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (4396, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (4614, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (81707, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (571073, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (571076, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (571082, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (571217, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (571220, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (571225, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (1234589, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2020975, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2644274, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2644275, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2644321, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2644322, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2644323, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2644438, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2644682, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2644683, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646022, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646112, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646113, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646180, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646250, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646251, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646252, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646253, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646254, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646255, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646256, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646257, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646258, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646259, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646260, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646261, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646262, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646263, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646264, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646265, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646266, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646267, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646268, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646269, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646270, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646271, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646272, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2646945, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2647375, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2855588, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2865564, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2905582, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2905671, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (2905672, 'ROLE_ADMIN');
+INSERT INTO `menu_authority` VALUES (3, 'ROLE_DEV');
+INSERT INTO `menu_authority` VALUES (4, 'ROLE_DEV');
+INSERT INTO `menu_authority` VALUES (5, 'ROLE_DEV');
+INSERT INTO `menu_authority` VALUES (6, 'ROLE_OPERATOR');
+INSERT INTO `menu_authority` VALUES (17, 'ROLE_OPERATOR');
+INSERT INTO `menu_authority` VALUES (52, 'ROLE_OPERATOR');
+INSERT INTO `menu_authority` VALUES (4614, 'ROLE_OPERATOR');
+INSERT INTO `menu_authority` VALUES (571217, 'ROLE_OPERATOR');
+INSERT INTO `menu_authority` VALUES (571220, 'ROLE_OPERATOR');
+INSERT INTO `menu_authority` VALUES (571225, 'ROLE_OPERATOR');
+
+-- ----------------------------
+-- Table structure for operation_log
+-- ----------------------------
+
+CREATE TABLE `operation_log`  (
+                                  `id` bigint NOT NULL,
+                                  `description` varchar(255)  NULL DEFAULT NULL,
+                                  `name` varchar(255)  NULL DEFAULT NULL,
+                                  `req_ip` varchar(255)  NULL DEFAULT NULL,
+                                  `req_method` varchar(255)  NULL DEFAULT NULL,
+                                  `req_params` longtext  NULL,
+                                  `req_url` varchar(255)  NULL DEFAULT NULL,
+                                  `resp` longtext  NULL,
+                                  `time` datetime NULL DEFAULT NULL,
+                                  `type` varchar(255)  NULL DEFAULT NULL,
+                                  `user_id` varchar(255)  NULL DEFAULT NULL,
+                                  `username` varchar(255)  NULL DEFAULT NULL,
+                                  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of operation_log
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for order_info
+-- ----------------------------
+
+CREATE TABLE `order_info`  (
+                               `id` bigint NOT NULL,
+                               `created_at` datetime NULL DEFAULT NULL,
+                               `created_by` varchar(255)  NULL DEFAULT NULL,
+                               `del` bit(1) NOT NULL,
+                               `modified_at` datetime NULL DEFAULT NULL,
+                               `modified_by` varchar(255)  NULL DEFAULT NULL,
+                               `collection_id` bigint NULL DEFAULT NULL,
+                               `gas_price` decimal(10, 2) NULL DEFAULT NULL,
+                               `minter` varchar(255)  NULL DEFAULT NULL,
+                               `minter_avatar` varchar(255)  NULL DEFAULT NULL,
+                               `minter_id` bigint NULL DEFAULT NULL,
+                               `name` varchar(255)  NULL DEFAULT NULL,
+                               `pay_method` varchar(255)  NULL DEFAULT NULL,
+                               `pay_time` datetime NULL DEFAULT NULL,
+                               `pic` text  NULL,
+                               `price` decimal(10, 2) NULL DEFAULT NULL,
+                               `qty` int NOT NULL,
+                               `status` varchar(255)  NULL DEFAULT NULL,
+                               `total_price` decimal(10, 2) NULL DEFAULT NULL,
+                               `transaction_id` varchar(255)  NULL DEFAULT NULL,
+                               `tx_hash` varchar(255)  NULL DEFAULT NULL,
+                               `user_id` bigint NULL DEFAULT NULL,
+                               `address` varchar(255)  NULL DEFAULT NULL,
+                               `contact_name` varchar(255)  NULL DEFAULT NULL,
+                               `contact_phone` varchar(255)  NULL DEFAULT NULL,
+                               `block_number` decimal(19, 2) NULL DEFAULT NULL,
+                               `gas_used` decimal(19, 2) NULL DEFAULT NULL,
+                               `properties` text  NULL,
+                               `type` varchar(255)  NULL DEFAULT NULL,
+                               `cancel_time` datetime NULL DEFAULT NULL,
+                               `can_resale` bit(1) NOT NULL,
+                               `detail` text  NULL,
+                               `royalties` int NOT NULL,
+                               `service_charge` int NOT NULL,
+                               `category` varchar(255)  NULL DEFAULT NULL,
+                               `asset_id` bigint NULL DEFAULT NULL,
+                               `coupon_id` bigint NULL DEFAULT NULL,
+                               `hide` bit(1) NOT NULL,
+                               `invitor` bigint NULL DEFAULT NULL,
+                               `privileges` text  NULL,
+                               `win_collection_id` bigint NULL DEFAULT NULL,
+                               `opened` bit(1) NOT NULL,
+                               `project_id` int NOT NULL,
+                               `source` varchar(255)  NULL DEFAULT NULL,
+                               `order_no` varchar(255)  NULL DEFAULT NULL,
+                               `ip` varchar(255)  NULL DEFAULT NULL,
+                               `user_ware_house_id` bigint NULL DEFAULT NULL,
+                               PRIMARY KEY (`id`) USING BTREE,
+                               INDEX `IDX1eq7bqam0q1soixs07jckkwp4`(`user_id`) USING BTREE,
+                               INDEX `IDXgag51j8ohmkek0ju4yvhnlwpo`(`status`) USING BTREE,
+                               INDEX `IDX73e2rlkehwu4hy76kgy6gaa8h`(`asset_id`) USING BTREE,
+                               INDEX `IDXj83h0tyxn0dl6ub5sh7496m8m`(`collection_id`) USING BTREE,
+                               INDEX `IDX44qcfxauygckv35hagn5jrqds`(`transaction_id`) USING BTREE,
+                               INDEX `IDXa3hnh7m7ke6b7p5g3hspr5ynx`(`minter_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of order_info
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for parent
+-- ----------------------------
+
+CREATE TABLE `parent`  (
+                           `id` bigint NOT NULL,
+                           `created_at` datetime NULL DEFAULT NULL,
+                           `created_by` varchar(255)  NULL DEFAULT NULL,
+                           `modified_at` datetime NULL DEFAULT NULL,
+                           `modified_by` varchar(255)  NULL DEFAULT NULL,
+                           `parent_name` varchar(255)  NULL DEFAULT NULL,
+                           PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of parent
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for payment_info
+-- ----------------------------
+
+CREATE TABLE `payment_info`  (
+                                 `id` bigint NOT NULL,
+                                 `created_at` datetime NULL DEFAULT NULL,
+                                 `created_by` varchar(255)  NULL DEFAULT NULL,
+                                 `del` bit(1) NOT NULL,
+                                 `modified_at` datetime NULL DEFAULT NULL,
+                                 `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                 `gift_order_id` bigint NULL DEFAULT NULL,
+                                 `goods_title` varchar(255)  NULL DEFAULT NULL,
+                                 `merchant_name` varchar(255)  NULL DEFAULT NULL,
+                                 `notify_time` datetime NULL DEFAULT NULL,
+                                 `notify_url` varchar(500)  NULL DEFAULT NULL,
+                                 `order_id` bigint NULL DEFAULT NULL,
+                                 `order_no` varchar(255)  NULL DEFAULT NULL,
+                                 `pay_amt` varchar(255)  NULL DEFAULT NULL,
+                                 `pay_channel` varchar(255)  NULL DEFAULT NULL,
+                                 `pay_method` varchar(255)  NULL DEFAULT NULL,
+                                 `status` varchar(255)  NULL DEFAULT NULL,
+                                 `time_expire` varchar(255)  NULL DEFAULT NULL,
+                                 `user_id` bigint NULL DEFAULT NULL,
+                                 `pay_platform` varchar(255)  NULL DEFAULT NULL,
+                                 `transaction_id` varchar(255)  NULL DEFAULT NULL,
+                                 `apply_refund_time` datetime NULL DEFAULT NULL,
+                                 `pay_time` datetime NULL DEFAULT NULL,
+                                 `project_id` int NULL DEFAULT NULL,
+                                 `refund_no` varchar(255)  NULL DEFAULT NULL,
+                                 `refund_reason` varchar(255)  NULL DEFAULT NULL,
+                                 `refund_time` datetime NULL DEFAULT NULL,
+                                 `third_pay_no` varchar(255)  NULL DEFAULT NULL,
+                                 `token` varchar(255)  NULL DEFAULT NULL,
+                                 `user_bank_card_id` bigint NULL DEFAULT NULL,
+                                 `user_fund_account_id` bigint NULL DEFAULT NULL,
+                                 PRIMARY KEY (`id`) USING BTREE,
+                                 UNIQUE INDEX `UK2q5usiexs07x8np55d83srnlh`(`order_no`) USING BTREE,
+                                 INDEX `IDXqreu0jsolb8hwej2ffjsnwi1`(`order_id`) USING BTREE,
+                                 INDEX `IDXb6bvv3fhne61weixp3i0847f`(`gift_order_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of payment_info
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for privilege_option
+-- ----------------------------
+
+CREATE TABLE `privilege_option`  (
+                                     `id` bigint NOT NULL,
+                                     `created_at` datetime NULL DEFAULT NULL,
+                                     `created_by` varchar(255)  NULL DEFAULT NULL,
+                                     `del` bit(1) NOT NULL,
+                                     `modified_at` datetime NULL DEFAULT NULL,
+                                     `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                     `description` varchar(255)  NULL DEFAULT NULL,
+                                     `icon` text  NULL,
+                                     `name` varchar(255)  NULL DEFAULT NULL,
+                                     `once` bit(1) NOT NULL,
+                                     `refresh_on_transfer` bit(1) NOT NULL,
+                                     `type` varchar(255)  NULL DEFAULT NULL,
+                                     PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of privilege_option
+-- ----------------------------
+INSERT INTO `privilege_option` VALUES (1089, '2021-11-02 16:57:07', '管理员01(724)', b'0', '2021-11-12 14:52:24', '管理员(1)', '该特权将证明购买者拥有该作品版权使用权利', 'https://cosmoscdn.9space.vip/image/2021-11-12-14-51-44tXFJdJCy.png,https://cosmoscdn.9space.vip/image/2021-11-12-14-51-49ZqLbgbvh.png,https://cosmoscdn.9space.vip/image/2021-11-12-14-52-10sqevVZup.png,https://cosmoscdn.9space.vip/image/2021-11-12-14-52-22BANGuzNs.png', '版权权利', b'0', b'0', 'text');
+INSERT INTO `privilege_option` VALUES (1090, '2021-11-02 16:57:32', '管理员01(724)', b'1', '2021-11-09 14:55:30', '管理员(1)', '里面藏有创作者填写的隐藏内容,持有者才能打开查看', 'https://cosmoscdn.9space.vip/image/2021-11-02-16-57-31irTscxGK.svg', '加密空间', b'1', b'0', 'text');
+INSERT INTO `privilege_option` VALUES (1353, '2021-11-09 15:15:33', '管理员(1)', b'0', '2022-02-18 17:38:39', '第九空间01(4156)', '该作品拥有唯一的二维码,创作者扫描二维码,可使用该作品作为门票', 'https://cosmoscdn.9space.vip/image/2021-11-13-13-10-56AoDRBMfD.png,https://cosmoscdn.9space.vip/image/2021-11-13-13-11-03mHToTmka.png,https://cosmoscdn.9space.vip/image/2021-11-13-13-11-47sVlqzMPG.png,https://cosmoscdn.9space.vip/image/2021-11-13-13-11-51oCFdTSGA.png', '票务', b'0', b'1', 'qrcode');
+INSERT INTO `privilege_option` VALUES (1354, '2021-11-09 15:19:14', '管理员(1)', b'0', '2021-11-13 13:12:02', '管理员(1)', '通过该验证码可在第三方平台进行该作品的校验和使用', 'https://cosmoscdn.9space.vip/image/2021-11-13-13-10-17Sbbzdymi.png,https://cosmoscdn.9space.vip/image/2021-11-13-13-10-27lxvvrVop.png,https://cosmoscdn.9space.vip/image/2021-11-13-13-10-38bWorEEYN.png,https://cosmoscdn.9space.vip/image/2021-11-13-13-12-00oFNIbIEn.png', '兑换锁链', b'0', b'0', 'code');
+INSERT INTO `privilege_option` VALUES (1356, '2021-11-09 15:23:12', '管理员(1)', b'0', '2022-02-18 17:33:52', '第九空间01(4156)', '可在铸造商店进行实物铸造', 'https://cosmoscdn.9space.vip/image/2021-11-12-14-48-02FtoZIkUR.png,https://cosmoscdn.9space.vip/image/2021-11-12-14-48-08YNhvXfpn.png,https://cosmoscdn.9space.vip/image/2021-11-12-14-48-15NrAlwUTe.png,https://cosmoscdn.9space.vip/image/2021-11-12-14-52-28dTxxSaLF.png', '铸造', b'0', b'1', 'exchange');
+INSERT INTO `privilege_option` VALUES (1864, '2021-11-12 14:18:19', '管理员(1)', b'0', '2022-02-18 17:38:47', '第九空间01(4156)', '里面藏有创作者填写的隐藏内容,持有者才能打开查看', 'https://cosmoscdn.9space.vip/image/2021-11-12-14-52-51sSJoYQJK.png,https://cosmoscdn.9space.vip/image/2021-11-12-14-53-00oFTSogIR.png,https://cosmoscdn.9space.vip/image/2021-11-12-14-53-16IygUxQHY.png', '悄悄话', b'0', b'1', 'text');
+
+-- ----------------------------
+-- Table structure for project
+-- ----------------------------
+
+CREATE TABLE `project`  (
+                            `id` bigint NOT NULL,
+                            `created_at` datetime NULL DEFAULT NULL,
+                            `created_by` varchar(255)  NULL DEFAULT NULL,
+                            `del` bit(1) NOT NULL,
+                            `modified_at` datetime NULL DEFAULT NULL,
+                            `modified_by` varchar(255)  NULL DEFAULT NULL,
+                            `ch_name` varchar(255)  NULL DEFAULT NULL,
+                            `en_name` varchar(255)  NULL DEFAULT NULL,
+                            `front_addr` varchar(255)  NULL DEFAULT NULL,
+                            `user_prefix` varchar(255)  NULL DEFAULT NULL,
+                            PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of project
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for real_name_log
+-- ----------------------------
+
+CREATE TABLE `real_name_log`  (
+                                  `id` bigint NOT NULL,
+                                  `created_at` datetime NULL DEFAULT NULL,
+                                  `created_by` varchar(255)  NULL DEFAULT NULL,
+                                  `del` bit(1) NOT NULL,
+                                  `modified_at` datetime NULL DEFAULT NULL,
+                                  `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                  `card_no` varchar(255)  NULL DEFAULT NULL,
+                                  `change_user_id` bigint NULL DEFAULT NULL,
+                                  `change_user_name` varchar(255)  NULL DEFAULT NULL,
+                                  `content` varchar(255)  NULL DEFAULT NULL,
+                                  `id_no` varchar(255)  NULL DEFAULT NULL,
+                                  `operate_type` varchar(255)  NULL DEFAULT NULL,
+                                  `operator_id` bigint NULL DEFAULT NULL,
+                                  `operator_ip` varchar(255)  NULL DEFAULT NULL,
+                                  `operator_name` varchar(255)  NULL DEFAULT NULL,
+                                  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of real_name_log
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for recharge_order
+-- ----------------------------
+
+CREATE TABLE `recharge_order`  (
+                                   `id` bigint NOT NULL,
+                                   `created_at` datetime NULL DEFAULT NULL,
+                                   `created_by` varchar(255)  NULL DEFAULT NULL,
+                                   `del` bit(1) NOT NULL,
+                                   `modified_at` datetime NULL DEFAULT NULL,
+                                   `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                   `amount` decimal(19, 2) NULL DEFAULT NULL,
+                                   `bank_name` varchar(255)  NULL DEFAULT NULL,
+                                   `bank_no` varchar(255)  NULL DEFAULT NULL,
+                                   `fee_amt` decimal(19, 2) NULL DEFAULT NULL,
+                                   `finish_time` datetime NULL DEFAULT NULL,
+                                   `front_url` varchar(255)  NULL DEFAULT NULL,
+                                   `jump_url` varchar(255)  NULL DEFAULT NULL,
+                                   `notify_time` datetime NULL DEFAULT NULL,
+                                   `notify_url` varchar(255)  NULL DEFAULT NULL,
+                                   `order_amount` decimal(19, 2) NULL DEFAULT NULL,
+                                   `order_no` varchar(255)  NULL DEFAULT NULL,
+                                   `pay_platform` varchar(255)  NULL DEFAULT NULL,
+                                   `pay_tool` varchar(255)  NULL DEFAULT NULL,
+                                   `pay_voucher` text  NULL,
+                                   `related_card_no` varchar(255)  NULL DEFAULT NULL,
+                                   `result` varchar(255)  NULL DEFAULT NULL,
+                                   `status` varchar(255)  NULL DEFAULT NULL,
+                                   `title` varchar(255)  NULL DEFAULT NULL,
+                                   `token` varchar(255)  NULL DEFAULT NULL,
+                                   `transaction_id` varchar(255)  NULL DEFAULT NULL,
+                                   `user_bank_card_id` bigint NULL DEFAULT NULL,
+                                   `user_fee_amt` decimal(19, 2) NULL DEFAULT NULL,
+                                   `user_fund_account_id` bigint NULL DEFAULT NULL,
+                                   `user_id` bigint NULL DEFAULT NULL,
+                                   PRIMARY KEY (`id`) USING BTREE,
+                                   INDEX `IDX92atlqe1b36w7q8h4tr2tv9pf`(`user_id`) USING BTREE,
+                                   INDEX `IDXak1eviphbfufs6rve91nvivbf`(`order_no`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of recharge_order
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for recommend
+-- ----------------------------
+
+CREATE TABLE `recommend`  (
+                              `id` bigint NOT NULL,
+                              `created_at` datetime NULL DEFAULT NULL,
+                              `created_by` varchar(255)  NULL DEFAULT NULL,
+                              `del` bit(1) NOT NULL,
+                              `modified_at` datetime NULL DEFAULT NULL,
+                              `modified_by` varchar(255)  NULL DEFAULT NULL,
+                              `collection_id` bigint NULL DEFAULT NULL,
+                              `name` varchar(255)  NULL DEFAULT NULL,
+                              `sort` int NOT NULL,
+                              `type` varchar(255)  NULL DEFAULT NULL,
+                              `pic` varchar(255)  NULL DEFAULT NULL,
+                              `project_id` int NOT NULL,
+                              PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of recommend
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for scenic
+-- ----------------------------
+
+CREATE TABLE `scenic`  (
+                           `id` bigint NOT NULL,
+                           `created_at` datetime NULL DEFAULT NULL,
+                           `created_by` varchar(255)  NULL DEFAULT NULL,
+                           `modified_at` datetime NULL DEFAULT NULL,
+                           `modified_by` varchar(255)  NULL DEFAULT NULL,
+                           `city_id` bigint NULL DEFAULT NULL,
+                           `name` varchar(255)  NULL DEFAULT NULL,
+                           `pic` varchar(255)  NULL DEFAULT NULL,
+                           `remark` varchar(255)  NULL DEFAULT NULL,
+                           PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of scenic
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for scenic_spot
+-- ----------------------------
+
+CREATE TABLE `scenic_spot`  (
+                                `id` bigint NOT NULL,
+                                `created_at` datetime NULL DEFAULT NULL,
+                                `created_by` varchar(255)  NULL DEFAULT NULL,
+                                `modified_at` datetime NULL DEFAULT NULL,
+                                `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                `city_id` bigint NULL DEFAULT NULL,
+                                `name` varchar(255)  NULL DEFAULT NULL,
+                                `pic` varchar(255)  NULL DEFAULT NULL,
+                                `remark` varchar(255)  NULL DEFAULT NULL,
+                                `scenic_id` bigint NULL DEFAULT NULL,
+                                `x` int NOT NULL,
+                                `y` int NOT NULL,
+                                PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of scenic_spot
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for sms_record
+-- ----------------------------
+
+CREATE TABLE `sms_record`  (
+                               `id` bigint NOT NULL,
+                               `created_at` datetime NULL DEFAULT NULL,
+                               `created_by` varchar(255)  NULL DEFAULT NULL,
+                               `modified_at` datetime NULL DEFAULT NULL,
+                               `modified_by` varchar(255)  NULL DEFAULT NULL,
+                               `code` varchar(255)  NULL DEFAULT NULL,
+                               `expired` bit(1) NULL DEFAULT NULL,
+                               `expires_at` datetime NULL DEFAULT NULL,
+                               `phone` varchar(255)  NULL DEFAULT NULL,
+                               `scope` varchar(255)  NULL DEFAULT NULL,
+                               `session_id` varchar(255)  NULL DEFAULT NULL,
+                               `del` bit(1) NOT NULL,
+                               PRIMARY KEY (`id`) USING BTREE,
+                               INDEX `IDX15i12q4gifq8a8kil7l2bjlty`(`phone`) USING BTREE,
+                               INDEX `IDX4gr4ycik1fopjfw6rpg22oluj`(`expires_at`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of sms_record
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for spot
+-- ----------------------------
+
+CREATE TABLE `spot`  (
+                         `user_id` bigint NOT NULL,
+                         `authority_name` varchar(50)  NOT NULL,
+                         PRIMARY KEY (`user_id`, `authority_name`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of spot
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for spot_guid
+-- ----------------------------
+
+CREATE TABLE `spot_guid`  (
+                              `spot_id` bigint NOT NULL,
+                              `guid_id` bigint NOT NULL,
+                              PRIMARY KEY (`spot_id`, `guid_id`) USING BTREE,
+                              INDEX `FKbftxye4brw7vfq05d7rv0mtca`(`guid_id`) USING BTREE,
+                              CONSTRAINT `FK5xnrr1sk76u0xy3j15p6r96q9` FOREIGN KEY (`spot_id`) REFERENCES `scenic_spot` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+                              CONSTRAINT `FKbftxye4brw7vfq05d7rv0mtca` FOREIGN KEY (`guid_id`) REFERENCES `guide` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of spot_guid
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for super_user
+-- ----------------------------
+
+CREATE TABLE `super_user`  (
+                               `id` bigint NOT NULL,
+                               `created_at` datetime NULL DEFAULT NULL,
+                               `created_by` varchar(255)  NULL DEFAULT NULL,
+                               `modified_at` datetime NULL DEFAULT NULL,
+                               `modified_by` varchar(255)  NULL DEFAULT NULL,
+                               `avatar` varchar(255)  NULL DEFAULT NULL,
+                               `enabled` bit(1) NOT NULL,
+                               `nickname` varchar(255)  NULL DEFAULT NULL,
+                               `password` varchar(255)  NULL DEFAULT NULL,
+                               `phone` varchar(255)  NULL DEFAULT NULL,
+                               `username` varchar(50)  NOT NULL,
+                               `del` bit(1) NOT NULL,
+                               PRIMARY KEY (`id`) USING BTREE,
+                               UNIQUE INDEX `UK_jfokkpxg19r117eil158ooo9d`(`username`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of super_user
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for super_user_authority
+-- ----------------------------
+
+CREATE TABLE `super_user_authority`  (
+                                         `user_id` bigint NOT NULL,
+                                         `authority_name` varchar(50)  NOT NULL,
+                                         PRIMARY KEY (`user_id`, `authority_name`) USING BTREE,
+                                         INDEX `FKxjxyodse6n0n00ewvoq8xv8`(`authority_name`) USING BTREE,
+                                         CONSTRAINT `FK7p0vq0b1vy9f0sqvgrdqw1q70` FOREIGN KEY (`user_id`) REFERENCES `super_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+                                         CONSTRAINT `FKxjxyodse6n0n00ewvoq8xv8` FOREIGN KEY (`authority_name`) REFERENCES `authority` (`name`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of super_user_authority
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for surprise_box_log
+-- ----------------------------
+
+CREATE TABLE `surprise_box_log`  (
+                                     `id` bigint NOT NULL,
+                                     `created_at` datetime NULL DEFAULT NULL,
+                                     `created_by` varchar(255)  NULL DEFAULT NULL,
+                                     `del` bit(1) NOT NULL,
+                                     `modified_at` datetime NULL DEFAULT NULL,
+                                     `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                     `collection_id` bigint NULL DEFAULT NULL,
+                                     `name` varchar(255)  NULL DEFAULT NULL,
+                                     `phone` varchar(255)  NULL DEFAULT NULL,
+                                     `pic_url` text  NULL,
+                                     `project_id` int NOT NULL,
+                                     `remarks` varchar(255)  NULL DEFAULT NULL,
+                                     `shipments` bit(1) NOT NULL,
+                                     `type` int NULL DEFAULT NULL,
+                                     `user_id` bigint NULL DEFAULT NULL,
+                                     PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of surprise_box_log
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for sys_config
+-- ----------------------------
+
+CREATE TABLE `sys_config`  (
+                               `name` varchar(25)  NOT NULL,
+                               `created_at` datetime NULL DEFAULT NULL,
+                               `created_by` varchar(255)  NULL DEFAULT NULL,
+                               `modified_at` datetime NULL DEFAULT NULL,
+                               `modified_by` varchar(255)  NULL DEFAULT NULL,
+                               `description` varchar(255)  NULL DEFAULT NULL,
+                               `type` varchar(255)  NULL DEFAULT NULL,
+                               `value` varchar(255)  NULL DEFAULT NULL,
+                               `del` bit(1) NOT NULL,
+                               `option_map` text  NULL,
+                               PRIMARY KEY (`name`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of sys_config
+-- ----------------------------
+INSERT INTO `sys_config` VALUES ('9th_customer_group', '2021-11-23 19:12:54', NULL, '2022-04-19 11:15:54', 'Meng(66637)', '第九空间客服群', 'FILE', 'https://cosmoscdn.9space.vip/image/2022-04-19-11-15-53ceRGzcIa.jpg', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('asset_shelf_check', '2022-04-29 15:51:19', 'system', '2022-04-29 15:51:19', 'system', '二手交易藏品上架检查', 'STRING', '', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('asset_shelf_price_limit', '2022-05-24 17:36:51', 'system', '2022-05-24 17:36:51', 'system', '资产上架价格限制', 'NUMBER', '50000', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('authcode_expiration_time', '2022-06-02 10:43:55', 'system', '2022-06-02 10:43:55', 'system', '图形验证码过期时间(秒)', 'NUMBER', '120', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('bank_card_can_be_bound', '2022-05-13 14:34:06', 'system', '2022-05-13 14:34:06', 'system', '同一个银行卡可以绑定的次数', 'NUMBER', '3', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('binding_bank_card_switch', '2022-05-19 18:45:43', NULL, '2022-05-27 20:45:18', '管理员-梁大官人(2645290)', '汇付绑定银行卡开关', 'BOOLEAN', '0', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('black_user_id', NULL, NULL, '2022-05-20 17:22:12', '管理员(1)', '黑洞账户', 'NUMBER', '1', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('by_invite_collection', '2022-05-07 15:38:15', NULL, '2022-05-11 15:35:17', '芳慧(2647154)', '邀请获得空投惊喜盒子ID(被邀请人)', 'NUMBER', '2647172', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('consume_data', '2022-06-02 21:39:58', 'system', '2022-06-02 21:39:58', 'system', '活动消费排行榜需要补全的数据(与手机号对应)', 'STRING', '0', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('consume_phone', '2022-06-02 21:39:58', 'system', '2022-06-02 21:39:58', 'system', '活动消费排行榜需要补全数据的手机号(多号用逗号隔开)', 'STRING', '0', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('cosmos_customer_group', '2022-01-24 13:52:43', NULL, '2022-04-06 11:12:51', '第九空间01(4156)', 'cosmos客服群', 'FILE', 'https://cosmoscdn.9space.vip/image/2022-04-06-11-12-49KeUUAyqc.jpg', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('days_four_element_count', '2022-05-03 15:35:18', NULL, '2022-05-09 10:10:01', 'li(2644644)', '用户每天银行卡实名认证次数', 'NUMBER', '10', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('default_avatar', '2022-05-03 19:53:15', 'system', '2022-05-03 19:53:15', 'system', '用户默认头像', 'STRING', 'https://cosmoscdn.9space.vip/image/2021-11-26-18-49-04fkFHRAhM.jpg', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('enable_wx_lite', '2021-12-09 20:37:12', NULL, '2021-12-13 20:43:05', '管理员(1)', '使用小程序支付', 'BOOLEAN', '0', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('enable_wx_pub', '2021-12-09 20:37:12', NULL, '2021-12-10 10:19:31', 'admin(1866)', '使用公众号支付', 'BOOLEAN', '0', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('false_data', '2022-05-30 17:14:47', NULL, '2022-05-30 17:22:32', 'oujihong(2644265)', '邀请排行榜假数据(与手机号一一对应)', 'STRING', '300,500', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('false_data_phone_number', '2022-05-30 17:14:47', NULL, '2022-05-30 17:22:15', 'oujihong(2644265)', '邀请排行榜需要造假数据的手机号(多号用逗号隔开)', 'STRING', '13680830210,13143745202', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('four_element_switch', '2022-05-03 15:35:18', NULL, '2022-05-23 18:09:55', 'yang(2644733)', '银行卡实名认证四要素开关', 'BOOLEAN', '0', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('gas_fee', '2021-10-21 17:34:34', NULL, '2022-04-27 20:31:37', 'zhangxiaoyu(2644324)', 'gas费', 'NUMBER', '0.01', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('gift_gas_fee', '2021-12-08 21:04:49', NULL, '2022-04-29 16:02:47', '管理员(1)', '转赠gas费', 'NUMBER', '0.01', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('gift_pay_switch', '2022-04-26 18:14:50', 'system', '2022-04-26 18:14:50', 'system', '转赠支付开关', 'BOOLEAN', '1', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('hold_days', '2021-12-16 01:38:51', NULL, '2022-03-22 12:32:50', 'xiong(1243003)', '持有满几天可销售', 'NUMBER', '0', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('invite_collection', '2022-04-27 15:59:10', NULL, '2022-05-10 11:06:40', 'zhangxiaoyu(2644324)', '邀请获得空投藏品ID', 'NUMBER', '-1', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('invite_enddatetime', '2022-04-27 15:59:10', NULL, '2022-05-12 18:32:59', '芳慧(2647154)', '邀请活动结束时间', 'DATETIME', '2022-05-13 13:21:39', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('invite_num', '2022-04-27 15:59:10', NULL, '2022-05-10 11:06:57', 'zhangxiaoyu(2644324)', '邀请人数', 'NUMBER', '-1', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('invite_startdatetime', '2022-04-27 15:59:10', NULL, '2022-05-12 18:32:16', '芳慧(2647154)', '邀请活动开始时间', 'DATETIME', '2022-05-12 13:21:27', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('lock_order_count_interval', '2022-05-20 15:22:43', 'system', '2022-05-20 15:22:43', 'system', '统计锁单次数周期', 'NUMBER', '24', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('lock_order_limit_number', '2022-05-17 17:14:32', NULL, '2022-05-27 14:51:25', 'oujihong(2644265)', '锁单上限次数', 'NUMBER', '200', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('lock_order_punish_time', '2022-05-17 17:14:33', NULL, '2022-05-17 20:20:13', 'test01(2644237)', '超过锁单上限禁止购买时间', 'NUMBER', '5', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('member_prefix', '2022-06-07 14:45:55', 'system', '2022-06-07 14:45:55', 'system', '第三方账户会员ID前缀(多个平台隔离)', 'STRING', '9th_', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('order_expire_interval', '2022-05-12 21:57:07', 'system', '2022-05-12 21:57:07', 'system', '订单失效时间间隔(分钟)', 'NUMBER', '3', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('pay_platform', '2022-04-07 21:32:54', NULL, '2022-06-14 18:08:27', 'oujihong(2644265)', '默认的支付平台', 'LIST', 'NOTPAY_PLATFORM', b'0', '{\"adapayPlatform\":\"汇付支付\",\"customPlatform\":\"官方支付宝\",\"sandpayPlatform\":\"杉德支付\",\"ikudotpayPlatform\":\"酷点支付\",\"sumpayPlatform\":\"商盟支付\",\"payeasenetPlatform\":\"首信易支付\",\"NOTPAY_PLATFORM\":\"--关闭通道--\"}');
+INSERT INTO `sys_config` VALUES ('picture_compression', '2022-06-14 14:33:59', NULL, '2022-06-14 14:41:47', 'oujihong(2644265)', '图片压缩开关', 'BOOLEAN', '1', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('prefix', '2022-04-27 15:59:10', NULL, '2022-04-28 13:26:34', '汤卓威(2644442)', '用户名前缀', 'STRING', '时光街_', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('ranking_end_time', '2022-05-24 16:08:53', 'system', '2022-05-24 16:08:53', 'system', '成交量排行榜活动结束时间', 'DATETIME', '2022-05-24 20:10:36', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('ranking_start_time', '2022-05-24 16:08:53', 'system', '2022-05-24 16:08:53', 'system', '成交量排行榜活动开始时间', 'DATETIME', '2022-03-21 11:10:36', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('registered_number', '2022-05-12 18:30:05', NULL, '2022-06-14 16:30:32', '芳慧(2864293)', '同一个身份证可注册账号个数', 'NUMBER', '5', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('second_hand_pay_platform', '2022-04-26 18:14:49', NULL, '2022-06-14 18:01:30', 'oujihong(2644265)', '二手交易的支付平台', 'LIST', 'NOTPAY_PLATFORM', b'0', '{\"adapayPlatform\":\"汇付支付\",\"customPlatform\":\"官方支付宝\",\"sandpayPlatform\":\"杉德支付\",\"ikudotpayPlatform\":\"酷点支付\",\"sumpayPlatform\":\"商盟支付\",\"payeasenetPlatform\":\"首信易支付\",\"NOTPAY_PLATFORM\":\"--关闭通道--\"}');
+INSERT INTO `sys_config` VALUES ('share_ratio', '2021-11-19 19:59:46', NULL, '2021-12-08 14:12:21', '管理员(1)', '默认分享分成比例(%)', 'NUMBER', '0', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('tester_user_id', '2022-05-18 13:50:42', 'system', '2022-05-18 13:50:42', 'system', '测试人员ID', 'NUMBER', '1', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('test_named_collectionId', '2022-05-05 21:41:01', NULL, '2022-05-06 12:16:16', '管理员(1)', '指定藏品,多藏品逗号隔开', 'STRING', '2644609', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('test_named_user', '2022-05-05 21:41:01', NULL, '2022-05-06 12:17:22', '管理员(1)', '指定用户ID,多藏品逗号隔开', 'STRING', '2644964,1', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('wallet_free_tips', '2022-06-13 20:52:38', 'system', '2022-06-13 20:52:38', 'system', '钱包免费提示信息', 'STRING', '', b'0', NULL);
+INSERT INTO `sys_config` VALUES ('wx_mp_switch', '2022-05-06 23:08:17', 'system', '2022-05-06 23:08:17', 'system', '微信公众号调用开关', 'BOOLEAN', '0', b'0', NULL);
+
+-- ----------------------------
+-- Table structure for system_info_log
+-- ----------------------------
+
+CREATE TABLE `system_info_log`  (
+                                    `id` bigint NOT NULL,
+                                    `created_at` datetime NULL DEFAULT NULL,
+                                    `created_by` varchar(255)  NULL DEFAULT NULL,
+                                    `del` bit(1) NOT NULL,
+                                    `modified_at` datetime NULL DEFAULT NULL,
+                                    `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                    `bank_pay_num` decimal(19, 2) NULL DEFAULT NULL,
+                                    `closing_wallet_num` int NULL DEFAULT NULL,
+                                    `day_recharge_num` decimal(19, 2) NULL DEFAULT NULL,
+                                    `day_withdraw_num` decimal(19, 2) NULL DEFAULT NULL,
+                                    `log_date` date NULL DEFAULT NULL,
+                                    `open_wallet_num` int NULL DEFAULT NULL,
+                                    `register_num` int NULL DEFAULT NULL,
+                                    `total_open_wallet_num` int NULL DEFAULT NULL,
+                                    `wallet_pay_num` decimal(19, 2) NULL DEFAULT NULL,
+                                    PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of system_info_log
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for test_class
+-- ----------------------------
+
+CREATE TABLE `test_class`  (
+                               `id` bigint NOT NULL,
+                               `created_at` datetime NULL DEFAULT NULL,
+                               `created_by` varchar(255)  NULL DEFAULT NULL,
+                               `del` bit(1) NOT NULL,
+                               `modified_at` datetime NULL DEFAULT NULL,
+                               `modified_by` varchar(255)  NULL DEFAULT NULL,
+                               `name` varchar(255)  NULL DEFAULT NULL,
+                               PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of test_class
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for token_history
+-- ----------------------------
+
+CREATE TABLE `token_history`  (
+                                  `id` bigint NOT NULL,
+                                  `created_at` datetime NULL DEFAULT NULL,
+                                  `created_by` varchar(255)  NULL DEFAULT NULL,
+                                  `del` bit(1) NOT NULL,
+                                  `modified_at` datetime NULL DEFAULT NULL,
+                                  `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                  `from_avatar` varchar(255)  NULL DEFAULT NULL,
+                                  `from_user` varchar(255)  NULL DEFAULT NULL,
+                                  `from_user_id` bigint NULL DEFAULT NULL,
+                                  `operation` varchar(255)  NULL DEFAULT NULL,
+                                  `price` decimal(10, 2) NULL DEFAULT NULL,
+                                  `to_avatar` varchar(255)  NULL DEFAULT NULL,
+                                  `to_user` varchar(255)  NULL DEFAULT NULL,
+                                  `to_user_id` bigint NULL DEFAULT NULL,
+                                  `token_id` varchar(255)  NULL DEFAULT NULL,
+                                  `project_id` int NOT NULL,
+                                  `asset_id` bigint NULL DEFAULT NULL,
+                                  `order_id` bigint NULL DEFAULT NULL,
+                                  PRIMARY KEY (`id`) USING BTREE,
+                                  INDEX `IDXg00s1821w2wm8w73ajmsscau1`(`token_id`) USING BTREE,
+                                  INDEX `idx_touserid`(`to_user_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of token_history
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for transfer_money_info
+-- ----------------------------
+
+CREATE TABLE `transfer_money_info`  (
+                                        `id` bigint NOT NULL,
+                                        `created_at` datetime NULL DEFAULT NULL,
+                                        `created_by` varchar(255)  NULL DEFAULT NULL,
+                                        `del` bit(1) NOT NULL,
+                                        `modified_at` datetime NULL DEFAULT NULL,
+                                        `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                        `account_name` varchar(255)  NULL DEFAULT NULL,
+                                        `account_no` varchar(255)  NULL DEFAULT NULL,
+                                        `account_type` varchar(255)  NULL DEFAULT NULL,
+                                        `amount` decimal(10, 2) NULL DEFAULT NULL,
+                                        `status` varchar(255)  NULL DEFAULT NULL,
+                                        `to_user_id` bigint NULL DEFAULT NULL,
+                                        `trade_no` varchar(255)  NULL DEFAULT NULL,
+                                        `transaction_id` varchar(255)  NULL DEFAULT NULL,
+                                        `transfer_date` varchar(255)  NULL DEFAULT NULL,
+                                        `transfer_method` varchar(255)  NULL DEFAULT NULL,
+                                        `transfer_order_id` varchar(255)  NULL DEFAULT NULL,
+                                        `batch_no` varchar(255)  NULL DEFAULT NULL,
+                                        `div_money_id` bigint NULL DEFAULT NULL,
+                                        `pay_platform` varchar(255)  NULL DEFAULT NULL,
+                                        `reason` varchar(255)  NULL DEFAULT NULL,
+                                        `result` varchar(255)  NULL DEFAULT NULL,
+                                        `third_account_id` varchar(255)  NULL DEFAULT NULL,
+                                        PRIMARY KEY (`id`) USING BTREE,
+                                        UNIQUE INDEX `UK4gakcpqh0h1gx30y6r4jx64tb`(`trade_no`) USING BTREE,
+                                        INDEX `IDXmdibsak5hvvrxcogb11akci76`(`to_user_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of transfer_money_info
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for user
+-- ----------------------------
+
+CREATE TABLE `user`  (
+                         `id` bigint NOT NULL,
+                         `created_at` datetime NULL DEFAULT NULL,
+                         `created_by` varchar(255)  NULL DEFAULT NULL,
+                         `modified_at` datetime NULL DEFAULT NULL,
+                         `modified_by` varchar(255)  NULL DEFAULT NULL,
+                         `avatar` varchar(255)  NULL DEFAULT NULL,
+                         `city` varchar(255)  NULL DEFAULT NULL,
+                         `country` varchar(255)  NULL DEFAULT NULL,
+                         `email` varchar(255)  NULL DEFAULT NULL,
+                         `language` varchar(255)  NULL DEFAULT NULL,
+                         `nickname` varchar(255)  NULL DEFAULT NULL,
+                         `open_id` varchar(255)  NULL DEFAULT NULL,
+                         `password` varchar(255)  NULL DEFAULT NULL,
+                         `phone` varchar(255)  NULL DEFAULT NULL,
+                         `province` varchar(255)  NULL DEFAULT NULL,
+                         `sex` varchar(255)  NULL DEFAULT NULL,
+                         `username` varchar(50)  NOT NULL,
+                         `del` bit(1) NOT NULL,
+                         `bg` varchar(255)  NULL DEFAULT NULL,
+                         `followers` int NOT NULL,
+                         `follows` int NOT NULL,
+                         `intro` text  NULL,
+                         `auth_status` varchar(255)  NULL DEFAULT NULL,
+                         `real_name` varchar(255)  NULL DEFAULT NULL,
+                         `kms_id` varchar(255)  NULL DEFAULT NULL,
+                         `nft_account` varchar(255)  NULL DEFAULT NULL,
+                         `public_key` varchar(255)  NULL DEFAULT NULL,
+                         `sales` int NOT NULL,
+                         `trade_code` varchar(255)  NULL DEFAULT NULL,
+                         `admin` bit(1) NOT NULL,
+                         `share_ratio` decimal(10, 2) NULL DEFAULT NULL,
+                         `auth_id` bigint NULL DEFAULT NULL,
+                         `member_id` varchar(255)  NULL DEFAULT NULL,
+                         `settle_account_id` varchar(255)  NULL DEFAULT NULL,
+                         `invite_code` varchar(255)  NULL DEFAULT NULL,
+                         `invitor_name` varchar(255)  NULL DEFAULT NULL,
+                         `invitor_phone` varchar(255)  NULL DEFAULT NULL,
+                         `minter_project_id` int NOT NULL,
+                         `invitor` bigint NULL DEFAULT NULL,
+                         `invite_num` int NULL DEFAULT 0,
+                         `invite_air_drop` int NULL DEFAULT 0,
+                         `bank_card` bit(1) NOT NULL,
+                         PRIMARY KEY (`id`) USING BTREE,
+                         UNIQUE INDEX `UK_sb8bbouer5wak8vyiiy4pf2bx`(`username`) USING BTREE,
+                         UNIQUE INDEX `UKc5b5fqpocs0w2o3h8goc90e8c`(`member_id`) USING BTREE,
+                         INDEX `IDX589idila9li6a4arw1t8ht1gx`(`phone`) USING BTREE,
+                         INDEX `IDXc9pp9de8b7qmvluu50p6i46c7`(`admin`) USING BTREE,
+                         INDEX `IDXhtotek3rtv2axspgd9outw1cx`(`invitor`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of user 默认密码123654abc
+-- ----------------------------
+INSERT INTO `user` VALUES (1, '2020-03-07 18:34:36', NULL, '2022-06-15 15:05:20', '管理员(1)', 'https://cosmoscdn.9space.vip/image/artist.jpg', NULL, NULL, NULL, NULL, '管理员', NULL, '$2a$10$7njcGSDIvYuXKBQeAib8QuRmCxapTMMG/B3.qfUtBWgsDHQfvA91K', NULL, NULL, NULL, 'admin', b'0', NULL, 0, 0, NULL, 'SUCCESS', NULL, NULL, NULL, NULL, 0, NULL, b'1', 5.00, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, b'0');
+
+-- ----------------------------
+-- Table structure for user_address
+-- ----------------------------
+
+CREATE TABLE `user_address`  (
+                                 `id` bigint NOT NULL,
+                                 `created_at` datetime NULL DEFAULT NULL,
+                                 `created_by` varchar(255)  NULL DEFAULT NULL,
+                                 `del` bit(1) NOT NULL,
+                                 `modified_at` datetime NULL DEFAULT NULL,
+                                 `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                 `address` varchar(255)  NULL DEFAULT NULL,
+                                 `city_id` varchar(255)  NULL DEFAULT NULL,
+                                 `city_name` varchar(255)  NULL DEFAULT NULL,
+                                 `def` bit(1) NOT NULL,
+                                 `district_id` bigint NULL DEFAULT NULL,
+                                 `district_name` varchar(255)  NULL DEFAULT NULL,
+                                 `name` varchar(255)  NULL DEFAULT NULL,
+                                 `phone` varchar(255)  NULL DEFAULT NULL,
+                                 `province_id` bigint NULL DEFAULT NULL,
+                                 `province_name` varchar(255)  NULL DEFAULT NULL,
+                                 `user_id` bigint NULL DEFAULT NULL,
+                                 PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of user_address
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for user_authority
+-- ----------------------------
+
+CREATE TABLE `user_authority`  (
+                                   `user_id` bigint NOT NULL,
+                                   `authority_name` varchar(50)  NOT NULL,
+                                   PRIMARY KEY (`user_id`, `authority_name`) USING BTREE,
+                                   INDEX `idx_authorityname`(`authority_name`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of user_authority
+-- ----------------------------
+INSERT INTO `user_authority` VALUES (1, 'ROLE_ADMIN');
+
+
+-- ----------------------------
+-- Table structure for user_bank_card
+-- ----------------------------
+
+CREATE TABLE `user_bank_card`  (
+                                   `id` bigint NOT NULL,
+                                   `created_at` datetime NULL DEFAULT NULL,
+                                   `created_by` varchar(255)  NULL DEFAULT NULL,
+                                   `del` bit(1) NOT NULL,
+                                   `modified_at` datetime NULL DEFAULT NULL,
+                                   `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                   `bank` varchar(255)  NULL DEFAULT NULL,
+                                   `bank_name` varchar(255)  NULL DEFAULT NULL,
+                                   `bank_no` varchar(255)  NULL DEFAULT NULL,
+                                   `card_type` varchar(255)  NULL DEFAULT NULL,
+                                   `card_type_desc` varchar(255)  NULL DEFAULT NULL,
+                                   `user_id` bigint NULL DEFAULT NULL,
+                                   `phone` varchar(255)  NULL DEFAULT NULL,
+                                   `id_no` varchar(255)  NULL DEFAULT NULL,
+                                   `real_name` varchar(255)  NULL DEFAULT NULL,
+                                   `pay_platform` varchar(255)  NULL DEFAULT NULL,
+                                   `bind_order_no` varchar(255)  NULL DEFAULT NULL,
+                                   `third_account_id` varchar(255)  NULL DEFAULT NULL,
+                                   `third_bank_id` varchar(255)  NULL DEFAULT NULL,
+                                   `token` varchar(255)  NULL DEFAULT NULL,
+                                   `unbind_order_no` varchar(255)  NULL DEFAULT NULL,
+                                   PRIMARY KEY (`id`) USING BTREE,
+                                   UNIQUE INDEX `UK32pokndfety4yl5talcj81fqd`(`bind_order_no`) USING BTREE,
+                                   UNIQUE INDEX `UKaq28ndgn3ackirsqwoe0vs5q9`(`unbind_order_no`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of user_bank_card
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for user_coupon
+-- ----------------------------
+
+CREATE TABLE `user_coupon`  (
+                                `id` bigint NOT NULL,
+                                `created_at` datetime NULL DEFAULT NULL,
+                                `created_by` varchar(255)  NULL DEFAULT NULL,
+                                `del` bit(1) NOT NULL,
+                                `modified_at` datetime NULL DEFAULT NULL,
+                                `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                `collection_ids` text  NULL,
+                                `coupon_id` bigint NULL DEFAULT NULL,
+                                `expiration` datetime NULL DEFAULT NULL,
+                                `limited` bit(1) NOT NULL,
+                                `name` varchar(255)  NULL DEFAULT NULL,
+                                `need_gas` bit(1) NOT NULL,
+                                `remark` varchar(255)  NULL DEFAULT NULL,
+                                `use_time` datetime NULL DEFAULT NULL,
+                                `used` bit(1) NOT NULL,
+                                `user_id` bigint NULL DEFAULT NULL,
+                                `project_id` int NOT NULL,
+                                PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of user_coupon
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for user_fund_account
+-- ----------------------------
+
+CREATE TABLE `user_fund_account`  (
+                                      `id` bigint NOT NULL,
+                                      `created_at` datetime NULL DEFAULT NULL,
+                                      `created_by` varchar(255)  NULL DEFAULT NULL,
+                                      `del` bit(1) NOT NULL,
+                                      `modified_at` datetime NULL DEFAULT NULL,
+                                      `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                      `account_name` varchar(255)  NULL DEFAULT NULL,
+                                      `account_no` varchar(255)  NULL DEFAULT NULL,
+                                      `account_type` int NULL DEFAULT NULL,
+                                      `primary_flag` bit(1) NOT NULL,
+                                      `user_id` bigint NULL DEFAULT NULL,
+                                      `account_error` varchar(255)  NULL DEFAULT NULL,
+                                      `account_status` varchar(255)  NULL DEFAULT NULL,
+                                      `apply_time` datetime NULL DEFAULT NULL,
+                                      `cancel_time` datetime NULL DEFAULT NULL,
+                                      `gateway_url` varchar(255)  NULL DEFAULT NULL,
+                                      `notify_time` datetime NULL DEFAULT NULL,
+                                      `order_no` varchar(255)  NULL DEFAULT NULL,
+                                      `register_phone` varchar(255)  NULL DEFAULT NULL,
+                                      `third_bank_id` varchar(255)  NULL DEFAULT NULL,
+                                      `third_bank_no` varchar(255)  NULL DEFAULT NULL,
+                                      `third_user_id` varchar(255)  NULL DEFAULT NULL,
+                                      `token` varchar(255)  NULL DEFAULT NULL,
+                                      `user_bank_card_id` bigint NULL DEFAULT NULL,
+                                      PRIMARY KEY (`id`) USING BTREE,
+                                      UNIQUE INDEX `UKh4qaf1er9y2o8c56biv04l7i4`(`user_id`, `account_type`) USING BTREE,
+                                      UNIQUE INDEX `UKbvvdcin4b42eud8986s82j32c`(`order_no`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of user_fund_account
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for user_fund_change_log
+-- ----------------------------
+
+CREATE TABLE `user_fund_change_log`  (
+                                         `id` bigint NOT NULL,
+                                         `created_at` datetime NULL DEFAULT NULL,
+                                         `created_by` varchar(255)  NULL DEFAULT NULL,
+                                         `del` bit(1) NOT NULL,
+                                         `modified_at` datetime NULL DEFAULT NULL,
+                                         `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                         `amount` decimal(19, 2) NULL DEFAULT NULL,
+                                         `change_type` varchar(255)  NULL DEFAULT NULL,
+                                         `description` varchar(255)  NULL DEFAULT NULL,
+                                         `finish_time` datetime NULL DEFAULT NULL,
+                                         `order_no` varchar(255)  NULL DEFAULT NULL,
+                                         `order_time` datetime NULL DEFAULT NULL,
+                                         `status` varchar(255)  NULL DEFAULT NULL,
+                                         `user_fund_account_id` bigint NULL DEFAULT NULL,
+                                         `user_id` bigint NULL DEFAULT NULL,
+                                         PRIMARY KEY (`id`) USING BTREE,
+                                         INDEX `IDXq5lnsfc0dx6oitvn15y58eu5k`(`user_id`) USING BTREE,
+                                         INDEX `IDXe2e5d84e45cfoqlg4gr5hkea`(`order_no`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of user_fund_change_log
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for user_token
+-- ----------------------------
+
+CREATE TABLE `user_token`  (
+                               `id` bigint NOT NULL,
+                               `created_at` datetime NULL DEFAULT NULL,
+                               `created_by` varchar(255)  NULL DEFAULT NULL,
+                               `del` bit(1) NOT NULL,
+                               `modified_at` datetime NULL DEFAULT NULL,
+                               `modified_by` varchar(255)  NULL DEFAULT NULL,
+                               `token` varchar(255)  NULL DEFAULT NULL,
+                               `user_id` bigint NULL DEFAULT NULL,
+                               PRIMARY KEY (`id`) USING BTREE,
+                               INDEX `IDX6dm5bsjbr1sablsdk0lk66oap`(`user_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of user_token
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for user_ware_house
+-- ----------------------------
+
+CREATE TABLE `user_ware_house`  (
+                                    `id` bigint NOT NULL,
+                                    `created_at` datetime NULL DEFAULT NULL,
+                                    `created_by` varchar(255)  NULL DEFAULT NULL,
+                                    `del` bit(1) NOT NULL,
+                                    `modified_at` datetime NULL DEFAULT NULL,
+                                    `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                    `item_id` int NULL DEFAULT NULL,
+                                    `item_name` varchar(255)  NULL DEFAULT NULL,
+                                    `activity_priority_document_id` bigint NULL DEFAULT NULL,
+                                    `advance_purchase_count` int NOT NULL,
+                                    `advance_purchase_time` int NOT NULL,
+                                    `asset_id` bigint NULL DEFAULT NULL,
+                                    `disabled` bit(1) NOT NULL,
+                                    `minter_id` bigint NULL DEFAULT NULL,
+                                    `name` varchar(255)  NULL DEFAULT NULL,
+                                    `overdue_time` datetime NULL DEFAULT NULL,
+                                    `phone` varchar(255)  NULL DEFAULT NULL,
+                                    `project_id` int NOT NULL,
+                                    `target_collection_id` bigint NULL DEFAULT NULL,
+                                    `target_collection_id_list` text  NULL,
+                                    `text` varchar(255)  NULL DEFAULT NULL,
+                                    `user_id` bigint NULL DEFAULT NULL,
+                                    PRIMARY KEY (`id`) USING BTREE,
+                                    INDEX `IDXm4xypqxvrbnpb7ndy4epadi1s`(`user_id`) USING BTREE,
+                                    INDEX `IDX6n4nxr0a5jcfgunvxac151dk0`(`item_name`) USING BTREE,
+                                    INDEX `IDX3nwmjd7wmd5naiu3uv0p7y6v5`(`item_id`) USING BTREE,
+                                    INDEX `IDXrdg8wnrps48qslmhregj3bf8n`(`asset_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of user_ware_house
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for withdraw_apply
+-- ----------------------------
+
+CREATE TABLE `withdraw_apply`  (
+                                   `id` bigint NOT NULL,
+                                   `created_at` datetime NULL DEFAULT NULL,
+                                   `created_by` varchar(255)  NULL DEFAULT NULL,
+                                   `del` bit(1) NOT NULL,
+                                   `modified_at` datetime NULL DEFAULT NULL,
+                                   `modified_by` varchar(255)  NULL DEFAULT NULL,
+                                   `amount` decimal(19, 2) NULL DEFAULT NULL,
+                                   `auth_way` varchar(255)  NULL DEFAULT NULL,
+                                   `bank_name` varchar(255)  NULL DEFAULT NULL,
+                                   `bank_no` varchar(255)  NULL DEFAULT NULL,
+                                   `fee_amt` decimal(19, 2) NULL DEFAULT NULL,
+                                   `finish_time` datetime NULL DEFAULT NULL,
+                                   `front_url` varchar(255)  NULL DEFAULT NULL,
+                                   `jump_url` varchar(255)  NULL DEFAULT NULL,
+                                   `notify_time` datetime NULL DEFAULT NULL,
+                                   `notify_url` varchar(255)  NULL DEFAULT NULL,
+                                   `order_amount` decimal(19, 2) NULL DEFAULT NULL,
+                                   `order_no` varchar(255)  NULL DEFAULT NULL,
+                                   `pay_platform` varchar(255)  NULL DEFAULT NULL,
+                                   `related_card_no` varchar(255)  NULL DEFAULT NULL,
+                                   `result` varchar(255)  NULL DEFAULT NULL,
+                                   `status` varchar(255)  NULL DEFAULT NULL,
+                                   `title` varchar(255)  NULL DEFAULT NULL,
+                                   `token` varchar(255)  NULL DEFAULT NULL,
+                                   `transaction_id` varchar(255)  NULL DEFAULT NULL,
+                                   `user_bank_card_id` bigint NULL DEFAULT NULL,
+                                   `user_fee_amt` decimal(19, 2) NULL DEFAULT NULL,
+                                   `user_fund_account_id` bigint NULL DEFAULT NULL,
+                                   `user_id` bigint NULL DEFAULT NULL,
+                                   PRIMARY KEY (`id`) USING BTREE,
+                                   INDEX `IDXqoekq1jkrchw3har5rc4jlyye`(`user_id`) USING BTREE,
+                                   INDEX `IDXhnx0c67tcocbtjq1nsvmpypce`(`order_no`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 ;
+
+-- ----------------------------
+-- Records of withdraw_apply
+-- ----------------------------
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 10 - 0
install-jar.sh

@@ -0,0 +1,10 @@
+
+mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -DgroupId=org.libjpegturbo -DartifactId=mozjpeg4j -Dpackaging=jar -Dversion=1.1 -Dfile=lib/mozjpeg4j-1.1.jar
+
+mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -DgroupId=org.pngquant -DartifactId=pngquant4j -Dpackaging=jar -Dversion=1.0.1 -Dfile=lib/pngquant4j-1.0.1.jar
+
+mvn install:install-file -DgroupId=com.antfinancial.baas -DartifactId=mychain-rest-lib -Dpackaging=jar -Dversion=0.10.2.11 -Dfile=lib/mychain-rest-client-0.10.2.11-with-dependencies.jar
+
+mvn install:install-file -DgroupId=com.alipay.mychainx -DartifactId=mychainx-sdk -Dpackaging=jar -Dversion=0.10.2.9 -Dfile=lib/mychainx-java-sdk-0.10.2.9-with-dependencies.jar
+
+mvn install:install-file -DgroupId=api.integration.merchant -DartifactId=api-core -Dpackaging=jar -Dversion=0.0.1 -Dfile=lib/merchant-integration-api-core-0.0.1.jar

BIN
lib/merchant-integration-api-core.jar


BIN
lib/mozjpeg4j-1.1.jar


BIN
lib/mychain-rest-client-0.10.2.11-with-dependencies.jar


BIN
lib/mychainx-java-sdk-0.10.2.9-with-dependencies.jar


BIN
lib/pngquant4j-1.0.1.jar


+ 472 - 0
pom.xml

@@ -0,0 +1,472 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.3.2.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.izouma</groupId>
+    <artifactId>9th</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>9th</name>
+    <description>9th</description>
+
+    <repositories>
+        <repository>
+            <id>nexus-aliyun</id>
+            <url>https://maven.aliyun.com/repository/central</url>
+        </repository>
+<!--        <repository>-->
+<!--            <id>Local repository</id>-->
+<!--            <url>file://${basedir}/libs</url>-->
+<!--        </repository>-->
+        <repository>
+            <id>jitpack.io</id>
+            <url>https://jitpack.io</url>
+        </repository>
+
+        <repository>
+            <id>getui-nexus</id>
+            <url>https://proxymvn.9space.vip/nexus/content/repositories/releases</url>
+        </repository>
+
+    </repositories>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <skipTests>true</skipTests>
+        <poi.verion>3.17</poi.verion>
+        <javawx.version>3.5.0</javawx.version>
+        <aliyun.oss.version>2.8.3</aliyun.oss.version>
+        <aliyun.core.version>4.1.0</aliyun.core.version>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <includeSystemScope>true</includeSystemScope>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>9</source>
+                    <target>9</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-activemq</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-cache</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-redis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.lettuce</groupId>
+            <artifactId>lettuce-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.retry</groupId>
+            <artifactId>spring-retry</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-aspects</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-envers</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+            <version>1.9.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-text</artifactId>
+            <version>1.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>annotations</artifactId>
+            <version>3.0.1</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-mp</artifactId>
+            <version>${javawx.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-miniapp</artifactId>
+            <version>${javawx.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-pay</artifactId>
+            <version>${javawx.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-open</artifactId>
+            <version>${javawx.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+            <version>${aliyun.oss.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>${aliyun.core.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.kevinsawicki</groupId>
+            <artifactId>http-request</artifactId>
+            <version>6.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>${poi.verion}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>${poi.verion}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib</artifactId>
+            <version>3.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>2.2.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.reflections</groupId>
+            <artifactId>reflections</artifactId>
+            <version>0.9.11</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity</artifactId>
+            <version>1.7</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-tools</artifactId>
+            <version>2.0</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j -->
+        <dependency>
+            <groupId>com.belerweb</groupId>
+            <artifactId>pinyin4j</artifactId>
+            <version>2.5.1</version>
+        </dependency>
+        <!-- swagger -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.9.1</version>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.9.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-freemarker</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.83</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.ning</groupId>
+            <artifactId>async-http-client</artifactId>
+            <version>1.9.32</version>
+        </dependency>
+        <!-- 钉钉 -->
+
+        <dependency>
+            <groupId>com.github.whvcse</groupId>
+            <artifactId>easy-captcha</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.libjpegturbo</groupId>
+            <artifactId>mozjpeg4j</artifactId>
+            <version>1.1</version>
+            <scope>system</scope>
+            <systemPath>${basedir}/lib/mozjpeg4j-1.1.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>org.pngquant</groupId>
+            <artifactId>pngquant4j</artifactId>
+            <version>1.0.1</version>
+            <scope>system</scope>
+            <systemPath>${basedir}/lib/pngquant4j-1.0.1.jar</systemPath>
+        </dependency>
+
+        <dependency>
+            <groupId>com.antfinancial.baas</groupId>
+            <artifactId>mychain-rest-lib</artifactId>
+            <version>0.10.2.11</version>
+            <scope>system</scope>
+            <systemPath>${basedir}/lib/mychain-rest-client-0.10.2.11-with-dependencies.jar</systemPath>
+        </dependency>
+
+
+
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-all</artifactId>
+            <version>4.1.29.Final</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-tcnative-boringssl-static</artifactId>
+            <version>2.0.17.Final</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>20.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alipay.sdk</groupId>
+            <artifactId>alipay-sdk-java</artifactId>
+            <version>4.16.57.ALL</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.ipfs</groupId>
+            <artifactId>java-ipfs-http-client</artifactId>
+            <version>v1.3.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.javafaker</groupId>
+            <artifactId>javafaker</artifactId>
+            <version>1.0.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.bytedeco</groupId>
+            <artifactId>javacv-platform</artifactId>
+            <version>1.5.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-hibernate5</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-hibernate4</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <version>0.4.14</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.huifu.adapay.core</groupId>
+            <artifactId>adapay-core-sdk</artifactId>
+            <version>1.2.10</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.huifu.adapay</groupId>
+            <artifactId>adapay-java-sdk</artifactId>
+            <version>1.2.10</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>1.2.8</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.rocketmq</groupId>
+            <artifactId>rocketmq-spring-boot-starter</artifactId>
+            <version>2.2.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-validator</groupId>
+            <artifactId>commons-validator</artifactId>
+            <version>1.7</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-core</artifactId>
+            <version>5.7.21</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.anji-plus</groupId>
+            <artifactId>captcha</artifactId>
+            <version>1.2.9</version>
+        </dependency>
+
+        <dependency>
+            <groupId>eu.bitwalker</groupId>
+            <artifactId>UserAgentUtils</artifactId>
+            <version>1.21</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.gexin.platform</groupId>
+            <artifactId>gexin-rp-sdk-http</artifactId>
+            <version>4.1.2.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>api.integration.merchant</groupId>
+            <artifactId>api-core</artifactId>
+            <version>0.0.1</version>
+            <scope>system</scope>
+            <systemPath>${basedir}/lib/merchant-integration-api-core.jar</systemPath>
+        </dependency>
+    </dependencies>
+
+</project>

+ 25 - 0
src/main/java/com/izouma/nineth/Application.java

@@ -0,0 +1,25 @@
+package com.izouma.nineth;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.retry.annotation.EnableRetry;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@SpringBootApplication
+@EnableJpaAuditing
+@EnableSwagger2
+@EnableCaching
+@EnableScheduling
+@EnableAsync
+@EnableRetry
+public class Application {
+
+    public static void main(String[] args) {
+        SpringApplication.run(Application.class, args);
+    }
+
+}

+ 12 - 0
src/main/java/com/izouma/nineth/annotations/Debounce.java

@@ -0,0 +1,12 @@
+package com.izouma.nineth.annotations;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Debounce {
+    String key();
+
+    long delay() default 200L;
+}

+ 14 - 0
src/main/java/com/izouma/nineth/annotations/MobileRestController.java

@@ -0,0 +1,14 @@
+package com.izouma.nineth.annotations;
+
+import java.lang.annotation.*;
+
+/**
+ * 移动端接口标记
+ *
+ */
+@Target(ElementType.PACKAGE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface   MobileRestController {
+
+}

+ 13 - 0
src/main/java/com/izouma/nineth/annotations/NoLoginRestController.java

@@ -0,0 +1,13 @@
+package com.izouma.nineth.annotations;
+
+import java.lang.annotation.*;
+
+/**
+ * 无需登录标记
+ */
+@Target(ElementType.PACKAGE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface NoLoginRestController {
+
+}

+ 14 - 0
src/main/java/com/izouma/nineth/annotations/OperLog.java

@@ -0,0 +1,14 @@
+package com.izouma.nineth.annotations;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface OperLog {
+    String value() default "";
+
+    String type() default "";
+
+    String desc() default "";
+}

+ 12 - 0
src/main/java/com/izouma/nineth/annotations/Searchable.java

@@ -0,0 +1,12 @@
+package com.izouma.nineth.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Searchable {
+    boolean value() default true;
+}

+ 22 - 0
src/main/java/com/izouma/nineth/aspect/CipherParam.java

@@ -0,0 +1,22 @@
+package com.izouma.nineth.aspect;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 解密数据参数标识
+ *
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.PARAMETER)
+public @interface CipherParam {
+
+    /**
+     * false 表示解密,true 表示加密
+     * @return
+     */
+    boolean mode() default false;
+
+}

+ 71 - 0
src/main/java/com/izouma/nineth/aspect/DebounceAspect.java

@@ -0,0 +1,71 @@
+package com.izouma.nineth.aspect;
+
+import com.izouma.nineth.annotations.Debounce;
+import com.izouma.nineth.aspect.debounce.DebounceTask;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.core.DefaultParameterNameDiscoverer;
+import org.springframework.expression.EvaluationContext;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+@Aspect
+@Component
+@Slf4j
+public class DebounceAspect {
+
+    private DefaultParameterNameDiscoverer nameDiscoverer  = new DefaultParameterNameDiscoverer();
+    private HashMap<String, Future<Void>>  debounceStore   = new HashMap<>();
+    private ScheduledExecutorService       executorService = Executors.newScheduledThreadPool(10);
+    private Map<String, Long>              debounceCounter = new HashMap<>();
+
+    @Pointcut("@annotation(com.izouma.nineth.annotations.Debounce)")
+    public void debouncePointCut() {
+    }
+
+    @Around(value = "debouncePointCut() && @annotation(debounce)")
+    public synchronized void debounce(ProceedingJoinPoint joinPoint, Debounce debounce) {
+        ExpressionParser parser = new SpelExpressionParser();
+        EvaluationContext context = new StandardEvaluationContext(joinPoint.getSignature());
+        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
+        Method method = methodSignature.getMethod();
+        String[] paramNames = nameDiscoverer.getParameterNames(method);
+        Object[] args = joinPoint.getArgs();
+        for (int i = 0; i < args.length; i++) {
+            context.setVariable(paramNames[i], args[i]);
+        }
+        String key = Optional.ofNullable(parser.parseExpression(debounce.key()).getValue(context)).map(Object::toString)
+                .orElse("default");
+
+        Future<Void> future = debounceStore.get(key);
+        long lastRun = debounceCounter.getOrDefault(key, 0L);
+        if (future != null && !future.isDone()) {
+            if (System.currentTimeMillis() - lastRun > debounce.delay()) {
+                debounceCounter.put(key, System.currentTimeMillis());
+            } else {
+                future.cancel(false);
+            }
+        }
+        debounceStore.put(key, executorService.schedule(new DebounceTask(joinPoint, (Void) -> {
+            debounceCounter.put(key, System.currentTimeMillis());
+            return null;
+        }), debounce.delay(), TimeUnit.MILLISECONDS));
+
+    }
+
+}

+ 16 - 0
src/main/java/com/izouma/nineth/aspect/RequestCipher.java

@@ -0,0 +1,16 @@
+package com.izouma.nineth.aspect;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 解密数据方法标识
+ *
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface RequestCipher {
+
+}

+ 92 - 0
src/main/java/com/izouma/nineth/aspect/RequestCipherInterceptor.java

@@ -0,0 +1,92 @@
+package com.izouma.nineth.aspect;
+
+import com.anji.captcha.util.StringUtils;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.service.security.RequestCipherService;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.aop.support.AopUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.stereotype.Component;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.Objects;
+
+/**
+ *
+ * 加解密处理
+ *
+ */
+@Aspect
+@Component
+@Slf4j
+public class RequestCipherInterceptor {
+
+    private static final LocalVariableTableParameterNameDiscoverer DISCOVERER = new LocalVariableTableParameterNameDiscoverer();
+
+    private static final ExpressionParser PARSER = new SpelExpressionParser();
+
+    @Autowired
+    private RequestCipherService requestCipherService;
+
+    @Pointcut("@annotation(com.izouma.nineth.aspect.RequestCipher)")
+    public void pointcut() {
+    }
+
+    @Around("pointcut()")
+    public Object doAround(ProceedingJoinPoint point) throws Throwable {
+
+        MethodSignature methodSignature = (MethodSignature) point.getSignature();
+        Method targetMethod = AopUtils.getMostSpecificMethod(methodSignature.getMethod(), point.getTarget().getClass());
+        String targetName = point.getTarget().getClass().getName();
+        String methodName = point.getSignature().getName();
+        Object[] arguments = point.getArgs();
+
+        boolean hasProcess = false;
+        Annotation[][] annotations = targetMethod.getParameterAnnotations();
+        for(int i = 0 ; i < annotations.length; i++){
+            Annotation[] itemAry  =  annotations[i];
+            //加密或解密参数
+            for(Annotation item : itemAry){
+                if(item instanceof CipherParam){
+                    CipherParam cipherParam = (CipherParam) item;
+                    Object res = null;
+                    String cipherData = Objects.toString(arguments[i], "");
+                    if(StringUtils.isEmpty(cipherData)){
+                        throw new BusinessException("密文不能为空");
+                    }
+
+                    if(cipherParam.mode()){
+                        res = requestCipherService.encryptData(cipherData);
+                    }else{
+                        res = requestCipherService.decryptData(cipherData);
+                    }
+                    //设置处理后的数据
+                    arguments[i] = res;
+                    hasProcess = true;
+                }
+            }
+
+        }
+
+        //如果没有标记处理,默认处理第一个
+        if(!hasProcess && arguments.length > 0){
+            //默认解密操作
+            Object res = requestCipherService.decryptData(Objects.toString(arguments[0], ""));
+            arguments[0] = res;
+        }
+
+        Object result = point.proceed(arguments);
+        return result;
+    }
+
+
+}

+ 33 - 0
src/main/java/com/izouma/nineth/aspect/debounce/DebounceTask.java

@@ -0,0 +1,33 @@
+package com.izouma.nineth.aspect.debounce;
+
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+
+import java.util.concurrent.Callable;
+import java.util.function.Function;
+
+@Slf4j
+public class DebounceTask implements Callable<Void> {
+    private final ProceedingJoinPoint  joinPoint;
+    private final Function<Void, Void> callback;
+
+    public DebounceTask(ProceedingJoinPoint joinPoint, Function<Void, Void> callback) {
+        this.joinPoint = joinPoint;
+        this.callback = callback;
+    }
+
+    @Override
+    public Void call() throws Exception {
+        try {
+            this.joinPoint.proceed();
+            if (this.callback != null) {
+                this.callback.apply(null);
+            }
+        } catch (Throwable e) {
+            e.printStackTrace();
+        }
+
+        return null;
+
+    }
+}

+ 34 - 0
src/main/java/com/izouma/nineth/config/AdapayConfig.java

@@ -0,0 +1,34 @@
+package com.izouma.nineth.config;
+
+import com.huifu.adapay.Adapay;
+import com.huifu.adapay.model.MerConfig;
+import lombok.AllArgsConstructor;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+
+@Configuration
+@AllArgsConstructor
+@EnableConfigurationProperties({AdapayProperties.class})
+public class AdapayConfig {
+    private final AdapayProperties adapayProperties;
+
+    @PostConstruct
+    public void init() {
+        Adapay.debug = adapayProperties.isDebug();
+        Adapay.prodMode = adapayProperties.isProd();
+
+        MerConfig merConfig = new MerConfig();
+        merConfig.setApiKey(adapayProperties.getApiKey());
+        merConfig.setApiMockKey(adapayProperties.getMockKey());
+        merConfig.setRSAPrivateKey(adapayProperties.getPrivKey());
+        merConfig.setRSAPublicKey(adapayProperties.getPublicKey());
+        Adapay.publicKey = adapayProperties.getAppPublicKey();
+        try {
+            Adapay.initWithMerConfig(merConfig);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 21 - 0
src/main/java/com/izouma/nineth/config/AdapayProperties.java

@@ -0,0 +1,21 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Data
+@ConfigurationProperties(prefix = "adapay")
+public class AdapayProperties {
+    private String  merchant;
+    private String  appId;
+    private boolean debug;
+    private boolean prod;
+    private String  apiKey;
+    private String  mockKey;
+    private String  publicKey;
+    private String  privKey;
+    private String  appPublicKey;
+    private String  wxAppId;
+    //通知地址由代码生成
+//    private String  notifyUrl;
+}

+ 33 - 0
src/main/java/com/izouma/nineth/config/AlipayConfig.java

@@ -0,0 +1,33 @@
+package com.izouma.nineth.config;
+
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import lombok.AllArgsConstructor;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@AllArgsConstructor
+@Configuration
+@EnableConfigurationProperties({AlipayProperties.class})
+public class AlipayConfig {
+    private final AlipayProperties properties;
+
+    @Bean
+    public AlipayClient alipayClient() {
+        com.alipay.api.AlipayConfig config = new com.alipay.api.AlipayConfig();
+        config.setAppId(properties.getAppId());
+        config.setPrivateKey(properties.getPrivateKey());
+        config.setAlipayPublicKey(properties.getAliPublicKey());
+        //config.setSignType("RSA2");
+        AlipayClient alipayClient = null;
+        try {
+            alipayClient = new DefaultAlipayClient(config);
+        } catch (AlipayApiException e) {
+            e.printStackTrace();
+        }
+
+        return alipayClient;
+    }
+}

+ 20 - 0
src/main/java/com/izouma/nineth/config/AlipayProperties.java

@@ -0,0 +1,20 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Data
+@ConfigurationProperties(prefix = "alipay")
+public class AlipayProperties {
+    private String appId;
+    private String gateway;
+    private String privateKey;
+    private String appPublicKey;
+    private String aliPublicKey;
+    private String apiKey;
+    private String appCertPath;
+    private String aliPubCertPath;
+    private String rootCertPath;
+//    private String notifyUrl;
+//    private String returnUrl;
+}

+ 48 - 0
src/main/java/com/izouma/nineth/config/AliyunProperties.java

@@ -0,0 +1,48 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 阿里云配置汇总
+ *
+ */
+@ConfigurationProperties(prefix = "aliyun")
+@Data
+@Component
+public class AliyunProperties {
+
+    private String accessKeyId;
+
+    private String accessKeySecret;
+
+    private String ossBucketName;
+
+    private String ossEndPoint;
+
+    private String ossDomain;
+
+    /**
+     * 短信密钥id
+     */
+    private String smsAccessKeyId = "LTAI5tEL3wr9XeiyseqKLrEK";
+
+    /**
+     * 短信密钥值
+     */
+    private String smsAccessKeySecret = "I9JzOThjzeJMcpVf6melaMY3nt7ucU";
+
+    /**
+     * 短信签名
+     */
+    private String smsSign = "身份验证";
+
+    /**
+     * 短信模板
+     */
+    private String smsCode = "SMS_11685095";
+
+
+
+}

+ 78 - 0
src/main/java/com/izouma/nineth/config/CacheConfig.java

@@ -0,0 +1,78 @@
+package com.izouma.nineth.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration;
+import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.cache.RedisCacheWriter;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializationContext;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+import java.time.Duration;
+
+
+@Configuration
+@AutoConfigureAfter({RedisAutoConfiguration.class, CacheAutoConfiguration.class})
+@EnableRedisRepositories
+public class CacheConfig {
+
+    @Bean
+    RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+
+        RedisTemplate<String, Object> template = new RedisTemplate<>();
+        template.setConnectionFactory(redisConnectionFactory);
+
+        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
+        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Object.class);
+
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
+                ObjectMapper.DefaultTyping.NON_FINAL,
+                JsonTypeInfo.As.WRAPPER_ARRAY);
+        mapper.registerModule(new Hibernate5Module()
+                .enable(Hibernate5Module.Feature.FORCE_LAZY_LOADING));
+        mapper.registerModule(new JavaTimeModule());
+        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+        mapper.setConfig(mapper.getSerializationConfig().withView(RedisView.class));
+
+        serializer.setObjectMapper(mapper);
+
+        template.setValueSerializer(serializer);
+        //使用StringRedisSerializer来序列化和反序列化redis的key值
+        template.setKeySerializer(new StringRedisSerializer());
+        template.setHashKeySerializer(new StringRedisSerializer());
+        template.setHashValueSerializer(serializer);
+        template.afterPropertiesSet();
+        return template;
+    }
+
+    @Bean
+    public RedisCacheManager redisCacheManager(RedisTemplate redisTemplate) {
+        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory());
+        RedisSerializationContext.SerializationPair serializationPair = RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer());
+        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
+        //一般缓存,需要控制时长,防止一直缓存
+        redisCacheConfiguration = redisCacheConfiguration.entryTtl(Duration.ofDays(1));
+        redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(serializationPair);
+
+        //自定义缓存定义方式,可控制失效时长
+        return new CustomRedisCacheManager(redisCacheWriter, redisCacheConfiguration);
+    }
+
+}

+ 100 - 0
src/main/java/com/izouma/nineth/config/CaptchaConfig.java

@@ -0,0 +1,100 @@
+package com.izouma.nineth.config;
+
+import com.anji.captcha.model.common.Const;
+import com.anji.captcha.service.CaptchaCacheService;
+import com.anji.captcha.service.CaptchaService;
+import com.anji.captcha.service.impl.CaptchaServiceFactory;
+import com.anji.captcha.util.ImageUtils;
+import com.anji.captcha.util.StringUtils;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.DependsOn;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.util.Base64Utils;
+import org.springframework.util.FileCopyUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+@Configuration
+public class CaptchaConfig {
+
+//    @Bean(name = "AjCaptchaCacheService")
+//    public CaptchaCacheService captchaCacheService() {
+//        //缓存类型redis/local/....
+//        return CaptchaServiceFactory.getCache("local");
+//    }
+
+    @Bean
+    @DependsOn("AjCaptchaCacheService")
+    public CaptchaService captchaService(List<CaptchaCacheService> cacheServiceList) {
+        cacheServiceList.forEach(cacheService -> {
+            CaptchaServiceFactory.cacheService.put(cacheService.type(), cacheService);
+        });
+
+        Properties config = new Properties();
+//        try {
+//            try (InputStream input = CaptchaConfig.class.getClassLoader()
+//                    .getResourceAsStream("application.properties")) {
+//                config.load(input);
+//            }
+//        }catch (Exception ex){
+//            ex.printStackTrace();
+//        }
+        //各种参数设置....
+        //缓存类型redis/local/....
+        //config.put(Const.CAPTCHA_CACHETYPE, "local");
+        config.put(Const.CAPTCHA_CACHETYPE, "redis");
+        config.put(Const.CAPTCHA_WATER_MARK, "我的水印");
+        config.put(Const.CAPTCHA_FONT_TYPE, "宋体");
+        config.put(Const.CAPTCHA_TYPE, "default");
+        config.put(Const.CAPTCHA_INTERFERENCE_OPTIONS, "0");
+        config.put(Const.ORIGINAL_PATH_JIGSAW, "");
+        config.put(Const.ORIGINAL_PATH_PIC_CLICK, "");
+        config.put(Const.CAPTCHA_SLIP_OFFSET, "5");
+        config.put(Const.CAPTCHA_AES_STATUS, "true");
+        config.put(Const.CAPTCHA_WATER_FONT, "宋体");
+        config.put(Const.CAPTCHA_CACAHE_MAX_NUMBER, "1000");
+        config.put(Const.CAPTCHA_TIMING_CLEAR_SECOND, "180");
+        //更多自定义参数,请参考service/springboot/../resources/application.properties
+        if ((StringUtils.isNotBlank(config.getProperty(Const.ORIGINAL_PATH_JIGSAW))
+                && config.getProperty(Const.ORIGINAL_PATH_JIGSAW).startsWith("classpath:"))
+                || (StringUtils.isNotBlank(config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK))
+                && config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK).startsWith("classpath:"))) {
+            //自定义resources目录下初始化底图
+            config.put(Const.CAPTCHA_INIT_ORIGINAL, "true");
+            initializeBaseMap(config.getProperty(Const.ORIGINAL_PATH_JIGSAW),
+                    config.getProperty(Const.ORIGINAL_PATH_PIC_CLICK));
+        }
+        CaptchaService s = CaptchaServiceFactory.getInstance(config);
+        return s;
+    }
+
+    private static void initializeBaseMap(String jigsaw, String picClick) {
+        ImageUtils.cacheBootImage(getResourcesImagesFile(jigsaw + "/original/*.png"),
+                getResourcesImagesFile(jigsaw + "/slidingBlock/*.png"),
+                getResourcesImagesFile(picClick + "/*.png"));
+    }
+
+    public static Map<String, String> getResourcesImagesFile(String path) {
+        Map<String, String> imgMap = new HashMap<>();
+        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+        try {
+            Resource[] resources = resolver.getResources(path);
+            for (Resource resource : resources) {
+                byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream());
+                String string = Base64Utils.encodeToString(bytes);
+                String filename = resource.getFilename();
+                imgMap.put(filename, string);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return imgMap;
+    }
+
+}

+ 23 - 0
src/main/java/com/izouma/nineth/config/Constants.java

@@ -0,0 +1,23 @@
+package com.izouma.nineth.config;
+
+public interface Constants {
+
+    public interface Regex {
+        String PHONE    = "^1[3-9]\\d{9}$";
+        String USERNAME = "^[_.@A-Za-z0-9-]*$";
+        String CHINESE  = "^[\\u4e00-\\u9fa5]+$";
+        String ID_NO    = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{3}$|^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{3}[0-9xX]$";
+    }
+
+    String DEFAULT_AVATAR = "https://9space-2021.oss-cn-shenzhen.aliyuncs.com/image/2021-11-26-18-49-04fkFHRAhM.jpg";
+
+
+    String SMS_TOKEN_SECRET = "rjbcsj39s9mg9r";
+
+    /**
+     * 默认的黑洞用户,保存删除的资产
+     */
+    String DEFAULT_BLACK_USER = "-1";
+
+
+}

+ 52 - 0
src/main/java/com/izouma/nineth/config/CustomRedisCacheManager.java

@@ -0,0 +1,52 @@
+package com.izouma.nineth.config;
+
+import org.apache.commons.lang3.math.NumberUtils;
+import org.springframework.data.redis.cache.RedisCache;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.cache.RedisCacheWriter;
+
+import java.time.Duration;
+import java.util.Map;
+import java.util.Objects;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 自定义缓存管理(自定义失效时间)
+ */
+public class CustomRedisCacheManager extends RedisCacheManager {
+
+    private Pattern extractNumber = Pattern.compile("\\d+");
+
+
+    public CustomRedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) {
+        super(cacheWriter, defaultCacheConfiguration);
+    }
+
+    public CustomRedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration,
+                                   Map<String, RedisCacheConfiguration> initialCacheConfigurations) {
+        super(cacheWriter, defaultCacheConfiguration, initialCacheConfigurations, true);
+    }
+
+
+    @Override
+    protected RedisCache createRedisCache(String name, RedisCacheConfiguration cacheConfig) {
+        String[] array = name.split("#");
+        if (array.length > 1) {
+            // 解析TTL
+            String ttlValue = Objects.toString(array[1],"");
+            Matcher matcher = extractNumber.matcher(ttlValue);
+            if(matcher.find()){
+                Long seconds = NumberUtils.toLong(matcher.group());
+                if(seconds > 0){
+                    cacheConfig = cacheConfig.entryTtl(Duration.ofSeconds(seconds)); // 秒
+                }
+            }
+
+        }
+        return super.createRedisCache(name, cacheConfig);
+    }
+
+
+}

+ 148 - 0
src/main/java/com/izouma/nineth/config/DateConfig.java

@@ -0,0 +1,148 @@
+package com.izouma.nineth.config;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.convert.converter.Converter;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+
+@Configuration
+public class DateConfig {
+
+    /**
+     * 默认日期时间格式
+     */
+    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+    /**
+     * 默认日期格式
+     */
+    public static final String DEFAULT_DATE_FORMAT      = "yyyy-MM-dd";
+    /**
+     * 默认时间格式
+     */
+    public static final String DEFAULT_TIME_FORMAT      = "HH:mm:ss";
+
+    /**
+     * LocalDate转换器,用于转换RequestParam和PathVariable参数
+     */
+    @Bean
+    public Converter<String, LocalDate> localDateConverter() {
+        return new Converter<String, LocalDate>() {
+            @Override
+            public LocalDate convert(String source) {
+                return LocalDate.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT));
+            }
+        };
+    }
+
+    /**
+     * LocalDateTime转换器,用于转换RequestParam和PathVariable参数
+     */
+    @Bean
+    public Converter<String, LocalDateTime> localDateTimeConverter() {
+        return new Converter<String, LocalDateTime>() {
+            @Override
+            public LocalDateTime convert(String source) {
+                return LocalDateTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT));
+            }
+        };
+    }
+
+    /**
+     * LocalTime转换器,用于转换RequestParam和PathVariable参数
+     */
+    @Bean
+    public Converter<String, LocalTime> localTimeConverter() {
+        return new Converter<String, LocalTime>() {
+            @Override
+            public LocalTime convert(String source) {
+                return LocalTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT));
+            }
+        };
+    }
+
+    /**
+     * Date转换器,用于转换RequestParam和PathVariable参数
+     */
+    @Bean
+    public Converter<String, Date> dateConverter() {
+        return new Converter<String, Date>() {
+            @Override
+            public Date convert(String source) {
+                SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
+                try {
+                    return format.parse(source);
+                } catch (ParseException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        };
+    }
+
+
+    /**
+     * Json序列化和反序列化转换器,用于转换Post请求体中的json以及将我们的对象序列化为返回响应的json
+     */
+    @Bean
+    public ObjectMapper objectMapper() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+        objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
+
+        //LocalDateTime系列序列化和反序列化模块,继承自jsr310,我们在这里修改了日期格式
+        JavaTimeModule javaTimeModule = new JavaTimeModule();
+        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
+        javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
+        javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
+        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
+        javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
+        javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
+
+
+        //Date序列化和反序列化
+        javaTimeModule.addSerializer(Date.class, new JsonSerializer<Date>() {
+            @Override
+            public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+                SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
+                String formattedDate = formatter.format(date);
+                jsonGenerator.writeString(formattedDate);
+            }
+        });
+        javaTimeModule.addDeserializer(Date.class, new JsonDeserializer<Date>() {
+            @Override
+            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
+                String date = jsonParser.getText();
+                try {
+                    return format.parse(date);
+                } catch (ParseException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        });
+
+        objectMapper.registerModule(javaTimeModule);
+        return objectMapper;
+    }
+
+
+}
+

+ 5 - 0
src/main/java/com/izouma/nineth/config/EventNames.java

@@ -0,0 +1,5 @@
+package com.izouma.nineth.config;
+
+public class EventNames {
+    public final static String SWITCH_ACCOUNT = "switchAccount";
+}

+ 42 - 0
src/main/java/com/izouma/nineth/config/GeneralProperties.java

@@ -0,0 +1,42 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "general")
+@Data
+public class GeneralProperties {
+    private String  host;
+    private String  contractName;
+    private String  name;
+    private String  org;
+    private String  shortName;
+    private String  createOrderGroup;
+    private String  createOrderTopic;
+//    private String  updateStockGroup;
+//    private String  updateStockTopic;
+//    private String  updateSaleGroup;
+//    private String  updateSaleTopic;
+    private String  orderNotifyGroup;
+    private String  orderNotifyTopic;
+    private String  mintGroup;
+    private String  mintTopic;
+    private String  updateActivityStockGroup;
+    private String  updateActivityStockTopic;
+    private String  broadcastEventGroup;
+    private String  broadcastEventTopic;
+    private boolean notifyServer;
+    private int     dataCenterId;
+    private int     workerId;
+
+    /**
+     * bizId
+     */
+    private String bizId = "a00e36c5";
+
+    /**
+     * kmsKey
+     */
+    private String kmsKey = "ydtg$@WZ9NH&EB2e";
+
+}

+ 30 - 0
src/main/java/com/izouma/nineth/config/HibernateJsonConfig.java

@@ -0,0 +1,30 @@
+package com.izouma.nineth.config;
+
+
+import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import com.fasterxml.jackson.databind.Module;
+
+/**
+ * Hibernate 懒加载失效 因为json序列化
+ */
+@Configuration
+public class HibernateJsonConfig {
+
+    /**
+     * 注册一个额外的Jackson模块
+     *
+     * @return Module
+     */
+    @Bean
+    public Module hibernate5Module() {
+        Hibernate5Module module = new Hibernate5Module();
+        //禁用(表示要忽略@Transient字段属性,默认为true,设置为false禁用)
+        module.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION);
+        //延时加载的对象不使用时设置为null
+        module.enable(Hibernate5Module.Feature.SERIALIZE_IDENTIFIER_FOR_LAZY_NOT_LOADED_OBJECTS);
+        return module;
+    }
+
+}

+ 24 - 0
src/main/java/com/izouma/nineth/config/IPFSProperties.java

@@ -0,0 +1,24 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix="ipfs")
+public class IPFSProperties {
+
+    /**
+     * 服务地址
+     *
+     */
+    private String host = "172.31.167.5";
+
+    /**
+     * 服务端口
+     *
+     */
+    private Integer port = 5001;
+
+}

+ 23 - 0
src/main/java/com/izouma/nineth/config/IkudotpayConfig.java

@@ -0,0 +1,23 @@
+package com.izouma.nineth.config;
+
+import com.izouma.nineth.utils.ikudot.IkudotpayClient;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@AllArgsConstructor
+@Slf4j
+@Configuration
+@EnableConfigurationProperties(IkudotpayProperties.class)
+public class IkudotpayConfig {
+
+    private IkudotpayProperties ikudotpayProperties;
+
+    @Bean
+    public IkudotpayClient ikudotpayClient(){
+        IkudotpayClient ikudotpayClient = new IkudotpayClient(ikudotpayProperties);
+        return ikudotpayClient;
+    }
+}

+ 31 - 0
src/main/java/com/izouma/nineth/config/IkudotpayProperties.java

@@ -0,0 +1,31 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * 酷点支付配置
+ *
+ */
+@Data
+@ConfigurationProperties(prefix="ikudotpay")
+public class IkudotpayProperties {
+
+    /**
+     * 支付网关
+     */
+    private String gateWay = "https://pay.kudianvip.com";
+
+    /**
+     * 商户号
+     */
+    private String merchId;
+
+    /**
+     * 安全密钥
+     */
+    private String secretKey;
+
+
+
+}

+ 24 - 0
src/main/java/com/izouma/nineth/config/LianlianpayConfig.java

@@ -0,0 +1,24 @@
+package com.izouma.nineth.config;
+
+import com.izouma.nineth.utils.lianlianpay.LianlianpayClient;
+import lombok.AllArgsConstructor;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@AllArgsConstructor
+@Configuration
+@EnableConfigurationProperties(LianlianpayProperties.class)
+public class LianlianpayConfig {
+
+    private LianlianpayProperties lianlianpayProperties;
+
+
+    @Bean
+    public LianlianpayClient lianlianPayClient(){
+        LianlianpayClient lianlianpayClient = new LianlianpayClient(lianlianpayProperties);
+        return lianlianpayClient;
+    }
+
+
+}

+ 43 - 0
src/main/java/com/izouma/nineth/config/LianlianpayProperties.java

@@ -0,0 +1,43 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Data
+@ConfigurationProperties(prefix="lianlianpay")
+public class LianlianpayProperties {
+
+    /**
+     * 网关地址
+     */
+    private String gateWay = "https://accpapi.lianlianpay.com";
+
+    /**
+     * 文件网关地址
+     *
+     */
+    private String fileGateWay = "https://accpfile.lianlianpay.com";
+
+    /**
+     * 连连公钥(ASN.1)
+     */
+    private String publicKey;
+
+    /**
+     * 连连私钥(pkcs8格式)
+     */
+    private String privateKey;
+
+    /**
+     * 商户号
+     */
+    private String mid;
+
+
+    private Integer socketTimeout = 24000;
+
+    private Integer connectTimeout = 3000;
+
+
+
+}

+ 36 - 0
src/main/java/com/izouma/nineth/config/LocalDateTimeSerializerConfig.java

@@ -0,0 +1,36 @@
+package com.izouma.nineth.config;
+
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Configuration
+public class LocalDateTimeSerializerConfig {
+    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
+    private String pattern;
+
+    @Bean
+    public LocalDateTimeSerializer localDateTimeDeserializer() {
+        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+    }
+
+    @Bean
+    public LocalDateSerializer localDateSerializer() {
+        return new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+    }
+
+    @Bean
+    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
+        return builder -> {
+            builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
+            builder.serializerByType(LocalDate.class, localDateSerializer());
+        };
+    }
+}

+ 24 - 0
src/main/java/com/izouma/nineth/config/PayeasenetConfig.java

@@ -0,0 +1,24 @@
+package com.izouma.nineth.config;
+
+import com.izouma.nineth.utils.payeasenet.PayeasenetClient;
+import lombok.AllArgsConstructor;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@AllArgsConstructor
+@Configuration
+@EnableConfigurationProperties(PayeasenetProperties.class)
+public class PayeasenetConfig {
+
+
+    private PayeasenetProperties payeasenetProperties;
+
+    @Bean
+    public PayeasenetClient payeasenetClient(){
+        PayeasenetClient payEasenetClient = new PayeasenetClient(payeasenetProperties);
+        return payEasenetClient;
+    }
+
+
+}

+ 47 - 0
src/main/java/com/izouma/nineth/config/PayeasenetProperties.java

@@ -0,0 +1,47 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@ConfigurationProperties(prefix="payeasenet")
+public class PayeasenetProperties {
+
+    /**
+     * 网关地址
+     */
+    private String gateWay = "https://apis.5upay.com";
+
+
+    /**
+     * 首信易公钥
+     */
+    private String publicKey;
+
+    /**
+     * 首信易私钥
+     */
+    private String privateKey;
+
+    /**
+     * 商户私钥密码
+     */
+    private String privateKeyPwd;
+
+    /**
+     * 商户号
+     */
+    private String merchantId;
+
+    /**
+     * 服务商ID(可选)
+     */
+    private String partnerId;
+
+    private Integer socketTimeout = 30000;
+
+    private Integer connectTimeout = 30000;
+
+
+}

+ 29 - 0
src/main/java/com/izouma/nineth/config/PushConfig.java

@@ -0,0 +1,29 @@
+package com.izouma.nineth.config;
+
+import com.gexin.rp.sdk.http.IGtPush;
+import lombok.AllArgsConstructor;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@AllArgsConstructor
+@Configuration
+@EnableConfigurationProperties(PushProperties.class)
+public class PushConfig {
+
+    /**
+     * 返回推送详情
+     */
+    public static final String GEXIN_PUSHSINGLE_ALIASDETAIL = "gexin_pushSingle_aliasDetail";
+
+    private PushProperties pushProperties;
+
+    @Bean
+    public IGtPush iGtPush(){
+        System.setProperty(GEXIN_PUSHSINGLE_ALIASDETAIL, "true");
+
+        IGtPush iGtPush = new IGtPush(pushProperties.getUrl(), pushProperties.getAppKey(), pushProperties.getMasterSecret());
+        return iGtPush;
+    }
+
+}

+ 25 - 0
src/main/java/com/izouma/nineth/config/PushProperties.java

@@ -0,0 +1,25 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Data
+@ConfigurationProperties(prefix="push")
+public class PushProperties {
+
+
+    /**
+     * 推送地址
+     */
+    private String url;
+
+    /**
+     * 应用ID
+     */
+    private String appId;
+
+    private String appKey;
+
+    private String masterSecret;
+
+}

+ 128 - 0
src/main/java/com/izouma/nineth/config/RedisKeys.java

@@ -0,0 +1,128 @@
+package com.izouma.nineth.config;
+
+public abstract class RedisKeys {
+    public static final String COLLECTION = "collection::";
+
+    public static final String CREATE_ORDER = "createOrder::";
+
+    public static final String COLLECTION_STOCK = "collectionStock::";
+
+    public static final String MQ_ORDER_STATIS = "mqOrderStatis::";
+
+    //购买订单队列锁定
+    public static final String MQ_ORDER_LOCK = "mqOrderLock::";
+
+    //购买订单锁定
+    public static final String ORDER_LOCK = "orderLock::";
+
+    //操作资产锁定
+    public static final String OPERATION_ASSET_LOCK = "operationAssetLock::";
+
+    //转赠订单锁定
+    public static final String GIFT_ORDER_LOCK = "giftOrderLock::";
+
+    //盲盒抽取锁定
+    public static final String BLIND_DRAW_LOCK = "blindDrawLock::";
+
+    public static final String MINT_ACTIVITY_STOCK = "mintActivityStock::";
+
+    //资产铸造锁定
+    public static final String MINT_ASSET_LOCK = "mintAssetLock::";
+
+    //空投锁定
+    public static  final String CREATE_AIR_DROP_LOCK = "createAirDropLock::";
+
+    //转账锁定
+    public static  final String TRANSFER_MONEY_LOCK = "transferMoneyLock::";
+
+
+    //藏品编号池
+    public static final String COLLECTION_NUMBER_POOL = "collectionNumberPool::";
+
+    /**
+     * 自定任务锁定
+     *
+     */
+    public static final String AUTO_TASK_LOCK = "autoTaskLock::";
+    /**
+     * 抢购下单验证码
+     */
+    public static final String KAPTCHA_SESSION = "KAPTCHA_SESSION:";
+    /**
+     * 注册用户证码
+     */
+    public static final String captchaServiceRedisKey = "captchaService::";
+    /**
+     * 排行榜
+     */
+    public static final String RANKING_DATA_CACHE = "ranking_data_cache::";
+
+    /**
+     * 资产售卖缓存
+     */
+    public static final String ASSET_SHELL_LIMIT_KEY = "assetShellLimitKey::";
+
+    /**
+     * 用户绑定银行卡实名验证次数
+     */
+    public static final String BANK_CARD_REAL_NAME_COUNT = "bank_card_real_name_count::";
+    /**
+     * 系统公告已阅读用户Set
+     */
+    public static final String NOTICE_READ_USER = "notice_read_user";
+    /**
+     *用户锁定订单量
+     */
+    public static final String USER_LOCK_ORDER_NUMBER = "user_lock_order_number::";
+
+    /**
+     *系统设置用户订单量
+     */
+    public static final String LOCK_ORDER_LIMIT_NUMBER = "lock_order_limit_number";
+
+    //手动开盲盒锁定
+    public static  final String  OPEN_BLIND_BOX_LOCK = " open_blind_box_Lock::";
+
+    //手动开盲盒锁定
+    public static  final String  OPEN_SURPRISE_BOX_LOCK = "open_surprise_box_lock::";
+
+    //钱包支付确认锁定
+    public static final String WALLET_PAY_CONFIRM_LOCK = "wallet_pay_confirm_lock::";
+
+    //钱包短信发送缓存
+    public static final String WALLET_SMS_CACHE = "walletSmsCache::";
+
+    //钱包数据缓存
+    public static final String WALLET_LIANLIAN_BALANCE_CACHE = "walletLianlianBalanceCache#300";
+
+    /**
+     * 用户登录日志list
+     */
+    public static final String USER_LOGIN_LOG = "user_login_log";
+
+    /**
+     * 收集活动兑换锁
+     */
+    public static  final String ACTIVITY_ORDER_CREATE_LOCK = "activityOrderCreateLock::";
+
+    /**
+     * 用户RSA私钥
+     */
+    public static final String RSA_PRIVATE_KEY = "rsa_private_key:";
+    /**
+     * 积分兑换活动锁
+     */
+    public static final String POINT_DRAW_LOCK = "pointDrawLock::";
+
+    /**
+     * 积分变动加锁
+     */
+    public static final String INTEGRAL_CHANGE_LOCK = "integral_change_lock::";
+
+
+    /**
+     * 用户审核锁
+     */
+    public static final String USER_AUDIT_LOCK = "user_audit_lock::";
+
+}

+ 7 - 0
src/main/java/com/izouma/nineth/config/RedisView.java

@@ -0,0 +1,7 @@
+package com.izouma.nineth.config;
+
+/**
+ * 视图标记
+ */
+public class RedisView {
+}

+ 29 - 0
src/main/java/com/izouma/nineth/config/RequestCipherProperties.java

@@ -0,0 +1,29 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@ConfigurationProperties(prefix="request-cipher")
+public class RequestCipherProperties {
+
+    /**
+     * 私钥
+     */
+    private String privateKey;
+
+    /**
+     * 公钥
+     *
+     */
+    private String publicKey;
+
+
+    /**
+     * 私钥加密时的密码
+     */
+    private String privateKeyPwd;
+
+
+}

+ 47 - 0
src/main/java/com/izouma/nineth/config/SandpayConfig.java

@@ -0,0 +1,47 @@
+package com.izouma.nineth.config;
+
+import com.izouma.nineth.utils.sandpay.SandpayAccountClient;
+import com.izouma.nineth.utils.sandpay.SandpayClient;
+import com.izouma.nineth.utils.sandpay.SandpayNewClient;
+import lombok.AllArgsConstructor;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@AllArgsConstructor
+@Configuration
+@EnableConfigurationProperties(SandpayProperties.class)
+public class SandpayConfig {
+
+    private SandpayProperties sandpayProperties;
+
+    @Bean
+    public SandpayClient sandpayClient(){
+        SandpayClient sandpayClient = new SandpayClient(sandpayProperties);
+        return sandpayClient;
+    }
+
+    /**
+     * 资金交易专用
+     * @return
+     */
+    @Bean
+    public SandpayAccountClient sandpayAccountClient(){
+        SandpayAccountClient sandpayAccountClient = new SandpayAccountClient(sandpayProperties);
+        return sandpayAccountClient;
+    }
+
+
+    /**
+     * 新支付平台
+     * @return
+     */
+    @Bean
+    public SandpayNewClient sandpayNewClient(){
+        SandpayNewClient sandpayNewClient = new SandpayNewClient(sandpayProperties);
+        return sandpayNewClient;
+    }
+
+
+
+}

+ 94 - 0
src/main/java/com/izouma/nineth/config/SandpayProperties.java

@@ -0,0 +1,94 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Data
+@ConfigurationProperties(prefix="sandpay")
+public class SandpayProperties {
+
+    /**
+     * 网关地址
+     */
+    private String gateWay = "https://cashier.sandpay.com.cn";
+
+    /**
+     * 资金操作网关地址
+     */
+    private String fundGateWay = "https://caspay.sandpay.com.cn";
+
+    /**
+     * 账户操作网关地址
+     */
+    private String accountGateWay = "https://cap.sandpay.com.cn";
+
+    /**
+     * 新支付平台网关
+     */
+    private String newGateWay = "https://sandcash.mixienet.com.cn";
+
+    /**
+     * 杉德公钥
+     */
+    private String publicKey;
+
+    /**
+     * 商户私钥
+     */
+    private String privateKey;
+
+    /**
+     * 商户私钥密码
+     */
+    private String privateKeyPwd;
+
+    /**
+     * 商户号
+     */
+    private String mid;
+
+    /**
+     * 平台商户号
+     *
+     */
+    private String plMid;
+
+    /**
+     * 账户交易版本号
+     *
+     */
+    private String version = "v4";
+
+    /**
+     * 账户服务杉德公钥
+     */
+    private String cfcaPublicKey;
+
+    /**
+     * 账户服务杉德私钥
+     */
+    private String cfcaPrivateKey;
+
+    /**
+     * 商户私钥密码
+     */
+    private String cfcaPrivateKeyPwd;
+
+    /**
+     * 新平台md5签名key
+     */
+    private String newMd5Key;
+
+    /**
+     * 新平台商户密钥
+     */
+    private String newMerKey;
+
+
+    private Integer socketTimeout = 30000;
+
+    private Integer connectTimeout = 30000;
+
+
+
+}

+ 19 - 0
src/main/java/com/izouma/nineth/config/SchedulingConfig.java

@@ -0,0 +1,19 @@
+package com.izouma.nineth.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+@Configuration
+public class SchedulingConfig {
+    @Bean
+    public TaskScheduler taskScheduler() {
+        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
+        // 定时任务执行线程池核心线程数
+        taskScheduler.setPoolSize(50);
+        taskScheduler.setRemoveOnCancelPolicy(true);
+        taskScheduler.setThreadNamePrefix("Scheduler-");
+        return taskScheduler;
+    }
+}

+ 43 - 0
src/main/java/com/izouma/nineth/config/SiweipayProperties.java

@@ -0,0 +1,43 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 四维支付配置
+ *
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "siweipay")
+public class SiweipayProperties {
+
+    /**
+     * 基础接口地址
+     */
+    private String baseUrl;
+
+    /**
+     * 结果通知地址
+     */
+    private String notifyUrl;
+
+    /**
+     * 应用ID
+     */
+    private String appId;
+
+
+    /**
+     * 应用密钥
+     */
+    private String appKey;
+
+    /**
+     * 是否调试
+     */
+    private boolean debug;
+
+
+}

+ 16 - 0
src/main/java/com/izouma/nineth/config/SnowflakeIdWorkerConfig.java

@@ -0,0 +1,16 @@
+package com.izouma.nineth.config;
+
+import com.izouma.nineth.utils.SnowflakeIdWorker;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@Slf4j
+public class SnowflakeIdWorkerConfig {
+    @Bean
+    public SnowflakeIdWorker snowflakeIdWorker(GeneralProperties generalProperties) {
+        log.info("init snowflakeIdWorker worker={} dataCenter={}", generalProperties.getWorkerId(), generalProperties.getDataCenterId());
+        return new SnowflakeIdWorker(generalProperties.getWorkerId(), generalProperties.getDataCenterId());
+    }
+}

+ 24 - 0
src/main/java/com/izouma/nineth/config/SpringSecurityAuditorAware.java

@@ -0,0 +1,24 @@
+package com.izouma.nineth.config;
+
+import com.izouma.nineth.domain.User;
+import com.izouma.nineth.utils.SecurityUtils;
+import org.springframework.data.domain.AuditorAware;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Nonnull;
+import java.util.Optional;
+
+@Component
+public class SpringSecurityAuditorAware implements AuditorAware<String> {
+
+    @Override
+    @Nonnull
+    public Optional<String> getCurrentAuditor() {
+        String auditor = "system";
+        User user = SecurityUtils.getAuthenticatedUser();
+        if (user != null) {
+            auditor = user.getNickname() + "(" + user.getId() + ")";
+        }
+        return Optional.of(auditor);
+    }
+}

+ 28 - 0
src/main/java/com/izouma/nineth/config/SumpayConfig.java

@@ -0,0 +1,28 @@
+package com.izouma.nineth.config;
+
+import fosun.sumpay.merchant.integration.core.service.SumpayService;
+import fosun.sumpay.merchant.integration.core.service.SumpayServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@AllArgsConstructor
+@Configuration
+@EnableConfigurationProperties(SumpayProperties.class)
+public class SumpayConfig {
+
+    private SumpayProperties sumpayProperties;
+
+
+    @Bean
+    public SumpayService sumpayService(){
+        SumpayService sumpayService = new SumpayServiceImpl();
+
+        return sumpayService;
+    }
+
+
+
+
+}

+ 50 - 0
src/main/java/com/izouma/nineth/config/SumpayProperties.java

@@ -0,0 +1,50 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * 商盟配置
+ */
+@Data
+@ConfigurationProperties(prefix="sumpay")
+public class SumpayProperties {
+
+    /**
+     * 网关地址
+     */
+    private String gateWay;
+
+    /**
+     * 商盟公钥文件路径,不需要前缀
+     */
+    private String publicKeyPath;
+
+    /**
+     * 商户私钥文件路径,不需要前缀
+     */
+    private String privateKeyPath;
+
+    /**
+     * 商户私钥密码
+     */
+    private String privateKeyPwd;
+
+
+    /**
+     * 商户号
+     */
+    private String merId;
+
+    /**
+     * 会员登录密码
+     */
+    private String memberLoginPassword = "abc@12345678";
+
+    /**
+     * 会员支付密码
+     */
+    private String memberPayPassword = "abc@87654321";
+
+
+}

+ 215 - 0
src/main/java/com/izouma/nineth/config/SysConstants.java

@@ -0,0 +1,215 @@
+package com.izouma.nineth.config;
+
+/**
+ * 参数配置常量
+ *
+ */
+public interface SysConstants {
+
+    /**
+     * gas费用
+     */
+    String GAS_FEE = "gas_fee";
+
+    /**
+     * 转赠gas费用
+     */
+    String GIFT_GAS_FEE = "gift_gas_fee";
+
+    /**
+     * 启用微信公众号支付
+     */
+    String ENABLE_WX_PUB = "enable_wx_pub";
+
+    /**
+     * 使用小程序支付
+     */
+    String ENABLE_WX_LITE = "enable_wx_lite";
+
+    /**
+     * 持有几天可销售
+     */
+    String HOLD_DAYS = "hold_days";
+
+    /**
+     * 支付平台设置
+     */
+    String PAY_PLATFORM = "pay_platform";
+
+    /**
+     * 二手支付平台设置
+     */
+    String SECOND_HAND_PAY_PLATFORM = "second_hand_pay_platform";
+
+
+    /**
+     * 转赠支付平台设置
+     */
+    String GIFT_HAND_PAY_PLATFORM = "gift_hand_pay_platform";
+
+    /**
+     * 转赠开关
+     */
+    String GIFT_PAY_SWITCH = "gift_pay_switch";
+
+    /**
+     * 黑洞账户ID
+     */
+    String BLACK_USER_ID = "black_user_id";
+
+    /**
+     *
+     * 资产上架检查
+     *
+     */
+    String ASSET_SHELF_CHECK = "asset_shelf_check";
+
+    /**
+     * 银行卡实名认证四要素开关
+     */
+    String FOUR_ELEMENT_SWITCH = "four_element_switch";
+
+    /**
+     * 每天银行卡实名认证四要素次数
+     */
+    String DAYS_FOUR_ELEMENT_COUNT = "days_four_element_count";
+
+    /**
+     * 用户默认头像
+     */
+    String DEFAULT_AVATAR = "default_avatar";
+
+    /**
+     * 指定用户ID
+     */
+    String TEST_NAMED_USER = "test_named_user";
+
+    /**
+     * 指定藏品
+     */
+    String TEST_NAMED_COLLECTIONID = "test_named_collectionId";
+
+    /**
+     * 微信mp开关
+     */
+    String WX_MP_SWITCH = "wx_mp_switch";
+    /**
+     * 同一个身份证可以注册账号个数
+     */
+    String REGISTERED_NUMBER = "registered_number";
+
+    /**
+     * 注册获得积分
+     */
+    String REGISTERED_INTEGRAL = "registered_integral";
+
+
+    /**
+     * 同一个银行卡可以绑定的次数
+     */
+    String BANK_CARD_CAN_BE_BOUND = "bank_card_can_be_bound";
+    /**
+     * 汇付绑定银行卡开关
+     */
+    String BINDING_BANK_CARD_SWITCH = "binding_bank_card_switch";
+    /**
+     * 订单到期间隔
+     */
+    String ORDER_EXPIRE_INTERVAL = "order_expire_interval";
+    /**
+     * 锁单上限次数
+     */
+    String LOCK_ORDER_LIMIT_NUMBER = "lock_order_limit_number";
+
+    /**
+     * 超过锁单上限禁止购买时间(小时)
+     */
+    String LOCK_ORDER_PUNISH_TIME = "lock_order_punish_time";
+
+    /**
+     * 测试用户ID
+     */
+    String TESTER_USER_ID = "tester_user_id";
+
+    /**
+     * 统计锁单次数周期
+     */
+    String LOCK_ORDER_COUNT_INTERVAL = "lock_order_count_interval";
+    /**
+     * 成交量排行榜结束时间
+     */
+    String RANKING_ACTIVITY_END_TIME = "ranking_end_time";
+    /**
+     * 成交量排行榜开始时间
+     */
+    String RANKING_ACTIVITY_START_TIME = "ranking_start_time";
+
+    /**
+     * 资产上架价格限制
+     */
+    String ASSET_SHELF_PRICE_LIMIT = "asset_shelf_price_limit";
+
+    /**
+     * 邀请排行榜需要造假数据的手机号
+     */
+    String  FALSE_DATA_PHONE_NUMBER = "false_data_phone_number";
+    /**
+     * 邀请排行榜假数据(与手机号一一对应)
+     */
+    String  FALSE_DATA = "false_data";
+
+    /**
+     * 图形验证码过期时间
+     */
+    String GRAPH_AUTHCODE_EXPIRATION_TIME ="authcode_expiration_time";
+
+
+    /**
+     * 活动消费排行榜需要造假数据的手机号
+     */
+    String  CONSUME_PHONE = "consume_phone";
+    /**
+     * 活动消费排行榜假数据(与手机号一一对应)
+     */
+    String  CONSUME_DATA = "consume_data";
+
+    /**
+     * 会员ID前缀
+     */
+    String MEMBER_PREFIX = "member_prefix";
+
+    /**
+     * 钱包免费提示
+     *
+     */
+    String WALLET_FREE_TIPS = "wallet_free_tips";
+
+
+    /**
+     * 图片压缩开关
+     *
+     */
+    String PICTURE_COMPRESSION = "picture_compression";
+
+    /**
+     * 钱包开户费用
+     */
+    String WALLET_REGISTER_COST = "wallet_register_cost";
+
+    /**
+     * 钱包管理费用
+     */
+    String WALLET_MANAGE_COST = "wallet_manage_cost";
+
+    /**
+     * 钱包提现手续费
+     */
+    String WALLET_WITHDRAW_CHARGE = "wallet_withdraw_charge";
+
+
+    /**
+     * 消费得积分
+     */
+    String TRANSFORM_INTEGRAL_RATIO = "transform_integral_ratio";
+
+}

+ 109 - 0
src/main/java/com/izouma/nineth/config/WebMvcConfig.java

@@ -0,0 +1,109 @@
+package com.izouma.nineth.config;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+
+
+import com.izouma.nineth.annotations.MobileRestController;
+import com.izouma.nineth.annotations.NoLoginRestController;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+
+import java.util.List;
+
+@Configuration
+@EnableConfigurationProperties(GeneralProperties.class)
+public class WebMvcConfig implements WebMvcConfigurer {
+    @Value("${storage.local_path}")
+    private String localPath;
+
+    @Override
+    public void configurePathMatch(PathMatchConfigurer configurer) {
+        configurer.addPathPrefix("/app",c -> c.getPackage().isAnnotationPresent(MobileRestController.class));
+        configurer.addPathPrefix("/open",c -> c.getPackage().isAnnotationPresent(NoLoginRestController.class));
+    }
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        // registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
+        // registry.addResourceHandler("webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
+        registry.addResourceHandler("/admin/**").addResourceLocations("classpath:/static/admin/");
+        registry.addResourceHandler("/files/**").addResourceLocations("file:" + localPath);
+        registry.addResourceHandler("/MP_verify*").addResourceLocations("classpath:/");
+    }
+
+    @Bean
+    public Docket createApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(new ApiInfoBuilder()
+                                 .title("接口文档")
+                                 .version("1.0.0")
+                                 .termsOfServiceUrl("#")
+                                 .description("接口文档")
+                                 .build())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.izouma.nineth.web"))
+                .paths(PathSelectors.any())
+                .build();
+    }
+
+    @Override
+    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
+        converters.stream().filter(converter -> converter instanceof MappingJackson2HttpMessageConverter)
+                .forEach(converter -> {
+                    ObjectMapper objectMapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
+                    SimpleModule simpleModule = new SimpleModule();
+                    simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
+                    simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
+                    objectMapper.registerModule(simpleModule);
+                    ((MappingJackson2HttpMessageConverter) converter).setObjectMapper(objectMapper);
+                });
+        System.out.println(converters);
+    }
+    // @Bean
+    // public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
+    //     MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
+    //     //设置日期格式
+    //     ObjectMapper objectMapper = new ObjectMapper();
+    //     objectMapper.setDateFormat(CustomDateFormat.instance);
+    //     objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+    //     mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
+    //     //设置中文编码格式
+    //     List<MediaType> list = new ArrayList<>();
+    //     list.add(MediaType.APPLICATION_JSON_UTF8);
+    //     mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
+    //     return mappingJackson2HttpMessageConverter;
+    // }
+
+//    @Override
+//    public void addFormatters(FormatterRegistry registry) {
+//        DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
+//        registrar.setUseIsoFormat(true);
+//        registrar.registerFormatters(registry);
+//    }
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**")
+                .allowedHeaders("*")
+                .allowCredentials(true)
+                .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH")
+                .exposedHeaders("Content-Disposition");
+    }
+
+}

+ 30 - 0
src/main/java/com/izouma/nineth/config/WxMaConfiguration.java

@@ -0,0 +1,30 @@
+package com.izouma.nineth.config;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
+import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
+import lombok.AllArgsConstructor;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@AllArgsConstructor
+@Configuration
+@EnableConfigurationProperties(WxMaProperties.class)
+public class WxMaConfiguration {
+    private final WxMaProperties properties;
+
+    @Bean
+    public WxMaService wxMaService() {
+        WxMaService service = new WxMaServiceImpl();
+        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
+        config.setAppid(properties.getAppId());
+        config.setSecret(properties.getAppSecret());
+        config.setToken(properties.getMsgToken());
+        config.setAesKey(properties.getMsgAesKey());
+        config.setMsgDataFormat(properties.getMsgFormat());
+        service.setWxMaConfig(config);
+        return service;
+    }
+
+}

+ 14 - 0
src/main/java/com/izouma/nineth/config/WxMaProperties.java

@@ -0,0 +1,14 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Data
+@ConfigurationProperties(prefix = "wx.ma")
+public class WxMaProperties {
+    private String appId;
+    private String appSecret;
+    private String msgToken;
+    private String msgAesKey;
+    private String msgFormat;
+}

+ 78 - 0
src/main/java/com/izouma/nineth/config/WxMpConfiguration.java

@@ -0,0 +1,78 @@
+package com.izouma.nineth.config;
+
+import com.izouma.nineth.mpHandler.LogHandler;
+import com.izouma.nineth.service.SysConfigService;
+import com.izouma.nineth.service.wx.CustomWxMpServiceImpl;
+import lombok.AllArgsConstructor;
+import me.chanjar.weixin.mp.api.WxMpMessageRouter;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@AllArgsConstructor
+@Configuration
+@EnableConfigurationProperties(WxMpProperties.class)
+public class WxMpConfiguration {
+    private final WxMpProperties properties;
+    private final LogHandler     logHandler;
+    private final SysConfigService sysConfigService;
+
+    @Bean
+    public WxMpService wxMpService() {
+        WxMpDefaultConfigImpl mpConfig = new WxMpDefaultConfigImpl();
+        mpConfig.setAppId(properties.getAppId());
+        mpConfig.setSecret(properties.getAppSecret());
+        mpConfig.setAccessToken(properties.getToken());
+        mpConfig.setAesKey(properties.getAesKey());
+        //WxMpService service = new WxMpServiceImpl();
+        WxMpService service = new CustomWxMpServiceImpl(sysConfigService);
+        service.setWxMpConfigStorage(mpConfig);
+        return service;
+    }
+
+    @Bean
+    public WxMpMessageRouter messageRouter(WxMpService wxMpService) {
+        final WxMpMessageRouter newRouter = new WxMpMessageRouter(wxMpService);
+
+        // 记录所有事件的日志 (异步执行)
+        newRouter.rule().handler(this.logHandler).next();
+
+        /*// 接收客服会话管理事件
+        newRouter.rule().async(false).msgType(EVENT).event(KF_CREATE_SESSION).handler(this.kfSessionHandler).end();
+        newRouter.rule().async(false).msgType(EVENT).event(KF_CLOSE_SESSION).handler(this.kfSessionHandler).end();
+        newRouter.rule().async(false).msgType(EVENT).event(KF_SWITCH_SESSION).handler(this.kfSessionHandler).end();
+
+        // 门店审核事件
+        newRouter.rule().async(false).msgType(EVENT).event(POI_CHECK_NOTIFY).handler(this.storeCheckNotifyHandler).end();
+
+        // 自定义菜单事件
+        newRouter.rule().async(false).msgType(EVENT).event(WxConsts.EventType.CLICK).handler(this.menuHandler).end();
+
+        // 点击菜单连接事件
+        newRouter.rule().async(false).msgType(EVENT).event(WxConsts.EventType.VIEW).handler(this.nullHandler).end();
+
+        // 关注事件
+        newRouter.rule().async(false).msgType(EVENT).event(SUBSCRIBE).handler(this.subscribeHandler).end();
+
+        // 取消关注事件
+        newRouter.rule().async(false).msgType(EVENT).event(UNSUBSCRIBE).handler(this.unsubscribeHandler).end();
+
+        // 上报地理位置事件
+        newRouter.rule().async(false).msgType(EVENT).event(WxConsts.EventType.LOCATION).handler(this.locationHandler).end();
+
+        // 接收地理位置消息
+        newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.LOCATION).handler(this.locationHandler).end();
+
+        // 扫码事件
+        newRouter.rule().async(false).msgType(EVENT).event(WxConsts.EventType.SCAN).handler(this.scanHandler).end();
+
+        // 默认
+        newRouter.rule().async(false).handler(this.msgHandler).end();*/
+
+        return newRouter;
+    }
+
+}

+ 13 - 0
src/main/java/com/izouma/nineth/config/WxMpProperties.java

@@ -0,0 +1,13 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Data
+@ConfigurationProperties(prefix = "wx.mp")
+public class WxMpProperties {
+    private String appId;
+    private String appSecret;
+    private String token;
+    private String aesKey;
+}

+ 47 - 0
src/main/java/com/izouma/nineth/config/WxPayConfiguration.java

@@ -0,0 +1,47 @@
+package com.izouma.nineth.config;
+
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Binary Wang
+ */
+@Configuration
+@ConditionalOnClass(WxPayService.class)
+@EnableConfigurationProperties(WxPayProperties.class)
+public class WxPayConfiguration {
+    private WxPayProperties properties;
+
+    @Autowired
+    public WxPayConfiguration(WxPayProperties properties) {
+        this.properties = properties;
+    }
+
+    @Bean
+    @ConditionalOnMissingBean
+    public WxPayService wxService() {
+        WxPayConfig payConfig = new WxPayConfig();
+        payConfig.setAppId(StringUtils.trimToNull(this.properties.getAppId()));
+        payConfig.setMchId(StringUtils.trimToNull(this.properties.getMchId()));
+        payConfig.setMchKey(StringUtils.trimToNull(this.properties.getMchKey()));
+        payConfig.setSubAppId(StringUtils.trimToNull(this.properties.getSubAppId()));
+        payConfig.setSubMchId(StringUtils.trimToNull(this.properties.getSubMchId()));
+        payConfig.setKeyPath(StringUtils.trimToNull(this.properties.getKeyPath()));
+
+        // 可以指定是否使用沙箱环境
+        payConfig.setUseSandboxEnv(false);
+
+        WxPayService wxPayService = new WxPayServiceImpl();
+        wxPayService.setConfig(payConfig);
+        return wxPayService;
+    }
+
+}

+ 52 - 0
src/main/java/com/izouma/nineth/config/WxPayProperties.java

@@ -0,0 +1,52 @@
+package com.izouma.nineth.config;
+
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * wxpay pay properties
+ *
+ * @author Binary Wang
+ */
+@ConfigurationProperties(prefix = "wx.pay")
+@Data
+public class WxPayProperties {
+  /**
+   * 设置微信公众号或者小程序等的appid
+   */
+  private String appId;
+
+  /**
+   * 微信支付商户号
+   */
+  private String mchId;
+
+  /**
+   * 微信支付商户密钥
+   */
+  private String mchKey;
+
+  /**
+   * 服务商模式下的子商户公众账号ID,普通模式请不要配置,请在配置文件中将对应项删除
+   */
+  private String subAppId;
+
+  /**
+   * 服务商模式下的子商户号,普通模式请不要配置,最好是请在配置文件中将对应项删除
+   */
+  private String subMchId;
+
+  /**
+   * apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定
+   */
+  private String keyPath;
+
+//  private String notifyUrl;
+//
+//  private String refundNotifyUrl;
+//
+//  private String returnUrl;
+
+}

+ 78 - 0
src/main/java/com/izouma/nineth/converter/CustomBeanResultTransformer.java

@@ -0,0 +1,78 @@
+package com.izouma.nineth.converter;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.izouma.nineth.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.beanutils.BeanUtils;
+import org.hibernate.transform.AliasToBeanResultTransformer;
+import org.hibernate.transform.AliasedTupleSubsetResultTransformer;
+
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Slf4j
+public class CustomBeanResultTransformer extends AliasedTupleSubsetResultTransformer {
+    private static  CustomBeanResultTransformer INSTANCE;
+    private Class resultClass;
+
+    public CustomBeanResultTransformer(Class resultClass) {
+        this.resultClass = resultClass;
+    }
+
+    public static CustomBeanResultTransformer create(Class resultClass){
+        CustomBeanResultTransformer instance  = new CustomBeanResultTransformer(resultClass);
+        INSTANCE = instance;
+        return INSTANCE;
+    }
+
+    @Override
+    public boolean isTransformedValueATupleElement(String[] aliases, int tupleLength) {
+        return false;
+    }
+
+    @Override
+    public Object transformTuple(Object[] tuple, String[] aliases) {
+        try {
+            Object result = this.resultClass.getDeclaredConstructor().newInstance();
+            Map<String,Object> dataRow = new LinkedHashMap<>();
+            for ( int i = 0; i < aliases.length; i++ ) {
+                dataRow.put(aliases[i], tuple[i]);
+            }
+
+            BeanUtil.fillBeanWithMap(dataRow, result, true, null);
+
+            return result;
+        } catch (Exception e) {
+            log.error("转换失败", e);
+            throw new BusinessException("数据字段映射转换失败");
+        }
+
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if ( this == o ) {
+            return true;
+        }
+        if ( o == null || getClass() != o.getClass() ) {
+            return false;
+        }
+
+        CustomBeanResultTransformer that = ( CustomBeanResultTransformer ) o;
+
+        if ( ! resultClass.equals( that.resultClass ) ) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = resultClass.hashCode();
+        result = 31 * result;
+        return result;
+    }
+
+}

+ 26 - 0
src/main/java/com/izouma/nineth/converter/FileObjectConverter.java

@@ -0,0 +1,26 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.izouma.nineth.domain.FileObject;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+@Converter
+public class FileObjectConverter implements AttributeConverter<FileObject, String> {
+    @Override
+    public String convertToDatabaseColumn(FileObject fileObject) {
+        if (fileObject != null  )
+            return JSON.toJSONString(fileObject);
+        return null;
+    }
+
+    @Override
+    public FileObject convertToEntityAttribute(String s) {
+        if (StringUtils.isNotEmpty(s)) {
+            return JSON.parseObject(s, FileObject.class);
+        }
+        return null;
+    }
+}

+ 41 - 0
src/main/java/com/izouma/nineth/converter/FileObjectListConverter.java

@@ -0,0 +1,41 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.izouma.nineth.domain.FileObject;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+@Converter
+public class FileObjectListConverter implements AttributeConverter<List<FileObject>, String> {
+    @Override
+    public String convertToDatabaseColumn(List<FileObject> list) {
+        if (list != null)
+            return JSON.toJSONString(list);
+        return null;
+    }
+
+    @Override
+    public List<FileObject> convertToEntityAttribute(String s) {
+        if (StringUtils.isNotEmpty(s)) {
+            if (!Pattern.matches("\\[.+]", s)) {
+                return Arrays.stream(s.split(",")).map(ss -> {
+                    FileObject fileObject = new FileObject();
+                    fileObject.setUrl(ss);
+                    return fileObject;
+                }).collect(Collectors.toList());
+            }
+            try {
+                return JSON.parseArray(s, FileObject.class);
+            } catch (Exception e) {
+
+            }
+        }
+        return null;
+    }
+}

+ 30 - 0
src/main/java/com/izouma/nineth/converter/InvitePrizeConverter.java

@@ -0,0 +1,30 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.izouma.nineth.domain.InvitePrize;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+@Converter
+public class InvitePrizeConverter implements AttributeConverter<InvitePrize, String> {
+    @Override
+    public String convertToDatabaseColumn(InvitePrize invitePrize) {
+        if (invitePrize != null  )
+            return JSON.toJSONString(invitePrize);
+        return null;
+    }
+
+    @Override
+    public InvitePrize convertToEntityAttribute(String s) {
+        try {
+            if (StringUtils.isNotEmpty(s)) {
+                return JSON.parseObject(s, InvitePrize.class);
+            }
+            return null;
+        }catch (Exception e){
+            return null;
+        }
+    }
+}

+ 40 - 0
src/main/java/com/izouma/nineth/converter/InvitePrizeListConverter.java

@@ -0,0 +1,40 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.izouma.nineth.domain.ActivityInvite;
+import com.izouma.nineth.domain.InvitePrize;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import java.util.List;
+
+public class InvitePrizeListConverter implements AttributeConverter<List<InvitePrize>, String> {
+
+    @Override
+    public String convertToDatabaseColumn(List<InvitePrize> collectionProperties) {
+        if (collectionProperties == null) {
+            return null;
+        }
+        return JSON.toJSONString(collectionProperties);
+    }
+
+    @Override
+    public List<InvitePrize> convertToEntityAttribute(String s) {
+        if (StringUtils.isEmpty(s)) {
+            return null;
+        }
+        try {
+            return JSONArray.parseArray(s, InvitePrize.class);
+        } catch (Exception ignored) {
+            System.out.println("转换错误");
+        }
+        return null;
+    }
+
+    public static void main(String[] args) {
+        String str ="{\"id\":\"10061\",\"del\":false,\"inviteStartdatetime\":\"2022-05-17 00:00:00\",\"inviteEnddatetime\":\"2022-05-18 00:00:00\",\"byInvitePrize\":{\"type\":\"asset\",\"inviteCollection\":\"11574\",\"inviteNum\":0},\"prl\":\"https://cosmoscdn.9space.vip/image/2022-05-16-18-35-04hBeHjIqJ.jpg\",\"content\":\"<p>1:活动时间的钱的期望的委屈的</p >\\n<p>2:的委屈的委屈的我确定委屈的委屈的我确定我</p >\\n<p>3:的委屈的委屈的期望的期望的期望的委屈的 的我确定</p >\\n<p>4:分废物废物废物废物<span style=\\\"color: #e03e2d;\\\">粉为废物 </span>分额外废物粉</p >\\n<p>5:违法额外废物废物废物<span style=\\\"color: #3598db;\\\">废物废物粉</span>额外废物分万分额外分</p >\",\"name\":\"测试提交邀请有礼活动\",\"poster\":\"https://cosmoscdn.9space.vip/image/2022-05-16-18-35-00jfyZqufU.jpg\",\"projectId\":1,\"createdAt\":\"2022-05-16 18:36:51\",\"InvitePrizeList\":[{\"type\":\"asset\",\"inviteCollection\":\"11578\",\"inviteNum\":3}]}";
+        ActivityInvite ll = JSONArray.parseObject(str, ActivityInvite.class);
+        System.out.println( ll);
+    }
+}

+ 33 - 0
src/main/java/com/izouma/nineth/converter/JSONObjectArrayConverter.java

@@ -0,0 +1,33 @@
+package com.izouma.nineth.converter;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+import java.util.List;
+
+@Slf4j
+@Converter
+public class JSONObjectArrayConverter implements AttributeConverter<List<JSONObject>, String> {
+    @Override
+    public String convertToDatabaseColumn(List<JSONObject> jsonObject) {
+        if (jsonObject != null) {
+            return JSON.toJSONString(jsonObject);
+        }
+        return null;
+    }
+
+    @Override
+    public List<JSONObject> convertToEntityAttribute(String s) {
+        try {
+            return JSONArray.parseArray(s, JSONObject.class);
+        } catch (Exception e) {
+            log.error("parse json error", e);
+        }
+        return null;
+    }
+}

+ 30 - 0
src/main/java/com/izouma/nineth/converter/JSONObjectConverter.java

@@ -0,0 +1,30 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+@Slf4j
+@Converter
+public class JSONObjectConverter implements AttributeConverter<JSONObject, String> {
+    @Override
+    public String convertToDatabaseColumn(JSONObject jsonObject) {
+        if (jsonObject != null) {
+            return jsonObject.toJSONString();
+        }
+        return null;
+    }
+
+    @Override
+    public JSONObject convertToEntityAttribute(String s) {
+        try {
+            return JSON.parseObject(s);
+        } catch (Exception e) {
+            log.error("parse json error", e);
+        }
+        return null;
+    }
+}

+ 28 - 0
src/main/java/com/izouma/nineth/converter/LongArrayConverter.java

@@ -0,0 +1,28 @@
+package com.izouma.nineth.converter;
+
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Converter
+public class LongArrayConverter implements AttributeConverter<List<Long>, String> {
+    @Override
+    public String convertToDatabaseColumn(List<Long> longs) {
+        if (longs != null && !longs.isEmpty())
+            return StringUtils.join(longs, ",");
+        return null;
+    }
+
+    @Override
+    public List<Long> convertToEntityAttribute(String s) {
+        if (StringUtils.isNotEmpty(s)) {
+            return Arrays.stream(s.split(",")).map(Long::parseLong).collect(Collectors.toList());
+        }
+        return new ArrayList<>();
+    }
+}

+ 32 - 0
src/main/java/com/izouma/nineth/converter/PreEmptionPrivilegeConverter.java

@@ -0,0 +1,32 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.izouma.nineth.domain.PreEmptionPrivilege;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+@Converter
+public class PreEmptionPrivilegeConverter implements AttributeConverter<PreEmptionPrivilege, String> {
+
+    @Override
+    public String convertToDatabaseColumn(PreEmptionPrivilege privileges) {
+        if (privileges == null) {
+            return null;
+        }
+        return JSON.toJSONString(privileges);
+    }
+
+    @Override
+    public PreEmptionPrivilege convertToEntityAttribute(String s) {
+        if (StringUtils.isEmpty(s)) {
+            return null;
+        }
+        try {
+            return JSON.parseObject(s, PreEmptionPrivilege.class);
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+}

+ 34 - 0
src/main/java/com/izouma/nineth/converter/PrivilegeListConverter.java

@@ -0,0 +1,34 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.izouma.nineth.domain.Privilege;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+import java.util.List;
+
+@Converter
+public class PrivilegeListConverter implements AttributeConverter<List<Privilege>, String> {
+
+    @Override
+    public String convertToDatabaseColumn(List<Privilege> privileges) {
+        if (privileges == null) {
+            return null;
+        }
+        return JSON.toJSONString(privileges);
+    }
+
+    @Override
+    public List<Privilege> convertToEntityAttribute(String s) {
+        if (StringUtils.isEmpty(s)) {
+            return null;
+        }
+        try {
+            return JSONArray.parseArray(s, Privilege.class);
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+}

+ 34 - 0
src/main/java/com/izouma/nineth/converter/PropertyListConverter.java

@@ -0,0 +1,34 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.izouma.nineth.domain.CollectionProperty;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+import java.util.List;
+
+@Converter
+public class PropertyListConverter implements AttributeConverter<List<CollectionProperty>, String> {
+
+    @Override
+    public String convertToDatabaseColumn(List<CollectionProperty> collectionProperties) {
+        if (collectionProperties == null) {
+            return null;
+        }
+        return JSON.toJSONString(collectionProperties);
+    }
+
+    @Override
+    public List<CollectionProperty> convertToEntityAttribute(String s) {
+        if (StringUtils.isEmpty(s)) {
+            return null;
+        }
+        try {
+            return JSONArray.parseArray(s, CollectionProperty.class);
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+}

+ 27 - 0
src/main/java/com/izouma/nineth/converter/StringArrayConverter.java

@@ -0,0 +1,27 @@
+package com.izouma.nineth.converter;
+
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Converter
+public class StringArrayConverter implements AttributeConverter<List<String>, String> {
+    @Override
+    public String convertToDatabaseColumn(List<String> strings) {
+        if (strings != null && !strings.isEmpty())
+            return StringUtils.join(strings, ",");
+        return null;
+    }
+
+    @Override
+    public List<String> convertToEntityAttribute(String s) {
+        if (StringUtils.isNotEmpty(s)) {
+            return Arrays.asList(s.split(","));
+        }
+        return new ArrayList<>();
+    }
+}

+ 24 - 0
src/main/java/com/izouma/nineth/converter/StringToMapConverter.java

@@ -0,0 +1,24 @@
+package com.izouma.nineth.converter;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Nullable;
+import java.io.IOException;
+import java.util.Map;
+
+@Component
+public class StringToMapConverter implements Converter<String, Map<String, Object>> {
+
+    @Override
+    public Map<String, Object> convert(@Nullable String source) {
+        try {
+            return new ObjectMapper().readValue(source, new TypeReference<Map<String, Object>>() {
+            });
+        } catch (IOException e) {
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+}

+ 32 - 0
src/main/java/com/izouma/nineth/converter/SurpriseBoxContentListConverter.java

@@ -0,0 +1,32 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.izouma.nineth.domain.SurpriseBoxContent;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import java.util.List;
+
+public class SurpriseBoxContentListConverter implements AttributeConverter<List<SurpriseBoxContent>, String> {
+
+    @Override
+    public String convertToDatabaseColumn(List<SurpriseBoxContent> collectionProperties) {
+        if (collectionProperties == null) {
+            return null;
+        }
+        return JSON.toJSONString(collectionProperties);
+    }
+
+    @Override
+    public List<SurpriseBoxContent> convertToEntityAttribute(String s) {
+        if (StringUtils.isEmpty(s)) {
+            return null;
+        }
+        try {
+            return JSONArray.parseArray(s, SurpriseBoxContent.class);
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+}

+ 46 - 0
src/main/java/com/izouma/nineth/domain/Activity.java

@@ -0,0 +1,46 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.converter.StringArrayConverter;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Convert;
+import javax.persistence.Entity;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("系列活动")
+public class Activity extends BaseEntity {
+
+    @Searchable
+    private String name;
+
+    private String cover;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = StringArrayConverter.class)
+    private List<String> detail;
+
+    private int projectId;
+
+    @ApiModelProperty("详情")
+    @Column(columnDefinition = "TEXT")
+    private String content;
+
+    public Activity(Long id , String name, LocalDateTime createdAt) {
+        super.setId(id);
+        super.setCreatedAt(createdAt);
+        this.name = name;
+    }
+}

+ 85 - 0
src/main/java/com/izouma/nineth/domain/ActivityCollection.java

@@ -0,0 +1,85 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.enums.ActivityCollectionType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.persistence.*;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Entity
+@ApiModel("活动收集")
+public class ActivityCollection extends BaseEntity {
+    @ApiModelProperty("活动名称")
+    @Searchable
+    private String name;
+
+    @Column(columnDefinition = "TEXT")
+    @ApiModelProperty("图片")
+    private String pic;
+
+    @ApiModelProperty("藏品名称")
+    private String collectionName;
+
+    @ApiModelProperty("藏品ID")
+    private Long collectionId;
+
+    @ApiModelProperty("藏品数量")
+    private int num;
+
+    @ApiModelProperty("剩余数量")
+    private int stock;
+
+    @ApiModelProperty("发行数量")
+    private int total;
+
+    @ApiModelProperty("领取藏品ID")
+    private Long awardCollectionId;
+
+    @ApiModelProperty("领取藏品名称")
+    private String awardCollectionName;
+
+    private int projectId;
+
+    @ApiModelProperty("状态 是否可兑换")
+    @Transient
+    private Boolean collected;
+
+    @ApiModelProperty("类型")
+    @Enumerated(EnumType.ORDINAL)
+    private ActivityCollectionType type;
+
+    @ApiModelProperty("兑换藏品列表")
+    @OneToMany(cascade = {CascadeType.REMOVE,CascadeType.PERSIST})
+    @JoinColumn(name = "activity_id")
+    private List<AwardActivityCollectionInfo> awardList;
+
+    @ApiModelProperty("要收集的藏品列表")
+    @OneToMany(cascade = {CascadeType.REMOVE,CascadeType.PERSIST})
+    @JoinColumn(name = "activity_id")
+    private List<ActivityCollectionInfo> activities;
+
+    @ApiModelProperty("活动开始时间")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty("活动结束时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty("需要收集的卡片数")
+    private Integer needCollectedNum;
+
+    @ApiModelProperty("活动描述")
+    @Column(columnDefinition = "TEXT")
+    private String description;
+
+    @Transient
+    private List<ActivityCollectionInfo> collectionInfo;
+}

+ 50 - 0
src/main/java/com/izouma/nineth/domain/ActivityCollectionInfo.java

@@ -0,0 +1,50 @@
+package com.izouma.nineth.domain;
+
+import lombok.*;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+/**
+ * 活动收集
+ *
+ * @author ZouYuHong
+ */
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Entity
+public class ActivityCollectionInfo extends BaseEntity {
+    /**
+     *藏品id
+     */
+    private Long collectionId;
+    /**
+     * 藏品名称
+     */
+    private String collectionName;
+    /**
+     * 收集数量
+     */
+    private Integer num;
+    /**
+     * 用户持有量
+     */
+    @Transient
+    private Integer userHoldNum;
+    /**
+     * 图片地址
+     */
+    @Transient
+    private String imgUrl;
+    /**
+     * 是否为必须收集款
+     */
+    private Boolean mustNeedCollected;
+    /**
+     * 为不销毁藏品
+     */
+    private boolean notDestroy;
+}

+ 83 - 0
src/main/java/com/izouma/nineth/domain/ActivityInvite.java

@@ -0,0 +1,83 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.converter.FileObjectConverter;
+import com.izouma.nineth.converter.InvitePrizeConverter;
+import com.izouma.nineth.converter.InvitePrizeListConverter;
+import com.izouma.nineth.converter.LongArrayConverter;
+import com.izouma.nineth.enums.AwardDistributionType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Entity
+@ApiModel("邀请活动")
+public class ActivityInvite extends BaseEntity {
+
+    @ApiModelProperty("邀请活动开始时间")
+    private LocalDateTime inviteStartdatetime;
+
+    @ApiModelProperty("邀请活动结束时间")
+    private LocalDateTime inviteEnddatetime;
+
+
+    @ApiModelProperty("邀请者奖品发放类型")
+    @Enumerated(EnumType.STRING)
+    private AwardDistributionType awardDistributionType ;
+
+    @ApiModelProperty("邀请者需要要持有藏品ID")
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = LongArrayConverter.class)
+    private List<Long> holdCollectionIds ;
+
+    @ApiModelProperty("邀请者资格:0注册,1需要实名,2需要实名+绑卡,3绑定钱包")
+    private Integer inviterQualifications ;
+
+    @ApiModelProperty("被邀请者完成条件:0需要绑定钱包,1需要绑定银行卡,2需要实名")
+    private int inviteeQualifications ;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = InvitePrizeListConverter.class)
+    @ApiModelProperty("邀请者获得奖品")
+    private List<InvitePrize> invitePrizeList;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = InvitePrizeConverter.class)
+    @ApiModelProperty("被邀请者获得奖品")
+    private InvitePrize byInvitePrize;
+
+    @ApiModelProperty("活动图片")
+    private String prl;
+
+    @ApiModelProperty("活动公告内容")
+    @Column(columnDefinition = "TEXT")
+    private String content;
+
+    @ApiModelProperty("活动名字")
+    private String name;
+
+    @ApiModelProperty("活动海报")
+    private String poster;
+
+    @ApiModelProperty("活动结束邀请者已经发放奖励的玩家手机号")
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = LongArrayConverter.class)
+    private List<Long> phones;
+
+    @ApiModelProperty("邀请者赠送积分")
+    private Long inviteIntegral;
+
+
+    private int projectId;
+
+}

+ 44 - 0
src/main/java/com/izouma/nineth/domain/ActivityMaterial.java

@@ -0,0 +1,44 @@
+package com.izouma.nineth.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.izouma.nineth.converter.FileObjectListConverter;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Convert;
+import javax.persistence.Entity;
+import java.util.List;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(value = {"hibernateLazyInitializer"}, ignoreUnknown = true)
+public class ActivityMaterial extends BaseEntity {
+    private Long orderId;
+
+    private Long assetId;
+
+    private Long collectionId;
+
+    private String name;
+
+    @ApiModelProperty("图片")
+    @Convert(converter = FileObjectListConverter.class)
+    @Column(columnDefinition = "TEXT")
+    private List<FileObject> pic;
+
+    @ApiModelProperty("编号")
+    private Integer number;
+
+    @ApiModelProperty("分类")
+    private String category;
+
+}

+ 33 - 0
src/main/java/com/izouma/nineth/domain/ActivityOrder.java

@@ -0,0 +1,33 @@
+package com.izouma.nineth.domain;
+
+
+import com.izouma.nineth.annotations.Searchable;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Entity
+public class ActivityOrder extends BaseEntity {
+
+    private Long userId;
+
+    @Searchable
+    private String phone;
+
+    private Long activityCollectionId;
+
+    private String activityCollection;
+
+    @Transient
+    private List<ActivityMaterial> material;
+
+}

+ 83 - 0
src/main/java/com/izouma/nineth/domain/ActivityPriorityDocument.java

@@ -0,0 +1,83 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.converter.FileObjectConverter;
+import com.izouma.nineth.converter.LongArrayConverter;
+import com.izouma.nineth.enums.ItemType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(indexes = {
+        @Index(columnList = "minterId"),
+        @Index(columnList = "reset"),
+        @Index(columnList = "collectionId")
+})
+@Builder
+@Entity
+@ApiModel("藏品优先凭证活动")
+public class ActivityPriorityDocument extends BaseEntity {
+
+    @ApiModelProperty("活动名称")
+    @Searchable
+    private String name;
+
+    @Column(columnDefinition = "TEXT")
+    @ApiModelProperty("图片")
+    private String pic;
+
+    @ApiModelProperty("藏品名称")
+    private String collectionName;
+
+    @ApiModelProperty("藏品ID")
+    @Searchable
+    private Long collectionId;
+
+    @ApiModelProperty("提前购买时间(小时)")
+    private int advancePurchaseTime;
+
+    @ApiModelProperty("可提前购买次数")
+    private int advancePurchaseCount;
+
+    @ApiModelProperty("第九空间/cosmos")
+    private int projectId;
+
+    @Column(columnDefinition = "TEXT")
+    @ApiModelProperty("说明")
+    private String text;
+
+    @ApiModelProperty("指定生效藏品ID")
+    @Searchable
+    private Long targetCollectionId;
+
+    @ApiModelProperty("凭证类型")
+    private ItemType ItemName;
+
+    @ApiModelProperty("凭证类型")
+    public Integer ItemId;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = LongArrayConverter.class)
+    @ApiModelProperty("指定生效藏品ID,多藏品")
+    public List<Long> targetCollectionIdList;
+
+    @ApiModelProperty("发售完重置次数")
+    public boolean reset;
+
+    @ApiModelProperty("铸造者ID,如果是铸造系列")
+    public Long minterId;
+
+    @ApiModelProperty("过期时间")
+    public LocalDateTime overdueTime;
+
+}

+ 51 - 0
src/main/java/com/izouma/nineth/domain/ActivitySurpriseBox.java

@@ -0,0 +1,51 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.converter.SurpriseBoxContentListConverter;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Convert;
+import javax.persistence.Entity;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Entity
+@ApiModel("惊喜盒子配置")
+public class ActivitySurpriseBox extends BaseEntity{
+    @ApiModelProperty("活动名称")
+    @Searchable
+    private String name;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = SurpriseBoxContentListConverter.class)
+    @ApiModelProperty("惊喜盒子里面的东西")
+    private List<SurpriseBoxContent> properties;
+
+    @ApiModelProperty("已经发放盒子数量")
+    private Integer grantCount ;
+
+    @ApiModelProperty("盒子总数")
+    private Integer boxSum ;
+
+    private int projectId;
+    /**
+     * 盒子图片地址
+     */
+    @Column(columnDefinition = "TEXT")
+    private String pic;
+    /**
+     * 到期时间
+     */
+    private LocalDateTime overdueTime;
+
+}

+ 21 - 0
src/main/java/com/izouma/nineth/domain/AdaTrade.java

@@ -0,0 +1,21 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class AdaTrade {
+    private String 交易时间;
+    private String 订单号;
+    private String 支付流水号;
+    private String 账户号;
+    private String 应用;
+    private String 支付渠道;
+    private String 交易状态;
+    private String 交易金额;
+    private String 手续费金额;
+    private String 第三方订单号;
+    @ExcelProperty("支付宝/微信订单号")
+    private String 支付宝_微信订单号;
+    private String 备注描述;
+}

+ 40 - 0
src/main/java/com/izouma/nineth/domain/AdapayMerchant.java

@@ -0,0 +1,40 @@
+package com.izouma.nineth.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class AdapayMerchant extends BaseEntity {
+
+    @Column(unique = true, length = 72)
+    private String name;
+
+    @Column(unique = true, length = 72)
+    private String appId;
+
+    private String apiKey;
+
+    private String mockKey;
+
+    @Column(columnDefinition = "TEXT")
+    private String publicKey;
+
+    @Column(columnDefinition = "TEXT")
+    private String privKey;
+
+    private String wxAppId;
+
+    private String status;
+
+    private boolean selected;
+
+}

+ 91 - 0
src/main/java/com/izouma/nineth/domain/AirDrop.java

@@ -0,0 +1,91 @@
+package com.izouma.nineth.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.converter.LongArrayConverter;
+import com.izouma.nineth.converter.StringArrayConverter;
+import com.izouma.nineth.enums.AirDropType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@Entity
+@Table(name = "air_drop", indexes = {
+        @Index(columnList = "name")
+})
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("空投")
+public class AirDrop extends BaseEntity {
+
+    @ApiModelProperty("空投名称")
+    @Searchable
+    private String name;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @Enumerated(EnumType.STRING)
+    @ApiModelProperty("空投类型")
+    private AirDropType type;
+
+    @ApiModelProperty("兑换券ID")
+    private Long couponId;
+
+    @ApiModelProperty("藏品ID")
+    private Long collectionId;
+
+    @ApiModelProperty("惊喜盒子ID")
+    private Long surpriseBoxId;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = StringArrayConverter.class)
+    @ApiModelProperty("手机号")
+    private List<String> phone;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = LongArrayConverter.class)
+    @ApiModelProperty("用户ID")
+    private List<Long> userIds;
+
+    @Column(columnDefinition = "TEXT")
+    private String result;
+
+    private int projectId;
+
+    /**
+     * 操作内容
+     */
+    private String operation;
+
+    /**
+     * 投放价格(操作需要标记为出售)
+     */
+    @Column(precision = 10, scale = 2)
+    private BigDecimal dropPrice;
+
+    /**
+     * 成功投放数量
+     */
+    private Integer dropCount;
+
+    /**
+     * 是否保存空投记录
+     */
+    @Transient
+    @JsonIgnore
+    private boolean notSave;
+
+    @Transient
+    @JsonIgnore
+    private Asset asset;
+}

+ 69 - 0
src/main/java/com/izouma/nineth/domain/AppVersion.java

@@ -0,0 +1,69 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.enums.AppSource;
+import com.izouma.nineth.enums.UpdateType;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Table(name = "app_version", indexes = {
+        @Index(columnList = "version"),
+})
+@ApiModel("App版本记录")
+public class AppVersion extends BaseEntity {
+    /**
+     * 平台类型
+     */
+    @Enumerated(EnumType.STRING)
+    private AppSource source;
+    /**
+     * 更新类型
+     */
+    @Enumerated(EnumType.STRING)
+    private UpdateType updateType;
+    /**
+     * 系统版本
+     */
+    private String os;
+    /**
+     * 收集品牌 多个品牌用,隔开
+     */
+    private String phoneBrand;
+    /**
+     * 标题
+     */
+    private String title;
+    /**
+     * 描述
+     */
+    private String description;
+    /**
+     * 版本
+     */
+    private String version;
+    /**
+     * WGT热更包地址
+     */
+    private String packageAddress;
+    /**
+     * 允许的Address 用,隔开
+     */
+    private String ipAddress;
+    /**
+     * 是否开启更新
+     */
+    private boolean startUpdate;
+    /**
+     * APP包
+     */
+    private String appPackage;
+}

+ 22 - 0
src/main/java/com/izouma/nineth/domain/Appointment.java

@@ -0,0 +1,22 @@
+package com.izouma.nineth.domain;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("预约")
+public class Appointment extends BaseEntity {
+
+    private Long blindBoxId;
+
+    private Long userId;
+}

+ 247 - 0
src/main/java/com/izouma/nineth/domain/Asset.java

@@ -0,0 +1,247 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.converter.FileObjectConverter;
+import com.izouma.nineth.converter.FileObjectListConverter;
+import com.izouma.nineth.converter.PrivilegeListConverter;
+import com.izouma.nineth.converter.PropertyListConverter;
+import com.izouma.nineth.enums.AssetStatus;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+@Data
+@Entity
+@Table(indexes = {
+        @Index(columnList = "userId"),
+        @Index(columnList = "tokenId"),
+        @Index(columnList = "collectionId"),
+        @Index(columnList = "minterId"),
+        @Index(columnList = "ownerId"),
+})
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("资产")
+public class Asset extends BaseEntity {
+
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+    @ApiModelProperty("持有者")
+    private String ownerName;
+
+    @Searchable
+    @ApiModelProperty("藏品ID")
+    private Long collectionId;
+
+    @ApiModelProperty("订单ID")
+    private Long orderId;
+
+    @ApiModelProperty("编号")
+    private Integer number;
+
+    @ApiModelProperty("名称")
+    @Searchable
+    private String name;
+
+    @ApiModelProperty("详情")
+    @Column(columnDefinition = "TEXT")
+    private String detail;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = PropertyListConverter.class)
+    @ApiModelProperty("特性")
+    private List<CollectionProperty> properties;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = PrivilegeListConverter.class)
+    @ApiModelProperty("特权")
+    private List<Privilege> privileges;
+
+    @ApiModelProperty("分类")
+    private String category;
+
+    @ApiModelProperty("是否可转售")
+    private boolean canResale;
+
+    @ApiModelProperty("版税比例")
+    private int royalties;
+
+    @ApiModelProperty("手续费比例")
+    private int serviceCharge;
+
+    @ApiModelProperty("铸造者")
+//    @Searchable
+    private String minter;
+
+    @ApiModelProperty("铸造者ID")
+    private Long minterId;
+
+    @ApiModelProperty("铸造者头像")
+    private String minterAvatar;
+
+    @ApiModelProperty("持有者")
+//    @Searchable
+    private String owner;
+
+    @ApiModelProperty("持有者ID")
+    private Long ownerId;
+
+    @ApiModelProperty("持有者头像")
+    private String ownerAvatar;
+
+    @ApiModelProperty("图片")
+    @Convert(converter = FileObjectListConverter.class)
+    @Column(columnDefinition = "TEXT")
+    private List<FileObject> pic;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = FileObjectConverter.class)
+    private FileObject model3d;
+
+    @ApiModelProperty("tokenId")
+    private String tokenId;
+
+    @ApiModelProperty("tokenId")
+    private String chainTokenId;
+
+    @ApiModelProperty("购买hash")
+    private String txHash;
+
+    @ApiModelProperty("消耗gas")
+    private BigInteger gasUsed;
+
+    @ApiModelProperty("区块高度")
+    private BigInteger blockNumber;
+
+    @ApiModelProperty("ipfs地址")
+    private String ipfsUrl;
+
+    @ApiModelProperty("购买价格")
+    @Column(precision = 10, scale = 2)
+    private BigDecimal price;
+
+    @ApiModelProperty("转让价格")
+    @Column(precision = 10, scale = 2)
+    private BigDecimal sellPrice;
+
+    @ApiModelProperty("转让hash")
+    private String outTxHash;
+
+    @ApiModelProperty("转让订单ID")
+    private Long outOrderId;
+
+    @ApiModelProperty("状态")
+    @Enumerated(EnumType.STRING)
+    private AssetStatus status;
+
+    @ApiModelProperty("是否公开展示")
+    private boolean publicShow;
+
+    @ApiModelProperty("是否寄售")
+    private boolean consignment;
+
+    private Long publicCollectionId;
+
+    private int likes;
+
+    private Long fromAssetId;
+
+    @ApiModelProperty("交易时间")
+    private LocalDateTime outTime;
+
+    private int projectId;
+
+    @ApiModelProperty("盲盒是否自动打开,默认自动打开,true用户手动打开")
+    private boolean variableType ;
+
+    @ApiModelProperty("盲盒ID")
+    private Long blindBoxId;
+
+    /**
+     * 搜索集合 为一级菜单ID,二级菜单ID,三级菜单ID 这样存
+     */
+    private String categories;
+
+    public Asset(Long id, Long userId,  int projectId) {
+        this.userId = userId;
+        super.setId(id);
+        this.projectId = projectId;
+    }
+
+//    @JsonIgnore
+//    @ApiModelProperty("可变资产ID")
+//    private Long variableCollectionId ;
+
+    /**
+     * 组合名称,根据编号转换而来
+     */
+    private String composeName;
+
+    public static Asset create(Collection collection, User user) {
+        return Asset.builder()
+                .userId(user.getId())
+                .collectionId(collection.getId())
+                .minter(collection.getMinter())
+                .minterId(collection.getMinterId())
+                .minterAvatar(collection.getMinterAvatar())
+                .name(collection.getName())
+                .detail(collection.getDetail())
+                .pic(collection.getPic())
+                .model3d(collection.getModel3d())
+                .properties(collection.getProperties())
+                .privileges(collection.getPrivileges())
+                .category(collection.getCategory())
+                .canResale(collection.isCanResale())
+                .royalties(collection.getRoyalties())
+                .serviceCharge(collection.getServiceCharge())
+                .price(collection.getPrice())
+                .status(AssetStatus.NORMAL)
+                .owner(user.getNickname())
+                .ownerId(user.getId())
+                .ownerAvatar(user.getAvatar())
+                .projectId(collection.getProjectId())
+                .variableType(collection.isVariableType())
+                .categories(collection.getCategories())
+                .build();
+    }
+
+    public static Asset create(Collection collection,BlindBoxItem item, User user) {
+        return Asset.builder()
+                .userId(user.getId())
+                .collectionId(item.getCollectionId())
+                .minter(item.getMinter())
+                .minterId(item.getMinterId())
+                .minterAvatar(item.getMinterAvatar())
+                .name(item.getName())
+                .detail(item.getDetail())
+                .pic(item.getPic())
+                .model3d(item.getModel3d())
+                .properties(item.getProperties())
+                .privileges(item.getPrivileges())
+                .category(item.getCategory())
+                .canResale(item.isCanResale())
+                .royalties(item.getRoyalties())
+                .serviceCharge(item.getServiceCharge())
+                .price(item.getPrice())
+                .status(AssetStatus.NORMAL)
+                .owner(user.getNickname())
+                .ownerId(user.getId())
+                .ownerAvatar(user.getAvatar())
+                .projectId(item.getProjectId())
+                .blindBoxId(item.getBlindBoxId())
+                .categories(collection.getCategories())
+                .build();
+    }
+}

+ 47 - 0
src/main/java/com/izouma/nineth/domain/AssetSellLimit.java

@@ -0,0 +1,47 @@
+package com.izouma.nineth.domain;
+
+import cn.hutool.core.date.DateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("资产售卖限制")
+public class AssetSellLimit extends BaseEntity{
+
+    @ApiModelProperty("藏品ID")
+    private Long collectionId;
+
+    @ApiModelProperty("藏品名称")
+    private String collectionName;
+
+    @ApiModelProperty("最小价格")
+    private BigDecimal minPrice;
+
+    @ApiModelProperty("到期秒数")
+    private Integer expireSeconds;
+
+    @ApiModelProperty("到期时间")
+    private LocalDateTime expireDateTime;
+
+    @ApiModelProperty("是否允许上架")
+    @Column(columnDefinition = "boolean default false")
+    private Boolean allowOnShelf;
+
+
+    private int projectId;
+
+
+}

+ 83 - 0
src/main/java/com/izouma/nineth/domain/AuditedEntity.java

@@ -0,0 +1,83 @@
+package com.izouma.nineth.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.hibernate.envers.Audited;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.EntityListeners;
+import javax.persistence.MappedSuperclass;
+import java.time.LocalDateTime;
+
+@MappedSuperclass
+@Audited
+@EntityListeners(AuditingEntityListener.class)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public abstract class AuditedEntity {
+
+    @JsonIgnore
+    @CreatedBy
+    private String createdBy;
+
+    @JsonIgnore
+    @CreatedDate
+    private LocalDateTime createdAt;
+
+    @JsonIgnore
+    @LastModifiedBy
+    private String modifiedBy;
+
+    @JsonIgnore
+    @LastModifiedDate
+    private LocalDateTime modifiedAt;
+
+    private boolean del;
+
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    @JsonProperty("createdAt")
+    public LocalDateTime getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(LocalDateTime createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public String getModifiedBy() {
+        return modifiedBy;
+    }
+
+    public void setModifiedBy(String modifiedBy) {
+        this.modifiedBy = modifiedBy;
+    }
+
+    public LocalDateTime getModifiedAt() {
+        return modifiedAt;
+    }
+
+    public void setModifiedAt(LocalDateTime modifiedAt) {
+        this.modifiedAt = modifiedAt;
+    }
+
+    public boolean isDel() {
+        return del;
+    }
+
+    public void setDel(boolean del) {
+        this.del = del;
+    }
+}

+ 65 - 0
src/main/java/com/izouma/nineth/domain/AwardActivityCollectionInfo.java

@@ -0,0 +1,65 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.enums.AirDropType;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.persistence.*;
+
+/**
+ * 活动收集兑换藏品类
+ *
+ * @author ZouYuHong
+ */
+@Getter
+@Setter
+@Entity
+@Builder
+@AllArgsConstructor
+public class AwardActivityCollectionInfo extends BaseEntity {
+    /**
+     *AirDropType为asset时为藏品id 为surprise_box时为惊喜盒子id
+     */
+    private Long collectionId;
+    /**
+     * 名称
+     */
+    private String collectionName;
+    /**
+     * 上架数量
+     */
+    private Integer num;
+    /**
+     * 余量
+     */
+    private Integer stock;
+    /**
+     * 图片地址
+     */
+    @Transient
+    private String imgUrl;
+    /**
+     * 活动ID
+     */
+    @Column(name ="activity_id", insertable = false, updatable = false)
+    private Long activityId;
+
+    /**
+     * 获得数量
+     */
+    @Column(nullable=false,columnDefinition="int default 1")
+    private Integer exchangeNum;
+
+    /**
+     * 藏品类型
+     */
+    @Enumerated(EnumType.STRING)
+    @Column(nullable=false,columnDefinition="varchar(255) default 'asset' ")
+    private AirDropType airDropType;
+
+    public AwardActivityCollectionInfo() {
+        this.stock = num;
+    }
+}

+ 50 - 0
src/main/java/com/izouma/nineth/domain/Banner.java

@@ -0,0 +1,50 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.enums.BannerType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+
+@Data
+@Entity
+@Table(indexes = {@Index(columnList = "type")})
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("Banner")
+public class Banner extends BaseEntity {
+
+    @ApiModelProperty("名称")
+    @Searchable
+    private String name;
+
+    @ApiModelProperty("图片")
+    private String pic;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("排序")
+    private int sort;
+
+    @ApiModelProperty("展示位置")
+    @Enumerated(EnumType.STRING)
+    private BannerType type;
+
+    @ApiModelProperty("跳转")
+    private boolean link;
+
+    @ApiModelProperty("跳转类型")
+    private String linkType;
+
+    @ApiModelProperty("跳转内容")
+    private String linkContent;
+
+    private int projectId;
+}

+ 93 - 0
src/main/java/com/izouma/nineth/domain/BaseEntity.java

@@ -0,0 +1,93 @@
+package com.izouma.nineth.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.hibernate.envers.Audited;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.*;
+import java.time.LocalDateTime;
+
+@MappedSuperclass
+@Audited
+@EntityListeners(AuditingEntityListener.class)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(value = {"hibernateLazyInitializer"}, ignoreUnknown = true)
+public abstract class BaseEntity {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long id;
+
+    @JsonIgnore
+    @CreatedBy
+    private String createdBy;
+
+    @JsonIgnore
+    @CreatedDate
+    private LocalDateTime createdAt;
+
+    @JsonIgnore
+    @LastModifiedBy
+    private String modifiedBy;
+
+    @JsonIgnore
+    @LastModifiedDate
+    private LocalDateTime modifiedAt;
+
+    private boolean del;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    @JsonProperty("createdAt")
+    public LocalDateTime getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(LocalDateTime createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public String getModifiedBy() {
+        return modifiedBy;
+    }
+
+    public void setModifiedBy(String modifiedBy) {
+        this.modifiedBy = modifiedBy;
+    }
+
+    public LocalDateTime getModifiedAt() {
+        return modifiedAt;
+    }
+
+    public void setModifiedAt(LocalDateTime modifiedAt) {
+        this.modifiedAt = modifiedAt;
+    }
+
+    public boolean isDel() {
+        return del;
+    }
+
+    public void setDel(boolean del) {
+        this.del = del;
+    }
+}

+ 89 - 0
src/main/java/com/izouma/nineth/domain/BaseEntityNoID.java

@@ -0,0 +1,89 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.hibernate.envers.Audited;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.EntityListeners;
+import javax.persistence.MappedSuperclass;
+import java.time.LocalDateTime;
+
+@MappedSuperclass
+@Audited
+@EntityListeners(AuditingEntityListener.class)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(value = {"hibernateLazyInitializer"}, ignoreUnknown = true)
+public abstract class BaseEntityNoID {
+    @ExcelIgnore
+    @JsonIgnore
+    @CreatedBy
+    private String createdBy;
+
+    @ExcelProperty("创建时间")
+    @JsonIgnore
+    @CreatedDate
+    private LocalDateTime createdAt;
+
+    @ExcelIgnore
+    @JsonIgnore
+    @LastModifiedBy
+    private String modifiedBy;
+
+    @ExcelIgnore
+    @JsonIgnore
+    @LastModifiedDate
+    private LocalDateTime modifiedAt;
+
+    @ExcelIgnore
+    private boolean del;
+
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    @JsonProperty("createdAt")
+    public LocalDateTime getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(LocalDateTime createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public String getModifiedBy() {
+        return modifiedBy;
+    }
+
+    public void setModifiedBy(String modifiedBy) {
+        this.modifiedBy = modifiedBy;
+    }
+
+    public LocalDateTime getModifiedAt() {
+        return modifiedAt;
+    }
+
+    public void setModifiedAt(LocalDateTime modifiedAt) {
+        this.modifiedAt = modifiedAt;
+    }
+
+    public boolean isDel() {
+        return del;
+    }
+
+    public void setDel(boolean del) {
+        this.del = del;
+    }
+}

+ 106 - 0
src/main/java/com/izouma/nineth/domain/BlindBoxItem.java

@@ -0,0 +1,106 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.converter.FileObjectConverter;
+import com.izouma.nineth.converter.FileObjectListConverter;
+import com.izouma.nineth.converter.PrivilegeListConverter;
+import com.izouma.nineth.converter.PropertyListConverter;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@Entity
+@Table(indexes = {
+        @Index(columnList = "blindBoxId"),
+        @Index(columnList = "collectionId"),
+        @Index(columnList = "minterId"),
+})
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BlindBoxItem extends BaseEntity {
+
+    private Long blindBoxId;
+
+    private Long collectionId;
+
+    @ApiModelProperty("名称")
+    @Searchable
+    private String name;
+
+    @ApiModelProperty("图片")
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = FileObjectListConverter.class)
+    private List<FileObject> pic;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = FileObjectConverter.class)
+    private FileObject model3d;
+
+    @ApiModelProperty("铸造者")
+    @Searchable
+    private String minter;
+
+    @ApiModelProperty("铸造者ID")
+    private Long minterId;
+
+    @ApiModelProperty("铸造者头像")
+    private String minterAvatar;
+
+    @ApiModelProperty("详情")
+    @Column(columnDefinition = "TEXT")
+    private String detail;
+
+    @ApiModelProperty("已售")
+    private int sale;
+
+    @ApiModelProperty("库存")
+    private int stock;
+
+    @ApiModelProperty("发行数量")
+    private int total;
+
+    @ApiModelProperty("价格")
+    @Column(precision = 10, scale = 2)
+    private BigDecimal price;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = PropertyListConverter.class)
+    @ApiModelProperty("特性")
+    private List<CollectionProperty> properties;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = PrivilegeListConverter.class)
+    @ApiModelProperty("特权")
+    private List<Privilege> privileges;
+
+    @ApiModelProperty("是否可转售")
+    private boolean canResale;
+
+    @ApiModelProperty("版税比例")
+    private int royalties;
+
+    @ApiModelProperty("手续费比例")
+    private int serviceCharge;
+
+    @ApiModelProperty("分类")
+    private String category;
+
+    @ApiModelProperty("稀有")
+    private boolean rare;
+
+    private int projectId;
+
+    /**
+     * 主图模式,用于随机选取图片到资产
+     *
+     */
+    private String picPattern;
+}

+ 185 - 0
src/main/java/com/izouma/nineth/domain/Collection.java

@@ -0,0 +1,185 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.converter.FileObjectConverter;
+import com.izouma.nineth.converter.FileObjectListConverter;
+import com.izouma.nineth.converter.PrivilegeListConverter;
+import com.izouma.nineth.converter.PropertyListConverter;
+import com.izouma.nineth.enums.CollectionSource;
+import com.izouma.nineth.enums.CollectionType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Formula;
+
+import javax.persistence.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@Entity
+@Table(name = "collection_info", indexes = {
+        @Index(columnList = "type,source"),
+        @Index(columnList = "minterId"),
+        @Index(columnList = "onShelf"),
+        @Index(columnList = "ownerId"),
+        @Index(columnList = "assetId")
+})
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("藏品")
+public class Collection extends BaseEntity {
+
+    @ApiModelProperty("名称")
+    @Searchable
+    private String name;
+
+    @ApiModelProperty("图片")
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = FileObjectListConverter.class)
+    private List<FileObject> pic;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = FileObjectConverter.class)
+    private FileObject model3d;
+
+    @ApiModelProperty("铸造者")
+//    @Searchable
+    private String minter;
+
+    @ApiModelProperty("铸造者ID")
+    private Long minterId;
+
+    @ApiModelProperty("铸造者头像")
+    private String minterAvatar;
+
+    @ApiModelProperty("拥有者")
+//    @Searchable
+    private String owner;
+
+    @ApiModelProperty("拥有者ID")
+    private Long ownerId;
+
+    @ApiModelProperty("拥有者头像")
+    private String ownerAvatar;
+
+    @ApiModelProperty("详情")
+    @Column(columnDefinition = "TEXT")
+    private String detail;
+
+    @ApiModelProperty("类型")
+    @Enumerated(EnumType.STRING)
+    private CollectionType type;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = PropertyListConverter.class)
+    @ApiModelProperty("特性")
+    private List<CollectionProperty> properties;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = PrivilegeListConverter.class)
+    @ApiModelProperty("特权")
+    private List<Privilege> privileges;
+
+    @ApiModelProperty("编号")
+    private Integer number;
+
+    @ApiModelProperty("是否可转售")
+    private boolean canResale;
+
+    @ApiModelProperty("版税比例")
+    private int royalties;
+
+    @ApiModelProperty("手续费比例")
+    private int serviceCharge;
+
+    @ApiModelProperty("分类")
+    private String category;
+
+    @ApiModelProperty("来源")
+    @Enumerated(EnumType.STRING)
+    private CollectionSource source;
+
+    @ApiModelProperty("已售")
+    private int sale;
+
+    @ApiModelProperty("库存")
+    private int stock;
+
+    @ApiModelProperty("发行数量")
+    private int total;
+
+    @ApiModelProperty("点赞")
+    private int likes;
+
+    @ApiModelProperty("上架")
+    private boolean onShelf;
+
+    @ApiModelProperty("可售")
+    private boolean salable;
+
+    @ApiModelProperty("价格")
+    @Column(precision = 10, scale = 2)
+    private BigDecimal price;
+
+    @ApiModelProperty("盲盒开售时间")
+    private LocalDateTime startTime;
+
+    /**
+     * 是否定时发售
+     */
+    private boolean scheduleSale;
+
+    private int sort;
+
+    private Long assetId;
+
+    private BigDecimal originalPrice;
+
+    private Integer currentNumber;
+
+    @Formula(value = "if(stock <= 0, 1, 0)")
+    private int soldOut;
+
+    private int projectId;
+
+    /**
+     * 主图模式,用于随机选取图片到资产
+     */
+    private String picPattern;
+
+    /**
+     * 限购数量
+     */
+    private Integer limitBuyCount;
+
+    /**
+     *藏品目录信息
+     */
+    @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH})
+    @JoinColumn(name = "collection_category_id")
+    private CollectionCategory collectionCategory;
+
+    /**
+     * 藏品分类表ID
+     */
+    @Column(name = "collection_category_id",insertable = false, updatable = false)
+    private Long collectionCategoryId;
+
+    /**
+     *搜索集合 为一级菜单ID,二级菜单ID,三级菜单ID 这样存
+     */
+    private String categories;
+
+
+    @ApiModelProperty("盲盒是否自动打开,默认自动打开,true用户手动打开")
+    private boolean variableType ;
+
+    @ApiModelProperty("可变资产ID")
+    private Long variableCollectionId ;
+}

+ 74 - 0
src/main/java/com/izouma/nineth/domain/CollectionCategory.java

@@ -0,0 +1,74 @@
+package com.izouma.nineth.domain;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import lombok.*;
+import org.hibernate.Hibernate;
+import org.hibernate.annotations.Where;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author ZouYuHong
+ */
+@Getter
+@Setter
+@ToString
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("藏品分类")
+@Table(name = "collection_category", indexes = {
+        @Index(columnList = "name")
+
+})
+@JsonInclude(JsonInclude.Include.NON_EMPTY)
+public class CollectionCategory extends BaseEntity {
+
+    /**
+     * 分类名称
+     */
+    @NotBlank(message = "分类名不能为空")
+    private String name;
+
+    /**
+     * 父级分类ID
+     */
+    private Long parentId;
+    /**
+     * 项目Id
+     */
+    private int projectId;
+    /**
+     * 顺序
+     */
+    private Integer sort;
+
+    @OneToMany
+    @JoinColumn(name = "parentId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
+    @Where(clause = "del = 0")
+    private List<CollectionCategory> children;
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        CollectionCategory that = (CollectionCategory) o;
+        return getId() != null && Objects.equals(getId(), that.getId());
+    }
+
+    @Override
+    public int hashCode() {
+        return getClass().hashCode();
+    }
+
+    public CollectionCategory(Long id,Long parentId) {
+        super.setId(id);
+        this.parentId = parentId;
+    }
+}

+ 36 - 0
src/main/java/com/izouma/nineth/domain/CollectionNumber.java

@@ -0,0 +1,36 @@
+package com.izouma.nineth.domain;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("藏品编号")
+public class CollectionNumber {
+
+    private Long collectionId;
+
+    private String number;
+
+    private int sort;
+
+    private Long ownerId;
+
+    private Long assetId;
+
+    private boolean onShelf;
+
+    private boolean salable;
+
+    private BigDecimal price;
+
+
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов