Selaa lähdekoodia

企微聊天-新增标签处理相关接口、看课列表创建时间倒叙排列

Long 2 viikkoa sitten
vanhempi
commit
247e1d2963

+ 22 - 0
fs-company/src/main/java/com/fs/company/controller/param/QwExternalContactEditTagDTO.java

@@ -0,0 +1,22 @@
+package com.fs.company.controller.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@ApiModel("外部联系人标签调整")
+@Data
+public class QwExternalContactEditTagDTO {
+
+    @NotNull(message = "企微外部联系人Id不能为空")
+    @ApiModelProperty("企微外部联系人ID")
+    private Long qwExternalContactId;
+
+    @NotEmpty(message = "企微标签Id不能为空")
+    @ApiModelProperty("企微标签ID集合")
+    private List<Long> tagIds;
+}

+ 81 - 5
fs-company/src/main/java/com/fs/company/controller/qw/QwMsgController.java

@@ -1,5 +1,7 @@
 package com.fs.company.controller.qw;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.controller.BaseController;
@@ -12,6 +14,7 @@ import com.fs.common.exception.ServiceException;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.company.controller.param.QwExternalContactEditTagDTO;
 import com.fs.course.param.FsCourseLinkMiniParam;
 import com.fs.course.param.FsCourseListBySidebarParam;
 import com.fs.course.service.IFsCourseWatchLogService;
@@ -31,10 +34,7 @@ import com.fs.qw.domain.*;
 import com.fs.qw.param.QwMsgSendParam;
 import com.fs.qw.param.QwSessionParam;
 import com.fs.qw.service.*;
-import com.fs.qw.vo.QwContactListVO;
-import com.fs.qw.vo.QwContactVO;
-import com.fs.qw.vo.QwMessageListVO;
-import com.fs.qw.vo.QwTagVO;
+import com.fs.qw.vo.*;
 import com.fs.statis.service.IStatisticsService;
 import com.fs.statistics.dto.WatchCourseStatisticsDTO;
 import com.fs.statistics.param.WatchCourseStatisticsParam;
@@ -47,6 +47,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 企微聊天记录Controller
@@ -84,6 +85,8 @@ public class QwMsgController extends BaseController
     @Autowired
     private IQwSessionService sessionService;
     @Autowired
