Procházet zdrojové kódy

合作账号管理

wangyunpeng před 3 měsíci
rodič
revize
7eb84ab7e9
13 změnil soubory, kde provedl 304 přidání a 16 odebrání
  1. 4 0
      api-module/src/main/java/com/tzld/piaoquan/api/common/enums/ExceptionEnum.java
  2. 33 0
      api-module/src/main/java/com/tzld/piaoquan/api/config/CrossOriginConfig.java
  3. 2 2
      api-module/src/main/java/com/tzld/piaoquan/api/controller/contentplatform/ContentPlatformCooperateAccountController.java
  4. 25 0
      api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/contentplatform/ext/ContentPlatformGzhAccountMapperExt.java
  5. 3 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/contentplatform/CooperateAccountSaveParam.java
  6. 2 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/AccountLoginVO.java
  7. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/CooperateAccountItemVO.java
  8. 2 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/GenerateQrcodeVO.java
  9. 2 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/GzhAuthResultVO.java
  10. 93 0
      api-module/src/main/java/com/tzld/piaoquan/api/remote/AigcApiService.java
  11. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/ContentPlatformCooperateAccountService.java
  12. 100 12
      api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/impl/ContentPlatformCooperateAccountServiceImpl.java
  13. 36 0
      api-module/src/main/resources/mapper/contentplatform/ext/ContentPlatformGzhAccountMapperExt.xml

+ 4 - 0
api-module/src/main/java/com/tzld/piaoquan/api/common/enums/ExceptionEnum.java

