Browse Source

初次提交

liuxiang 8 months ago
commit
6616ceb18d
100 changed files with 3349 additions and 0 deletions
  1. 39 0
      .gitignore
  2. 69 0
      Makefile
  3. 41 0
      build.gradle
  4. 14 0
      central-admin/Dockerfile
  5. 14 0
      central-admin/Makefile
  6. 14 0
      central-admin/Oversea.Makefile
  7. 22 0
      central-admin/build.gradle
  8. 15 0
      central-admin/src/main/java/com/atmob/central/CentralAdminApplication.java
  9. 19 0
      central-admin/src/main/java/com/atmob/central/admin/config/cos/CosConfig.java
  10. 45 0
      central-admin/src/main/java/com/atmob/central/admin/config/interceptor/AuthTokenInterceptor.java
  11. 19 0
      central-admin/src/main/java/com/atmob/central/admin/config/interceptor/InterceptorConfig.java
  12. 55 0
      central-admin/src/main/java/com/atmob/central/admin/config/token/AuthTokenConfig.java
  13. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminAuthHidden.java
  14. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminAuthStatus.java
  15. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminAuthSystem.java
  16. 7 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminAuthType.java
  17. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminDataAuthStatus.java
  18. 18 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminDataAuthType.java
  19. 5 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminFuncCode.java
  20. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminOrganStatus.java
  21. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminRoleStatus.java
  22. 9 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminUserConst.java
  23. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminUserStatus.java
  24. 7 0
      central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminUserType.java
  25. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/app/AppPackageStatus.java
  26. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/app/AppStatus.java
  27. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/app/ChannelStatus.java
  28. 6 0
      central-admin/src/main/java/com/atmob/central/admin/constant/app/ProjectStatus.java
  29. 9 0
      central-admin/src/main/java/com/atmob/central/admin/constant/upload/UploadConst.java
  30. 125 0
      central-admin/src/main/java/com/atmob/central/admin/controller/admin/AdminAuthController.java
  31. 64 0
      central-admin/src/main/java/com/atmob/central/admin/controller/admin/AdminOrganController.java
  32. 79 0
      central-admin/src/main/java/com/atmob/central/admin/controller/admin/AdminRoleController.java
  33. 88 0
      central-admin/src/main/java/com/atmob/central/admin/controller/admin/AdminUserController.java
  34. 59 0
      central-admin/src/main/java/com/atmob/central/admin/controller/advertisement/AdvertisementEventController.java
  35. 52 0
      central-admin/src/main/java/com/atmob/central/admin/controller/advertisement/AdvertisementOverviewController.java
  36. 45 0
      central-admin/src/main/java/com/atmob/central/admin/controller/advertisement/EventAnalysisTemplateController.java
  37. 75 0
      central-admin/src/main/java/com/atmob/central/admin/controller/app/AppController.java
  38. 39 0
      central-admin/src/main/java/com/atmob/central/admin/controller/app/AppPackageController.java
  39. 39 0
      central-admin/src/main/java/com/atmob/central/admin/controller/app/ChannelController.java
  40. 39 0
      central-admin/src/main/java/com/atmob/central/admin/controller/app/ProductController.java
  41. 45 0
      central-admin/src/main/java/com/atmob/central/admin/controller/app/ProjectController.java
  42. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/auth/AuthAlipayController.java
  43. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/auth/AuthDyController.java
  44. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/auth/AuthNeteaseController.java
  45. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/auth/AuthWechatController.java
  46. 27 0
      central-admin/src/main/java/com/atmob/central/admin/controller/auth/SmsController.java
  47. 27 0
      central-admin/src/main/java/com/atmob/central/admin/controller/complaint/ComplaintController.java
  48. 46 0
      central-admin/src/main/java/com/atmob/central/admin/controller/conf/ConfConditionController.java
  49. 53 0
      central-admin/src/main/java/com/atmob/central/admin/controller/conf/ConfController.java
  50. 54 0
      central-admin/src/main/java/com/atmob/central/admin/controller/document/AgreementDocumentController.java
  51. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/event/EventMetaInfoController.java
  52. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/event/EventMetaPropController.java
  53. 70 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayAliComplaintController.java
  54. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayConfigController.java
  55. 45 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayItemController.java
  56. 61 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayItemGroupController.java
  57. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayMerchantController.java
  58. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayOptionController.java
  59. 42 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayOrderController.java
  60. 35 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayRefundController.java
  61. 40 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayRenewController.java
  62. 33 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayTransferController.java
  63. 93 0
      central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayWechatComplaintController.java
  64. 114 0
      central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionAdvertiserController.java
  65. 47 0
      central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionAgentController.java
  66. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionGrantAccountController.java
  67. 46 0
      central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionGrantAppController.java
  68. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionLinkController.java
  69. 41 0
      central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionManageController.java
  70. 64 0
      central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionOptAppGroupController.java
  71. 33 0
      central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionOverViewController.java
  72. 85 0
      central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionReportController.java
  73. 40 0
      central-admin/src/main/java/com/atmob/central/admin/controller/security/SecurityController.java
  74. 79 0
      central-admin/src/main/java/com/atmob/central/admin/controller/statistics/rise/RiseController.java
  75. 38 0
      central-admin/src/main/java/com/atmob/central/admin/controller/subject/SubjectController.java
  76. 33 0
      central-admin/src/main/java/com/atmob/central/admin/controller/upload/UploadController.java
  77. 34 0
      central-admin/src/main/java/com/atmob/central/admin/controller/user/DeviceController.java
  78. 34 0
      central-admin/src/main/java/com/atmob/central/admin/controller/user/UserController.java
  79. 14 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthAllocateRequest.java
  80. 16 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthAuthsResponse.java
  81. 38 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthDto.java
  82. 11 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthIdsRequest.java
  83. 16 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthIdsResponse.java
  84. 16 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthMenuResponse.java
  85. 37 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthMenuVo.java
  86. 11 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthQueryRequest.java
  87. 22 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminDataAuthDto.java
  88. 13 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminDataAuthRequest.java
  89. 28 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminOrganDto.java
  90. 13 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminOrganQueryPageRequest.java
  91. 14 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminRoleAllocateRequest.java
  92. 22 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminRoleDto.java
  93. 12 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminRoleQueryPageRequest.java
  94. 27 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminUserDto.java
  95. 11 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminUserLoginRequest.java
  96. 15 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminUserLoginResponse.java
  97. 15 0
      central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminUserQueryPageRequest.java
  98. 14 0
      central-admin/src/main/java/com/atmob/central/admin/entity/app/AppAllocateRequest.java
  99. 16 0
      central-admin/src/main/java/com/atmob/central/admin/entity/document/StringListResponse.java
  100. 0 0
      central-admin/src/main/java/com/atmob/central/admin/entity/pay/PayOrderExportVo.java

+ 39 - 0
.gitignore