+    private IQwTagGroupService qwTagGroupService;
+    @Autowired
     private IQwTagService tagService;
 
     /**
@@ -398,7 +401,7 @@ public class QwMsgController extends BaseController
     }
 
     @ApiOperation("获取外部联系人标签列表")
-    @GetMapping("/getQwExternalContactVisitList")
+    @GetMapping("/getQwExternalContactTagList")
     public TableDataInfo getQwExternalContactTagList(@RequestParam(value = "qwExternalContactId") Long qwExternalContactId) {
         QwExternalContact externalContact = qwExternalContactService.selectQwExternalContactById(qwExternalContactId);
         if (Objects.isNull(externalContact)){
@@ -418,4 +421,77 @@ public class QwMsgController extends BaseController
         return getDataTable(tagList);
     }
 
+    @ApiOperation("获取企微主体标签列表")
+    @GetMapping("/getCorpTagList")
+    public TableDataInfo getCorpTagList(@RequestParam(value = "qwExternalContactId") Long qwExternalContactId,
+                                        @RequestParam(required = false) String name) {
+        QwExternalContact externalContact = qwExternalContactService.selectQwExternalContactById(qwExternalContactId);
+        if (Objects.isNull(externalContact)){
+            return getDataTable(new ArrayList<>());
+        }
+
+        startPage();
+        QwTagGroup params = new QwTagGroup();
+        params.setName(name);
+        params.setCorpId(externalContact.getCorpId());
+        List<QwTagGroupListVO> list = qwTagGroupService.selectQwTagGroupListVO(params);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("外部联系人添加标签")
+    @Log(title = "添加标签", businessType = BusinessType.UPDATE)
+    @PostMapping("/addQwExternalContactTag")
+    public R addQwExternalContactTag(@RequestBody QwExternalContactEditTagDTO param) {
+        QwExternalContact externalContact = qwExternalContactService.selectQwExternalContactById(param.getQwExternalContactId());
+        if (Objects.isNull(externalContact)){
+            throw new ServiceException("外部联系人不存在");
+        }
+
+        List<QwTag> addTags = tagService.selectQwTagListByCorpIdAndIds(param.getTagIds(), externalContact.getCorpId());
+        if (addTags.isEmpty()) {
+            throw new ServiceException("添加标签不能为空");
+        }
+
+        List<String> addTagList = new ArrayList<>();
+        if (StringUtils.isNotBlank(externalContact.getTagIds())) {
+            List<String> oldTags = JSON.parseObject(externalContact.getTagIds(), new TypeReference<List<String>>(){}.getType());
+            addTagList = addTags.stream().map(QwTag::getTagId).filter(tagId -> !oldTags.contains(tagId)).collect(Collectors.toList());
+        }
+
+        if (addTagList.isEmpty()) {
+            throw new ServiceException("添加标签不能为空");
+        }
+
+        qwExternalContactService.addQwExternalContactTag(externalContact.getId(), addTagList);
+        return R.ok();
+    }
+
+    @ApiOperation("外部联系人删除标签")
+    @Log(title = "删除标签", businessType = BusinessType.UPDATE)
+    @PostMapping("/delQwExternalContactTag")
+    public R delQwExternalContactTag(@RequestBody QwExternalContactEditTagDTO param) {
+        QwExternalContact externalContact = qwExternalContactService.selectQwExternalContactById(param.getQwExternalContactId());
+        if (Objects.isNull(externalContact)){
+            throw new ServiceException("外部联系人不存在");
+        }
+
+        if (StringUtils.isBlank(externalContact.getTagIds())) {
+            throw new ServiceException("外部联系人不存在标签");
+        }
+
+        List<QwTag> delTags = tagService.selectQwTagListByCorpIdAndIds(param.getTagIds(), externalContact.getCorpId());
+        if (delTags.isEmpty()) {
+            throw new ServiceException("删除标签不能为空");
+        }
+
+        List<String> oldTags = JSON.parseObject(externalContact.getTagIds(), new TypeReference<List<String>>(){}.getType());
+        List<String> delTagList = delTags.stream().map(QwTag::getTagId).filter(oldTags::contains).collect(Collectors.toList());
+        if (delTagList.isEmpty()) {
+            throw new ServiceException("删除标签不能为空");
+        }
+
+        qwExternalContactService.delQwExternalContactTag(externalContact.getId(), delTagList);
+        return R.ok();
+    }
+
 }

+ 6 - 1
fs-service/src/main/java/com/fs/qw/mapper/QwTagMapper.java

@@ -108,5 +108,10 @@ public interface QwTagMapper
     /**
      * 根据tagIds查询标签
      */
-    List<QwTagVO> selectQwTagVOListByTagIds(List<String> tagIds);
+    List<QwTagVO> selectQwTagVOListByTagIds(@Param("tagIds") List<String> tagIds);
+
+    /**
+     * 根据ids查询标签列表
+     */
+    List<QwTag> selectQwTagListByCorpIdAndIds(@Param("ids") List<Long> ids, @Param("corpId") String corpId);
 }

+ 11 - 0
fs-service/src/main/java/com/fs/qw/service/IQwExternalContactService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.common.core.domain.R;
 import com.fs.course.param.FsCourseListBySidebarParam;
 import com.fs.qw.domain.QwExternalContact;
+import com.fs.qw.domain.QwTag;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.param.*;
 import com.fs.qw.param.newparam.ExternalContactPageListParam;
@@ -270,4 +271,14 @@ public interface IQwExternalContactService extends IService<QwExternalContact> {
      * @return  Boolean
      */
     Boolean getBuyStatusByExtId(Long qwExternalContactId);
+
+    /**
+     * 外部联系人添加标签
+     */
+    void addQwExternalContactTag(Long id, List<String> addTags);
+
+    /**
+     * 外部联系人删除标签
+     */
+    void delQwExternalContactTag(Long id, List<String> delTags);
 }

+ 5 - 0
fs-service/src/main/java/com/fs/qw/service/IQwTagService.java

@@ -77,4 +77,9 @@ public interface IQwTagService
      * 根据tagIds查询标签
      */
     List<QwTagVO> selectQwTagVOListByTagIds(List<String> tagIds);
+
+    /**
+     * 根据ids查询标签列表
+     */
+    List<QwTag> selectQwTagListByCorpIdAndIds(List<Long> ids, String corpId);
 }

+ 48 - 0
fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONException;
+import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,6 +13,7 @@ import com.fs.ad.enums.AdUploadType;
 import com.fs.ad.service.IAdHtmlClickLogService;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
+import com.fs.common.exception.ServiceException;
 import com.fs.common.utils.PubFun;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.service.ICompanyConfigService;