@@ -13,6 +13,7 @@ public enum ExceptionEnum {
     DATA_ERROR(-102, "数据异常,请联系管理员"),
     PARAM_ERROR(-103, "参数异常"),
 
+    // 平台账户
     Not_LOGIN(1000, "登录失效,请重新登录。"),
     EMAIL_VERIFY_CODE_NOT_EXIST(1001, "验证码不存在"),
     EMAIL_VERIFY_CODE_USED(1001, "验证码已被使用"),
@@ -24,6 +25,9 @@ public enum ExceptionEnum {
     USER_NOT_EXIST(1008, "user not exist"),
     SmsCodeExpired(1010, "短信验证码无效"),
     ACCOUNT_NOT_EXISTS_WRONG(1011, "用户不存在"),
+
+    // 合作账号
+    GZH_EXISTS(2000, "公众号已由别的用户授权,该用户不能再授权此公众号,请联系平台运营"),
     ;
     private int code;
     private String msg;

+ 33 - 0
api-module/src/main/java/com/tzld/piaoquan/api/config/CrossOriginConfig.java

@@ -0,0 +1,33 @@
+package com.tzld.piaoquan.api.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class CrossOriginConfig implements WebMvcConfigurer {
+
+    private final JwtInterceptor jwtInterceptor;
+
+    @Autowired
+    public CrossOriginConfig(JwtInterceptor jwtInterceptor) {
+        this.jwtInterceptor = jwtInterceptor;
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(this.jwtInterceptor).addPathPatterns("/**");
+    }
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+//        registry.addMapping("/**")
+//                .allowedOrigins("*")
+//                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
+//                .maxAge(3600)
+//                .allowCredentials(false);
+    }
+
+}

+ 2 - 2
api-module/src/main/java/com/tzld/piaoquan/api/controller/contentplatform/ContentPlatformCooperateAccountController.java

@@ -38,7 +38,7 @@ public class ContentPlatformCooperateAccountController {
     }
 
     @ApiOperation(value = "公众号授权二维码获取")
-    @GetMapping("/gzh/getAuthQrCode")
+    @PostMapping("/gzh/getAuthQrCode")
     public CommonResponse<GenerateQrcodeVO> getGzhAuthQrCode(@RequestBody GzhAuthResultParam param) {
         return CommonResponse.success(cooperateAccountService.getGzhAuthQrCode(param));
     }
@@ -46,7 +46,7 @@ public class ContentPlatformCooperateAccountController {
     @ApiOperation(value = "公众号授权结果获取")
     @PostMapping("/gzh/getAuthResult")
     public CommonResponse<GzhAuthResultVO> getGzhAuthResult(@RequestBody GzhAuthResultParam param) {
-        return CommonResponse.success(cooperateAccountService.sendMessageVerifyCode(param));
+        return CommonResponse.success(cooperateAccountService.getGzhAuthResult(param));
     }
 
     @ApiOperation(value = "内容类别下拉框")

+ 25 - 0
api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/contentplatform/ext/ContentPlatformGzhAccountMapperExt.java

@@ -0,0 +1,25 @@
+package com.tzld.piaoquan.api.dao.mapper.contentplatform.ext;
+
+import com.tzld.piaoquan.api.model.param.contentplatform.CooperateAccountListParam;
+import com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformAccount;
+import com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformGzhAccount;
+import com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformGzhAccountExample;
+import com.tzld.piaoquan.api.model.vo.contentplatform.GzhAccountItem;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface ContentPlatformGzhAccountMapperExt {
+
+    List<ContentPlatformAccount> getGhIdExists(@Param("id") Long id, @Param("ghId") String ghId);
+
+    int getCooperateAccountCount(@Param("param") CooperateAccountListParam param,
+                                 @Param("createAccountId") Long createAccountId);
+
+    List<ContentPlatformGzhAccount> getCooperateAccountList(@Param("param") CooperateAccountListParam param,
+                                                            @Param("createAccountId") Long createAccountId,
+                                                            @Param("offset") int offset,
+                                                            @Param("pageSize") Integer pageSize);
+
+    List<GzhAccountItem> getGzhAccountList(@Param("createAccountId") Long createAccountId);
+}

+ 3 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/contentplatform/CooperateAccountSaveParam.java

@@ -8,6 +8,9 @@ import lombok.Data;
 @Data
 public class CooperateAccountSaveParam {
 
+    @ApiModelProperty(value = "id")
+    private Long id;
+
     @ApiModelProperty(value = "公司主体名称")
     private String name;
 

+ 2 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/AccountLoginVO.java

@@ -6,6 +6,8 @@ import lombok.Data;
 @Data
 public class AccountLoginVO {
 
+    @ApiModelProperty(value = "id")
+    private Long id;
     @ApiModelProperty(value = "公司主体名称")
     private String name;
     @ApiModelProperty(value = "身份(0-代理商 1-流量主)")

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/CooperateAccountItemVO.java

@@ -7,7 +7,7 @@ import lombok.Data;
 public class CooperateAccountItemVO {
 
     @ApiModelProperty(value = "id")
-    private String id;
+    private Long id;
 
     @ApiModelProperty(value = "公众号名称")
     private String name;

+ 2 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/GenerateQrcodeVO.java

@@ -2,6 +2,7 @@ package com.tzld.piaoquan.api.model.vo.contentplatform;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.experimental.Accessors;
@@ -14,6 +15,7 @@ import lombok.experimental.Accessors;
 @Getter
 @Setter
 @Accessors(chain = true)
+@Builder
 public class GenerateQrcodeVO {
 
     @ApiModelProperty(value = "二维码图片的base64编码字符串")

+ 2 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/GzhAuthResultVO.java

@@ -1,9 +1,11 @@
 package com.tzld.piaoquan.api.model.vo.contentplatform;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
 import lombok.Data;
 
 @Data
+@Builder
 public class GzhAuthResultVO {
 
     @ApiModelProperty(value = "公司主体名称")

+ 93 - 0
api-module/src/main/java/com/tzld/piaoquan/api/remote/AigcApiService.java

@@ -0,0 +1,93 @@
+package com.tzld.piaoquan.api.remote;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.piaoquan.api.model.bo.VideoDetail;
+import com.tzld.piaoquan.growth.common.component.HttpPoolClient;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.Objects;
+
+@Slf4j
+@Component
+public class AigcApiService {
+
+    @Autowired
+    private HttpPoolClient httpPoolClient;
+
+    @Value("${aigc.api.host:http://aigc-testapi.cybertogether.net/aigc}")
+    private String aigcApiHost;
+
+    @Value("${aigc.api.token:9ebfcb397e954c41986971f183eb1707}")
+    private String aigcApiToken;
+
+    private String getAigcPostParam(JSONObject params) {
+        JSONObject baseInfo = JSONObject.parseObject("{\n" +
+                "    \"token\": \"" + aigcApiToken + "\",\n" +
+                "    \"appType\": 9,\n" +
+                "    \"platform\": \"pc\",\n" +
+                "    \"appVersionCode\": 1000,\n" +
+                "    \"clientTimestamp\": 1,\n" +
+                "    \"fid\": 1,\n" +
+                "    \"loginUid\": 1,\n" +
+                "    \"pageSource\": 1,\n" +
+                "    \"requestId\": 1,\n" +
+                "    \"rid\": 1,\n" +
+                "    \"uid\": 1\n" +
+                "}");
+        JSONObject param = new JSONObject();
+        param.put("params", params);
+        param.put("baseInfo", baseInfo);
+        return param.toJSONString();
+    }
+
+    public String generateQrcode(String uuid) {
+        String url = aigcApiHost + "/publish/account/generateQrcode";
+        JSONObject params = new JSONObject();
+        params.put("uuid", uuid);
+        try {
+            String post = httpPoolClient.post(url, getAigcPostParam(params));
+            JSONObject res = JSONObject.parseObject(post);
+            JSONObject data = res.getJSONObject("data");
+            return data.getString("qrcodeStr");
+        } catch (Exception e) {
+            log.error("getVideoDetailRequest error", e);
+        }
+        return null;
+    }
+
+    public String getAuthResult(String uuid) {
+        String url = aigcApiHost + "/publish/account/authResult";
+        JSONObject params = new JSONObject();
+        params.put("uuid", uuid);
+        try {
+            String post = httpPoolClient.post(url, getAigcPostParam(params));
+            JSONObject res = JSONObject.parseObject(post);
+            if (Objects.isNull(res)) {
+                return null;
+            }
+            JSONObject data = res.getJSONObject("data");
+            return data.getString("id");
+        } catch (Exception e) {
+            log.error("getVideoDetailRequest error", e);
+        }
+        return null;
+    }
+
+    public JSONObject getAccountDetail(String publishAccountId) {
+        String url = aigcApiHost + "/publish/account/getAuthResult";
+        JSONObject params = new JSONObject();
+        params.put("id", publishAccountId);
+        try {
+            String post = httpPoolClient.post(url, getAigcPostParam(params));
+            JSONObject res = JSONObject.parseObject(post);
+            return res.getJSONObject("data");
+        } catch (Exception e) {
+            log.error("getVideoDetailRequest error", e);
+        }
+        return null;
+    }
+}

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/ContentPlatformCooperateAccountService.java

@@ -18,7 +18,7 @@ public interface ContentPlatformCooperateAccountService {
 
     GenerateQrcodeVO getGzhAuthQrCode(GzhAuthResultParam param);
 
-    GzhAuthResultVO sendMessageVerifyCode(GzhAuthResultParam param);
+    GzhAuthResultVO getGzhAuthResult(GzhAuthResultParam param);
 
     List<String> getGzhContentType();
 

+ 100 - 12
api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/impl/ContentPlatformCooperateAccountServiceImpl.java

@@ -1,52 +1,140 @@
 package com.tzld.piaoquan.api.service.contentplatform.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.piaoquan.api.common.enums.ExceptionEnum;
+import com.tzld.piaoquan.api.common.exception.CommonException;
+import com.tzld.piaoquan.api.dao.mapper.contentplatform.ContentPlatformGzhAccountMapper;
+import com.tzld.piaoquan.api.dao.mapper.contentplatform.ext.ContentPlatformGzhAccountMapperExt;
+import com.tzld.piaoquan.api.model.config.LoginUserContext;
 import com.tzld.piaoquan.api.model.param.contentplatform.CooperateAccountListParam;
 import com.tzld.piaoquan.api.model.param.contentplatform.CooperateAccountSaveParam;
 import com.tzld.piaoquan.api.model.param.contentplatform.GzhAuthResultParam;
-import com.tzld.piaoquan.api.model.vo.contentplatform.CooperateAccountItemVO;
-import com.tzld.piaoquan.api.model.vo.contentplatform.GenerateQrcodeVO;
-import com.tzld.piaoquan.api.model.vo.contentplatform.GzhAccountItem;
-import com.tzld.piaoquan.api.model.vo.contentplatform.GzhAuthResultVO;
+import com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformAccount;
+import com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformGzhAccount;
+import com.tzld.piaoquan.api.model.vo.contentplatform.*;
+import com.tzld.piaoquan.api.remote.AigcApiService;
 import com.tzld.piaoquan.api.service.contentplatform.ContentPlatformCooperateAccountService;
+import com.tzld.piaoquan.growth.common.utils.Md5Util;
+import com.tzld.piaoquan.growth.common.utils.RedisUtils;
 import com.tzld.piaoquan.growth.common.utils.page.Page;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
-import java.util.List;
+import java.util.*;
 
 @Service
 public class ContentPlatformCooperateAccountServiceImpl implements ContentPlatformCooperateAccountService {
+
+    @Autowired
+    private AigcApiService aigcApiService;
+    @Autowired
+    private ContentPlatformGzhAccountMapper gzhAccountMapper;
+    @Autowired
+    private ContentPlatformGzhAccountMapperExt gzhAccountMapperExt;
+
+    @Autowired
+    private RedisUtils redisUtils;
+
     @Override
     public Page<CooperateAccountItemVO> gzhList(CooperateAccountListParam param) {
-        return null;
+        ContentPlatformAccount loginAccount = LoginUserContext.getUser();
+        Page<CooperateAccountItemVO> result = new Page<>(param.getPageNum(), param.getPageSize());
+        int offset = (param.getPageNum() - 1) * param.getPageSize();
+        int count = gzhAccountMapperExt.getCooperateAccountCount(param, loginAccount.getId());
+        result.setTotalSize(count);
+        if (count == 0) {
+            return result;
+        }
+        List<ContentPlatformGzhAccount> accountList = gzhAccountMapperExt.getCooperateAccountList(param,
+                loginAccount.getId(), offset, param.getPageSize());
+        List<CooperateAccountItemVO> list = buildCooperateAccountItemVOList(accountList);
+        result.setObjs(list);
+        return result;
+    }
+
+    private List<CooperateAccountItemVO> buildCooperateAccountItemVOList(List<ContentPlatformGzhAccount> accountList) {
+        if (CollectionUtils.isEmpty(accountList)) {
+            return null;
+        }
+        List<CooperateAccountItemVO> result = new ArrayList<>();
+        for (ContentPlatformGzhAccount account : accountList) {
+            CooperateAccountItemVO accountVO = new CooperateAccountItemVO();
+            accountVO.setId(account.getId());
+            accountVO.setName(account.getName());
+            accountVO.setGhId(account.getGhId());
+            accountVO.setContentType(account.getContentType());
+            accountVO.setCreateTimestamp(account.getCreateTimestamp());
+            result.add(accountVO);
+        }
+        return result;
     }
 
     @Override
     public void gzhSave(CooperateAccountSaveParam param) {
-
+        ContentPlatformAccount loginAccount = LoginUserContext.getUser();
+        List<ContentPlatformAccount> ghIdExistList = gzhAccountMapperExt.getGhIdExists(loginAccount.getId(), param.getGhId());
+        if (CollectionUtils.isNotEmpty(ghIdExistList)) {
+            throw new CommonException(ExceptionEnum.GZH_EXISTS);
+        }
+        Long now = System.currentTimeMillis();
+        ContentPlatformGzhAccount account = new ContentPlatformGzhAccount();
+        account.setName(param.getName());
+        account.setGhId(param.getGhId());
+        account.setContentType(param.getContentType());
+        account.setUpdateTimestamp(now);
+        if (Objects.isNull(param.getId())) {
+            String externalId = redisUtils.get(param.getGhId());
+            if (StringUtils.hasText(externalId)) {
+                account.setExternalId(externalId);
+            }
+            account.setCreateAccountId(loginAccount.getId());
+            account.setCreateTimestamp(now);
+            gzhAccountMapper.insertSelective(account);
+        } else {
+            account.setId(param.getId());
+            gzhAccountMapper.updateByPrimaryKey(account);
+        }
     }
 
     @Override
     public GenerateQrcodeVO getGzhAuthQrCode(GzhAuthResultParam param) {
-        return null;
+        String qrcodeStr = aigcApiService.generateQrcode(param.getCode());
+        return GenerateQrcodeVO.builder().qrcodeStr(qrcodeStr).build();
     }
 
+
     @Override
-    public GzhAuthResultVO sendMessageVerifyCode(GzhAuthResultParam param) {
+    public GzhAuthResultVO getGzhAuthResult(GzhAuthResultParam param) {
+        String publishAccountId = aigcApiService.getAuthResult(param.getCode());
+        if (StringUtils.hasText(publishAccountId)) {
+            JSONObject detail = aigcApiService.getAccountDetail(publishAccountId);
+            String name = detail.getString("name");
+            String ghId = detail.getString("ghId");
+            redisUtils.setValueWithExpire(ghId, publishAccountId, 6 * 60 * 60L);
+            return GzhAuthResultVO.builder().name(name).ghId(ghId).build();
+        }
         return null;
     }
 
     @Override
     public List<String> getGzhContentType() {
-        return null;
+        return Arrays.asList("泛历史", "泛兴趣");
     }
 
     @Override
     public List<GzhAccountItem> getGzhAccountList() {
-        return null;
+        ContentPlatformAccount loginAccount = LoginUserContext.getUser();
+        return gzhAccountMapperExt.getGzhAccountList(loginAccount.getId());
     }
 
     @Override
     public void gzhDelete(Long id) {
-
+        ContentPlatformGzhAccount gzhAccount = new ContentPlatformGzhAccount();
+        gzhAccount.setId(id);
+        gzhAccount.setStatus(0);
+        gzhAccount.setUpdateTimestamp(System.currentTimeMillis());
+        gzhAccountMapper.updateByPrimaryKeySelective(gzhAccount);
     }
 }

+ 36 - 0
api-module/src/main/resources/mapper/contentplatform/ext/ContentPlatformGzhAccountMapperExt.xml

@@ -0,0 +1,36 @@
+<?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.tzld.piaoquan.api.dao.mapper.contentplatform.ext.ContentPlatformGzhAccountMapperExt">
+
+  <select id="getGhIdExists"
+          resultType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformAccount">
+    select *
+    from content_platform_gzh_account
+    where gh_id = #{ghId}
+    <if test="id!= null">
+      and create_account_id != #{id}
+    </if>
+    limit 1
+  </select>
+
+  <select id="getCooperateAccountCount" resultType="java.lang.Integer">
+    select count(1)
+    from content_platform_gzh_account
+    where create_account_id = #{createAccountId}
+  </select>
+
+  <select id="getCooperateAccountList"
+          resultType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformGzhAccount">
+    select *
+    from content_platform_gzh_account
+    where create_account_id = #{createAccountId}
+    limit #{offset}, #{pageSize}
+  </select>
+
+  <select id="getGzhAccountList" resultType="com.tzld.piaoquan.api.model.vo.contentplatform.GzhAccountItem">
+    select id, name
+    from content_platform_gzh_account
+    where create_account_id = #{createAccountId}
+  </select>
+
+</mapper>