@@ -0,0 +1,39 @@
+HELP.md
+.gradle
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### IntelliJ IDEA ###
+.idea/**
+.idea
+*.iws
+*.iml
+*.ipr
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+/docker/dev/mount/**

+ 69 - 0
Makefile

@@ -0,0 +1,69 @@
+
+### 中台服务
+.PHONY: cloud-gateway
+cloud-gateway:
+	make -C cloud-gateway docker-build
+
+.PHONY: central-auth
+central-auth:
+	make -C central-auth docker-build
+
+.PHONY: central-conf
+central-conf:
+	make -C central-conf docker-build
+
+.PHONY: central-pay
+central-pay:
+	make -C central-pay docker-build
+
+.PHONY: central-security
+central-security:
+	make -C central-security docker-build
+
+.PHONY: central-user
+central-user:
+	make -C central-user docker-build
+
+.PHONY: central-value
+central-value:
+	make -C central-value docker-build
+
+.PHONY: central-admin
+central-admin:
+	make -C central-admin docker-build
+
+.PHONY: central-statistics
+central-statistics:
+	make -C central-statistics docker-build
+
+### 业务服务
+.PHONY: project-charge
+project-charge:
+	make -C project-charge docker-build
+
+.PHONY: project-playlet
+project-playlet:
+	make -C project-playlet docker-build
+
+.PHONY: project-recover
+project-recover:
+	make -C project-recover docker-build
+
+.PHONY: project-warn
+project-warn:
+	make -C project-warn docker-build
+
+### 洗悦家服务
+.PHONY: project-wash
+project-wash:
+	make -C project-wash docker-build
+
+
+### 启动服务的本地docker compose
+.PHONY: docker-compose-up
+docker-compose-up:
+	docker-compose up -d
+
+# 停止服务 删除容器
+#docker stop cloud-gateway central-conf central-value project-charge central-auth central-user central-pay central-security central-admin
+#docker rm cloud-gateway central-conf central-value project-charge central-auth central-user central-pay central-security central-admin

+ 41 - 0
build.gradle

@@ -0,0 +1,41 @@
+plugins {
+    id 'java'
+    id 'org.springframework.boot' version '2.7.17'
+    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
+}
+
+group = 'com.atmob'
+version = '1.0.0'
+
+allprojects {
+    apply plugin: 'java'
+    apply plugin: 'org.springframework.boot'
+    apply plugin: 'io.spring.dependency-management'
+
+    java {
+        sourceCompatibility = JavaVersion.VERSION_11
+        targetCompatibility = JavaVersion.VERSION_11
+    }
+
+    repositories {
+        maven { url 'https://mirrors.tuna.tsinghua.edu.cn/' }
+        maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'}
+        maven {
+            url "https://plugins.gradle.org/m2/"
+        }
+        mavenCentral()
+    }
+
+    dependencies {
+        implementation 'org.springframework.boot:spring-boot-starter'
+        annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
+        annotationProcessor 'org.projectlombok:lombok'
+        compileOnly 'org.projectlombok:lombok'
+        testImplementation 'org.springframework.boot:spring-boot-starter-test'
+    }
+
+    tasks.named('test') {
+        useJUnitPlatform()
+    }
+
+}

+ 14 - 0
central-admin/Dockerfile

@@ -0,0 +1,14 @@
+FROM eclipse-temurin:11-jre-alpine
+
+WORKDIR /app
+
+##alpine timezone config: https://juejin.cn/post/6953896893206249508
+RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
+    && apk update \
+    && apk add tzdata \
+    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
+    && echo "Asia/Shanghai" > /etc/timezone
+
+COPY ./build/libs/central-admin-1.0.0.jar /app/central-admin.jar
+
+ENTRYPOINT java $xms $xmx -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -Dspring.profiles.active=$active -jar /app/central-admin.jar

+ 14 - 0
central-admin/Makefile

@@ -0,0 +1,14 @@
+###构建docker镜像
+ss=central-admin
+ts=$(shell date '+%Y-%m-%d-%H_%M_%S')
+prefix=ccr.ccs.tencentyun.com/central-k8s
+.PHONY: docker-build
+docker-build:
+	\
+docker build --platform linux/amd64 -t $(ss):$(ts) . &&\
+docker tag $(ss):$(ts) $(prefix)/$(ss):$(ts)  &&\
+docker tag $(ss):$(ts) $(prefix)/$(ss):latest &&\
+docker login ccr.ccs.tencentyun.com --username=100003829113 --password=2162162qqq### &&\
+docker push $(prefix)/$(ss):$(ts) &&\
+docker push $(prefix)/$(ss):latest &&\
+docker rmi $(ss):$(ts)

+ 14 - 0
central-admin/Oversea.Makefile

@@ -0,0 +1,14 @@
+###构建docker镜像
+ss=central-admin
+ts=$(shell date '+%Y-%m-%d-%H_%M_%S')
+prefix=uswccr.ccs.tencentyun.com/central-k8s
+.PHONY: docker-build
+docker-build:
+	\
+docker build --platform linux/amd64 -t $(ss):$(ts) . &&\
+docker tag $(ss):$(ts) $(prefix)/$(ss):$(ts)  &&\
+docker tag $(ss):$(ts) $(prefix)/$(ss):latest &&\
+docker login uswccr.ccs.tencentyun.com --username=100003829113 --password=2162162qqq### &&\
+docker push $(prefix)/$(ss):$(ts) &&\
+docker push $(prefix)/$(ss):latest &&\
+docker rmi $(ss):$(ts)

+ 22 - 0
central-admin/build.gradle

@@ -0,0 +1,22 @@
+apply from: "${rootProject.projectDir}/central-common.gradle"
+
+group = 'com.atmob.central'
+version = '1.0.0'
+
+dependencies {
+    implementation project(':central-common')
+    implementation project(':central-conf-api')
+    implementation project(':central-statistics-api')
+    implementation project(':central-pay-api')
+    implementation project(':central-user-api')
+    implementation project(':central-security-api')
+    implementation project(':central-auth-api')
+    implementation project(':central-event-api')
+    implementation project(':central-promotion-api')
+    implementation project(':central-advertisement-api')
+
+    //TENCENT COS
+    implementation 'com.qcloud:cos_api:5.6.187'
+    // EasyExcel
+    implementation 'com.alibaba:easyexcel:3.3.4'
+}

+ 15 - 0
central-admin/src/main/java/com/atmob/central/CentralAdminApplication.java

@@ -0,0 +1,15 @@
+package com.atmob.central;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@EnableFeignClients
+@EnableDiscoveryClient
+@SpringBootApplication
+public class CentralAdminApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(CentralAdminApplication.class, args);
+    }
+}

+ 19 - 0
central-admin/src/main/java/com/atmob/central/admin/config/cos/CosConfig.java

@@ -0,0 +1,19 @@
+package com.atmob.central.admin.config.cos;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.context.annotation.Configuration;
+
+@Getter
+@Setter
+@Configuration
+@ConfigurationProperties(prefix = "tencent.cloud.cos")
+@RefreshScope
+public class CosConfig {
+    private String secretId;
+    private String secretKey;
+    private String bucketName;
+    private String cdnHost;
+}

+ 45 - 0
central-admin/src/main/java/com/atmob/central/admin/config/interceptor/AuthTokenInterceptor.java

@@ -0,0 +1,45 @@
+package com.atmob.central.admin.config.interceptor;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.constant.admin.AdminUserStatus;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.common.exception.AdminErrorCode;
+import com.atmob.central.common.exception.AdminException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Component
+@Slf4j
+public class AuthTokenInterceptor implements HandlerInterceptor {
+
+    @Resource
+    private AdminUserService adminUserService;
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        String origin = request.getHeader("Origin");
+        response.setHeader("Access-Control-Allow-Origin", origin);
+        response.setHeader("Access-Control-Allow-Headers", "authorization,content-type,x-requested-with");
+
+        String requestURI = request.getRequestURI();
+        if (AdminUserConst.LOGIN_PATH.equals(requestURI) || AdminUserConst.REGISTER_PATH.equals(requestURI)) {
+            return true;
+        }
+        String authToken = request.getHeader(AdminUserConst.AUTH_TOKEN_HEADER);
+        Long userId = adminUserService.getAdminUserId(authToken);
+        if (userId == null) {
+            throw new AdminException(AdminErrorCode.AUTH_TOKEN_INVALID);
+        }
+        AdminUser user = adminUserService.getById(userId);
+        if (user == null || user.getStatus().equals(AdminUserStatus.DISABLED.ordinal())) {
+            throw new AdminException(AdminErrorCode.FORBIDDEN_USER);
+        }
+        return true;
+    }
+}

+ 19 - 0
central-admin/src/main/java/com/atmob/central/admin/config/interceptor/InterceptorConfig.java

@@ -0,0 +1,19 @@
+package com.atmob.central.admin.config.interceptor;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import javax.annotation.Resource;
+
+@Configuration
+public class InterceptorConfig implements WebMvcConfigurer {
+
+    @Resource
+    private AuthTokenInterceptor authTokenInterceptor;
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(authTokenInterceptor).addPathPatterns("/central/admin/**");
+    }
+}

+ 55 - 0
central-admin/src/main/java/com/atmob/central/admin/config/token/AuthTokenConfig.java

@@ -0,0 +1,55 @@
+package com.atmob.central.admin.config.token;
+
+import com.atmob.common.util.CertUtil;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.context.annotation.Configuration;
+
+import java.security.interfaces.RSAPrivateKey;
+import java.security.interfaces.RSAPublicKey;
+
+@Configuration
+@ConfigurationProperties(prefix = "config.auth-token")
+@Getter
+@Setter
+@RefreshScope
+public class AuthTokenConfig {
+    private String privateKey;
+    private String publicKey;
+
+    public RSAPrivateKey getRSAPrivateKey() {
+        if (privateKey == null) return null;
+        if (_private_key_instance != null && privateKey.equals(_private_key)) {
+            return _private_key_instance;
+        }
+        _private_key = privateKey;
+        _private_key_instance = CertUtil.getRSAPrivateKey(privateKey);
+        return _private_key_instance;
+    }
+
+    public RSAPublicKey getRSAPublicKey() {
+        if (publicKey == null) return null;
+        if (_public_key_instance != null && publicKey.equals(_public_key)) {
+            return _public_key_instance;
+        }
+        _public_key = publicKey;
+        _public_key_instance = CertUtil.getRSAPublicKey(publicKey);
+        return _public_key_instance;
+    }
+
+
+    @Getter(lombok.AccessLevel.NONE)
+    @Setter(lombok.AccessLevel.NONE)
+    private String _private_key;
+    @Getter(lombok.AccessLevel.NONE)
+    @Setter(lombok.AccessLevel.NONE)
+    private String _public_key;
+    @Getter(lombok.AccessLevel.NONE)
+    @Setter(lombok.AccessLevel.NONE)
+    private RSAPrivateKey _private_key_instance;
+    @Getter(lombok.AccessLevel.NONE)
+    @Setter(lombok.AccessLevel.NONE)
+    private RSAPublicKey _public_key_instance;
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminAuthHidden.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminAuthHidden {
+    NO,
+    YES,
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminAuthStatus.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminAuthStatus {
+    ENABLED,
+    DISABLED,
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminAuthSystem.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminAuthSystem {
+    central,
+    ad,
+}

+ 7 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminAuthType.java

@@ -0,0 +1,7 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminAuthType {
+    AUTH,
+    MENU,
+    BUTTON,
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminDataAuthStatus.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminDataAuthStatus {
+    ENABLED,
+    DISABLED,
+}

+ 18 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminDataAuthType.java

@@ -0,0 +1,18 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminDataAuthType {
+    NONE,
+    PERSON,
+    DEPT,
+    COMPANY,
+    ;
+
+    public static AdminDataAuthType of(int ordinal) {
+        for (AdminDataAuthType value : values()) {
+            if (value.ordinal() == ordinal) {
+                return value;
+            }
+        }
+        return NONE;
+    }
+}

+ 5 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminFuncCode.java

@@ -0,0 +1,5 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminFuncCode {
+    promotion_manage,
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminOrganStatus.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminOrganStatus {
+    ENABLED,
+    DISABLED,
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminRoleStatus.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminRoleStatus {
+    ENABLED,
+    DISABLED,
+}

+ 9 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminUserConst.java

@@ -0,0 +1,9 @@
+package com.atmob.central.admin.constant.admin;
+
+public class AdminUserConst {
+    public static final String AUTH_TOKEN_HEADER = "Authorization";
+    public static final String LOGIN_PATH = "/central/admin/v1/admin/user/login";
+    public static final String REGISTER_PATH = "/central/admin/v1/admin/user/register";
+    public static final String DEFAULT_PASSWORD = "123456";
+    public static final int PASSWORD_MIN_LENGTH = 6;
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminUserStatus.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminUserStatus {
+    ENABLED,
+    DISABLED,
+}

+ 7 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/admin/AdminUserType.java

@@ -0,0 +1,7 @@
+package com.atmob.central.admin.constant.admin;
+
+public enum AdminUserType {
+    NORMAL,
+    ENV_ADMIN,
+    SUPER_ADMIN,
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/app/AppPackageStatus.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.app;
+
+public enum AppPackageStatus {
+    ENABLED,
+    DISABLED,
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/app/AppStatus.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.app;
+
+public enum AppStatus {
+    ENABLED,
+    DISABLED,
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/app/ChannelStatus.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.app;
+
+public enum ChannelStatus {
+    ENABLED,
+    DISABLED,
+}

+ 6 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/app/ProjectStatus.java

@@ -0,0 +1,6 @@
+package com.atmob.central.admin.constant.app;
+
+public enum ProjectStatus {
+    ENABLED,
+    DISABLED,
+}

+ 9 - 0
central-admin/src/main/java/com/atmob/central/admin/constant/upload/UploadConst.java

@@ -0,0 +1,9 @@
+package com.atmob.central.admin.constant.upload;
+
+public class UploadConst {
+    private UploadConst() {
+
+    }
+
+    public static final String APK_UPLOAD_ROOT = "/central/apk";
+}

+ 125 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/admin/AdminAuthController.java

@@ -0,0 +1,125 @@
+package com.atmob.central.admin.controller.admin;
+
+import com.atmob.central.admin.constant.admin.AdminAuthSystem;
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.constant.admin.AdminUserType;
+import com.atmob.central.admin.entity.admin.*;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminAuthService;
+import com.atmob.central.admin.service.admin.AdminDataAuthService;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@Slf4j
+public class AdminAuthController {
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private AdminAuthService adminAuthService;
+    @Resource
+    private AdminDataAuthService adminDataAuthService;
+
+    @PostMapping("/central/admin/v1/admin/auth/create")
+    public DataResponse<Void> create(@RequestBody AdminAuthDto adminAuth,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        adminAuth.setEnv(user.getEnv());
+        adminAuthService.create(adminAuth);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/auth/update")
+    public DataResponse<Void> update(@RequestBody AdminAuthDto adminAuth,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        adminAuth.setEnv(user.getEnv());
+        adminAuthService.update(adminAuth);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/auth/data/list")
+    public DataResponse<PageResult<AdminDataAuthDto>> getRoleDataAuthList(@RequestBody AdminDataAuthRequest request,
+                                                                          @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        List<AdminDataAuthDto> list = adminDataAuthService.queryDataAuthByRoleId(request.getRoleId());
+        return DataResponse.ok(new PageResult<AdminDataAuthDto>().withList(list));
+    }
+
+    @PostMapping("/central/admin/v1/admin/auth/data/allocate")
+    public DataResponse<Void> allocateDataAuth(@RequestBody AdminDataAuthRequest request,
+                                               @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        adminDataAuthService.allocateDataAuth(request.getRoleId(), request.getList());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/auth/allocate")
+    public DataResponse<Void> allocate(@RequestBody AdminAuthAllocateRequest request,
+                                       @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        adminAuthService.allocate(user.getEnv(), request.getRoleId(), request.getAuthIds());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/auth/ids")
+    public DataResponse<AdminAuthIdsResponse> getAuthIds(@RequestBody AdminAuthIdsRequest request,
+                                                         @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        List<Integer> ids = adminAuthService.getAuthIds(user.getEnv(), request.getUserId(), request.getRoleId());
+        return DataResponse.ok(new AdminAuthIdsResponse().withIds(ids));
+    }
+
+    @PostMapping("/central/admin/v1/admin/auth/my")
+    public DataResponse<AdminAuthAuthsResponse> getMyAuths(@RequestBody AdminAuthQueryRequest request,
+                                                           @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        Long userId = null;
+        if (user.getUserType().equals(AdminUserType.NORMAL.ordinal())) {
+            userId = user.getId();
+        }
+        if (!StringUtils.hasText(request.getSystem())) {
+            request.setSystem(AdminAuthSystem.central.name());
+        }
+        List<String> auths = adminAuthService.getAuths(user.getEnv(), request.getSystem(), userId);
+        return DataResponse.ok(new AdminAuthAuthsResponse().withAuths(auths));
+    }
+
+    @PostMapping("/central/admin/v1/admin/auth/menu")
+    public DataResponse<AdminAuthMenuResponse> getMyMenu(@RequestBody AdminAuthQueryRequest request,
+                                                         @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        Long userId = null;
+        if (user.getUserType().equals(AdminUserType.NORMAL.ordinal())) {
+            userId = user.getId();
+        }
+        if (!StringUtils.hasText(request.getSystem())) {
+            request.setSystem(AdminAuthSystem.central.name());
+        }
+        List<AdminAuthMenuVo> list = adminAuthService.getMenu(user.getEnv(), request.getSystem(), userId);
+        return DataResponse.ok(new AdminAuthMenuResponse().withList(list));
+    }
+
+    @PostMapping("/central/admin/v1/admin/auth/trees")
+    public DataResponse<PageResult<AdminAuthDto>> queryTrees(@RequestBody AdminAuthQueryRequest request,
+                                                             @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        Long userId = null;
+        if (user.getUserType().equals(AdminUserType.NORMAL.ordinal())) {
+            userId = user.getId();
+        }
+        if (!StringUtils.hasText(request.getSystem())) {
+            request.setSystem(AdminAuthSystem.central.name());
+        }
+        List<AdminAuthDto> trees = adminAuthService.getTrees(user.getEnv(), request.getSystem(), userId);
+        return DataResponse.ok(new PageResult<AdminAuthDto>().withList(trees));
+    }
+}

+ 64 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/admin/AdminOrganController.java

@@ -0,0 +1,64 @@
+package com.atmob.central.admin.controller.admin;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.constant.admin.AdminUserType;
+import com.atmob.central.admin.entity.admin.*;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminAuthService;
+import com.atmob.central.admin.service.admin.AdminDataAuthService;
+import com.atmob.central.admin.service.admin.AdminOrganService;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@Slf4j
+public class AdminOrganController {
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private AdminOrganService adminOrganService;
+
+    @PostMapping("/central/admin/v1/admin/organ/page")
+    public DataResponse<PageResult<AdminOrganDto>> queryPage(@RequestBody AdminOrganQueryPageRequest request,
+                                                          @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        request.setEnv(user.getEnv());
+        PageResult<AdminOrganDto> page = adminOrganService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/admin/organ/create")
+    public DataResponse<Void> create(@RequestBody AdminOrganDto dto,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        dto.setEnv(user.getEnv());
+        adminOrganService.create(dto.getEnv(), dto.getParentId(), dto.getName(), dto.getSort(), dto.getRemark());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/organ/update")
+    public DataResponse<Void> update(@RequestBody AdminOrganDto dto,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        dto.setEnv(user.getEnv());
+        adminOrganService.update(dto.getId(), dto.getParentId(), dto.getName(), dto.getSort(), dto.getRemark());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/organ/trees")
+    public DataResponse<PageResult<AdminOrganDto>> getTrees(@RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        List<AdminOrganDto> trees = adminOrganService.getTrees(user.getEnv());
+        return DataResponse.ok(new PageResult<AdminOrganDto>().withList(trees));
+    }
+
+}

+ 79 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/admin/AdminRoleController.java

@@ -0,0 +1,79 @@
+package com.atmob.central.admin.controller.admin;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.entity.admin.AdminRoleAllocateRequest;
+import com.atmob.central.admin.entity.admin.AdminRoleDto;
+import com.atmob.central.admin.entity.admin.AdminRoleQueryPageRequest;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminRoleService;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@Slf4j
+public class AdminRoleController {
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private AdminRoleService adminRoleService;
+
+    @PostMapping("/central/admin/v1/admin/role/create")
+    public DataResponse<Void> create(@RequestBody AdminRoleDto adminRole,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        adminRoleService.create(user.getEnv(), adminRole.getName(), adminRole.getRemark());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/role/update")
+    public DataResponse<Void> update(@RequestBody AdminRoleDto adminRole,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        adminRoleService.update(adminRole.getId(), adminRole.getName(), adminRole.getRemark());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/role/page")
+    public DataResponse<PageResult<AdminRoleDto>> queryPage(@RequestBody AdminRoleQueryPageRequest request,
+                                                            @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        request.setEnv(user.getEnv());
+        PageResult<AdminRoleDto> page = adminRoleService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/admin/role/allocate")
+    public DataResponse<Void> allocate(@RequestBody AdminRoleAllocateRequest request,
+                                       @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        adminRoleService.allocate(user.getEnv(), request.getUserId(), request.getRoleIds());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/role/list")
+    public DataResponse<PageResult<AdminRoleDto>> getRoleList(@RequestBody AdminRoleAllocateRequest request,
+                                                              @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        if (request.getUserId() == null) {
+            request.setUserId(user.getId());
+        }
+        List<AdminRoleDto> list = adminRoleService.getRoleList(user.getEnv(), request.getUserId());
+        return DataResponse.ok(new PageResult<AdminRoleDto>().withList(list));
+    }
+
+    @PostMapping("/central/admin/v1/admin/role/my")
+    public DataResponse<PageResult<AdminRoleDto>> getMyRoleList(@RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        List<AdminRoleDto> list = adminRoleService.getRoleList(user.getEnv(), user.getId());
+        return DataResponse.ok(new PageResult<AdminRoleDto>().withList(list));
+    }
+}

+ 88 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/admin/AdminUserController.java

@@ -0,0 +1,88 @@
+package com.atmob.central.admin.controller.admin;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.constant.admin.AdminUserType;
+import com.atmob.central.admin.entity.admin.AdminUserLoginRequest;
+import com.atmob.central.admin.entity.admin.AdminUserLoginResponse;
+import com.atmob.central.admin.entity.admin.AdminUserDto;
+import com.atmob.central.admin.entity.admin.AdminUserQueryPageRequest;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.common.exception.AdminException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class AdminUserController {
+    @Resource
+    private AdminUserService adminUserService;
+
+    @PostMapping(AdminUserConst.LOGIN_PATH)
+    public DataResponse<AdminUserLoginResponse> login(@RequestBody AdminUserLoginRequest request) {
+        AdminUserLoginResponse response = adminUserService.loginWithAccountPassword(request.getAccount(), request.getPassword());
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping(AdminUserConst.REGISTER_PATH)
+    public DataResponse<Void> register(@RequestBody AdminUserDto adminUser,
+                                       @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        if (!"BgeNpi3y9pkjyWJocDpsCjuuwJxYhNta".equals(authToken)) {
+            throw new AdminException("authToken invalid");
+        }
+        adminUserService.create(adminUser.getEnv(), adminUser.getAccount(), adminUser.getNickname(), adminUser.getRemark(), AdminUserType.ENV_ADMIN.ordinal(), adminUser.getOrganId());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/user/password/reset")
+    public DataResponse<Void> resetPassword(@RequestBody AdminUserLoginRequest request,
+                                            @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        if (!user.getAccount().equals(request.getAccount())) {
+            throw new AdminException("account invalid");
+        }
+        adminUserService.resetPassword(request.getAccount(), request.getOriginalPassword(), request.getPassword());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/user/create")
+    public DataResponse<Void> create(@RequestBody AdminUserDto adminUser,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        if (!user.getUserType().equals(AdminUserType.SUPER_ADMIN.ordinal())) {
+            adminUser.setUserType(AdminUserType.NORMAL.ordinal());
+            adminUser.setEnv(user.getEnv());
+        }
+        adminUserService.create(adminUser.getEnv(), adminUser.getAccount(), adminUser.getNickname(), adminUser.getRemark(), adminUser.getUserType(), adminUser.getOrganId());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/user/update")
+    public DataResponse<Void> update(@RequestBody AdminUserDto adminUser,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        if (!user.getUserType().equals(AdminUserType.ENV_ADMIN.ordinal())) {
+            adminUser.setId(user.getId());
+            adminUser.setStatus(user.getStatus());
+            adminUser.setOrganId(user.getOrganId());
+        }
+        adminUserService.update(adminUser.getId(), adminUser.getNickname(), adminUser.getRemark(), adminUser.getStatus(), adminUser.getOrganId());
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/admin/user/page")
+    public DataResponse<PageResult<AdminUserDto>> queryPage(@RequestBody AdminUserQueryPageRequest request,
+                                                            @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        request.setEnv(user.getEnv());
+        PageResult<AdminUserDto> page = adminUserService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+}

+ 59 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/advertisement/AdvertisementEventController.java

@@ -0,0 +1,59 @@
+package com.atmob.central.admin.controller.advertisement;
+
+import com.atmob.central.advertisement.entity.event.TbEventDataMapVo;
+import com.atmob.central.advertisement.entity.event.TbEventPageRequest;
+import com.atmob.central.advertisement.entity.event.TbEventQuerySqlRequest;
+import com.atmob.central.advertisement.entity.event.TbEventQuerySqlVo;
+import com.atmob.central.advertisement.service.AdvertisementEventApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class AdvertisementEventController {
+
+    @Resource
+    private AdvertisementEventApiService advertisementEventApiService;
+
+    @PostMapping("/central/admin/v1/advertisement/v1/event/info/page")
+    public DataResponse<PageResult<TbEventDataMapVo>> queryTbEventPage(@RequestBody TbEventPageRequest request) {
+        PageResult<TbEventDataMapVo> page = advertisementEventApiService.queryTbEventPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/advertisement/v1/event/info/statistics")
+    public DataResponse<TbEventDataMapVo> queryTbEventStatistics(@RequestBody TbEventPageRequest request) {
+        TbEventDataMapVo vo = advertisementEventApiService.queryTbEventStatistics(request);
+        return DataResponse.ok(vo);
+    }
+
+    @PostMapping("/central/admin/v1/advertisement/v1/event/user/page")
+    public DataResponse<PageResult<TbEventDataMapVo>> queryTbEventUserPage(@RequestBody TbEventPageRequest request) {
+        PageResult<TbEventDataMapVo> page = advertisementEventApiService.queryTbEventUserPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/advertisement/v1/event/user/statistics")
+    public DataResponse<TbEventDataMapVo> queryTbEventUserStatistics(@RequestBody TbEventPageRequest request) {
+        TbEventDataMapVo vo = advertisementEventApiService.queryTbEventUserStatistics(request);
+        return DataResponse.ok(vo);
+    }
+
+    @PostMapping("/central/admin/v1/advertisement/v1/event/sql/query")
+    public DataResponse<TbEventQuerySqlVo> queryTbEventQuerySql(@RequestBody TbEventQuerySqlRequest request) {
+        TbEventQuerySqlVo vo = advertisementEventApiService.queryTbEventQuerySql(request);
+        return DataResponse.ok(vo);
+    }
+
+    @PostMapping("/central/admin/v1/advertisement/v1/event/analysis/user/retention")
+    public DataResponse<TbEventQuerySqlVo> userRetention(@RequestBody TbEventQuerySqlRequest request) {
+        TbEventQuerySqlVo vo = advertisementEventApiService.userRetention(request);
+        return DataResponse.ok(vo);
+    }
+}

+ 52 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/advertisement/AdvertisementOverviewController.java

@@ -0,0 +1,52 @@
+package com.atmob.central.admin.controller.advertisement;
+
+import com.atmob.central.advertisement.entity.event.OverviewUserInfoQueryRequest;
+import com.atmob.central.advertisement.entity.event.TbEventDataMapVo;
+import com.atmob.central.advertisement.service.AdvertisementOverviewApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class AdvertisementOverviewController {
+
+    @Resource
+    private AdvertisementOverviewApiService advertisementOverviewApiService;
+
+
+    @PostMapping("/central/admin/v1/advertisement/v1/overview/user/info")
+    public DataResponse<PageResult<TbEventDataMapVo>> queryOverviewUserInfo(@RequestBody OverviewUserInfoQueryRequest request) {
+        return DataResponse.ok(advertisementOverviewApiService.queryOverviewUserInfo(request));
+    }
+
+    @PostMapping("/central/admin/v1/advertisement/v1/overview/time/statistics")
+    public DataResponse<PageResult<TbEventDataMapVo>> queryOverviewTimeStatistics(@RequestBody OverviewUserInfoQueryRequest request) {
+        return DataResponse.ok(advertisementOverviewApiService.queryOverviewTimeStatistics(request));
+    }
+
+    @PostMapping("/central/admin/v1/advertisement/v1/overview/retention/rate")
+    public DataResponse<PageResult<TbEventDataMapVo>> queryOverviewRetentionRate(@RequestBody OverviewUserInfoQueryRequest request) {
+        return DataResponse.ok(advertisementOverviewApiService.queryOverviewRetentionRate(request));
+    }
+
+    @PostMapping("/central/admin/v1/advertisement/v1/overview/transaction/info")
+    public DataResponse<PageResult<TbEventDataMapVo>> queryOverviewTransactionInfo(@RequestBody OverviewUserInfoQueryRequest request) {
+        return DataResponse.ok(advertisementOverviewApiService.queryOverviewTransactionInfo(request));
+    }
+
+    @PostMapping("/central/admin/v1/advertisement/v1/overview/realization/info")
+    public DataResponse<PageResult<TbEventDataMapVo>> queryOverviewRealizationInfo(@RequestBody OverviewUserInfoQueryRequest request) {
+        return DataResponse.ok(advertisementOverviewApiService.queryOverviewRealizationInfo(request));
+    }
+
+    @PostMapping("/central/admin/v1/advertisement/v1/overview/realization/constitute/analysis")
+    public DataResponse<PageResult<TbEventDataMapVo>> queryOverviewRealizationConstituteAnalysis(@RequestBody OverviewUserInfoQueryRequest request) {
+        return DataResponse.ok(advertisementOverviewApiService.queryOverviewRealizationConstituteAnalysis(request));
+    }
+}

+ 45 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/advertisement/EventAnalysisTemplateController.java

@@ -0,0 +1,45 @@
+package com.atmob.central.admin.controller.advertisement;
+
+import com.atmob.central.advertisement.entity.event.EventAnalysisTemplateDto;
+import com.atmob.central.advertisement.entity.event.EventAnalysisTemplatePageRequest;
+import com.atmob.central.advertisement.service.EventAnalysisTemplateApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class EventAnalysisTemplateController {
+
+    @Resource
+    private EventAnalysisTemplateApiService templateApiService;
+
+    @PostMapping("/central/admin/v1/event/analysis/template/get")
+    public DataResponse<EventAnalysisTemplateDto> getById(@RequestBody EventAnalysisTemplatePageRequest request) {
+        EventAnalysisTemplateDto dto = templateApiService.getById(request);
+        return DataResponse.ok(dto);
+    }
+
+    @PostMapping("/central/admin/v1/event/analysis/template/page")
+    public DataResponse<PageResult<EventAnalysisTemplateDto>> queryPage(@RequestBody EventAnalysisTemplatePageRequest request) {
+        PageResult<EventAnalysisTemplateDto> page = templateApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/event/analysis/template/create")
+    public DataResponse<Void> create(@RequestBody EventAnalysisTemplateDto dto) {
+        templateApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/event/analysis/template/update")
+    public DataResponse<Void> update(@RequestBody EventAnalysisTemplateDto dto) {
+        templateApiService.update(dto);
+        return DataResponse.ok();
+    }
+}

+ 75 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/app/AppController.java

@@ -0,0 +1,75 @@
+package com.atmob.central.admin.controller.app;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.entity.app.AppAllocateRequest;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.admin.service.app.AdminAppService;
+import com.atmob.central.auth.entity.app.AppDto;
+import com.atmob.central.auth.entity.app.AppQueryPageRequest;
+import com.atmob.central.auth.service.app.AppApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class AppController {
+
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private AdminAppService adminAppService;
+    @Resource
+    private AppApiService appApiService;
+
+    @PostMapping("/central/admin/v1/app/page")
+    public DataResponse<PageResult<AppDto>> queryPage(@RequestBody AppQueryPageRequest request,
+                                                      @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        request.setEnv(user.getEnv());
+        PageResult<AppDto> page = appApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/app/create")
+    public DataResponse<AppDto> create(@RequestBody AppDto app,
+                                       @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        app.setEnv(user.getEnv());
+        appApiService.create(app);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/app/update")
+    public DataResponse<AppDto> update(@RequestBody AppDto app,
+                                       @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        app.setEnv(user.getEnv());
+        appApiService.update(app);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/app/secret/refresh")
+    public DataResponse<AppDto> refreshSecret(@RequestBody AppDto app,
+                                              @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        app.setEnv(user.getEnv());
+        appApiService.refreshAppKeySecret(app);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/app/allocate")
+    public DataResponse<Void> allocate(@RequestBody AppAllocateRequest request,
+                                       @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        adminAppService.allocate(user.getEnv(), request.getUserId(), request.getAppIds());
+        return DataResponse.ok();
+    }
+}

+ 39 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/app/AppPackageController.java

@@ -0,0 +1,39 @@
+package com.atmob.central.admin.controller.app;
+
+import com.atmob.central.auth.entity.app.AppPackageDto;
+import com.atmob.central.auth.entity.app.AppPackageQueryPageRequest;
+import com.atmob.central.auth.service.app.AppPackageApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class AppPackageController {
+
+    @Resource
+    private AppPackageApiService appPackageApiService;
+
+    @PostMapping("/central/admin/v1/package/page")
+    public DataResponse<PageResult<AppPackageDto>> queryPage(@RequestBody AppPackageQueryPageRequest request) {
+        PageResult<AppPackageDto> page = appPackageApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/package/create")
+    public DataResponse<AppPackageDto> create(@RequestBody AppPackageDto dto) {
+        appPackageApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/package/update")
+    public DataResponse<AppPackageDto> update(@RequestBody AppPackageDto dto) {
+        appPackageApiService.update(dto);
+        return DataResponse.ok();
+    }
+}

+ 39 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/app/ChannelController.java

@@ -0,0 +1,39 @@
+package com.atmob.central.admin.controller.app;
+
+import com.atmob.central.auth.entity.app.ChannelDto;
+import com.atmob.central.auth.entity.app.ChannelQueryPageRequest;
+import com.atmob.central.auth.service.app.ChannelApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class ChannelController {
+
+    @Resource
+    private ChannelApiService channelApiService;
+
+    @PostMapping("/central/admin/v1/channel/page")
+    public DataResponse<PageResult<ChannelDto>> queryPage(@RequestBody ChannelQueryPageRequest request) {
+        PageResult<ChannelDto> page = channelApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/channel/create")
+    public DataResponse<Void> create(@RequestBody ChannelDto dto) {
+        channelApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/channel/update")
+    public DataResponse<Void> update(@RequestBody ChannelDto dto) {
+        channelApiService.update(dto);
+        return DataResponse.ok();
+    }
+}

+ 39 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/app/ProductController.java

@@ -0,0 +1,39 @@
+package com.atmob.central.admin.controller.app;
+
+import com.atmob.central.auth.entity.app.ProductDto;
+import com.atmob.central.auth.entity.app.ProductQueryPageRequest;
+import com.atmob.central.auth.service.app.ProductApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class ProductController {
+
+    @Resource
+    private ProductApiService productApiService;
+
+    @PostMapping("/central/admin/v1/product/page")
+    public DataResponse<PageResult<ProductDto>> queryPage(@RequestBody ProductQueryPageRequest request) {
+        PageResult<ProductDto> page = productApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/product/create")
+    public DataResponse<ProductDto> create(@RequestBody ProductDto dto) {
+        productApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/product/update")
+    public DataResponse<ProductDto> update(@RequestBody ProductDto dto) {
+        productApiService.update(dto);
+        return DataResponse.ok();
+    }
+}

+ 45 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/app/ProjectController.java

@@ -0,0 +1,45 @@
+package com.atmob.central.admin.controller.app;
+
+import com.atmob.central.auth.entity.app.ProjectDto;
+import com.atmob.central.auth.entity.app.ProjectQueryPageRequest;
+import com.atmob.central.auth.service.app.ProjectApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class ProjectController {
+
+    @Resource
+    private ProjectApiService projectApiService;
+
+    @PostMapping("/central/admin/v1/project/page")
+    public DataResponse<PageResult<ProjectDto>> queryPage(@RequestBody ProjectQueryPageRequest request) {
+        PageResult<ProjectDto> page = projectApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/project/create")
+    public DataResponse<ProjectDto> create(@RequestBody ProjectDto dto) {
+        projectApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/project/update")
+    public DataResponse<ProjectDto> update(@RequestBody ProjectDto dto) {
+        projectApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/project/event/table/create")
+    public DataResponse<Void> createEventTable(@RequestBody ProjectDto dto) {
+        projectApiService.createEventTable(dto);
+        return DataResponse.ok();
+    }
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/auth/AuthAlipayController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.auth;
+
+import com.atmob.central.auth.entity.alipay.AuthAlipayConfigDto;
+import com.atmob.central.auth.entity.alipay.AuthAlipayConfigQueryPageRequest;
+import com.atmob.central.auth.service.alipay.AuthAlipayApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class AuthAlipayController {
+    @Resource
+    private AuthAlipayApiService authAlipayApiService;
+
+    @PostMapping("/central/admin/v1/auth/alipay/config/page")
+    public DataResponse<PageResult<AuthAlipayConfigDto>> queryConfigPage(@RequestBody AuthAlipayConfigQueryPageRequest request) {
+        PageResult<AuthAlipayConfigDto> page = authAlipayApiService.queryConfigPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/auth/alipay/config/create")
+    public DataResponse<Void> createConfig(@RequestBody AuthAlipayConfigDto dto) {
+        authAlipayApiService.createConfig(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/auth/alipay/config/update")
+    public DataResponse<Void> updateConfig(@RequestBody AuthAlipayConfigDto dto) {
+        authAlipayApiService.updateConfig(dto);
+        return DataResponse.ok();
+    }
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/auth/AuthDyController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.auth;
+
+import com.atmob.central.auth.entity.douyin.AuthDyConfigDto;
+import com.atmob.central.auth.entity.douyin.AuthDyConfigQueryPageRequest;
+import com.atmob.central.auth.service.douyin.AuthDyApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class AuthDyController {
+    @Resource
+    private AuthDyApiService authDyApiService;
+
+    @PostMapping("/central/admin/v1/auth/dy/config/page")
+    public DataResponse<PageResult<AuthDyConfigDto>> queryConfigPage(@RequestBody AuthDyConfigQueryPageRequest request) {
+        PageResult<AuthDyConfigDto> page = authDyApiService.queryConfigPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/auth/dy/config/create")
+    public DataResponse<Void> createConfig(@RequestBody AuthDyConfigDto dto) {
+        authDyApiService.createConfig(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/auth/dy/config/update")
+    public DataResponse<Void> updateConfig(@RequestBody AuthDyConfigDto dto) {
+        authDyApiService.updateConfig(dto);
+        return DataResponse.ok();
+    }
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/auth/AuthNeteaseController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.auth;
+
+import com.atmob.central.auth.entity.netease.AuthNeteaseConfigDto;
+import com.atmob.central.auth.entity.netease.AuthNeteaseConfigQueryPageRequest;
+import com.atmob.central.auth.service.netease.AuthNeteaseApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class AuthNeteaseController {
+    @Resource
+    private AuthNeteaseApiService authNeteaseApiService;
+
+    @PostMapping("/central/admin/v1/auth/netease/config/page")
+    public DataResponse<PageResult<AuthNeteaseConfigDto>> queryConfigPage(@RequestBody AuthNeteaseConfigQueryPageRequest request) {
+        PageResult<AuthNeteaseConfigDto> page = authNeteaseApiService.queryConfigPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/auth/netease/config/create")
+    public DataResponse<Void> createConfig(@RequestBody AuthNeteaseConfigDto dto) {
+        authNeteaseApiService.createConfig(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/auth/netease/config/update")
+    public DataResponse<Void> updateConfig(@RequestBody AuthNeteaseConfigDto dto) {
+        authNeteaseApiService.updateConfig(dto);
+        return DataResponse.ok();
+    }
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/auth/AuthWechatController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.auth;
+
+import com.atmob.central.auth.entity.wechat.AuthWechatConfigDto;
+import com.atmob.central.auth.entity.wechat.AuthWechatConfigQueryPageRequest;
+import com.atmob.central.auth.service.wechat.AuthWechatApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class AuthWechatController {
+    @Resource
+    private AuthWechatApiService authWechatApiService;
+
+    @PostMapping("/central/admin/v1/auth/wechat/config/page")
+    public DataResponse<PageResult<AuthWechatConfigDto>> queryConfigPage(@RequestBody AuthWechatConfigQueryPageRequest request) {
+        PageResult<AuthWechatConfigDto> page = authWechatApiService.queryConfigPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/auth/wechat/config/create")
+    public DataResponse<Void> createConfig(@RequestBody AuthWechatConfigDto dto) {
+        authWechatApiService.createConfig(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/auth/wechat/config/update")
+    public DataResponse<Void> updateConfig(@RequestBody AuthWechatConfigDto dto) {
+        authWechatApiService.updateConfig(dto);
+        return DataResponse.ok();
+    }
+}

+ 27 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/auth/SmsController.java

@@ -0,0 +1,27 @@
+package com.atmob.central.admin.controller.auth;
+
+import com.atmob.central.auth.entity.sms.SmsQueryCodeRequest;
+import com.atmob.central.auth.entity.sms.SmsQueryCodeResponse;
+import com.atmob.central.auth.service.sms.SmsApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class SmsController {
+    @Resource
+    private SmsApiService smsApiService;
+
+    @PostMapping("/central/admin/v1/auth/sms/code/query")
+    public DataResponse<SmsQueryCodeResponse> queryVerificationCode(@RequestBody SmsQueryCodeRequest request) {
+        String code = smsApiService.queryVerificationCode(request);
+        SmsQueryCodeResponse response = new SmsQueryCodeResponse();
+        response.setCode(code);
+        return DataResponse.ok(response);
+    }
+}

+ 27 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/complaint/ComplaintController.java

@@ -0,0 +1,27 @@
+package com.atmob.central.admin.controller.complaint;
+
+import com.atmob.central.auth.entity.complaint.ComplaintDto;
+import com.atmob.central.auth.entity.complaint.ComplaintQueryPageRequest;
+import com.atmob.central.auth.service.complaint.ComplaintApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class ComplaintController {
+    @Resource
+    private ComplaintApiService complaintApiService;
+
+    @PostMapping("/central/admin/v1/complaint/page")
+    public DataResponse<PageResult<ComplaintDto>> queryConfigPage(@RequestBody ComplaintQueryPageRequest request) {
+        PageResult<ComplaintDto> page = complaintApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+}

+ 46 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/conf/ConfConditionController.java

@@ -0,0 +1,46 @@
+package com.atmob.central.admin.controller.conf;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.conf.entity.conf.ConfConditionDto;
+import com.atmob.central.conf.entity.conf.ConfQueryPageRequest;
+import com.atmob.central.conf.entity.conf.HisConfConditionDto;
+import com.atmob.central.conf.entity.conf.HisConfQueryPageRequest;
+import com.atmob.central.conf.service.conf.ConfConditionApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class ConfConditionController {
+    @Resource
+    private ConfConditionApiService confConditionApiService;
+
+    @PostMapping("/central/admin/v1/conf/condition/page")
+    public DataResponse<PageResult<ConfConditionDto>> queryPage(@RequestBody ConfQueryPageRequest request) {
+        PageResult<ConfConditionDto> page = confConditionApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/conf/condition/create")
+    public DataResponse<ConfConditionDto> create(@RequestBody ConfConditionDto condition) {
+        condition = confConditionApiService.create(condition);
+        return DataResponse.ok(condition);
+    }
+
+    @PostMapping("/central/admin/v1/conf/condition/update")
+    public DataResponse<ConfConditionDto> update(@RequestBody ConfConditionDto condition) {
+        condition = confConditionApiService.update(condition);
+        return DataResponse.ok(condition);
+    }
+
+    @PostMapping("/central/admin/v1/conf/condition/history/page")
+    public DataResponse<PageResult<HisConfConditionDto>> queryPageHistory(@RequestBody HisConfQueryPageRequest request) {
+        PageResult<HisConfConditionDto> page = confConditionApiService.queryPageHistory(request);
+        return DataResponse.ok(page);
+    }
+}

+ 53 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/conf/ConfController.java

@@ -0,0 +1,53 @@
+package com.atmob.central.admin.controller.conf;
+
+import com.atmob.central.conf.entity.conf.ConfQueryPageRequest;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.conf.entity.conf.ConfDto;
+import com.atmob.central.conf.entity.conf.ConfRequest;
+import com.atmob.central.conf.entity.conf.ConfResponse;
+import com.atmob.central.conf.service.conf.ConfApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class ConfController {
+
+    @Resource
+    private ConfApiService confApiService;
+
+    @PostMapping("/central/admin/v1/conf/get")
+    public DataResponse<ConfResponse> getConf(@RequestBody ConfRequest request) {
+        ConfResponse response = confApiService.getConf(request);
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/conf/refresh")
+    public DataResponse<ConfResponse> refreshConf(@RequestBody ConfRequest request) {
+        ConfResponse response = confApiService.refreshConf(request);
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/conf/page")
+    public DataResponse<PageResult<ConfDto>> queryPage(@RequestBody ConfQueryPageRequest request) {
+        PageResult<ConfDto> page = confApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/conf/create")
+    public DataResponse<ConfDto> create(@RequestBody ConfDto conf) {
+        ConfDto dto = confApiService.create(conf);
+        return DataResponse.ok(dto);
+    }
+
+    @PostMapping("/central/admin/v1/conf/update")
+    public DataResponse<ConfDto> update(@RequestBody ConfDto conf) {
+        ConfDto dto = confApiService.update(conf);
+        return DataResponse.ok(dto);
+    }
+}

+ 54 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/document/AgreementDocumentController.java

@@ -0,0 +1,54 @@
+package com.atmob.central.admin.controller.document;
+
+import com.atmob.central.admin.entity.document.StringListResponse;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.conf.entity.document.AgreementDocumentDto;
+import com.atmob.central.conf.entity.document.AgreementDocumentQueryPageRequest;
+import com.atmob.central.conf.service.document.AgreementDocumentApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@Slf4j
+public class AgreementDocumentController {
+    @Resource
+    private AgreementDocumentApiService agreementDocumentApiService;
+
+    @PostMapping("/central/admin/v1/document/agreement/page")
+    public DataResponse<PageResult<AgreementDocumentDto>> queryPage(@RequestBody AgreementDocumentQueryPageRequest request) {
+        PageResult<AgreementDocumentDto> page = agreementDocumentApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/document/agreement/create")
+    public DataResponse<Void> create(@RequestBody AgreementDocumentDto agreementDocument) {
+        agreementDocumentApiService.create(agreementDocument);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/document/agreement/update")
+    public DataResponse<Void> update(@RequestBody AgreementDocumentDto agreementDocument) {
+        agreementDocumentApiService.update(agreementDocument);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/document/agreement/types")
+    public DataResponse<StringListResponse> getAgreementTypes() {
+        List<String> list = agreementDocumentApiService.getAgreementTypes();
+        StringListResponse response = new StringListResponse().withList(list);
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/document/agreement/product/names")
+    public DataResponse<StringListResponse> getProductNames() {
+        List<String> list = agreementDocumentApiService.getProductNames();
+        StringListResponse response = new StringListResponse().withList(list);
+        return DataResponse.ok(response);
+    }
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/event/EventMetaInfoController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.event;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.event.entity.EventMetaInfoQueryPageRequest;
+import com.atmob.central.event.entity.MetaInfo;
+import com.atmob.central.event.service.EventMetaInfoApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class EventMetaInfoController {
+    @Resource
+    private EventMetaInfoApiService eventMetaInfoApiService;
+
+    @PostMapping("/central/admin/v1/event/meta/info/page")
+    public DataResponse<PageResult<MetaInfo>> queryPage(@RequestBody EventMetaInfoQueryPageRequest request) {
+        PageResult<MetaInfo> page = eventMetaInfoApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/event/meta/info/create")
+    public DataResponse<Void> create(@RequestBody MetaInfo dto) {
+        eventMetaInfoApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/event/meta/info/update")
+    public DataResponse<Void> update(@RequestBody MetaInfo dto) {
+        eventMetaInfoApiService.update(dto);
+        return DataResponse.ok();
+    }
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/event/EventMetaPropController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.event;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.event.entity.EventMetaPropQueryPageRequest;
+import com.atmob.central.event.entity.MetaProp;
+import com.atmob.central.event.service.EventMetaPropApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class EventMetaPropController {
+    @Resource
+    private EventMetaPropApiService eventMetaPropApiService;
+
+    @PostMapping("/central/admin/v1/event/meta/prop/page")
+    public DataResponse<PageResult<MetaProp>> queryPage(@RequestBody EventMetaPropQueryPageRequest request) {
+        PageResult<MetaProp> page = eventMetaPropApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/event/meta/prop/create")
+    public DataResponse<Void> create(@RequestBody MetaProp dto) {
+        eventMetaPropApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/event/meta/prop/update")
+    public DataResponse<Void> update(@RequestBody MetaProp dto) {
+        eventMetaPropApiService.update(dto);
+        return DataResponse.ok();
+    }
+}

+ 70 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayAliComplaintController.java

@@ -0,0 +1,70 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.pay.entity.pay.*;
+import com.atmob.central.pay.service.complaint.PayAliComplaintApiService;
+import lombok.Cleanup;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+@RestController
+@Slf4j
+public class PayAliComplaintController {
+    @Resource
+    private PayAliComplaintApiService payAliComplaintApiService;
+
+    @PostMapping("/central/admin/v1/pay/complaint/ali/page")
+    public DataResponse<PageResult<PayAliComplaintDetailDto>> queryAliPage(@RequestBody PayAliComplaintRequest request) {
+        PageResult<PayAliComplaintDetailDto> page = payAliComplaintApiService.queryAliPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/ali/statistics")
+    public DataResponse<PayAliComplaintStatisticsDto> wechatStatistics(@RequestBody PayAliComplaintRequest request) {
+        PayAliComplaintStatisticsDto statisticsResult = payAliComplaintApiService.queryStatistics(request);
+        return DataResponse.ok(statisticsResult);
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/ali/getComplaint")
+    public DataResponse<PayAliComplaintDetailDto> getComplaint(@RequestBody PayAliComplaintRequest request) {
+        PayAliComplaintDetailDto payAliComplaintDetailDto = payAliComplaintApiService.getComplaint(request);
+        return DataResponse.ok(payAliComplaintDetailDto);
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/ali/uploadResponseImage")
+    public DataResponse<PayAliComplaintMediaDto> uploadResponseImage(PayAliComplaintRequest request, @RequestParam(value = "file") MultipartFile file) throws IOException {
+        @Cleanup
+        InputStream inputStream = file.getInputStream();
+        byte[] bytes = convertInputStreamToByteArray(inputStream);
+        request.setImageBytes(bytes);
+        request.setFileName(file.getOriginalFilename());
+        PayAliComplaintMediaDto payAliComplaintMediaDto = payAliComplaintApiService.uploadResponseImage(request);
+        return DataResponse.ok(payAliComplaintMediaDto);
+    }
+
+    private byte[] convertInputStreamToByteArray(InputStream inputStream) throws IOException {
+        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        byte[] buffer = new byte[1024];
+        int length;
+        while ((length = inputStream.read(buffer)) != -1) {
+            byteArrayOutputStream.write(buffer, 0, length);
+        }
+        return byteArrayOutputStream.toByteArray();
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/ali/submitResponse")
+    public DataResponse<Void> feedbackSubmit(@RequestBody PayAliComplaintRequest request) {
+        payAliComplaintApiService.submitResponse(request);
+        return DataResponse.ok();
+    }
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayConfigController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.pay.entity.pay.PayConfigDto;
+import com.atmob.central.pay.entity.pay.PayConfigQueryPageRequest;
+import com.atmob.central.pay.service.config.PayConfigApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PayConfigController {
+    @Resource
+    private PayConfigApiService payConfigApiService;
+
+    @PostMapping("/central/admin/v1/pay/config/create")
+    public DataResponse<Void> create(@RequestBody PayConfigDto dto) {
+        payConfigApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/config/update")
+    public DataResponse<Void> update(@RequestBody PayConfigDto dto) {
+        payConfigApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/config/page")
+    public DataResponse<PageResult<PayConfigDto>> queryPage(@RequestBody PayConfigQueryPageRequest request) {
+        PageResult<PayConfigDto> page = payConfigApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+}

+ 45 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayItemController.java

@@ -0,0 +1,45 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.pay.entity.item.PayItemChannelDto;
+import com.atmob.central.pay.entity.item.PayItemDto;
+import com.atmob.central.pay.entity.item.PayItemQueryPageRequest;
+import com.atmob.central.pay.service.item.PayItemApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PayItemController {
+    @Resource
+    private PayItemApiService payItemApiService;
+
+    @PostMapping("/central/admin/v1/pay/item/create")
+    public DataResponse<Void> create(@RequestBody PayItemDto dto) {
+        payItemApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/item/update")
+    public DataResponse<Void> update(@RequestBody PayItemDto dto) {
+        payItemApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/item/page")
+    public DataResponse<PageResult<PayItemDto>> queryPage(@RequestBody PayItemQueryPageRequest request) {
+        PageResult<PayItemDto> page = payItemApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/pay/item/channel/upsert")
+    public DataResponse<Void> upsertItemChannel(@RequestBody PayItemChannelDto dto) {
+        payItemApiService.upsertItemChannel(dto);
+        return DataResponse.ok();
+    }
+}

+ 61 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayItemGroupController.java

@@ -0,0 +1,61 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.pay.entity.item.*;
+import com.atmob.central.pay.service.item.PayItemGroupApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PayItemGroupController {
+    @Resource
+    private PayItemGroupApiService payItemGroupApiService;
+
+    @PostMapping("/central/admin/v1/pay/item/group/create")
+    public DataResponse<Void> create(@RequestBody PayItemGroupDto dto) {
+        payItemGroupApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/item/group/update")
+    public DataResponse<Void> update(@RequestBody PayItemGroupDto dto) {
+        payItemGroupApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/item/group/page")
+    public DataResponse<PageResult<PayItemGroupDto>> queryPage(@RequestBody PayItemGroupQueryPageRequest request) {
+        PageResult<PayItemGroupDto> page = payItemGroupApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/pay/item/group/item/add")
+    public DataResponse<Void> addItem(@RequestBody PayItemGroupEditRequest request) {
+        payItemGroupApiService.addItem(request);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/item/group/item/remove")
+    public DataResponse<Void> removeItem(@RequestBody PayItemGroupEditRequest request) {
+        payItemGroupApiService.removeItem(request);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/item/group/items/set")
+    public DataResponse<Void> setItems(@RequestBody PayItemGroupEditRequest request) {
+        payItemGroupApiService.setItems(request);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/item/group/items")
+    public DataResponse<PageResult<PayItemDto>> getAllItems(@RequestBody PayItemGroupQueryRequest request) {
+        PageResult<PayItemDto> page = payItemGroupApiService.getAllItems(request);
+        return DataResponse.ok(page);
+    }
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayMerchantController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.pay.entity.pay.PayMerchantDto;
+import com.atmob.central.pay.entity.pay.PayMerchantQueryPageRequest;
+import com.atmob.central.pay.service.merchant.PayMerchantApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PayMerchantController {
+    @Resource
+    private PayMerchantApiService payMerchantApiService;
+
+    @PostMapping("/central/admin/v1/pay/merchant/create")
+    public DataResponse<Void> create(@RequestBody PayMerchantDto dto) {
+        payMerchantApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/merchant/update")
+    public DataResponse<Void> update(@RequestBody PayMerchantDto dto) {
+        payMerchantApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/merchant/page")
+    public DataResponse<PageResult<PayMerchantDto>> queryPage(@RequestBody PayMerchantQueryPageRequest request) {
+        PageResult<PayMerchantDto> page = payMerchantApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayOptionController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.pay.entity.option.PayOptionDto;
+import com.atmob.central.pay.entity.option.PayOptionQueryPageRequest;
+import com.atmob.central.pay.service.option.PayOptionApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PayOptionController {
+    @Resource
+    private PayOptionApiService payOptionApiService;
+
+    @PostMapping("/central/admin/v1/pay/option/create")
+    public DataResponse<Void> create(@RequestBody PayOptionDto dto) {
+        payOptionApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/option/update")
+    public DataResponse<Void> update(@RequestBody PayOptionDto dto) {
+        payOptionApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/option/page")
+    public DataResponse<PageResult<PayOptionDto>> queryPage(@RequestBody PayOptionQueryPageRequest request) {
+        PageResult<PayOptionDto> page = payOptionApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+}

+ 42 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayOrderController.java

@@ -0,0 +1,42 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.admin.service.pay.PayService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.pay.entity.order.PayOrderQueryPageRequest;
+import com.atmob.central.pay.entity.order.PayOrderStatisticsVo;
+import com.atmob.central.pay.entity.order.PayOrderVo;
+import com.atmob.central.pay.service.order.PayOrderApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+@RestController
+@Slf4j
+public class PayOrderController {
+    @Resource
+    private PayOrderApiService payOrderApiService;
+    @Resource
+    private PayService payService;
+
+    @PostMapping("/central/admin/v1/pay/order/page")
+    public DataResponse<PageResult<PayOrderVo>> queryPage(@RequestBody PayOrderQueryPageRequest request) {
+        PageResult<PayOrderVo> page = payOrderApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/pay/order/statistics")
+    public DataResponse<PayOrderStatisticsVo> queryStatistics(@RequestBody PayOrderQueryPageRequest request) {
+        PayOrderStatisticsVo response = payOrderApiService.queryStatistics(request);
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/pay/order/export")
+    public void orderExport(@RequestBody PayOrderQueryPageRequest request, HttpServletResponse response) {
+        payService.orderExport(request, response);
+    }
+}

+ 35 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayRefundController.java

@@ -0,0 +1,35 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.pay.entity.pay.RefundRequest;
+import com.atmob.central.pay.entity.pay.RefundResponse;
+import com.atmob.central.pay.entity.pay.RefundStatusRequest;
+import com.atmob.central.pay.entity.pay.RefundStatusResponse;
+import com.atmob.central.pay.entity.transfer.PayTransferQueryPageRequest;
+import com.atmob.central.pay.service.pay.PayApiService;
+import com.atmob.central.pay.service.transfer.TransferApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PayRefundController {
+    @Resource
+    private PayApiService payApiService;
+
+    @PostMapping("/central/admin/v1/pay/refund")
+    public DataResponse<RefundResponse> requestRefund(@RequestBody RefundRequest request) {
+        RefundResponse response = payApiService.requestRefund(request);
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/pay/refund/status")
+    public DataResponse<RefundStatusResponse> queryRefundStatus(@RequestBody RefundStatusRequest request) {
+        RefundStatusResponse response = payApiService.queryRefundStatus(request);
+        return DataResponse.ok(response);
+    }
+}

+ 40 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayRenewController.java

@@ -0,0 +1,40 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.admin.service.pay.PayService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.pay.entity.order.*;
+import com.atmob.central.pay.service.order.PayRenewApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+@RestController
+@Slf4j
+public class PayRenewController {
+    @Resource
+    private PayRenewApiService payRenewApiService;
+    @Resource
+    private PayService payService;
+
+    @PostMapping("/central/admin/v1/pay/renew/page")
+    public DataResponse<PageResult<PayRenewVo>> queryPage(@RequestBody PayRenewQueryPageRequest request) {
+        PageResult<PayRenewVo> page = payRenewApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/pay/renew/statistics")
+    public DataResponse<PayRenewStatisticsVo> queryStatistics(@RequestBody PayRenewQueryPageRequest request) {
+        PayRenewStatisticsVo response = payRenewApiService.queryStatistics(request);
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/pay/renew/export")
+    public void renewExport(@RequestBody PayRenewQueryPageRequest request, HttpServletResponse response) {
+        payService.renewExport(request, response);
+    }
+}

+ 33 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayTransferController.java

@@ -0,0 +1,33 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.pay.entity.transfer.PayTransferDto;
+import com.atmob.central.pay.entity.transfer.PayTransferQueryPageRequest;
+import com.atmob.central.pay.entity.transfer.PayTransferStatisticsVo;
+import com.atmob.central.pay.service.transfer.TransferApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PayTransferController {
+    @Resource
+    private TransferApiService transferApiService;
+
+    @PostMapping("/central/admin/v1/pay/transfer/page")
+    public DataResponse<PageResult<PayTransferDto>> queryPage(@RequestBody PayTransferQueryPageRequest request) {
+        PageResult<PayTransferDto> page = transferApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/pay/transfer/statistics")
+    public DataResponse<PayTransferStatisticsVo> queryStatistics(@RequestBody PayTransferQueryPageRequest request) {
+        PayTransferStatisticsVo vo = transferApiService.queryStatistics(request);
+        return DataResponse.ok(vo);
+    }
+}

+ 93 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/pay/PayWechatComplaintController.java

@@ -0,0 +1,93 @@
+package com.atmob.central.admin.controller.pay;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.pay.entity.pay.*;
+import com.atmob.central.pay.service.complaint.PayWechatComplaintApiService;
+import lombok.Cleanup;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+@RestController
+@Slf4j
+public class PayWechatComplaintController {
+    @Resource
+    private PayWechatComplaintApiService payWechatComplaintApiService;
+
+    @PostMapping("/central/admin/v1/pay/complaint/wechat/page")
+    public DataResponse<PageResult<PayWechatComplaintDetailDto>> queryWechatPage(@RequestBody PayWechatComplaintRequest request) {
+        PageResult<PayWechatComplaintDetailDto> page = payWechatComplaintApiService.queryWechatPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/wechat/statistics")
+    public DataResponse<PayWechatComplaintStatisticsDto> wechatStatistics(@RequestBody PayWechatComplaintRequest request) {
+        PayWechatComplaintStatisticsDto statisticsResult = payWechatComplaintApiService.queryStatistics(request);
+        return DataResponse.ok(statisticsResult);
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/wechat/getComplaint")
+    public DataResponse<PayWechatComplaintDetailDto> getComplaint(@RequestBody PayWechatComplaintRequest request) {
+        PayWechatComplaintDetailDto payWechatComplaintDetailDto = payWechatComplaintApiService.getComplaint(request);
+        return DataResponse.ok(payWechatComplaintDetailDto);
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/wechat/queryNegotiationHistorys")
+    public DataResponse<List<PayWechatComplaintNegotiationDto>> queryNegotiationHistorys(@RequestBody PayWechatComplaintRequest request) {
+        List<PayWechatComplaintNegotiationDto> negotiationDtoList = payWechatComplaintApiService.queryNegotiationHistorys(request);
+        return DataResponse.ok(negotiationDtoList);
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/wechat/submitResponse")
+    public DataResponse<Void> submitResponse(@RequestBody PayWechatComplaintRequest request) {
+        payWechatComplaintApiService.submitResponse(request);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/wechat/uploadResponseImage")
+    public DataResponse<PayWechatComplaintMediaDto> uploadResponseImage(PayWechatComplaintRequest request, @RequestParam(value = "file") MultipartFile file) throws IOException {
+        @Cleanup
+        InputStream inputStream = file.getInputStream();
+        byte[] bytes = convertInputStreamToByteArray(inputStream);
+        request.setImageBytes(bytes);
+        request.setFileName(file.getOriginalFilename());
+        PayWechatComplaintMediaDto payWechatComplaintMediaDto = payWechatComplaintApiService.uploadResponseImage(request);
+        return DataResponse.ok(payWechatComplaintMediaDto);
+    }
+
+    private byte[] convertInputStreamToByteArray(InputStream inputStream) throws IOException {
+        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        byte[] buffer = new byte[1024];
+        int length;
+        while ((length = inputStream.read(buffer)) != -1) {
+            byteArrayOutputStream.write(buffer, 0, length);
+        }
+        return byteArrayOutputStream.toByteArray();
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/wechat/complete")
+    public DataResponse<Void> complete(@RequestBody PayWechatComplaintRequest request) {
+        payWechatComplaintApiService.complete(request);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/wechat/approveRefund")
+    public DataResponse<Void> refund(@RequestBody PayWechatComplaintRequest request) {
+        payWechatComplaintApiService.approveRefund(request);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/pay/complaint/wechat/rejectRefund")
+    public DataResponse<Void> rejectRefund(@RequestBody PayWechatComplaintRequest request) {
+        payWechatComplaintApiService.rejectRefund(request);
+        return DataResponse.ok();
+    }
+
+}

+ 114 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionAdvertiserController.java

@@ -0,0 +1,114 @@
+package com.atmob.central.admin.controller.promotion;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.admin.service.promotion.PromotionManageService;
+import com.atmob.central.advertisement.constant.promotion.PromotionAdvertiserConst;
+import com.atmob.central.advertisement.entity.promotion.PromotionAdvertiserBatchUpdateRequest;
+import com.atmob.central.advertisement.entity.promotion.PromotionAdvertiserDto;
+import com.atmob.central.advertisement.entity.promotion.PromotionAdvertiserQueryPageRequest;
+import com.atmob.central.advertisement.entity.promotion.report.PromotionReportQueryRequest;
+import com.atmob.central.advertisement.entity.promotion.report.PromotionReportVo;
+import com.atmob.central.advertisement.service.PromotionAdvertiserApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RestController
+@Slf4j
+public class PromotionAdvertiserController {
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private PromotionAdvertiserApiService promotionAdvertiserApiService;
+    @Resource
+    private PromotionManageService promotionManageService;
+
+    @PostMapping("/central/admin/v1/promotion/advertiser/page")
+    public DataResponse<PageResult<PromotionAdvertiserDto>> queryPage(@RequestBody PromotionAdvertiserQueryPageRequest request,
+                                                                      @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        List<Long> optUserIds = promotionManageService.getOptUserIds(adminUser);
+        if (request.getOptUserIds() == null || request.getOptUserIds().isEmpty()) {
+            optUserIds = new ArrayList<>(optUserIds);
+            optUserIds.add(0, PromotionAdvertiserConst.EMPTY_OPT_USER_ID);
+            request.setOptUserIds(optUserIds);
+        } else {
+            request.setOptUserIds(request.getOptUserIds().stream().filter(optUserIds::contains).collect(Collectors.toList()));
+        }
+        PageResult<PromotionAdvertiserDto> page = promotionAdvertiserApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/advertiser/manager/page")
+    public DataResponse<PromotionReportVo> queryManagerPage(@RequestBody PromotionReportQueryRequest request,
+                                                            @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        List<Long> optUserIds = promotionManageService.getOptUserIds(adminUser);
+        if (request.getOptUserIds() == null || request.getOptUserIds().isEmpty()) {
+            optUserIds = new ArrayList<>(optUserIds);
+            optUserIds.add(0, PromotionAdvertiserConst.EMPTY_OPT_USER_ID);
+            request.setOptUserIds(optUserIds);
+        } else {
+            request.setOptUserIds(request.getOptUserIds().stream().filter(optUserIds::contains).collect(Collectors.toList()));
+        }
+        PromotionReportVo page = promotionAdvertiserApiService.queryManagerPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/advertiser/create")
+    public DataResponse<Void> create(@RequestBody PromotionAdvertiserDto dto,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        promotionAdvertiserApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/advertiser/update")
+    public DataResponse<Void> update(@RequestBody PromotionAdvertiserDto dto,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        promotionAdvertiserApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/advertiser/batch/update/put")
+    public DataResponse<Void> batchUpdatePutStatus(@RequestBody PromotionAdvertiserBatchUpdateRequest request,
+                                                   @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        promotionAdvertiserApiService.batchUpdatePutStatus(request);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/advertiser/batch/update/opt")
+    public DataResponse<Void> batchUpdateOptUserId(@RequestBody PromotionAdvertiserBatchUpdateRequest request,
+                                                   @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        promotionAdvertiserApiService.batchUpdateOptUserId(request);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/advertiser/batch/update/app")
+    public DataResponse<Void> batchUpdateAppCode(@RequestBody PromotionAdvertiserBatchUpdateRequest request,
+                                                 @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        promotionAdvertiserApiService.batchUpdateAppCode(request);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/advertiser/batch/update/agent")
+    public DataResponse<Void> batchUpdateAgentId(@RequestBody PromotionAdvertiserBatchUpdateRequest request) {
+        promotionAdvertiserApiService.batchUpdateAgentId(request);
+        return DataResponse.ok();
+    }
+}

+ 47 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionAgentController.java

@@ -0,0 +1,47 @@
+package com.atmob.central.admin.controller.promotion;
+
+import com.atmob.central.advertisement.entity.promotion.PromotionAgentBatchUpdateRequest;
+import com.atmob.central.advertisement.entity.promotion.PromotionAgentDto;
+import com.atmob.central.advertisement.entity.promotion.PromotionAgentQueryPageRequest;
+import com.atmob.central.advertisement.service.PromotionAgentApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PromotionAgentController {
+    @Resource
+    private PromotionAgentApiService promotionAgentApiService;
+
+    @PostMapping("/central/admin/v1/promotion/agent/page")
+    public DataResponse<PageResult<PromotionAgentDto>> queryPage(@RequestBody PromotionAgentQueryPageRequest request) {
+        PageResult<PromotionAgentDto> page = promotionAgentApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/agent/create")
+    public DataResponse<Void> create(@RequestBody PromotionAgentDto dto) {
+        promotionAgentApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/agent/update")
+    public DataResponse<Void> update(@RequestBody PromotionAgentDto dto) {
+        promotionAgentApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/agent/batch/update/put")
+    public DataResponse<Void> batchUpdatePutStatus(@RequestBody PromotionAgentBatchUpdateRequest request) {
+        promotionAgentApiService.batchUpdatePutStatus(request);
+        return DataResponse.ok();
+    }
+
+
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionGrantAccountController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.promotion;
+
+import com.atmob.central.advertisement.entity.promotion.PromotionGrantAccountDto;
+import com.atmob.central.advertisement.entity.promotion.PromotionGrantAccountQueryPageRequest;
+import com.atmob.central.advertisement.service.PromotionGrantAccountApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PromotionGrantAccountController {
+    @Resource
+    private PromotionGrantAccountApiService promotionGrantAccountApiService;
+
+    @PostMapping("/central/admin/v1/promotion/grant/account/page")
+    public DataResponse<PageResult<PromotionGrantAccountDto>> queryPage(@RequestBody PromotionGrantAccountQueryPageRequest request) {
+        PageResult<PromotionGrantAccountDto> page = promotionGrantAccountApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/grant/account/update")
+    public DataResponse<Void> update(@RequestBody PromotionGrantAccountDto dto) {
+        promotionGrantAccountApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/grant/account/auth/cancel")
+    public DataResponse<Void> cancelAuth(@RequestBody PromotionGrantAccountDto dto) {
+        promotionGrantAccountApiService.cancelAuth(dto);
+        return DataResponse.ok();
+    }
+}

+ 46 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionGrantAppController.java

@@ -0,0 +1,46 @@
+package com.atmob.central.admin.controller.promotion;
+
+import com.atmob.central.advertisement.entity.promotion.PromotionGrantAppDto;
+import com.atmob.central.advertisement.entity.promotion.PromotionGrantAppQueryPageRequest;
+import com.atmob.central.advertisement.entity.promotion.PromotionGrantLinkRequest;
+import com.atmob.central.advertisement.entity.promotion.PromotionGrantLinkResponse;
+import com.atmob.central.advertisement.service.PromotionGrantAppApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PromotionGrantAppController {
+    @Resource
+    private PromotionGrantAppApiService promotionGrantAppApiService;
+
+    @PostMapping("/central/admin/v1/promotion/grant/app/page")
+    public DataResponse<PageResult<PromotionGrantAppDto>> queryPage(@RequestBody PromotionGrantAppQueryPageRequest request) {
+        PageResult<PromotionGrantAppDto> page = promotionGrantAppApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/grant/app/create")
+    public DataResponse<Void> create(@RequestBody PromotionGrantAppDto dto) {
+        promotionGrantAppApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/grant/app/update")
+    public DataResponse<Void> update(@RequestBody PromotionGrantAppDto dto) {
+        promotionGrantAppApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/grant/link")
+    public DataResponse<PromotionGrantLinkResponse> grantLink(@RequestBody PromotionGrantLinkRequest request) {
+        PromotionGrantLinkResponse response = promotionGrantAppApiService.grantLink(request);
+        return DataResponse.ok(response);
+    }
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionLinkController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.promotion;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.promotion.entity.promotion.PromotionLinkOptionsResponse;
+import com.atmob.central.promotion.entity.promotion.GeneratePromotionLinkRequest;
+import com.atmob.central.promotion.entity.promotion.GeneratePromotionLinkResponse;
+import com.atmob.central.promotion.service.PromotionEventApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PromotionLinkController {
+    @Resource
+    private PromotionEventApiService promotionApiService;
+
+    @PostMapping("/central/admin/v1/promotion/link/generate")
+    public DataResponse<GeneratePromotionLinkResponse> generatePromotionLink(@RequestBody GeneratePromotionLinkRequest request) {
+        GeneratePromotionLinkResponse response = promotionApiService.generatePromotionLink(request);
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v8/promotion/link/options")
+    public DataResponse<PromotionLinkOptionsResponse> getPromotionLinkOptionsV8() {
+        PromotionLinkOptionsResponse response = promotionApiService.getPromotionLinkOptionsV8();
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v8/promotion/link/generate")
+    public DataResponse<GeneratePromotionLinkResponse> generatePromotionLinkV8(@RequestBody GeneratePromotionLinkRequest request) {
+        GeneratePromotionLinkResponse response = promotionApiService.generatePromotionLinkV8(request);
+        return DataResponse.ok(response);
+    }
+}

+ 41 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionManageController.java

@@ -0,0 +1,41 @@
+package com.atmob.central.admin.controller.promotion;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.entity.admin.AdminUserDto;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.admin.service.promotion.PromotionManageService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RestController
+@Slf4j
+public class PromotionManageController {
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private PromotionManageService promotionManageService;
+
+    @PostMapping("/central/admin/v1/promotion/manage/opt/user/ids")
+    public DataResponse<PageResult<Long>> getOptUserIds(@RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        List<Long> optUserIds = promotionManageService.getOptUserIds(adminUser);
+        return DataResponse.ok(new PageResult<Long>().withList(optUserIds));
+    }
+
+    @PostMapping("/central/admin/v1/promotion/manage/opt/users")
+    public DataResponse<PageResult<AdminUserDto>> getOptUsers(@RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        List<Long> optUserIds = promotionManageService.getOptUserIds(adminUser);
+        List<AdminUserDto> optUsers = optUserIds.stream().map(adminUserService::getDtoById).collect(Collectors.toList());
+        return DataResponse.ok(new PageResult<AdminUserDto>().withList(optUsers));
+    }
+}

+ 64 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionOptAppGroupController.java

@@ -0,0 +1,64 @@
+package com.atmob.central.admin.controller.promotion;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.advertisement.entity.promotion.PromotionOptAppGroupDto;
+import com.atmob.central.advertisement.entity.promotion.PromotionOptAppGroupQueryPageRequest;
+import com.atmob.central.advertisement.service.PromotionOptAppGroupApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@Slf4j
+public class PromotionOptAppGroupController {
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private PromotionOptAppGroupApiService promotionOptAppGroupApiService;
+
+    @PostMapping("/central/admin/v1/promotion/opt/app/group/page")
+    public DataResponse<PageResult<PromotionOptAppGroupDto>> queryPage(@RequestBody PromotionOptAppGroupQueryPageRequest request,
+                                                                       @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        request.setOptUserId(adminUser.getId());
+        PageResult<PromotionOptAppGroupDto> page = promotionOptAppGroupApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/opt/app/group/create")
+    public DataResponse<Void> create(@RequestBody PromotionOptAppGroupDto dto,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        dto.setOptUserId(adminUser.getId());
+        promotionOptAppGroupApiService.create(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/opt/app/group/update")
+    public DataResponse<Void> update(@RequestBody PromotionOptAppGroupDto dto,
+                                     @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        dto.setOptUserId(adminUser.getId());
+        promotionOptAppGroupApiService.update(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/promotion/opt/app/group/list")
+    public DataResponse<PageResult<PromotionOptAppGroupDto>> getList(@RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        PromotionOptAppGroupDto dto = new PromotionOptAppGroupDto()
+                .withOptUserId(adminUser.getId());
+        List<PromotionOptAppGroupDto> list = promotionOptAppGroupApiService.getList(dto);
+        return DataResponse.ok(new PageResult<PromotionOptAppGroupDto>().withList(list));
+    }
+
+}

+ 33 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionOverViewController.java

@@ -0,0 +1,33 @@
+package com.atmob.central.admin.controller.promotion;
+
+import com.atmob.central.advertisement.entity.promotion.report.PromotionReportQueryRequest;
+import com.atmob.central.advertisement.entity.promotion.report.PromotionReportVo;
+import com.atmob.central.advertisement.service.PromotionOverViewApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class PromotionOverViewController {
+
+    @Resource
+    private PromotionOverViewApiService promotionOverViewApiService;
+
+
+    @PostMapping("/central/admin/v1/promotion/overview/data/summary")
+    public DataResponse<PromotionReportVo> getOverviewDataSummary(@RequestBody PromotionReportQueryRequest request) {
+        PromotionReportVo response = promotionOverViewApiService.getOverviewDataSummary(request);
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/overview/data/dimension")
+    public DataResponse<PromotionReportVo> promotionOverViewApiService(@RequestBody PromotionReportQueryRequest request) {
+        PromotionReportVo response = promotionOverViewApiService.getOverviewDataDimension(request);
+        return DataResponse.ok(response);
+    }
+}

+ 85 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/promotion/PromotionReportController.java

@@ -0,0 +1,85 @@
+package com.atmob.central.admin.controller.promotion;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.admin.service.promotion.PromotionManageService;
+import com.atmob.central.advertisement.constant.promotion.PromotionAdvertiserConst;
+import com.atmob.central.advertisement.entity.promotion.report.*;
+import com.atmob.central.advertisement.service.PromotionReportApiService;
+import com.atmob.central.common.entity.base.DataResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RestController
+@Slf4j
+public class PromotionReportController {
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private PromotionReportApiService promotionReportApiService;
+    @Resource
+    private PromotionManageService promotionManageService;
+
+    @PostMapping("/central/admin/v1/promotion/report/page")
+    public DataResponse<PromotionReportVo> queryReportPage(@RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken,
+                                                           @RequestBody PromotionReportQueryRequest request) {
+        setOptUserIds(authToken, request);
+        PromotionReportVo report = promotionReportApiService.queryReportPage(request);
+        return DataResponse.ok(report);
+    }
+
+    private void setOptUserIds(String authToken, PromotionReportQueryRequest request) {
+        AdminUser adminUser = adminUserService.getAdminUser(authToken);
+        List<Long> optUserIds = promotionManageService.getOptUserIds(adminUser);
+        if (request.getOptUserIds() == null || request.getOptUserIds().isEmpty()) {
+            optUserIds = new ArrayList<>(optUserIds);
+            optUserIds.add(0, PromotionAdvertiserConst.EMPTY_OPT_USER_ID);
+            request.setOptUserIds(optUserIds);
+        } else {
+            request.setOptUserIds(request.getOptUserIds().stream().filter(optUserIds::contains).collect(Collectors.toList()));
+        }
+    }
+
+    @PostMapping("/central/admin/v1/promotion/report/field/templates")
+    public DataResponse<PromotionReportFieldTemplateListResponse> getFieldTemplateList() {
+        PromotionReportFieldTemplateListResponse response = promotionReportApiService.getFieldTemplateList();
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/report/dimensions")
+    public DataResponse<PromotionReportDimensionListResponse> getDimensionList() {
+        PromotionReportDimensionListResponse response = promotionReportApiService.getDimensionList();
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/report/roi/get")
+    public DataResponse<PromotionReportVo> getRoiReport(@RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken,
+                                                        @RequestBody PromotionReportQueryRequest request) {
+        setOptUserIds(authToken, request);
+        PromotionReportVo report = promotionReportApiService.getRoiReport(request);
+        return DataResponse.ok(report);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/report/roi/accuracy/get")
+    public DataResponse<PromotionReportRatioResponse> getAttributionAccreditRatio(@RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken,
+                                                                                  @RequestBody PromotionReportQueryRequest request) {
+        setOptUserIds(authToken, request);
+        PromotionReportRatioResponse report = promotionReportApiService.getAttributionAccreditRatio(request);
+        return DataResponse.ok(report);
+    }
+
+    @PostMapping("/central/admin/v1/promotion/report/field/roi/templates")
+    public DataResponse<PromotionReportRoiFieldTemplateListResponse> getRoiFieldTemplateList() {
+        PromotionReportRoiFieldTemplateListResponse response = promotionReportApiService.getRoiFieldTemplateList();
+        return DataResponse.ok(response);
+    }
+}

+ 40 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/security/SecurityController.java

@@ -0,0 +1,40 @@
+package com.atmob.central.admin.controller.security;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.security.entity.block.DeviceBlockRuleDto;
+import com.atmob.central.security.entity.block.DeviceBlockRuleMatchPropertyOptionsResponse;
+import com.atmob.central.security.entity.block.DeviceBlockRuleQueryPageRequest;
+import com.atmob.central.security.service.block.DeviceBlockApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class SecurityController {
+
+    @Resource
+    private DeviceBlockApiService deviceBlockApiService;
+
+    @PostMapping("/central/admin/v1/security/device/block/rule/page")
+    public DataResponse<PageResult<DeviceBlockRuleDto>> queryRulePage(@RequestBody DeviceBlockRuleQueryPageRequest request) {
+        PageResult<DeviceBlockRuleDto> page = deviceBlockApiService.queryRulePage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/security/device/block/rule/upsert")
+    public DataResponse<Void> upsertRule(@RequestBody DeviceBlockRuleDto dto) {
+        deviceBlockApiService.upsertRule(dto);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/security/device/block/rule/edit/options")
+    public DataResponse<DeviceBlockRuleMatchPropertyOptionsResponse> getMatchPropertyOptions() {
+        DeviceBlockRuleMatchPropertyOptionsResponse response = deviceBlockApiService.getMatchPropertyOptions();
+        return DataResponse.ok(response);
+    }
+}

+ 79 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/statistics/rise/RiseController.java

@@ -0,0 +1,79 @@
+package com.atmob.central.admin.controller.statistics.rise;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.admin.service.app.AdminAppService;
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.statistics.entity.rise.RisePromotionOverviewResponse;
+import com.atmob.central.statistics.entity.rise.RisePromotionRankResponse;
+import com.atmob.central.statistics.entity.promotion.PromotionReportVo;
+import com.atmob.central.statistics.entity.promotion.PromotionRequest;
+import com.atmob.central.statistics.service.RiseApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@Slf4j
+public class RiseController {
+
+    @Resource
+    private RiseApiService riseApiService;
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private AdminAppService adminAppService;
+
+    @PostMapping("/central/admin/v1/rise/promotion/overview")
+    public DataResponse<RisePromotionOverviewResponse> queryPromotionOverview(@RequestBody PromotionRequest request,
+                                                                              @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        request.setEnv(user.getEnv());
+        if (request.getAppId() == null) {
+            List<Integer> appIds = adminAppService.getUserAppIds(user.getEnv(), user.getId());
+            request.setAppIds(appIds);
+        } else {
+            request.setAppIds(List.of(request.getAppId()));
+        }
+        RisePromotionOverviewResponse response = riseApiService.queryPromotionOverview(request);
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/rise/promotion/rank")
+    public DataResponse<RisePromotionRankResponse> queryPromotionRank(@RequestBody PromotionRequest request,
+                                                                      @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        request.setEnv(user.getEnv());
+        if (request.getAppId() == null) {
+            List<Integer> appIds = adminAppService.getUserAppIds(user.getEnv(), user.getId());
+            request.setAppIds(appIds);
+        } else {
+            request.setAppIds(List.of(request.getAppId()));
+        }
+        RisePromotionRankResponse response = riseApiService.queryPromotionRank(request);
+        return DataResponse.ok(response);
+    }
+
+    @PostMapping("/central/admin/v1/rise/promotion/report")
+    public DataResponse<PageResult<PromotionReportVo>> queryPromotionReport(@RequestBody PromotionRequest request,
+                                                                            @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        request.setEnv(user.getEnv());
+        if (request.getAppId() == null) {
+            List<Integer> appIds = adminAppService.getUserAppIds(user.getEnv(), user.getId());
+            request.setAppIds(appIds);
+        } else {
+            request.setAppIds(List.of(request.getAppId()));
+        }
+        PageResult<PromotionReportVo> page = riseApiService.queryPromotionReport(request);
+        return DataResponse.ok(page);
+    }
+
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/subject/SubjectController.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.controller.subject;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.conf.entity.subject.SubjectDto;
+import com.atmob.central.conf.entity.subject.SubjectQueryPageRequest;
+import com.atmob.central.conf.service.subject.SubjectApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class SubjectController {
+    @Resource
+    private SubjectApiService subjectApiService;
+
+    @PostMapping("/central/admin/v1/subject/create")
+    public DataResponse<Void> create(@RequestBody SubjectDto subject) {
+        subjectApiService.create(subject);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/subject/update")
+    public DataResponse<Void> update(@RequestBody SubjectDto subject) {
+        subjectApiService.update(subject);
+        return DataResponse.ok();
+    }
+
+    @PostMapping("/central/admin/v1/subject/page")
+    public DataResponse<PageResult<SubjectDto>> queryPage(@RequestBody SubjectQueryPageRequest request) {
+        PageResult<SubjectDto> page = subjectApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+}

+ 33 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/upload/UploadController.java

@@ -0,0 +1,33 @@
+package com.atmob.central.admin.controller.upload;
+
+import com.atmob.central.admin.constant.admin.AdminUserConst;
+import com.atmob.central.admin.entity.upload.UploadResponse;
+import com.atmob.central.admin.model.AdminUser;
+import com.atmob.central.admin.service.admin.AdminUserService;
+import com.atmob.central.admin.service.upload.UploadService;
+import com.atmob.central.common.entity.base.DataResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class UploadController {
+    @Resource
+    private UploadService uploadService;
+    @Resource
+    private AdminUserService adminUserService;
+
+    @PostMapping("/central/admin/v1/upload/apk")
+    public DataResponse<UploadResponse> uploadApk(@RequestParam(value = "file") MultipartFile file,
+                                                  @RequestHeader(AdminUserConst.AUTH_TOKEN_HEADER) String authToken) {
+        AdminUser user = adminUserService.getAdminUser(authToken);
+        UploadResponse response = uploadService.uploadApk(user, file);
+        return DataResponse.ok(response);
+    }
+}

+ 34 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/user/DeviceController.java

@@ -0,0 +1,34 @@
+package com.atmob.central.admin.controller.user;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.user.entity.device.DeviceDetailQueryPageRequest;
+import com.atmob.central.user.entity.device.DeviceDetailUpdateRequest;
+import com.atmob.central.user.entity.device.DeviceDetailVo;
+import com.atmob.central.user.entity.device.DeviceDto;
+import com.atmob.central.user.service.device.DeviceApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class DeviceController {
+    @Resource
+    private DeviceApiService deviceApiService;
+
+    @PostMapping("/central/admin/v1/device/detail/page")
+    public DataResponse<PageResult<DeviceDetailVo>> queryDeviceDetailPage(@RequestBody DeviceDetailQueryPageRequest request) {
+        PageResult<DeviceDetailVo> page = deviceApiService.queryDeviceDetailPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/device/deprecate")
+    public DataResponse<Void> deprecateDevice(@RequestBody DeviceDetailUpdateRequest request) {
+        deviceApiService.deprecateDevice(new DeviceDto().withId(request.getDeviceId()));
+        return DataResponse.ok();
+    }
+}

+ 34 - 0
central-admin/src/main/java/com/atmob/central/admin/controller/user/UserController.java

@@ -0,0 +1,34 @@
+package com.atmob.central.admin.controller.user;
+
+import com.atmob.central.common.entity.base.DataResponse;
+import com.atmob.central.common.entity.base.PageResult;
+import com.atmob.central.user.entity.user.UserDto;
+import com.atmob.central.user.entity.user.UserQueryPageRequest;
+import com.atmob.central.user.entity.user.UserUpdateRequest;
+import com.atmob.central.user.entity.user.UserVo;
+import com.atmob.central.user.service.user.UserApiService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class UserController {
+    @Resource
+    private UserApiService userApiService;
+
+    @PostMapping("/central/admin/v1/user/page")
+    public DataResponse<PageResult<UserVo>> queryUserPage(@RequestBody UserQueryPageRequest request) {
+        PageResult<UserVo> page = userApiService.queryPage(request);
+        return DataResponse.ok(page);
+    }
+
+    @PostMapping("/central/admin/v1/user/deprecate")
+    public DataResponse<Void> deprecateUser(@RequestBody UserUpdateRequest request) {
+        userApiService.deprecateUser(new UserDto().withId(request.getId()));
+        return DataResponse.ok();
+    }
+}

+ 14 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthAllocateRequest.java

@@ -0,0 +1,14 @@
+package com.atmob.central.admin.entity.admin;
+
+import com.atmob.central.common.entity.base.PageRequest;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class AdminAuthAllocateRequest extends PageRequest {
+    private Integer roleId;
+    private List<Integer> authIds;
+}

+ 16 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthAuthsResponse.java

@@ -0,0 +1,16 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+import java.util.List;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminAuthAuthsResponse {
+    private List<String> auths;
+}

+ 38 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthDto.java

@@ -0,0 +1,38 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminAuthDto {
+    private Integer id;
+    private String env;
+    private String system;
+    private Integer parentId;
+    private Integer type;
+    private Integer hidden;
+    private Integer level;
+    private Integer rank;
+    private String name;
+    private String title;
+    private String icon;
+    private String path;
+    private String redirect;
+    private String component;
+    private Boolean keepAlive;
+    private String auths;
+    private String remark;
+    private Date createTime;
+    private Date updateTime;
+    private Integer status;
+
+    private List<AdminAuthDto> children;
+}

+ 11 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthIdsRequest.java

@@ -0,0 +1,11 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.*;
+
+@Getter
+@Setter
+public class AdminAuthIdsRequest {
+    private Long userId;
+    private Integer roleId;
+    private String system;
+}

+ 16 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthIdsResponse.java

@@ -0,0 +1,16 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+import java.util.List;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminAuthIdsResponse {
+    private List<Integer> ids;
+}

+ 16 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthMenuResponse.java

@@ -0,0 +1,16 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+import java.util.List;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminAuthMenuResponse {
+    private List<AdminAuthMenuVo> list;
+}

+ 37 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthMenuVo.java

@@ -0,0 +1,37 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminAuthMenuVo {
+    private Integer id;
+    private Integer parentId;
+    private String name;
+    private String path;
+    private String redirect;
+    private String component;
+    private Meta meta;
+
+    private List<AdminAuthMenuVo> children;
+
+    @Data
+    @With
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class Meta {
+        private String icon;
+        private String title;
+        private Integer rank;
+        private Integer showLink;
+        private Boolean keepAlive;
+    }
+}

+ 11 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminAuthQueryRequest.java

@@ -0,0 +1,11 @@
+package com.atmob.central.admin.entity.admin;
+
+import com.atmob.central.common.entity.base.BasePageRequest;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class AdminAuthQueryRequest extends BasePageRequest {
+    private String system;
+}

+ 22 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminDataAuthDto.java

@@ -0,0 +1,22 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminDataAuthDto {
+    private Integer id;
+
+    private String funcName;
+
+    private String funcCode;
+
+    private String pageRangeDesc;
+
+    private Integer authType;
+}

+ 13 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminDataAuthRequest.java

@@ -0,0 +1,13 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class AdminDataAuthRequest {
+    private Integer roleId;
+    private List<AdminDataAuthDto> list;
+}

+ 28 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminOrganDto.java

@@ -0,0 +1,28 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminOrganDto {
+    private Integer id;
+    private String env;
+    private String name;
+    private Integer level;
+    private Integer parentId;
+    private Integer sort;
+    private String remark;
+    private Date createTime;
+    private Date updateTime;
+    private Integer status;
+
+    private List<AdminOrganDto> children;
+}

+ 13 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminOrganQueryPageRequest.java

@@ -0,0 +1,13 @@
+package com.atmob.central.admin.entity.admin;
+
+import com.atmob.central.common.entity.base.BasePageRequest;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class AdminOrganQueryPageRequest extends BasePageRequest {
+    private String env;
+    private String name;
+    private Integer status;
+}

+ 14 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminRoleAllocateRequest.java

@@ -0,0 +1,14 @@
+package com.atmob.central.admin.entity.admin;
+
+import com.atmob.central.common.entity.base.PageRequest;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class AdminRoleAllocateRequest extends PageRequest {
+    private Long userId;
+    private List<Integer> roleIds;
+}

+ 22 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminRoleDto.java

@@ -0,0 +1,22 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+import java.util.Date;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminRoleDto {
+    private Integer id;
+    private String env;
+    private String name;
+    private String remark;
+    private Date createTime;
+    private Date updateTime;
+    private Integer status;
+}

+ 12 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminRoleQueryPageRequest.java

@@ -0,0 +1,12 @@
+package com.atmob.central.admin.entity.admin;
+
+import com.atmob.central.common.entity.base.PageRequest;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class AdminRoleQueryPageRequest extends PageRequest {
+    private String env;
+    private Integer status;
+}

+ 27 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminUserDto.java

@@ -0,0 +1,27 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+import java.util.Date;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminUserDto {
+    private Long id;
+    private String env;
+    private Integer userType;
+    private String account;
+    private String nickname;
+    private String remark;
+    private Date createTime;
+    private Date updateTime;
+    private Integer status;
+    private Integer organId;
+
+    private AdminOrganDto organ;
+}

+ 11 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminUserLoginRequest.java

@@ -0,0 +1,11 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.*;
+
+@Getter
+@Setter
+public class AdminUserLoginRequest {
+    private String account;
+    private String password;
+    private String originalPassword;
+}

+ 15 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminUserLoginResponse.java

@@ -0,0 +1,15 @@
+package com.atmob.central.admin.entity.admin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminUserLoginResponse {
+    private AdminUserDto user;
+    private String authToken;
+}

+ 15 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/admin/AdminUserQueryPageRequest.java

@@ -0,0 +1,15 @@
+package com.atmob.central.admin.entity.admin;
+
+import com.atmob.central.common.entity.base.PageRequest;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class AdminUserQueryPageRequest extends PageRequest {
+    private String env;
+    private String account;
+    private String nickname;
+    private Integer status;
+    private Integer organId;
+}

+ 14 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/app/AppAllocateRequest.java

@@ -0,0 +1,14 @@
+package com.atmob.central.admin.entity.app;
+
+import com.atmob.central.common.entity.base.PageRequest;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class AppAllocateRequest extends PageRequest {
+    private Long userId;
+    private List<Integer> appIds;
+}

+ 16 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/document/StringListResponse.java

@@ -0,0 +1,16 @@
+package com.atmob.central.admin.entity.document;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.With;
+
+import java.util.List;
+
+@Data
+@With
+@AllArgsConstructor
+@NoArgsConstructor
+public class StringListResponse {
+    private List<String> list;
+}

+ 0 - 0
central-admin/src/main/java/com/atmob/central/admin/entity/pay/PayOrderExportVo.java


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