@@ -5981,4 +5983,50 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
     public Boolean getBuyStatusByExtId(Long qwExternalContactId) {
         return qwExternalContactMapper.getBuyStatusByExtId(qwExternalContactId);
     }
+
+    /**
+     * 外部联系人添加标签
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void addQwExternalContactTag(Long id, List<String> addTags) {
+        QwExternalContact externalContact = qwExternalContactMapper.selectQwExternalContactById(id);
+
+        QwEditUserTagParam param = new QwEditUserTagParam();
+        param.setAdd_tag(addTags);
+        param.setUserid(externalContact.getUserId());
+        param.setExternal_userid(externalContact.getExternalUserId());
+        QwResult qwResult = qwApiService.editUserTag(param, externalContact.getCorpId());
+        if (qwResult.getErrcode() != 0) {
+            throw new ServiceException(qwResult.getErrmsg());
+        }
+
+        List<String> oldTags = JSON.parseObject(externalContact.getTagIds(), new TypeReference<List<String>>(){}.getType());
+        oldTags.addAll(addTags);
+        externalContact.setTagIds(JSON.toJSONString(oldTags));
+        qwExternalContactMapper.updateById(externalContact);
+    }
+
+    /**
+     * 外部联系人删除标签
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delQwExternalContactTag(Long id, List<String> delTags) {
+        QwExternalContact externalContact = qwExternalContactMapper.selectQwExternalContactById(id);
+
+        QwEditUserTagParam param = new QwEditUserTagParam();
+        param.setRemove_tag(delTags);
+        param.setUserid(externalContact.getUserId());
+        param.setExternal_userid(externalContact.getExternalUserId());
+        QwResult qwResult = qwApiService.editUserTag(param, externalContact.getCorpId());
+        if (qwResult.getErrcode() != 0) {
+            throw new ServiceException(qwResult.getErrmsg());
+        }
+
+        List<String> oldTags = JSON.parseObject(externalContact.getTagIds(), new TypeReference<List<String>>(){}.getType());
+        delTags.forEach(oldTags::remove);
+        externalContact.setTagIds(JSON.toJSONString(oldTags));
+        qwExternalContactMapper.updateById(externalContact);
+    }
 }

+ 8 - 0
fs-service/src/main/java/com/fs/qw/service/impl/QwTagServiceImpl.java

@@ -216,4 +216,12 @@ public class QwTagServiceImpl implements IQwTagService
     public List<QwTagVO> selectQwTagVOListByTagIds(List<String> tagIds) {
         return qwTagMapper.selectQwTagVOListByTagIds(tagIds);
     }
+
+    /**
+     * 根据ids查询标签列表
+     */
+    @Override
+    public List<QwTag> selectQwTagListByCorpIdAndIds(List<Long> ids, String corpId) {
+        return qwTagMapper.selectQwTagListByCorpIdAndIds(ids, corpId);
+    }
 }

+ 1 - 1
fs-service/src/main/java/com/fs/wxwork/utils/WxWorkHttpUtil.java

@@ -98,7 +98,7 @@ public class WxWorkHttpUtil {
      */
     public static <T>T postWithType(String url, Object jsonBody, TypeReference<T> type) {
         String post = post(url, JSON.toJSONString(jsonBody), null);
-        return JSON.parseObject(post,type);
+        return JSON.parseObject(post,type.getType());
     }
     /**
      * 发送带Header的POST请求(JSON格式)

+ 1 - 0
fs-service/src/main/resources/mapper/course/FsCourseWatchLogMapper.xml

@@ -1013,6 +1013,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="params.companyUserId != null">
             and fcwl.company_user_id = #{params.companyUserId}
         </if>
+        order by fcwl.create_time desc
     </select>
 
 </mapper>

+ 9 - 1
fs-service/src/main/resources/mapper/qw/QwTagMapper.xml

@@ -128,8 +128,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectQwTagVOListByTagIds" resultType="com.fs.qw.vo.QwTagVO">
         select * from qw_tag
         where tag_id in
-        <foreach collection="ids" item="tagId" open="(" separator="," close=")">
+        <foreach collection="tagIds" item="tagId" open="(" separator="," close=")">
             #{tagId}
         </foreach>
     </select>
+
+    <select id="selectQwTagListByCorpIdAndIds" resultType="com.fs.qw.domain.QwTag">
+        select * from qw_tag
+        where corp_id = #{corpId} and id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
 </mapper>