Selaa lähdekoodia

add(backend) [标签 用户 2.0]

wangxiao 4 vuotta sitten
vanhempi
commit
3bd6cc2099

+ 3 - 0
operation-backend/src/main/java/com/idiot/operationbackend/controller/AuthController.java

@@ -120,4 +120,7 @@ public class AuthController  {
 
 
 
+
+
+
 }

+ 33 - 7
operation-backend/src/main/java/com/idiot/operationbackend/controller/FansController.java

@@ -64,28 +64,54 @@ public class FansController {
 
     @PostMapping("/addRemark")
     @ApiOperation(value = "粉丝添加/修改备注")
-    public ResponseEntity<JsonResult<Boolean>> addRemark(@RequestParam String remark,
+    public ResponseEntity<JsonResult<Boolean>> addRemark(@RequestHeader String token,
+                                                         @RequestParam String remark,
                                                          @RequestParam String openId,
                                                          @RequestParam String accountId) {
         if (StringUtils.isEmpty(remark)){
             throw new CustomException(500,"备注不能为空!");
         }
-
+        String userId = JwtTokenUtil.getUserId(token);
+        logger.info("用户:{}设置公众号:{}粉丝:{}备注信息:{}",userId,accountId,openId,remark);
         boolean ifUp = weChatService.updateRemark(accountId,openId,remark);
         return ResponseEntity.ok(JsonResult.success(ifUp));
     }
 
 
     @PostMapping("/markTag")
-    public ResponseEntity<JsonResult<Boolean>> addTag(@RequestParam String accountId,
-                                                      @RequestParam String openIds,
-                                                      @RequestParam Integer wxId) {
+    @ApiOperation(value = "批量标签 最少两个人")
+    public ResponseEntity<JsonResult<Boolean>> markTag(@RequestHeader String token,
+                                                       @RequestParam String accountId,
+                                                       @RequestParam String openIds,
+                                                       @RequestParam Integer wxId) {
+        String userId = JwtTokenUtil.getUserId(token);
+        logger.info("用户:{}设置公众号:{}添加粉丝:{}标签信息:{}",userId,accountId,openIds,wxId);
+        List<String> opens = new ArrayList<String>(Arrays.asList(openIds.split(",")));
+        boolean ifAdd = weChatService.addUserTag(accountId,opens,wxId);
+        if (ifAdd){
+            fansService.addItemForTagList(opens,accountId,wxId);
+        }
+        return ResponseEntity.ok(JsonResult.success(ifAdd));
+    }
 
-        List<String> open = new ArrayList<String>(Arrays.asList(openIds.split(",")));
 
-        return ResponseEntity.ok(JsonResult.success(false));
+    @PostMapping("/unMarkTag")
+    @ApiOperation(value = "批量减少标签 最少两个人")
+    public ResponseEntity<JsonResult<Boolean>> unMarkTag(@RequestHeader String token,
+                                                         @RequestParam String accountId,
+                                                         @RequestParam String openIds,
+                                                         @RequestParam Integer wxId) {
+        String userId = JwtTokenUtil.getUserId(token);
+        logger.info("用户:{}设置公众号:{}添加粉丝:{}标签信息:{}",userId,accountId,openIds,wxId);
+        List<String> opens = new ArrayList<String>(Arrays.asList(openIds.split(",")));
+        boolean ifAdd = weChatService.removeUserTag(accountId,opens,wxId);
+        if (ifAdd){
+            fansService.removeItemForTagList(opens,accountId,wxId);
+        }
+        return ResponseEntity.ok(JsonResult.success(ifAdd));
     }
 
 
 
+
 }

+ 15 - 0
operation-backend/src/main/java/com/idiot/operationbackend/controller/TagController.java

@@ -15,6 +15,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -59,4 +60,18 @@ public class TagController {
         return ResponseEntity.ok(JsonResult.success(weChatService.createTag(accountId,name)));
     }
 
+    @PutMapping("/upTag")
+    @ApiOperation(value = "编辑标签")
+    public ResponseEntity<JsonResult<Boolean>> upTag (@RequestHeader String token,
+                                                      @RequestBody @Valid AccountTag accountTag ) {
+
+        String userId =  JwtTokenUtil.getUserId(token);
+        logger.info("用户:{}编辑标签:{}",userId,accountTag);
+        boolean ifUp = weChatService.upTag(accountTag.getAccountId(),accountTag.getWxId(),accountTag.getName());
+        if (ifUp){
+            tagService.updateById(accountTag);
+        }
+        return ResponseEntity.ok(JsonResult.success(ifUp));
+    }
+
 }

+ 5 - 1
operation-backend/src/main/java/com/idiot/operationbackend/entity/AccountTag.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.idiot.operationbackend.support.Constants;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
 import java.time.LocalDateTime;
 
 /**
@@ -11,16 +13,18 @@ import java.time.LocalDateTime;
  * @author wang xiao
  * @date Created in 19:31 2020/9/10
  */
+@Valid
 @TableName("t_account_tag")
 public class AccountTag {
 
     @TableId
+    @NotEmpty(message = "id不允许为空")
     private String id;
 
     private Integer wxId;
 
     private String accountId;
-
+    @NotEmpty(message = "名称不能为空")
     private String name;
 
     private Integer fansCount;

+ 24 - 0
operation-backend/src/main/java/com/idiot/operationbackend/service/facade/AccountFansService.java

@@ -87,4 +87,28 @@ public interface AccountFansService extends IService<AccountFans> {
      * @return boolean
      */
     boolean updateFansRemark(String accountId, String openId, String remark);
+
+
+    /**
+     *  用户标签里面 添加元素
+     * @author wangxiao
+     * @date 9:53 2020/9/18 
+     * @param openIds
+     * @param accountId
+     * @param wxId
+     * @return boolean
+     */
+    boolean addItemForTagList(List<String> openIds,String accountId,int wxId);
+
+
+    /**
+     *  移除标签
+     * @author wangxiao
+     * @date 10:07 2020/9/18
+     * @param openIds
+     * @param accountId
+     * @param wxId
+     * @return boolean
+     */
+    boolean removeItemForTagList(List<String> openIds,String accountId,int wxId);
 }

+ 15 - 2
operation-backend/src/main/java/com/idiot/operationbackend/service/facade/AccountTagService.java

@@ -73,7 +73,7 @@ public interface AccountTagService extends IService<AccountTag> {
     boolean addTag(String label,String accountId,int wxId);
 
     /**
-     *  更新标签用户数
+     *  更新标签用户数(增加)
      * @author wangxiao
      * @date 21:04 2020/9/17
      * @param accountId
@@ -81,7 +81,20 @@ public interface AccountTagService extends IService<AccountTag> {
      * @param size
      * @return boolean
      */
-    boolean updateTagSize(String accountId,int wxId,int size);
+    boolean addTagSize(String accountId, int wxId, int size);
+
+
+
+    /**
+     *  更新标签用户数(减少)
+     * @author wangxiao
+     * @date 21:04 2020/9/17
+     * @param accountId
+     * @param wxId
+     * @param size
+     * @return boolean
+     */
+    boolean subTagSize(String accountId, int wxId, int size);
 
 
     /**

+ 37 - 12
operation-backend/src/main/java/com/idiot/operationbackend/service/facade/WeChatService.java

@@ -23,7 +23,7 @@ public interface WeChatService {
    *  授权回调
    * @author wangxiao
    * @date 14:17 2020/9/11
-   * @param param
+   * @param param param
    * @return java.lang.String
    */
     String notice(Map<String,String> param);
@@ -37,7 +37,6 @@ public interface WeChatService {
    *  获取令牌
    * @author wangxiao
    * @date 17:25 2020/9/11
-   * @param
    * @return java.lang.String
    */
   String getComponentAccessToken ();
@@ -69,7 +68,6 @@ public interface WeChatService {
    *  获取预授权地址
    * @author wangxiao
    * @date 19:34 2020/9/11
-   * @param
    * @return java.lang.String
    */
   String getPreAuthUrl ();
@@ -80,10 +78,10 @@ public interface WeChatService {
    *  微信解密数据
    * @author wangxiao
    * @date 19:41 2020/9/11
-   * @param msgSignature
-   * @param timestamp
-   * @param nonce
-   * @param data
+   * @param msgSignature msgSignature
+   * @param timestamp timestamp
+   * @param nonce nonce
+   * @param data data
    * @return java.lang.String
    */
   String decryptMsg(String msgSignature,String timestamp,String nonce,String data);
@@ -93,7 +91,7 @@ public interface WeChatService {
    *  微信加密数据
    * @author wangxiao
    * @date 19:49 2020/9/11
-   * @param data
+   * @param data data
    * @return java.lang.String
    */
   String encryptMsg(String data);
@@ -103,7 +101,7 @@ public interface WeChatService {
    *  获取微信授权信息
    * @author wangxiao
    * @date 10:52 2020/9/12
-   * @param authCode
+   * @param authCode authCode
    * @return String
    */
   String  getAuthorizationInfo(String authCode);
@@ -135,9 +133,8 @@ public interface WeChatService {
    *  缓存authorizerAccessToken
    * @author wangxiao
    * @date 16:40 2020/9/12
-   * @param accountId
-   * @param authorizerAccessToken
-   * @return void
+   * @param accountId accountId
+   * @param authorizerAccessToken authorizerAccessToken
    */
   void cacheAuthorizerAccessToken(String accountId,String authorizerAccessToken);
 
@@ -263,6 +260,34 @@ public interface WeChatService {
    */
   boolean addUserTag(String accountId,List<String> openIds,int wxId);
 
+
+  /**
+   *  用户移除标签
+   * @author wangxiao
+   * @date 20:36 2020/9/17
+   * @param accountId
+   * @param openIds
+   * @param wxId
+   * @return boolean
+   */
+  boolean removeUserTag(String accountId,List<String> openIds,int wxId);
+
+
+  /**
+   *  编辑标签
+   * @author wangxiao
+   * @date 10:32 2020/9/18
+   * @param accountId
+   * @param wxId
+   * @param name
+   * @return boolean
+   */
+  boolean upTag(String accountId,int wxId,String name);
+
+
+
+
+
   /**
    * 不支持的消息
    * @author wangxiao

+ 52 - 0
operation-backend/src/main/java/com/idiot/operationbackend/service/impl/AccountFansServiceImpl.java

@@ -1,7 +1,9 @@
 package com.idiot.operationbackend.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -13,6 +15,8 @@ import com.idiot.operationbackend.support.Constants;
 import com.idiot.operationbackend.vo.NumberStatData;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -110,4 +114,52 @@ public class AccountFansServiceImpl extends ServiceImpl<AccountFansMapper, Accou
                 .set(AccountFans::getRemark,remark)
         );
     }
+
+    @Override
+    public boolean addItemForTagList(List<String> openIds, String accountId, int wxId) {
+        if (CollectionUtils.isEmpty(openIds)){
+            return false;
+        }
+        int size = openIds.size();
+        List<AccountFans> fans = new ArrayList<>(size);
+        for (String openId : openIds) {
+            AccountFans temp = queryByAccountIdAndOpenId(accountId,openId);
+            if (Objects.isNull(temp)){
+                continue;
+            }
+            JSONArray jsonArray = JSONArray.parseArray(temp.getTagIdList());
+            jsonArray.add(wxId);
+            temp.setTagIdList(jsonArray.toJSONString());
+            temp.setUpdateTime(LocalDateTime.now().format(Constants.DATE_TIME_FORMATTER));
+            fans.add(temp);
+
+        }
+        return updateBatchById(fans);
+    }
+
+
+    @Override
+    public boolean removeItemForTagList(List<String> openIds, String accountId, int wxId) {
+        if (CollectionUtils.isEmpty(openIds)){
+            return false;
+        }
+        int size = openIds.size();
+        List<AccountFans> fans = new ArrayList<>(size);
+        for (String openId : openIds) {
+            AccountFans temp = queryByAccountIdAndOpenId(accountId,openId);
+            if (Objects.isNull(temp)){
+                continue;
+            }
+            JSONArray jsonArray = JSONArray.parseArray(temp.getTagIdList());
+            jsonArray.remove(wxId);
+            temp.setTagIdList(jsonArray.toJSONString());
+            temp.setUpdateTime(LocalDateTime.now().format(Constants.DATE_TIME_FORMATTER));
+            fans.add(temp);
+
+        }
+        return updateBatchById(fans);
+    }
+
+
+
 }

+ 12 - 1
operation-backend/src/main/java/com/idiot/operationbackend/service/impl/AccountTagServiceImpl.java

@@ -86,7 +86,7 @@ public class AccountTagServiceImpl  extends ServiceImpl<AccountTagMapper,Account
     }
 
     @Override
-    public boolean updateTagSize(String accountId, int wxId, int size) {
+    public boolean addTagSize(String accountId, int wxId, int size) {
 
         AccountTag accountTag = getAccountTag(accountId,wxId);
         if (null == accountTag){
@@ -95,4 +95,15 @@ public class AccountTagServiceImpl  extends ServiceImpl<AccountTagMapper,Account
         accountTag.setFansCount(accountTag.getFansCount()+size);
         return updateById(accountTag);
     }
+
+    @Override
+    public boolean subTagSize(String accountId, int wxId, int size) {
+        AccountTag accountTag = getAccountTag(accountId,wxId);
+        if (null == accountTag){
+            return false;
+        }
+        int var =accountTag.getFansCount()-size;
+        accountTag.setFansCount(Math.max(var, 0));
+        return updateById(accountTag);
+    }
 }

+ 47 - 1
operation-backend/src/main/java/com/idiot/operationbackend/service/impl/WeChatServiceImpl.java

@@ -530,8 +530,54 @@ public class WeChatServiceImpl implements WeChatService, InitializingBean {
         String jsonStr = respStr.getBody();
         logger.info("微信用户打标签,accountId:{},opedId size:{}----end,时间:{},微信返回:{}",accountId,size, LocalDateTime.now().toString(),jsonStr);
         if (0 ==JSONObject.parseObject(jsonStr).getIntValue("errcode")) {
-            return tagService.updateTagSize(accountId,wxId,size);
+            return tagService.addTagSize(accountId,wxId,size);
         }
         return false;
     }
+
+
+    @Override
+    public boolean removeUserTag(String accountId, List<String> openIds, int wxId) {
+        String requestUrl = "https://api.weixin.qq.com/cgi-bin/tags/members/batchuntagging?access_token=%s";
+        String accessToken = getAuthorizerAccessToken(accountId);
+        requestUrl =  String.format(requestUrl,accessToken);
+        MultiValueMap<String,Object> params = new LinkedMultiValueMap<>(2);
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        params.add("openid_list",openIds);
+        params.add("tagid",wxId);
+        int size = openIds.size();
+        HttpEntity<MultiValueMap<String, Object>>  entity = new HttpEntity<> (params,headers);
+        logger.info("微信用户去除标签,accountId:{},opedId size:{}----start,时间:{}",accountId,size, LocalDateTime.now().toString());
+        ResponseEntity<String> respStr = restTemplate.exchange(requestUrl,HttpMethod.POST,entity,String.class);
+        String jsonStr = respStr.getBody();
+        logger.info("微信用去除标签,accountId:{},opedId size:{}----end,时间:{},微信返回:{}",accountId,size, LocalDateTime.now().toString(),jsonStr);
+        if (0 ==JSONObject.parseObject(jsonStr).getIntValue("errcode")) {
+            return tagService.subTagSize(accountId,wxId,size);
+        }
+        return false;
+    }
+
+
+    @Override
+    public boolean upTag(String accountId, int wxId, String name) {
+
+        String requestUrl = "https://api.weixin.qq.com/cgi-bin/tags/update?access_token=ACCESS_TOKEN";
+        String accessToken = getAuthorizerAccessToken(accountId);
+        requestUrl =  String.format(requestUrl,accessToken);
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        MultiValueMap<String,Object> params = new LinkedMultiValueMap<>(2);
+        HashMap<String,Object> map = new HashMap<>(2);
+        map.put("name",name);
+        map.put("id",wxId);
+        params.add("tag",map);
+        HttpEntity<MultiValueMap<String, Object>>  entity = new HttpEntity<> (params,headers);
+        logger.info("微信创建标签,accountId:{}----start,时间:{}",accountId, LocalDateTime.now().toString());
+        ResponseEntity<String> respStr = restTemplate.exchange(requestUrl,HttpMethod.POST,entity,String.class);
+        String jsonStr = respStr.getBody();
+        logger.info("微信创建标签,accountId:{}----end,时间:{},微信返回{}",accountId,LocalDateTime.now().toString(),jsonStr);
+        int errorCode = JSONObject.parseObject(jsonStr).getIntValue("errcode");
+        return 0 == errorCode;
+    }
 }