Forráskód Böngészése

Merge remote-tracking branch 'origin/master'

小杜 3 hónapja
szülő
commit
5f63b1f559
52 módosított fájl, 2581 hozzáadás és 19 törlés
  1. 1 0
      pom.xml
  2. 6 1
      yt-common/src/main/java/com/ytpm/agent/model/YtPlatformUserApp.java
  3. 4 2
      yt-common/src/main/java/com/ytpm/general/RepMessage.java
  4. 44 0
      yt-common/src/main/java/com/ytpm/middle/model/YtMiddleEnterprise.java
  5. 20 0
      yt-common/src/main/java/com/ytpm/middle/param/AgentBaseInfoParam.java
  6. 46 0
      yt-common/src/main/java/com/ytpm/middle/param/AgentForm.java
  7. 24 0
      yt-common/src/main/java/com/ytpm/middle/param/ApkListParam.java
  8. 35 0
      yt-common/src/main/java/com/ytpm/middle/param/AppForm.java
  9. 20 0
      yt-common/src/main/java/com/ytpm/middle/param/AppListParam.java
  10. 53 0
      yt-common/src/main/java/com/ytpm/middle/view/AgentBaseInfoListVO.java
  11. 51 0
      yt-common/src/main/java/com/ytpm/middle/view/AppListVO.java
  12. 2 9
      yt-common/src/main/java/com/ytpm/util/IDUtil.java
  13. 64 0
      yt-middle/middle-platform/pom.xml
  14. 19 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/MiddleApplication.java
  15. 104 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/config/CustomUserAuthenticationConverter.java
  16. 72 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/config/ResourceServerConfig.java
  17. 40 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/config/swagger/SwaggerConfig.java
  18. 68 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/AgentController.java
  19. 57 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/AppController.java
  20. 44 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/AttachController.java
  21. 41 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/MiddleController.java
  22. 46 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/OutsourcingController.java
  23. 21 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/AgentMapper.java
  24. 27 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/ApkMapper.java
  25. 31 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/AppMapper.java
  26. 23 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/EnterpriseMapper.java
  27. 14 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/MiddleDictMapper.java
  28. 10 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/MiddleUserMapper.java
  29. 37 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/handle/MiddleAuthenticationEntryPoint.java
  30. 23 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/OssAttach.java
  31. 54 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/OssProperties.java
  32. 76 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/OssUtil.java
  33. 14 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/StorageFactory.java
  34. 57 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/StorageTemplate.java
  35. 113 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/minio/MinioStorageTemplate.java
  36. 27 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/AgentService.java
  37. 20 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/ApkService.java
  38. 22 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/AppService.java
  39. 25 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/AttachService.java
  40. 127 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/AgentServiceImpl.java
  41. 62 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/ApkServiceImpl.java
  42. 62 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/AppServiceImpl.java
  43. 98 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/AttachServiceImpl.java
  44. 267 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/util/RedisUtil.java
  45. 79 0
      yt-middle/middle-platform/src/main/resources/mapper/AgentMapper.xml
  46. 171 0
      yt-middle/middle-platform/src/main/resources/mapper/ApkMapper.xml
  47. 72 0
      yt-middle/middle-platform/src/main/resources/mapper/AppMapper.xml
  48. 78 0
      yt-middle/middle-platform/src/main/resources/mapper/EnterpriseMapper.xml
  49. 10 0
      yt-middle/middle-platform/src/main/resources/mapper/MiddleDictMapper.xml
  50. 11 0
      yt-middle/middle-platform/src/main/resources/mapper/MiddleUserMapper.xml
  51. 87 0
      yt-middle/pom.xml
  52. 2 7
      yt-oauth/oauth-service/src/main/java/com/ytpm/config/WebSecurityConfig.java

+ 1 - 0
pom.xml

@@ -16,6 +16,7 @@
         <module>yt-risk</module>
         <module>yt-app</module>
         <module>yt-advertise</module>
+        <module>yt-middle</module>
     </modules>
 
     <properties>

+ 6 - 1
yt-common/src/main/java/com/ytpm/agent/model/YtPlatformUserApp.java

@@ -1,14 +1,17 @@
 package com.ytpm.agent.model;
 
+import com.ytpm.general.BaseParam;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.util.Date;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel("平台用户应用表")
-public class YtPlatformUserApp {
+public class YtPlatformUserApp extends BaseParam {
     @ApiModelProperty("应用ID")
     private String appId;
     @ApiModelProperty("应用名称")
@@ -25,4 +28,6 @@ public class YtPlatformUserApp {
     private String domain;
     @ApiModelProperty("上架时间")
     private Date issuedTime;
+    @ApiModelProperty("微信应用ID")
+    private String wxAppId;
 }

+ 4 - 2
yt-common/src/main/java/com/ytpm/general/RepMessage.java

@@ -12,19 +12,21 @@ public class RepMessage {
     public static final String DELETE_SUCCESS = "删除成功";
     public static final String RELATIVE_SUCCESS = "关联成功";
     public static final String LOGOUT_SUCCESS = "已退出登录";
+    public static final String LOGIN_SUCCESS = "登录成功";
+    public static final String LOCK_USER_SUCCESS = "用户锁定成功";
+
     public static final String NOT_LOGIN= "当前用户未登录";
     public static final String USER_NAME_EMPTY = "用户名不能为空";
     public static final String USERNAME_OR_PASSWORD_ERROR = "用户名或密码错误";
     public static final String LOGIN_NON_MSG = "请输入验证码";
-    public static final String LOGIN_SUCCESS = "登录成功";
     public static final String METHOD_NOT_ARROW = "请求方式不允许";
     public static final String TOKEN_EXPIRE = "登录超时,请重新登录";
     public static final String TOKEN_INVALID = "登录已失效,请重新登录";
     public static final String LOGOUT_FAIL = "用户注销失败";
     public static final String UUID_EMPTY = "验证码生成失败! UUID:";
+    public static final String OBJECT_ALREADY_EXIST = "查询对象已存在";
 
     public static final String COLLECTION_EMPTY = "集合数据不能为空";
-    public static final String LOCK_USER_SUCCESS = "用户锁定成功";
     public static final String USER_STATUS_MODIFY = "用户状态已改变";
     public static final String ALREADY_RISK_USER = "用户已被风控";
     public static final String RELATIVE_APP_SUCCESS = "关联应用成功";

+ 44 - 0
yt-common/src/main/java/com/ytpm/middle/model/YtMiddleEnterprise.java

@@ -0,0 +1,44 @@
+package com.ytpm.middle.model;
+
+import com.ytpm.general.BaseParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel("易推加盟企业信息表")
+@NoArgsConstructor
+@AllArgsConstructor
+public class YtMiddleEnterprise extends BaseParam {
+    /** 企业ID */
+    @ApiModelProperty("企业ID")
+    private int enterpriseId;
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private String userId;
+    /** 企业名称 */
+    @ApiModelProperty("企业名称")
+    private String enterpriseName;
+    /** 企业信用代码 */
+    @ApiModelProperty("企业信用代码")
+    private String creditCode;
+    /** 营业执照副本 */
+    @ApiModelProperty("营业执照副本")
+    private String businessLicence;
+    /** 法人 */
+    @ApiModelProperty("法人")
+    private String legal;
+    /** 法人证件号 */
+    @ApiModelProperty("法人证件号")
+    private String legalCard;
+    /** 法人联系方式 */
+    @ApiModelProperty("法人联系方式")
+    private String concatPhone;
+    /** 注册地址 */
+    @ApiModelProperty("注册地址")
+    private String registryAddress;
+}

+ 20 - 0
yt-common/src/main/java/com/ytpm/middle/param/AgentBaseInfoParam.java

@@ -0,0 +1,20 @@
+package com.ytpm.middle.param;
+
+import com.ytpm.general.BaseParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel("企业基本信息表单")
+@NoArgsConstructor
+@AllArgsConstructor
+public class AgentBaseInfoParam extends BaseParam {
+    /** 企业名称 */
+    @ApiModelProperty("企业名称")
+    private String enterpriseName;
+}

+ 46 - 0
yt-common/src/main/java/com/ytpm/middle/param/AgentForm.java

@@ -0,0 +1,46 @@
+package com.ytpm.middle.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.hibernate.validator.constraints.NotBlank;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("企业数据表单")
+public class AgentForm extends AgentBaseInfoParam {
+
+    @ApiModelProperty("企业ID")
+    private int enterpriseId;
+    /** 企业信用代码 */
+    @NotBlank(message = "企业信用代码不能为空")
+    @ApiModelProperty(value = "企业信用代码", required = true)
+    private String creditCode;
+    /** 营业执照副本 */
+    @ApiModelProperty(value = "营业执照副本",required = true)
+    private String businessLicence;
+    /** 法人 */
+    @ApiModelProperty(value = "法人",required = true)
+    private String legal;
+    /** 法人证件号 */
+    @ApiModelProperty(value = "法人证件号",required = true)
+    private String legalCard;
+    /** 法人联系方式 */
+    @NotBlank(message = "法人联系方式不能为空")
+    @ApiModelProperty(value = "法人联系方式", required = true)
+    private String concatPhone;
+    /** 注册地址 */
+    @ApiModelProperty("注册地址")
+    private String registryAddress;
+    /** 登录账号 */
+    @ApiModelProperty(value = "登录账号",required = true)
+    private String loginName;
+    /** 账号类型 */
+    @ApiModelProperty("账号类型")
+    private Integer userType;
+}

+ 24 - 0
yt-common/src/main/java/com/ytpm/middle/param/ApkListParam.java

@@ -0,0 +1,24 @@
+package com.ytpm.middle.param;
+
+import com.ytpm.general.PageMeta;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("出包应用列表参数")
+public class ApkListParam extends PageMeta {
+    /** 所属应用ID */
+    private String appId;
+    /** 所属企业 */
+    private String enterpriseId;
+    /** apk游戏名称 */
+    private String apkName;
+    /** 所属渠道 */
+    private String ditchId;
+}

+ 35 - 0
yt-common/src/main/java/com/ytpm/middle/param/AppForm.java

@@ -0,0 +1,35 @@
+package com.ytpm.middle.param;
+
+import com.ytpm.general.BaseParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("App应用表单")
+public class AppForm extends BaseParam {
+    @ApiModelProperty("应用ID")
+    private String appId;
+    @ApiModelProperty("应用名称")
+    private String appName;
+    @ApiModelProperty("用户ID")
+    private String userId;
+    @ApiModelProperty("应用类型")
+    private Integer appType;
+    @ApiModelProperty("详情页链接")
+    private String detailUrl;
+    @ApiModelProperty("完整程序包名")
+    private String packageName;
+    @ApiModelProperty("域名")
+    private String domain;
+    @ApiModelProperty("上架时间")
+    private Date issuedTime;
+}

+ 20 - 0
yt-common/src/main/java/com/ytpm/middle/param/AppListParam.java

@@ -0,0 +1,20 @@
+package com.ytpm.middle.param;
+
+import com.ytpm.general.PageMeta;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel("应用列表入参")
+@NoArgsConstructor
+@AllArgsConstructor
+public class AppListParam extends PageMeta {
+    /** 应用名称 */
+    private String appName;
+    /** 应用类型 */
+    private Integer appType;
+}

+ 53 - 0
yt-common/src/main/java/com/ytpm/middle/view/AgentBaseInfoListVO.java

@@ -0,0 +1,53 @@
+package com.ytpm.middle.view;
+
+import com.ytpm.general.BaseParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel("企业信息列表")
+@NoArgsConstructor
+@AllArgsConstructor
+public class AgentBaseInfoListVO extends BaseParam {
+    /** 企业ID */
+    @ApiModelProperty("企业ID")
+    private int enterpriseId;
+    /** 用户ID */
+    @ApiModelProperty("账号")
+    private String userId;
+    /** 企业名称 */
+    @ApiModelProperty("企业名称")
+    private String enterpriseName;
+    /** 企业信用代码 */
+    @ApiModelProperty("企业信用代码")
+    private String creditCode;
+    /** 营业执照副本 */
+    @ApiModelProperty("营业执照副本")
+    private String businessLicence;
+    /** 法人 */
+    @ApiModelProperty("法人")
+    private String legal;
+    /** 法人证件号 */
+    @ApiModelProperty("法人证件号")
+    private String legalCard;
+    /** 法人联系方式 */
+    @ApiModelProperty("法人联系方式")
+    private String concatPhone;
+    /** 注册地址 */
+    @ApiModelProperty("注册地址")
+    private String registryAddress;
+    /** 登录用户名 */
+    @ApiModelProperty("登录用户名")
+    private String loginName;
+    /** 创建人 */
+    @ApiModelProperty("创建人")
+    private String createUserName;
+    /** 用户类型 */
+    @ApiModelProperty("用户类型")
+    private Integer userType;
+}

+ 51 - 0
yt-common/src/main/java/com/ytpm/middle/view/AppListVO.java

@@ -0,0 +1,51 @@
+package com.ytpm.middle.view;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@ApiModel("应用列表")
+@AllArgsConstructor
+@NoArgsConstructor
+public class AppListVO {
+    /** 应用ID */
+    @ApiModelProperty("应用ID")
+    private String appId;
+    /** 应用名称 */
+    @ApiModelProperty("应用名称")
+    private String appName;
+    /** 代理商ID */
+    @ApiModelProperty("代理商ID")
+    private String userId;
+    /** 应用类型 1-Android 2-IOS 3-H5 4-HamonyOS */
+    @ApiModelProperty("应用类型 1-Android 2-IOS 3-H5 4-HamonyOS")
+    private Integer appType;
+    /** 详情页地址 */
+    @ApiModelProperty("详情页地址")
+    private String detailUrl;
+    /** 应用包名 */
+    @ApiModelProperty("应用包名")
+    private String packageName;
+    /** 应用域名 */
+    @ApiModelProperty("应用域名")
+    private String domain;
+    /** 上架时间 */
+    @ApiModelProperty("上架时间")
+    private String issuedTime;
+    /** 微信开放平台AppId */
+    @ApiModelProperty("微信开放平台AppId")
+    private String wxAppId;
+    /** 授权企业 */
+    @ApiModelProperty("授权企业")
+    private String enterpriseName;
+    /** 企业负责人 */
+    @ApiModelProperty("企业负责人")
+    private String legal;
+    /** 联系电话 */
+    @ApiModelProperty("联系电话")
+    private String concatPhone;
+}

+ 2 - 9
yt-common/src/main/java/com/ytpm/util/IDUtil.java

@@ -2,19 +2,12 @@ package com.ytpm.util;
 
 import cn.hutool.core.util.IdUtil;
 public class IDUtil {
-    private final static String PREFIX = "ytPlatform_";
 
     /**
      * 雪花算法ID 生成
      * @return
      */
-    public static String generateFlowID(){
-       return PREFIX + IdUtil.getSnowflakeNextIdStr();
-    }
-
-    public static void main(String[] args) {
-        for (int i = 0; i<30;i++){
-            System.err.println(generateFlowID());
-        }
+    public static String generateFlowID(String prefix) {
+       return prefix + IdUtil.getSnowflakeNextIdStr();
     }
 }

+ 64 - 0
yt-middle/middle-platform/pom.xml

@@ -0,0 +1,64 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.ytpm</groupId>
+        <artifactId>yt-middle</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>middle-platform</artifactId>
+    <packaging>jar</packaging>
+
+    <name>middle-platform</name>
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>32.0.1-android</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>yt-middle</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                    <encoding>utf-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.5.3</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <includeSystemScope>true</includeSystemScope>
+                    <mainClass>com.ytpm.middle.MiddleApplication</mainClass>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 19 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/MiddleApplication.java

@@ -0,0 +1,19 @@
+package com.ytpm.middle;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@SpringBootApplication
+@EnableDiscoveryClient
+@MapperScan(basePackages = "com.ytpm.middle.dao")
+public class MiddleApplication
+{
+    public static void main( String[] args )
+    {
+        SpringApplication.run(MiddleApplication.class, args);
+    }
+}

+ 104 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/config/CustomUserAuthenticationConverter.java

@@ -0,0 +1,104 @@
+package com.ytpm.middle.config;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ytpm.agent.view.AgentUserInfo;
+import com.ytpm.constant.StrConstant;
+import com.ytpm.middle.dao.MiddleUserMapper;
+import com.ytpm.middle.util.RedisUtil;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.oauth2.provider.token.UserAuthenticationConverter;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 自定义Security上下文信息
+ */
+@Data
+@Component
+@Slf4j
+public class CustomUserAuthenticationConverter implements UserAuthenticationConverter {
+    private Collection<? extends GrantedAuthority> defaultAuthorities =
+            new ArrayList<>(AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_ADMIN"));
+    private UserDetailsService userDetailsService;
+
+    @Autowired
+    private RedisUtil redisService;
+    @Autowired
+    private MiddleUserMapper userMapper;
+
+    @Override
+    public Map<String, ?> convertUserAuthentication(Authentication authentication) {
+        Map<String, Object> response = new LinkedHashMap();
+        response.put("username", authentication.getName());
+        if (authentication.getAuthorities() != null && !authentication.getAuthorities().isEmpty()) {
+            response.put("authorities", AuthorityUtils.authorityListToSet(authentication.getAuthorities()));
+        }
+        return response;
+    }
+
+    @Override
+    public Authentication extractAuthentication(Map<String, ?> map) {
+        if (map.containsKey("user_name")) {
+            String userName = (String) map.get("user_name");
+            Object principal;
+            Collection<? extends GrantedAuthority> authorities = this.getAuthorities(map);
+            AgentUserInfo user = userMapper.getByLoginName(userName);
+            if(Objects.isNull(user)){
+                log.error("当前用户不存在,应该退出登录");
+                return null;
+            }
+            String key = StrConstant.USER_INFO_PRE + userName ;
+            if (redisService.hasKey(key)) {
+                String str = redisService.getStr(key);
+                AgentUserInfo jwtUser = JSONObject.parseObject(str, AgentUserInfo.class);
+                principal = jwtUser;
+                authorities = jwtUser.getAuthorities();
+            } else {
+                AgentUserInfo jwtUser = new AgentUserInfo();
+                BeanUtil.copyProperties(user,jwtUser);
+                authorities = jwtUser.getAuthorities();
+                principal = jwtUser;
+                redisService.setStr(key, JSON.toJSONString(user));
+            }
+            return new UsernamePasswordAuthenticationToken(principal, "N/A", authorities);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * 用户资源授权的方法重写  暂时未使用
+     *
+     * @param map
+     * @return
+     */
+    private Collection<? extends GrantedAuthority> getAuthorities(Map<String, ?> map) {
+        if (!map.containsKey("authorities")) {
+            return this.defaultAuthorities;
+        } else {
+            Object authorities = map.get("authorities");
+            if (authorities instanceof String) {
+                return AuthorityUtils.commaSeparatedStringToAuthorityList((String) authorities);
+            } else if (authorities instanceof Collection) {
+                return AuthorityUtils.commaSeparatedStringToAuthorityList(StringUtils.collectionToCommaDelimitedString((Collection) authorities));
+            } else {
+                throw new IllegalArgumentException("Authorities must be either a String or a Collection");
+            }
+        }
+    }
+}

+ 72 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/config/ResourceServerConfig.java

@@ -0,0 +1,72 @@
+package com.ytpm.middle.config;
+
+import com.ytpm.middle.handle.MiddleAuthenticationEntryPoint;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
+import org.springframework.security.oauth2.provider.token.DefaultAccessTokenConverter;
+import org.springframework.security.oauth2.provider.token.RemoteTokenServices;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
+
+
+@Configuration
+@EnableResourceServer
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+    @Value("${security.oauth2.client.client-id}")
+    private String clientId;
+
+    @Value("${security.oauth2.client.client-secret}")
+    private String secret;
+
+    @Value("${security.oauth2.authorization.check-token-access}")
+    private String checkTokenEndpointUrl;
+
+    @Autowired
+    private RedisConnectionFactory redisConnectionFactory;
+
+    @Autowired
+    private MiddleAuthenticationEntryPoint middleAuthenticationEntryPoint;
+
+    @Autowired
+    private CustomUserAuthenticationConverter userAuthenticationConverter;
+
+    @Bean
+    public TokenStore redisTokenStore() {
+        return new RedisTokenStore(redisConnectionFactory);
+    }
+
+    @Bean
+    public RemoteTokenServices tokenService() {
+        RemoteTokenServices tokenService = new RemoteTokenServices();
+        tokenService.setClientId(clientId);
+        tokenService.setClientSecret(secret);
+        tokenService.setCheckTokenEndpointUrl(checkTokenEndpointUrl);
+        DefaultAccessTokenConverter defaultAccessTokenConverter = new DefaultAccessTokenConverter();
+        defaultAccessTokenConverter.setUserTokenConverter(userAuthenticationConverter);
+        tokenService.setAccessTokenConverter(defaultAccessTokenConverter);
+        return tokenService;
+    }
+
+    @Override
+    public void configure(ResourceServerSecurityConfigurer resources) {
+        resources.authenticationEntryPoint(middleAuthenticationEntryPoint);
+        resources.resourceId(clientId);
+    }
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http.headers().frameOptions().disable()
+                .and()
+                .authorizeRequests().antMatchers("/attach/**","/api/public/**","/doc.html","/api/v2/**","/v2/api-docs", "/configuration/ui", "/swagger-resources", "/configuration/security",
+                        "/swagger-ui.html", "/webjars/**","/swagger-resources/configuration/ui","/swagger-ui.html").permitAll()
+                .anyRequest().authenticated();
+    }
+
+}

+ 40 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/config/swagger/SwaggerConfig.java

@@ -0,0 +1,40 @@
+package com.ytpm.middle.config.swagger;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+    private static final String VERSION = "1.0.0";
+
+    @Bean
+    public Docket createApi(){
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.ytpm.middle.controller"))
+                .paths(PathSelectors.any())
+                .build();
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("")
+                .contact(new Contact("易推网络","http://www.sourcetreasure.com/index.html","marxjaw6466@163.com"))
+                .description("代理商管理系统")
+                .termsOfServiceUrl("https://juejin.cn/user/4310510864972254")
+                .license("The Apache License, Version 2.0")
+                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
+                .version(VERSION)
+                .build();
+    }
+}

+ 68 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/AgentController.java

@@ -0,0 +1,68 @@
+package com.ytpm.middle.controller;
+
+import com.ytpm.agent.view.AgentUserInfo;
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.param.AgentBaseInfoParam;
+import com.ytpm.middle.param.AgentForm;
+import com.ytpm.middle.service.AgentService;
+import com.ytpm.middle.view.AgentBaseInfoListVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+
+@Api(tags = "代理商管理")
+@RestController
+@RequestMapping("/agent")
+public class AgentController {
+
+    @Resource
+    private AgentService agentService;
+
+    /**
+     * 代理商基本信息列表
+     */
+    @ApiOperation("代理商基本信息列表")
+    @PostMapping("/baseInfoList")
+    public ResultTable<AgentBaseInfoListVO> getBaseInfoList(@RequestBody AgentBaseInfoParam param){
+        return agentService.getBaseInfoList(param);
+    }
+
+    /**
+     * 新增代理商
+     */
+    @ApiOperation("新增代理商")
+    @PostMapping("/addOne")
+    public Result<String> addOne(@RequestBody AgentForm form, @ApiIgnore @AuthenticationPrincipal AgentUserInfo userInfo){
+        form.setCreateUserId(userInfo.getUserId());
+        return agentService.addOne(form);
+    }
+
+    /**
+     * 修改代理商
+     */
+    @ApiOperation("新增代理商")
+    @PostMapping("/updateOne")
+    public Result<String> updateOne(@RequestBody AgentForm form,  @ApiIgnore @AuthenticationPrincipal AgentUserInfo userInfo){
+        form.setUpdateParam(userInfo.getUserId());
+        return agentService.updateOne(form);
+    }
+
+    /**
+     * 启用或禁用
+     */
+    @ApiOperation("启用或禁用")
+    @GetMapping("/changeEnabled")
+    public Result<String> enabled(@RequestParam(name = "creditCode")String creditCode,  @ApiIgnore @AuthenticationPrincipal AgentUserInfo userInfo){
+        return agentService.enabled(creditCode,userInfo.getUserId());
+    }
+}

+ 57 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/AppController.java

@@ -0,0 +1,57 @@
+package com.ytpm.middle.controller;
+
+import com.ytpm.agent.view.AgentUserInfo;
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.param.AppForm;
+import com.ytpm.middle.param.AppListParam;
+import com.ytpm.middle.service.AppService;
+import com.ytpm.middle.view.AppListVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+
+@Api(tags = "应用管理")
+@RestController
+@RequestMapping("/app")
+public class AppController {
+
+    @Resource
+    private AppService appService;
+
+    /**
+     * 查询已上架应用列表
+     */
+    @ApiOperation("查询已上架应用列表")
+    @PostMapping("/appList")
+    public ResultTable<AppListVO> appList(@RequestBody AppListParam param){
+        return appService.appList(param);
+    }
+
+    /**
+     * 新增上架应用
+     */
+    @ApiOperation("新增上架应用")
+    @PostMapping("/addApp")
+    public Result<String> addApp(@RequestBody AppForm form, @ApiIgnore @AuthenticationPrincipal AgentUserInfo userInfo){
+        form.setCreateUserId(userInfo.getUserId());
+        return appService.addApp(form);
+    }
+
+    /**
+     * 删除应用
+     */
+    @ApiOperation("删除应用")
+    @PostMapping("/delApp")
+    public Result<String> delApp(@RequestParam("appId")String appId, @ApiIgnore @AuthenticationPrincipal AgentUserInfo userInfo){
+        return appService.delApp(appId,userInfo.getUserId());
+    }
+}

+ 44 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/AttachController.java

@@ -0,0 +1,44 @@
+package com.ytpm.middle.controller;
+
+import com.ytpm.attach.Attach;
+import com.ytpm.attach.Image;
+import com.ytpm.general.Result;
+import com.ytpm.middle.service.AttachService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+@Api(tags = "文件管理")
+@Slf4j(topic = "attach-controller")
+@RequestMapping("/attach")
+@RestController
+public class AttachController {
+    @Resource
+    private AttachService attachService;
+
+    /**
+     * 图片上传
+     */
+    @ApiOperation("图片上传")
+    @PostMapping("/image")
+    public Result<Image> uploadImg(@RequestParam("file") MultipartFile multipartFile) {
+        return Result.resultObjOk(attachService.uploadImage(multipartFile));
+    }
+
+    /**
+     * 上传文件
+     */
+    @ApiOperation("文件上传")
+    @PostMapping( "/file")
+    public Result<Attach> upload(@RequestParam("file") MultipartFile multipartFile) {
+        return Result.resultObjOk(attachService.uploadFile(multipartFile));
+    }
+
+}

+ 41 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/MiddleController.java

@@ -0,0 +1,41 @@
+package com.ytpm.middle.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.ytpm.agent.view.AgentDictView;
+import com.ytpm.agent.view.AgentUserInfo;
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.dao.MiddleDictMapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+
+@Api(tags = "middle公用类")
+@RestController
+@RequestMapping("/middle")
+public class MiddleController {
+
+    @Resource
+    private MiddleDictMapper dictMapper;
+
+    @ApiOperation("获取当前登录的用户信息")
+    @GetMapping("/curUser")
+    public Result<AgentUserInfo> getCurUser( @ApiIgnore @AuthenticationPrincipal AgentUserInfo agentUserInfo) {
+        return Result.resultObjOk(agentUserInfo);
+    }
+
+    /**
+     * 查询字典数据列表
+     */
+    @ApiOperation(value = "查询字典数据列表")
+    @GetMapping("/dictList")
+    public ResultTable<AgentDictView> dictList(){
+        return ResultTable.resultTableOk(new PageInfo<AgentDictView>(dictMapper.selectDictList()));
+    }
+}

+ 46 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/OutsourcingController.java

@@ -0,0 +1,46 @@
+package com.ytpm.middle.controller;
+
+import com.ytpm.agent.param.AppListParam;
+import com.ytpm.agent.param.AppParam;
+import com.ytpm.agent.view.AgentAppView;
+import com.ytpm.agent.view.AgentUserInfo;
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.service.ApkService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+
+@Api(tags = "出包管理")
+@RestController
+@RequestMapping("/outSourcing")
+public class OutsourcingController {
+
+    @Resource
+    private ApkService apkService;
+
+    /**
+     * 出包应用列表
+     */
+    @ApiOperation("出包应用列表")
+    @PostMapping("/searchApps")
+    public ResultTable<AgentAppView> searchAll(@RequestBody AppListParam appListParam, @ApiIgnore @AuthenticationPrincipal AgentUserInfo userInfo) {
+        return apkService.searchAppList(appListParam);
+    }
+
+    /**
+     * 保存应用
+     */
+    @ApiOperation("保存应用,新增修改共用")
+    @PostMapping("/saveApp")
+    public Result<?> saveApp(@RequestBody AppParam param, @ApiIgnore @AuthenticationPrincipal AgentUserInfo userInfo) {
+        return apkService.saveApp(param,userInfo.getUserId());
+    }
+}

+ 21 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/AgentMapper.java

@@ -0,0 +1,21 @@
+package com.ytpm.middle.dao;
+
+import com.ytpm.middle.param.AgentBaseInfoParam;
+import com.ytpm.middle.view.AgentBaseInfoListVO;
+import com.ytpm.oauth.model.YtPlatformUser;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface AgentMapper {
+    /**
+     * 渠道商基本信息列表
+     */
+    List<AgentBaseInfoListVO> getBaseInfoList(AgentBaseInfoParam param);
+
+    /**
+     * 新增用户
+     */
+    void addOneUser(YtPlatformUser user);
+}

+ 27 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/ApkMapper.java

@@ -0,0 +1,27 @@
+package com.ytpm.middle.dao;
+
+import com.ytpm.agent.model.YtApp;
+import com.ytpm.agent.param.AppListParam;
+import com.ytpm.agent.view.AgentAppView;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface ApkMapper {
+
+    /**
+     * 查询应用列表
+     */
+    List<AgentAppView> searchAppList(AppListParam appListParam);
+
+    /**
+     * 新增应用信息
+     */
+    void insertOne(YtApp app);
+
+    /**
+     * 保存应用
+     */
+    void updateOne(YtApp app);
+}

+ 31 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/AppMapper.java

@@ -0,0 +1,31 @@
+package com.ytpm.middle.dao;
+
+import com.ytpm.agent.model.YtPlatformUserApp;
+import com.ytpm.middle.param.AppListParam;
+import com.ytpm.middle.view.AppListVO;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface AppMapper {
+    /**
+     *  应用列表
+     */
+    List<AppListVO> getAppList(AppListParam param);
+
+    /**
+     * 根据包名查询应用
+     */
+    YtPlatformUserApp getByPackName(@Param("packageName") String packageName);
+
+    /**
+     * 新增应用
+     */
+    void insertOne(YtPlatformUserApp app);
+    /**
+     * 删除应用
+     */
+    void delApp(@Param("appId") String appId, @Param("userId") String userId);
+}

+ 23 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/EnterpriseMapper.java

@@ -0,0 +1,23 @@
+package com.ytpm.middle.dao;
+
+import com.ytpm.middle.model.YtMiddleEnterprise;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+@Mapper
+public interface EnterpriseMapper {
+    /**
+     * 新增企业
+     */
+    int insertOne(YtMiddleEnterprise enterprise);
+
+    /**
+     * 企业信用代码查询企业
+     */
+    YtMiddleEnterprise getByCode(@Param("creditCode") String creditCode);
+
+    /**
+     * 修改企业
+     */
+    void updateById(YtMiddleEnterprise enterprise);
+}

+ 14 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/MiddleDictMapper.java

@@ -0,0 +1,14 @@
+package com.ytpm.middle.dao;
+
+import com.ytpm.agent.view.AgentDictView;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface MiddleDictMapper {
+    /**
+     * 查询字典表数据
+     */
+    List<AgentDictView> selectDictList();
+}

+ 10 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/MiddleUserMapper.java

@@ -0,0 +1,10 @@
+package com.ytpm.middle.dao;
+
+import com.ytpm.agent.view.AgentUserInfo;
+import org.mapstruct.Mapper;
+
+@Mapper
+public interface MiddleUserMapper {
+
+    AgentUserInfo getByLoginName(String userName);
+}

+ 37 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/handle/MiddleAuthenticationEntryPoint.java

@@ -0,0 +1,37 @@
+package com.ytpm.middle.handle;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ytpm.general.RepMessage;
+import com.ytpm.general.StatusCode;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.oauth2.common.exceptions.InvalidTokenException;
+import org.springframework.security.web.AuthenticationEntryPoint;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+@Slf4j
+public class MiddleAuthenticationEntryPoint implements AuthenticationEntryPoint {
+    @Override
+    public void commence(HttpServletRequest request, HttpServletResponse response,
+                         AuthenticationException authException) {
+        Throwable cause = authException.getCause();
+        response.setHeader("Content-Type", "application/json;charset=UTF-8");
+        try {
+            JSONObject body = new JSONObject();
+            body.put("code", StatusCode.MANAGE_NOT_LOGIN);
+            body.put("message", RepMessage.TOKEN_EXPIRE);
+            if (!(cause instanceof InvalidTokenException)) {
+                body.put("code", StatusCode.MANAGE_NOT_LOGIN);
+                body.put("message", RepMessage.TOKEN_INVALID);
+            }
+            response.getWriter().write(body.toJSONString());
+        } catch (IOException e) {
+            log.error("token认证失败={}", e);
+        }
+    }
+}

+ 23 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/OssAttach.java

@@ -0,0 +1,23 @@
+package com.ytpm.middle.oss;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * Oss 文件类
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OssAttach {
+    /**
+     * 附件名称
+     */
+    private String name;
+
+    /**
+     * 附件路径
+     */
+    private String url;
+}

+ 54 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/OssProperties.java

@@ -0,0 +1,54 @@
+package com.ytpm.middle.oss;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * oss配置类
+ */
+@Data
+@Component
+public class OssProperties {
+    /**
+     * 存储类的全称
+     */
+    @Value("${oss.name}")
+    private String name;
+
+    /**
+     * 存储的文件路径
+     */
+    @Value("${oss.path}")
+    private String path;
+
+    /**
+     * 存储文件的访问域
+     */
+    @Value("${oss.domain}")
+    private String domain;
+
+    /**
+     * 密钥
+     */
+    @Value("${oss.accessKey}")
+    private String accessKey;
+
+    /**
+     * 访问密钥
+     */
+    @Value("${oss.secretKey}")
+    private String secretKey;
+
+    /**
+     * 端点名
+     */
+    @Value("${oss.endpoint}")
+    private String endpoint;
+
+    /**
+     * 存储桶名
+     */
+    @Value("${oss.bucket}")
+    private String bucket;
+}

+ 76 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/OssUtil.java

@@ -0,0 +1,76 @@
+package com.ytpm.middle.oss;
+
+import cn.hutool.core.util.StrUtil;
+import com.ytpm.handle.CustomerException;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.File;
+import java.io.InputStream;
+
+@Slf4j(topic = "oss-util")
+public final class OssUtil {
+    private static StorageTemplate getStorageTemplate(OssProperties ossProperties) {
+        return StorageFactory.createStorageTemplate(ossProperties);
+    }
+
+    /**
+     * 上传文件(本地文件上传)
+     *
+     * @param file          本地文件
+     * @param ossProperties 文件描述信息
+     * @return 生成的文件名
+     */
+    public static String upload(File file, OssProperties ossProperties) {
+        return getStorageTemplate(ossProperties).upload(file);
+    }
+
+    /**
+     * 删除文件
+     *
+     * @param filename
+     */
+    public static boolean deleteFile(String filename, OssProperties ossProperties) {
+        return getStorageTemplate(ossProperties).deleteFile(filename);
+    }
+
+    /**
+     * 转存文件(把原来的文件再重新上传存储一遍)
+     *
+     * @param filename      文件名
+     * @param ossProperties 文件描述
+     * @return 新生成文件名
+     */
+    public static OssAttach restore(String filename, OssProperties ossProperties) {
+        return getStorageTemplate(ossProperties).restore(filename);
+    }
+
+    /**
+     * 获取文件url
+     *
+     * @param ossName       存储的文件名
+     * @param ossProperties 文件描述
+     * @return 文件url
+     */
+    public static String getUrl(String ossName, OssProperties ossProperties) {
+        String url = getStorageTemplate(ossProperties).getUrl(ossName);
+        if (StrUtil.isBlank(url)) {
+            return null;
+        }
+        return url.replace(ossProperties.getEndpoint(), ossProperties.getDomain());
+    }
+
+    /**
+     * 获取文件流
+     *
+     * @param ossName
+     * @param ossProperties
+     * @return
+     */
+    public static InputStream getStream(String ossName, OssProperties ossProperties) {
+        try {
+            return getStorageTemplate(ossProperties).getStream(ossName);
+        } catch (Exception e) {
+            throw new CustomerException(e.getMessage());
+        }
+    }
+}

+ 14 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/StorageFactory.java

@@ -0,0 +1,14 @@
+package com.ytpm.middle.oss;
+
+import cn.hutool.core.util.ReflectUtil;
+
+/**
+ * 存储工厂
+ */
+public class StorageFactory {
+    public static StorageTemplate createStorageTemplate(OssProperties ossProperties) {
+        StorageTemplate storageTemplate = ReflectUtil.newInstance(ossProperties.getName());
+        storageTemplate.init(ossProperties);
+        return storageTemplate;
+    }
+}

+ 57 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/StorageTemplate.java

@@ -0,0 +1,57 @@
+package com.ytpm.middle.oss;
+
+
+import io.minio.errors.ErrorResponseException;
+import io.minio.errors.InsufficientDataException;
+import io.minio.errors.InternalException;
+import io.minio.errors.InvalidBucketNameException;
+import io.minio.errors.InvalidResponseException;
+import io.minio.errors.XmlParserException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+public interface StorageTemplate {
+    /**
+     * 初始化oss属性
+     *
+     * @param ossProperties oss属性
+     */
+    void init(OssProperties ossProperties);
+
+    /**
+     * 上传文件(本地文件上传)
+     *
+     * @param file 本地文件
+     * @return
+     */
+    String upload(File file);
+
+    /**
+     * 删除文件
+     *
+     * @param filename
+     */
+    boolean deleteFile(String filename);
+
+    /**
+     * 转存文件(把原来的文件再重新上传存储一遍)
+     *
+     * @param filename 文件名
+     * @return
+     */
+    OssAttach restore(String filename);
+
+    /**
+     * 获取文件url
+     *
+     * @param filename
+     * @return
+     */
+    String getUrl(String filename);
+
+    InputStream getStream(String filename) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException, InvalidBucketNameException;
+}

+ 113 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/oss/minio/MinioStorageTemplate.java

@@ -0,0 +1,113 @@
+package com.ytpm.middle.oss.minio;
+
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.file.FileNameUtil;
+import cn.hutool.core.util.IdUtil;
+import com.ytpm.handle.CustomerException;
+import com.ytpm.middle.oss.OssAttach;
+import com.ytpm.middle.oss.OssProperties;
+import com.ytpm.middle.oss.StorageTemplate;
+import io.minio.MinioClient;
+import io.minio.PutObjectOptions;
+import io.minio.errors.ErrorResponseException;
+import io.minio.errors.InsufficientDataException;
+import io.minio.errors.InternalException;
+import io.minio.errors.InvalidBucketNameException;
+import io.minio.errors.InvalidResponseException;
+import io.minio.errors.XmlParserException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Date;
+
+public class MinioStorageTemplate implements StorageTemplate {
+    private String bucket;
+
+    private MinioClient minioClient;
+
+    @Override
+    public void init(OssProperties ossProperties) {
+        try {
+
+            this.minioClient = new MinioClient(ossProperties.getEndpoint(), ossProperties.getAccessKey(), ossProperties.getSecretKey());
+            this.bucket = ossProperties.getBucket();
+            boolean isExists = minioClient.bucketExists(bucket);
+            if (!isExists) {
+                minioClient.makeBucket(bucket);
+                minioClient.setBucketPolicy(bucket,"public");
+            }
+        } catch (Exception e) {
+            throw new CustomerException(e.getMessage());
+        }
+    }
+
+    @Override
+    public String upload(File file) {
+        try {
+            String filename = getFileName(file);
+            PutObjectOptions options = new PutObjectOptions(FileUtil.size(file), PutObjectOptions.MIN_MULTIPART_SIZE);
+            minioClient.putObject(bucket, filename, FileUtil.getInputStream(file), options);
+            return filename;
+        } catch (Exception e) {
+            throw new CustomerException(e.getMessage());
+        }
+    }
+
+
+    @Override
+    public boolean deleteFile(String filename) {
+        try {
+            minioClient.removeObject(bucket, filename);
+        } catch (Exception e) {
+            throw new CustomerException(e.getMessage());
+        }
+        return true;
+    }
+
+    @Override
+    public OssAttach restore(String filename) {
+        String newFileName = getFileName(filename);
+        try {
+            minioClient.copyObject(bucket, newFileName, null, null, bucket, filename, null, null);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return new OssAttach(newFileName, getUrl(newFileName));
+    }
+
+    @Override
+    public String getUrl(String filename) {
+        String url;
+        try {
+            url = this.minioClient.getObjectUrl(bucket, filename);
+        } catch (Exception e) {
+            throw new CustomerException(e.getMessage());
+        }
+        return url;
+    }
+
+    @Override
+    public InputStream getStream(String filename) throws IOException, InvalidKeyException, InvalidResponseException,
+            InsufficientDataException, NoSuchAlgorithmException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException {
+        return minioClient.getObject(bucket, filename);
+    }
+
+    private String getFileName(File file) {
+        String ym = DateUtil.format(new Date(), "YYYYMM");
+        String filename = ym + "/" + ym + IdUtil.fastSimpleUUID() + "." + FileNameUtil.getSuffix(file);
+
+        return filename;
+    }
+
+    private String getFileName(String fileName) {
+        String ym = DateUtil.format(new Date(), "YYYYMM");
+        String filename = ym + "/" + ym + IdUtil.fastSimpleUUID() + "." + FileNameUtil.getSuffix(fileName);
+
+        return filename;
+    }
+}

+ 27 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/AgentService.java

@@ -0,0 +1,27 @@
+package com.ytpm.middle.service;
+
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.param.AgentBaseInfoParam;
+import com.ytpm.middle.param.AgentForm;
+import com.ytpm.middle.view.AgentBaseInfoListVO;
+
+public interface AgentService {
+    /**
+     * 渠道商基本信息列表
+     */
+    ResultTable<AgentBaseInfoListVO> getBaseInfoList(AgentBaseInfoParam param);
+    /**
+     * 新增渠道商
+     */
+    Result<String> addOne(AgentForm form);
+
+    /**
+     * 修改代理商
+     */
+    Result<String> updateOne(AgentForm form);
+    /**
+     * 启用或禁用
+     */
+    Result<String> enabled(String creditCode, String userId);
+}

+ 20 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/ApkService.java

@@ -0,0 +1,20 @@
+package com.ytpm.middle.service;
+
+import com.ytpm.agent.param.AppListParam;
+import com.ytpm.agent.param.AppParam;
+import com.ytpm.agent.view.AgentAppView;
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+
+public interface ApkService {
+
+
+    /**
+     * 出包应用列表
+     */
+    ResultTable<AgentAppView> searchAppList(AppListParam appListParam);
+    /**
+     * 保存应用
+     */
+    Result<?> saveApp(AppParam param, String userId);
+}

+ 22 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/AppService.java

@@ -0,0 +1,22 @@
+package com.ytpm.middle.service;
+
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.param.AppForm;
+import com.ytpm.middle.param.AppListParam;
+import com.ytpm.middle.view.AppListVO;
+
+public interface AppService {
+    /**
+     *  应用列表
+     */
+    ResultTable<AppListVO> appList(AppListParam param);
+    /**
+     * 新增上架应用
+     */
+    Result<String> addApp(AppForm form);
+    /**
+     * 删除应用
+     */
+    Result<String> delApp(String appId, String userId);
+}

+ 25 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/AttachService.java

@@ -0,0 +1,25 @@
+package com.ytpm.middle.service;
+
+import com.ytpm.attach.Attach;
+import com.ytpm.attach.Image;
+import org.springframework.web.multipart.MultipartFile;
+
+public interface AttachService {
+    /**
+     * 上传文件
+     *
+     * @param multipartFile 文件
+    机构id
+     * @return 文件信息
+     */
+    Attach uploadFile(MultipartFile multipartFile);
+
+    /**
+     * 上传图片
+     *
+     * @param multipartFile 文件
+    机构
+     * @return 图片信息
+     */
+    Image uploadImage(MultipartFile multipartFile);
+}

+ 127 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/AgentServiceImpl.java

@@ -0,0 +1,127 @@
+package com.ytpm.middle.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ytpm.general.RepMessage;
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.dao.AgentMapper;
+import com.ytpm.middle.dao.EnterpriseMapper;
+import com.ytpm.middle.model.YtMiddleEnterprise;
+import com.ytpm.middle.param.AgentBaseInfoParam;
+import com.ytpm.middle.param.AgentForm;
+import com.ytpm.middle.service.AgentService;
+import com.ytpm.middle.view.AgentBaseInfoListVO;
+import com.ytpm.oauth.model.YtPlatformUser;
+import com.ytpm.util.IDUtil;
+import com.ytpm.util.RandomPasswordGenerator;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.Objects;
+
+@Service
+@Slf4j(topic = "代理商业务")
+public class AgentServiceImpl implements AgentService {
+
+    @Resource
+    private AgentMapper agentMapper;
+    @Resource
+    private EnterpriseMapper enterpriseMapper;
+
+    /**
+     * 渠道商基本信息列表
+     */
+    @Override
+    public ResultTable<AgentBaseInfoListVO> getBaseInfoList(AgentBaseInfoParam param) {
+        PageHelper.startPage(param.getPage(), param.getLimit());
+        return ResultTable.resultTableOk(new PageInfo<AgentBaseInfoListVO>(agentMapper.getBaseInfoList(param)));
+    }
+
+    /**
+     * 新增渠道商
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result<String> addOne(AgentForm form) {
+        //根据企业信用代码查询公司是否已存在
+        YtMiddleEnterprise old = enterpriseMapper.getByCode(form.getCreditCode());
+        if(Objects.nonNull(old)) {
+            return Result.resultErr(RepMessage.OBJECT_ALREADY_EXIST);
+        }
+        String accountId = IDUtil.generateFlowID("yt_agent_");
+        generateLoginAccount(form,accountId);
+        addEnterprise(form,accountId);
+        return Result.resultOk(RepMessage.ADD_SUCCESS);
+    }
+
+    /**
+     * 修改代理商
+     */
+    @Override
+    public Result<String> updateOne(AgentForm form) {
+        YtMiddleEnterprise old = enterpriseMapper.getByCode(form.getCreditCode());
+        if(Objects.isNull(old)) {
+            return Result.resultOk(RepMessage.OBJECT_NOT_EXIST);
+        }
+        YtMiddleEnterprise enterprise = new YtMiddleEnterprise();
+        BeanUtil.copyProperties(form, enterprise);
+        enterpriseMapper.updateById(enterprise);
+        return Result.resultOk(RepMessage.MODIFY_SUCCESS);
+    }
+
+    /**
+     * 启用或禁用
+     */
+    @Override
+    public Result<String> enabled(String creditCode, String userId) {
+        YtMiddleEnterprise old = enterpriseMapper.getByCode(creditCode);
+        if(Objects.isNull(old)) {
+            return Result.resultOk(RepMessage.OBJECT_NOT_EXIST);
+        }
+        YtMiddleEnterprise enterprise = new YtMiddleEnterprise();
+        enterprise.setEnterpriseId(old.getEnterpriseId());
+        enterprise.setAvailable(old.getAvailable()==1?0:1);
+        enterprise.setUpdateParam(userId);
+        enterpriseMapper.updateById(enterprise);
+        return Result.resultOk(RepMessage.MODIFY_SUCCESS);
+    }
+
+    /**
+     * 企业信息新增操作
+     */
+    private void addEnterprise(AgentForm form, String accountId) {
+        YtMiddleEnterprise enterprise = new YtMiddleEnterprise();
+        BeanUtil.copyProperties(form, enterprise);
+        enterprise.setUserId(accountId);
+        enterprise.setCreateTime(new Date());
+        enterprise.setCreateUserId(form.getCreateUserId());
+        enterprise.setAvailable(1);
+        enterpriseMapper.insertOne(enterprise);
+    }
+
+    /**
+     * 生成登录账号
+     */
+    private void generateLoginAccount(AgentForm form, String accountId) {
+        //根据登录名生成登录账号
+        YtPlatformUser user = new YtPlatformUser();
+        user.setNickName(form.getEnterpriseName());
+        user.setLoginName(form.getLoginName());
+        String generatedPassword = RandomPasswordGenerator.generatePassword(8);
+        user.setEncryptPwd(new BCryptPasswordEncoder().encode(generatedPassword));
+        user.setPhone(form.getConcatPhone());
+        user.setLastLoginTime(new Date());
+        user.setUserType(form.getUserType());
+        user.setRegistryTime(new Date());
+        user.setUserId(accountId);
+        user.setChannelId(accountId);
+        user.setLoginDays(1);
+        agentMapper.addOneUser(user);
+    }
+}

+ 62 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/ApkServiceImpl.java

@@ -0,0 +1,62 @@
+package com.ytpm.middle.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.IdUtil;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ytpm.agent.model.YtApp;
+import com.ytpm.agent.param.AppListParam;
+import com.ytpm.agent.param.AppParam;
+import com.ytpm.agent.view.AgentAppView;
+import com.ytpm.general.RepMessage;
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.dao.ApkMapper;
+import com.ytpm.middle.service.ApkService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class ApkServiceImpl implements ApkService {
+
+    @Resource
+    private ApkMapper apkMapper;
+
+    /**
+     * 查询应用列表
+     */
+    @Override
+    public ResultTable<AgentAppView> searchAppList(AppListParam appListParam) {
+        PageHelper.startPage(appListParam.getPage(), appListParam.getLimit());
+        return ResultTable.resultTableOk(new PageInfo<>(apkMapper.searchAppList(appListParam)));
+    }
+
+    /**
+     * 新增应用
+     */
+    @Override
+    public Result<?> saveApp(AppParam param, String userId) {
+        //数据库操作,有appId为修改, 没有时为新增
+        changeDataAction(param,userId);
+        return Result.resultOk(RepMessage.SAVE_SUCCESS);
+    }
+
+    /**
+     * 处理数据库数据变更操作
+     */
+    private void changeDataAction(AppParam param, String userId) {
+        YtApp app = new YtApp();
+        BeanUtil.copyProperties(param, app);
+        if(CharSequenceUtil.isNotBlank(param.getAppId())){
+            apkMapper.updateOne(app);
+        }else{
+            app.setAppId(IdUtil.fastSimpleUUID());
+            app.setUserId(userId);
+            app.setEnabled(1);
+            apkMapper.insertOne(app);
+        }
+    }
+}

+ 62 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/AppServiceImpl.java

@@ -0,0 +1,62 @@
+package com.ytpm.middle.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ytpm.agent.model.YtPlatformUserApp;
+import com.ytpm.general.RepMessage;
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.dao.AppMapper;
+import com.ytpm.middle.param.AppForm;
+import com.ytpm.middle.param.AppListParam;
+import com.ytpm.middle.service.AppService;
+import com.ytpm.middle.view.AppListVO;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.Objects;
+
+@Service
+public class AppServiceImpl implements AppService {
+
+    @Resource
+    private AppMapper appMapper;
+
+    /**
+     *  应用列表
+     */
+    @Override
+    public ResultTable<AppListVO> appList(AppListParam param) {
+        PageHelper.startPage(param.getPage(), param.getLimit());
+        return ResultTable.resultTableOk(new PageInfo<AppListVO>(appMapper.getAppList(param)));
+    }
+    /**
+     * 新增上架应用
+     */
+    @Override
+    public Result<String> addApp(AppForm form) {
+        YtPlatformUserApp old =  appMapper.getByPackName(form.getPackageName());
+        if(Objects.nonNull(old)){
+            return Result.resultErr(RepMessage.OBJECT_ALREADY_EXIST);
+        }
+        YtPlatformUserApp app = new YtPlatformUserApp();
+        BeanUtils.copyProperties(form, app);
+        app.setCreateTime(new Date());
+        app.setCreateUserId(form.getCreateUserId());
+        app.setAvailable(1);
+        appMapper.insertOne(app);
+        return Result.resultOk(RepMessage.SAVE_SUCCESS);
+    }
+
+    /**
+     * 删除应用
+     */
+    @Override
+    public Result<String> delApp(String appId, String userId) {
+        appMapper.delApp(appId,userId);
+        return Result.resultOk(RepMessage.DELETE_SUCCESS);
+    }
+}

+ 98 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/AttachServiceImpl.java

@@ -0,0 +1,98 @@
+package com.ytpm.middle.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import com.ytpm.attach.Attach;
+import com.ytpm.attach.Image;
+import com.ytpm.handle.CustomerException;
+import com.ytpm.middle.oss.OssProperties;
+import com.ytpm.middle.oss.OssUtil;
+import com.ytpm.middle.service.AttachService;
+import lombok.extern.slf4j.Slf4j;
+import net.coobird.thumbnailator.Thumbnails;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+
+@Slf4j(topic = "attach-service")
+@Service
+public class AttachServiceImpl implements AttachService {
+
+    @Autowired
+    OssProperties properties;
+
+    @Override
+    public Attach uploadFile(MultipartFile multipartFile) {
+
+        String originFilename = multipartFile.getOriginalFilename();
+        Attach attach = new Attach();
+        String ossName = upload(multipartFile, properties, false);
+        attach.setName(originFilename);
+        attach.setOssName(ossName);
+        attach.setUrl(OssUtil.getUrl(ossName, properties));
+        attach.setFileSize(multipartFile.getSize());
+        return attach;
+    }
+
+    @Override
+    public Image uploadImage(MultipartFile multipartFile) {
+        String ossName = upload(multipartFile, properties, true);
+
+        Image image = new Image();
+        image.setOssName(ossName);
+        image.setUrl(OssUtil.getUrl(ossName, properties));
+        return image;
+    }
+
+    /**
+     * 文件上传
+     *
+     * @param multipartFile 文件
+     * @param properties    存储配置
+     * @param isImage       是否为图片
+     * @return 文件ossName
+     */
+    private String upload(MultipartFile multipartFile, OssProperties properties, Boolean isImage) {
+        String originFilename = multipartFile.getOriginalFilename();
+        String suffix = originFilename.substring(originFilename.lastIndexOf("."));
+
+        if (isImage) {
+            suffix = suffix.toUpperCase();
+            //图片
+            if (!".JPEG,.JPG,.PNG".contains(suffix)||suffix.equals(".")||suffix.equals(",")) {
+                throw new CustomerException("格式类型错误");
+            }
+        }
+
+        String folder = System.getProperty("java.io.tmpdir");
+        File file = new File(folder + File.separator + IdUtil.fastSimpleUUID() + suffix);
+
+        try {
+            multipartFile.transferTo(file);
+            //压缩图片
+            compressFile(file, suffix);
+        } catch (IOException e) {
+            log.error("文件上传失败:", e);
+            throw new CustomerException(e.getMessage());
+        }
+
+        return OssUtil.upload(file, properties);
+    }
+
+    private void compressFile(File file, String suffix) {
+        //2、大于2M的图片需要压缩大小
+        long fileSize = file.length();
+        if (".JPEG,.JPG,.PNG".contains(suffix) && fileSize > 1024 * 1024 * 2) {
+            try {
+                Thumbnails.of(file)
+                        .scale(0.2)
+//                        .outputQuality(0.2f)
+                        .toFile(file);
+            } catch (IOException e) {
+                log.error("压缩报错了:", e);
+            }
+        }
+    }
+}

+ 267 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/util/RedisUtil.java

@@ -0,0 +1,267 @@
+package com.ytpm.middle.util;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class RedisUtil {
+    @Autowired
+    StringRedisTemplate stringRedisTemplate;
+
+
+    @Resource(name = "stringRedisTemplate")
+    ValueOperations<String, String> valOpsStr;
+
+    @Autowired
+    RedisTemplate<Object, Object> redisTemplate;
+
+    @Autowired(required = false)
+    public void setRedisTemplate(RedisTemplate redisTemplate) {
+        //序列化key值,防止key值前面乱码
+        RedisSerializer stringSerializer = new StringRedisSerializer();
+        redisTemplate.setKeySerializer(stringSerializer);
+        redisTemplate.setHashKeySerializer(stringSerializer);
+        this.redisTemplate = redisTemplate;
+    }
+
+    @Resource(name = "redisTemplate")
+    ValueOperations<Object, Object> valOpsObj;
+
+    /**
+     * 根据指定key获取String
+     * @param key
+     * @return
+     */
+    public String getStr(String key){
+        return valOpsStr.get(key);
+    }
+
+    /**
+     * 设置Str缓存
+     * @param key
+     * @param val
+     */
+    public void setStr(String key, String val){
+        valOpsStr.set(key,val);
+    }
+
+    /**
+     * 设置Str缓存 timeOut单位  毫秒
+     * @param key
+     * @param val
+     */
+    public void setTimeOutStr(String key, String val ,long timeOut){
+        valOpsStr.set(key,val,timeOut, TimeUnit.MILLISECONDS);
+    }
+
+    /**
+     * 判断是否存在key
+     * @param key
+     * @return
+     */
+    public Boolean hasKey(String key) {
+        return redisTemplate.hasKey(key);
+    }
+
+    /**
+     * 设置Str缓存 timeOut单位  小时
+     * @param key
+     * @param val
+     * @param timeOut
+     */
+    public void setTimeOutHoursStr(String key, String val ,long timeOut){
+        valOpsStr.set(key,val,timeOut, TimeUnit.HOURS);
+    }
+
+    /**
+     * 设置Str缓存 timeOut单位  分钟
+     * @param key
+     * @param val
+     * @param timeOut
+     */
+    public void setTimeOutMinutesStr(String key, String val ,long timeOut){
+        valOpsStr.set(key,val,timeOut, TimeUnit.MINUTES);
+    }
+
+    /**
+     * 删除指定key
+     * @param key
+     */
+    public void del(String key){
+        stringRedisTemplate.delete(key);
+    }
+
+    /**
+     * 设置指定key值的超时时间
+     * @param key
+     */
+    public void expire(String key,long timeOut){
+        TimeUnit timeUnit=TimeUnit.MILLISECONDS;
+        stringRedisTemplate.expire(key,timeOut, timeUnit);
+    }
+
+    /**
+     * 根据前缀批量删除
+     * @param keysPrefix
+     */
+    public void delKeys(String keysPrefix){
+        Set<String> set = stringRedisTemplate.keys(keysPrefix);
+        stringRedisTemplate.delete(set);
+    }
+
+
+
+    /**
+     * 根据指定o获取Object
+     * @param o
+     * @return
+     */
+    public Object getObj(Object o){
+        return valOpsObj.get(o);
+    }
+
+    /**
+     * 设置obj缓存
+     * @param o1
+     * @param o2
+     */
+    public void setObj(Object o1, Object o2){
+        valOpsObj.set(o1, o2);
+    }
+    /**
+     * 设置obj缓存
+     * @param o1
+     * @param o2
+     */
+    public void setObj(Object o1, Object o2,long timeout){
+        valOpsObj.set(o1, o2,timeout);
+    }
+
+
+    /**
+     * 删除Obj缓存
+     * @param o
+     */
+    public void delObj(Object o){
+        redisTemplate.delete(o);
+    }
+
+
+    /**
+     * 自增1
+     * @param key
+     * @return
+     */
+    public long incr(String key){
+        long num = valOpsStr.increment(key,1);
+        return num;
+    }
+    /**
+     * 自增1
+     * @param key
+     * @return
+     */
+    public long incrByExp(String key,long timeout){
+        long num = valOpsStr.increment(key,1);
+        TimeUnit timeUnit=TimeUnit.MILLISECONDS;
+        stringRedisTemplate.expire(key,timeout, timeUnit);
+        return num;
+    }
+    /**
+     * 自增
+     * @param key
+     * @param delta  自增值
+     * @return
+     */
+    public long incrByExp(String key,int delta,long timeout){
+        long num = valOpsStr.increment(key,delta);
+        TimeUnit timeUnit=TimeUnit.MILLISECONDS;
+        stringRedisTemplate.expire(key,timeout, timeUnit);
+        return num;
+    }
+    /**
+     * 自增
+     * @param key
+     * @param delta  自增值
+     * @return
+     */
+    public long incr(String key,long delta){
+        return valOpsStr.increment(key,delta);
+    }
+
+    /**
+     * 获取应用用户ID
+     */
+    public synchronized String getAppUserId() {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyMdd");
+        LocalDate currentDate = LocalDate.now();
+        LocalDate yesterday = currentDate.minusDays(1);
+        String todayKey = currentDate.format(formatter);
+        String yesterdayKey = yesterday.format(formatter);
+        if(this.hasKey(todayKey)){
+            this.incr(todayKey);
+            return this.getStr(todayKey);
+        }
+        this.del(yesterdayKey);
+        this.setStr(todayKey, todayKey+"0001");
+        return this.getStr(todayKey);
+    }
+
+    public Long getDitchId(){
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        LocalDate currentDate = LocalDate.now();
+        LocalDate yesterday = currentDate.minusDays(1);
+        String todayKey = currentDate.format(formatter);
+        String yesterdayKey = yesterday.format(formatter);
+        String prefix = "Ditch_";
+        if(this.hasKey(prefix+todayKey)){
+            this.incr(prefix+todayKey);
+            return Long.parseLong(this.getStr(prefix+todayKey));
+        }
+        this.del(yesterdayKey);
+        this.setStr(prefix+todayKey, todayKey+"01");
+        return Long.parseLong(this.getStr(prefix+todayKey));
+    }
+
+    /**
+     *
+     * 生成业务单编号
+     * @return
+     */
+    public String generateOrderNo(String key){
+        Calendar cl = Calendar.getInstance();
+        int year = cl.get(Calendar.YEAR);
+        int month = cl.get(Calendar.MONTH) + 1;
+        int day = cl.get(Calendar.DATE);
+        String orderNoPrefix = getTimeStr(year)+getTimeStr(month)+getTimeStr(day);
+        if(this.hasKey(key)){
+            String old = this.getStr(key);
+            String sub = old.substring(0,8);
+            if(sub.equals(orderNoPrefix)){
+                long incr = this.incr(key);
+                return String.valueOf(incr);
+            }
+        }
+        this.setStr(key,orderNoPrefix+"001");
+        return orderNoPrefix+"001";
+    }
+
+    private String getTimeStr(int num){
+        if(num>9) {
+            return String.valueOf(num);
+        }
+        return "0"+num;
+    }
+}

+ 79 - 0
yt-middle/middle-platform/src/main/resources/mapper/AgentMapper.xml

@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ytpm.middle.dao.AgentMapper">
+    <insert id="addOneUser">
+        insert into yt_platform_user
+        (
+         user_id,
+         nick_name,
+         head_image,
+         login_name,
+         encrypt_pwd,
+         salt,
+         phone,
+         last_login_time,
+         last_login_ip,
+         phone_brand,
+         phone_model,
+         account_status,
+         channel_id,
+         user_type,
+         login_days,
+         total_income,
+         app_id,
+         registry_time,
+         transfer_amount
+        )
+        values
+        (
+         #{userId},
+         #{nickName},
+         #{headImage},
+         #{loginName},
+         #{encryptPwd},
+         #{salt},
+         #{phone},
+         #{lastLoginTime},
+         #{lastLoginIp},
+         #{phoneBrand},
+         #{phoneModel},
+         #{accountStatus},
+         #{channelId},
+         #{userType},
+         #{loginDays},
+         #{totalIncome},
+         #{appId},
+         #{registryTime},
+         #{transferAmount}
+        );
+    </insert>
+
+    <select id="getBaseInfoList" resultType="com.ytpm.middle.view.AgentBaseInfoListVO">
+        select
+        me.enterprise_id,
+        me.user_id,
+        me.enterprise_name,
+        me.credit_code,
+        me.legal,
+        me.legal_card,
+        me.concat_phone,
+        me.business_licence,
+        me.registry_address,
+        me.create_time,
+        me.create_user_id,
+        me.update_time,
+        me.update_user_id,
+        me.available,
+        pu.login_name,
+        pu.user_type,
+        pu1.nick_name createUserName
+        from yt_middle_enterprise me
+        join yt_platform_user pu on me.user_id = pu.user_id
+        join yt_platform_user pu1 on me.create_user_id = pu1.user_id
+        <where>
+            <if test="enterpriseName != null and enterpriseName != ''">
+                and me.enterprise_name like concat('%',#{enterpriseName},'%')
+            </if>
+        </where>
+    </select>
+</mapper>

+ 171 - 0
yt-middle/middle-platform/src/main/resources/mapper/ApkMapper.xml

@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ytpm.middle.dao.ApkMapper">
+    <select id="searchAppList" resultType="com.ytpm.agent.view.AgentAppView">
+        SELECT
+        ya.app_id,
+        ya.app_key,
+        ya.app_name,
+        ya.superior_id,
+        pua.app_name superiorName,
+        ya.user_id,
+        ya.app_type,
+        ya.apk_url,
+        ya.qr_code,
+        ya.version_code,
+        ya.update_tips,
+        ya.enabled,
+        ya.store_on_sale,
+        ya.store_type,
+        ya.store_url,
+        ya.package_name,
+        ya.domain,
+        ya.category,
+        ya.sub_category,
+        ya.coppa,
+        ya.ccpa,
+        ya.screen_orientation,
+        ya.ditch_name,
+        ya.ditch_id,
+        u.nick_name
+        FROM
+        yt_app ya
+        JOIN yt_platform_user_app pua on ya.superior_id = pua.app_id
+        LEFT JOIN yt_app_channel_relative acr ON ya.app_id = acr.app_id
+        LEFT JOIN yt_platform_user u ON ya.user_id = u.user_id
+        <where>
+            <if test="appName !=null and appName != ''">
+                and ya.app_name like concat('%', #{appName} ,'%')
+            </if>
+            <if test="appType !=null">
+                and ya.app_type = #{appType}
+            </if>
+            GROUP BY
+            ya.app_id
+        </where>
+    </select>
+
+    <insert id="insertOne">
+        insert into yt_app
+        (
+            app_id,
+            app_key,
+            app_name,
+            user_id,
+            app_type,
+            apk_url,
+            qr_code,
+            version_code,
+            update_tips,
+            store_on_sale,
+            store_type,
+            package_name,
+            domain,
+            category,
+            sub_category,
+            coppa,
+            screen_orientation,
+            ccpa,
+            store_url,
+            ditch_id,
+            ditch_name,
+            superior_id,
+            enabled
+        )
+        values
+            (
+                #{appId},
+                #{appKey},
+                #{appName},
+                #{userId},
+                #{appType},
+                #{apkUrl},
+                #{qrCode},
+                #{versionCode},
+                #{updateTips},
+                #{storeOnSale},
+                #{storeType},
+                #{packageName},
+                #{domain},
+                #{category},
+                #{subCategory},
+                #{coppa},
+                #{screenOrientation},
+                #{ccpa},
+                #{storeUrl},
+                #{ditchId},
+                #{ditchName},
+                #{superiorId},
+                #{enabled}
+            )
+    </insert>
+    <update id="updateOne">
+        update yt_app
+        <set>
+            <if test="appKey != null">
+                app_key = #{appKey},
+            </if>
+            <if test="appName != null">
+                app_name = #{appName},
+            </if>
+            <if test="appType != null">
+                app_type = #{appType},
+            </if>
+            <if test="versionCode != null">
+                version_code = #{versionCode},
+            </if>
+            <if test="updateTips != null">
+                update_tips = #{updateTips},
+            </if>
+            <if test="enabled != null">
+                enabled = #{enabled},
+            </if>
+            <if test="storeOnSale != null">
+                store_on_sale = #{storeOnSale},
+            </if>
+            <if test="storeType != null">
+                store_type = #{storeType},
+            </if>
+            <if test="storeUrl != null">
+                store_url = #{storeUrl},
+            </if>
+            <if test="packageName != null">
+                package_name = #{packageName},
+            </if>
+            <if test="domain != null">
+                domain = #{domain},
+            </if>
+            <if test="category != null">
+                category = #{category},
+            </if>
+            <if test="subCategory != null">
+                sub_category = #{subCategory},
+            </if>
+            <if test="coppa != null">
+                coppa = #{coppa},
+            </if>
+            <if test="screenOrientation != null">
+                screen_orientation = #{screenOrientation},
+            </if>
+            <if test="ccpa != null">
+                ccpa = #{ccpa},
+            </if>
+            <if test=" apkUrl != null">
+                apk_url = #{apkUrl},
+            </if>
+            <if test="qrCode != null">
+                qr_code = #{qrCode},
+            </if>
+            <if test="ditchId != null">
+                ditch_id = #{ditchId},
+            </if>
+            <if test="ditchName != null">
+                ditch_name = #{ditchName},
+            </if>
+            <if test="superiorId != null">
+                superior_id = #{superiorId}
+            </if>
+        </set>
+        where app_id = #{appId}
+    </update>
+</mapper>

+ 72 - 0
yt-middle/middle-platform/src/main/resources/mapper/AppMapper.xml

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ytpm.middle.dao.AppMapper">
+    <insert id="insertOne">
+        insert into yt_platform_user_app
+        (
+         app_id,
+         app_name,
+         user_id,
+         app_type,
+         detail_url,
+         package_name,
+         domain,
+         issued_time,
+         wx_app_id,
+         create_user_id,
+         create_time,
+         available
+        )
+        values
+        (
+         #{appId},
+         #{appName},
+         #{userId},
+         #{appType},
+         #{detailUrl},
+         #{packageName},
+         #{domain},
+         #{issuedTime},
+         #{wxAppId},
+         #{createUserId},
+         #{createTime},
+         #{available}
+        )
+    </insert>
+    <delete id="delApp">
+        update yt_platform_user_app set available = 0, update_time = now(), update_user_id = #{userId} where app_id = #{appId}
+    </delete>
+
+    <select id="getAppList" resultType="com.ytpm.middle.view.AppListVO">
+        select
+            pua.app_id,
+            pua.app_name,
+            pua.user_id,
+            pua.app_type,
+            pua.detail_url,
+            pua.package_name,
+            pua.domain,
+            pua.issued_time,
+            pua.wx_app_id,
+            me.enterprise_name,
+            me.legal,
+            me.concat_phone
+        from yt_platform_user_app pua
+        join yt_middle_enterprise me on pua.user_id = me.user_id
+        <where>
+            pua.available = 1
+            <if test="appType != null">
+                and pua.app_type = #{appType}
+            </if>
+            <if test="appName != null and appName!=''">
+                and pua.app_name like concat('%', #{appName} ,'%')
+            </if>
+        </where>
+    </select>
+    <select id="getByPackName" resultType="com.ytpm.agent.model.YtPlatformUserApp">
+        select
+            app_id, app_name, user_id, app_type, detail_url, package_name, domain, issued_time, wx_app_id
+        from yt_platform_user_app
+        where package_name = #{packageName}
+    </select>
+</mapper>

+ 78 - 0
yt-middle/middle-platform/src/main/resources/mapper/EnterpriseMapper.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ytpm.middle.dao.EnterpriseMapper">
+
+    <insert id="insertOne" useGeneratedKeys="true" keyProperty="enterpriseId">
+        insert into yt_middle_enterprise
+            (
+             user_id,
+             enterprise_name,
+             credit_code,
+             legal,
+             legal_card,
+             concat_phone,
+             business_licence,
+             registry_address,
+             create_time,
+             create_user_id,
+             available
+            )
+            values
+            (
+             #{userId},
+             #{enterpriseName},
+             #{creditCode},
+             #{legal},
+             #{legalCard},
+             #{concatPhone},
+             #{businessLicence},
+             #{registryAddress},
+             #{createTime},
+             #{createUserId},
+             #{available}
+            );
+    </insert>
+    <update id="updateById">
+        update yt_middle_enterprise
+        <set>
+            <if test="enterpriseName != null">
+                enterprise_name = #{enterpriseName},
+            </if>
+            <if test="creditCode != null">
+                credit_code = #{creditCode},
+            </if>
+            <if test="legal != null">
+                legal = #{legal},
+            </if>
+            <if test="legalCard != null">
+                legal_card = #{legalCard},
+            </if>
+            <if test="concatPhone != null">
+                concat_phone = #{concatPhone},
+            </if>
+            <if test="businessLicence != null">
+                business_licence = #{businessLicence},
+            </if>
+            <if test="registryAddress != null">
+                registry_address = #{registryAddress},
+            </if>
+            <if test="updateTime != null">
+                update_time = #{updateTime},
+            </if>
+            <if test="updateUserId != null">
+                update_user_id = #{updateUserId},
+            </if>
+            <if test="available != null">
+                available = #{available}
+            </if>
+        </set>
+        where enterprise_id = #{enterpriseId}
+    </update>
+
+    <select id="getByCode" resultType="com.ytpm.middle.model.YtMiddleEnterprise">
+        select
+            enterprise_id, user_id, enterprise_name, credit_code, legal, legal_card, concat_phone, business_licence, registry_address, create_time, create_user_id, update_time, update_user_id, available
+        from yt_middle_enterprise
+        where credit_code = #{creditCode}
+    </select>
+</mapper>

+ 10 - 0
yt-middle/middle-platform/src/main/resources/mapper/MiddleDictMapper.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ytpm.middle.dao.MiddleDictMapper">
+    <select id="selectDictList" resultType="com.ytpm.agent.view.AgentDictView">
+        select
+            dictionary_id, type_code, type_name, dictionary_code, dictionary_name, sort, enabled
+        from yt_platform_dict
+        where enabled = 1
+    </select>
+</mapper>

+ 11 - 0
yt-middle/middle-platform/src/main/resources/mapper/MiddleUserMapper.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ytpm.middle.dao.MiddleUserMapper">
+
+    <select id="getByLoginName" resultType="com.ytpm.agent.view.AgentUserInfo">
+        select
+            user_id, nick_name, head_image, login_name, encrypt_pwd, salt, phone, last_login_time, last_login_ip, phone_brand, phone_model, account_status, channel_id, user_type, login_days, total_income, app_id, registry_time, transfer_amount
+        from yt_platform_user
+        where login_name = #{userName}
+    </select>
+</mapper>

+ 87 - 0
yt-middle/pom.xml

@@ -0,0 +1,87 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.ytpm</groupId>
+        <artifactId>yt_platform</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>yt-middle</artifactId>
+    <packaging>pom</packaging>
+
+    <name>yt-middle</name>
+    <description>易推中台</description>
+    <modules>
+        <module>middle-platform</module>
+    </modules>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>yt-common</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jsr305</artifactId>
+                    <groupId>com.google.code.findbugs</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <!-- nacos -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-alibaba-nacos-config</artifactId>
+        </dependency>
+
+        <!--Data Access-->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>jsqlparser</artifactId>
+                    <groupId>com.github.jsqlparser</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!-- web -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-log4j2</artifactId>
+        </dependency>
+        <!-- pagehelper -->
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+            <version>1.4.0</version>
+        </dependency>
+
+    </dependencies>
+</project>

+ 2 - 7
yt-oauth/oauth-service/src/main/java/com/ytpm/config/WebSecurityConfig.java

@@ -51,13 +51,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
     protected void configure(HttpSecurity http) throws Exception {
         http.csrf().disable()
                 .authorizeRequests()
-                .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
-                    @Override
-                    public <O extends FilterSecurityInterceptor> O postProcess(O o) {
-                        return o;
-                    }
-                })
-                .antMatchers("/**").permitAll();
+                .antMatchers("/oauth/**").permitAll()
+                .and().httpBasic();
     }
 
     @Bean