Преглед изворни кода

feat:会员列表、数量获取、详情接口编写

caoliqin пре 2 месеци
родитељ
комит
c40644ac19
20 измењених фајлова са 712 додато и 262 уклоњено
  1. 100 0
      fs-common/src/main/java/com/fs/common/core/domain/ResponseResult.java
  2. 20 0
      fs-common/src/main/java/com/fs/common/enums/BizResponseEnum.java
  3. 0 48
      fs-company-app/src/main/java/com/fs/app/controller/QwController.java
  4. 78 0
      fs-company-app/src/main/java/com/fs/app/controller/QwUserController.java
  5. 17 3
      fs-service-system/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java
  6. 3 0
      fs-service-system/src/main/java/com/fs/qw/mapper/QwTagMapper.java
  7. 23 0
      fs-service-system/src/main/java/com/fs/qw/param/newparam/ContactTagListParam.java
  8. 43 0
      fs-service-system/src/main/java/com/fs/qw/param/newparam/ExternalContactPageListParam.java
  9. 0 49
      fs-service-system/src/main/java/com/fs/qw/param/newqw/QwExternalContactPageListParam.java
  10. 35 3
      fs-service-system/src/main/java/com/fs/qw/service/IQwExternalContactService.java
  11. 11 0
      fs-service-system/src/main/java/com/fs/qw/service/IQwTagService.java
  12. 46 5
      fs-service-system/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java
  13. 8 0
      fs-service-system/src/main/java/com/fs/qw/service/impl/QwTagServiceImpl.java
  14. 0 117
      fs-service-system/src/main/java/com/fs/qw/vo/newqw/QwExternalContactListVo.java
  15. 26 0
      fs-service-system/src/main/java/com/fs/qw/vo/newvo/ExternalContactDetailsVO.java
  16. 53 0
      fs-service-system/src/main/java/com/fs/qw/vo/newvo/ExternalContactListVO.java
  17. 20 0
      fs-service-system/src/main/java/com/fs/qw/vo/newvo/ExternalContactNumVO.java
  18. 20 0
      fs-service-system/src/main/java/com/fs/qw/vo/newvo/ExternalContactPageVO.java
  19. 194 37
      fs-service-system/src/main/resources/mapper/qw/QwExternalContactMapper.xml
  20. 15 0
      fs-service-system/src/main/resources/mapper/qw/QwTagMapper.xml

+ 100 - 0
fs-common/src/main/java/com/fs/common/core/domain/ResponseResult.java

@@ -0,0 +1,100 @@
+package com.fs.common.core.domain;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fs.common.enums.BizResponseEnum;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ * @author 曹丽芹
+ */
+@Getter
+@Setter
+@Builder
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ResponseResult<T> {
+    /**
+     * 自定义异常码
+     */
+    private Integer code;
+
+    /**
+     * 自定义异常信息
+     */
+    private String msg;
+
+    /**
+     * 响应数据
+     */
+    private T data;
+
+    /**
+     * 额外数据
+     */
+    private Object ext;
+
+    public ResponseResult() {
+    }
+
+    public ResponseResult(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public ResponseResult(BizResponseEnum exceptionEnum) {
+        this.code = exceptionEnum.getCode();
+        this.msg = exceptionEnum.getMsg();
+    }
+
+    public ResponseResult(Integer code, String msg, Object ext) {
+        this.code = code;
+        this.msg = msg;
+        this.ext = ext;
+    }
+
+    public ResponseResult(BizResponseEnum exceptionEnum, Object ext) {
+        this.code = exceptionEnum.getCode();
+        this.msg = exceptionEnum.getMsg();
+        this.ext = ext;
+    }
+
+    public ResponseResult(Integer code, String msg, T data, Object ext) {
+        this.code = code;
+        this.msg = msg;
+        this.data = data;
+        this.ext = ext;
+    }
+
+    public static <T> ResponseResult<T> ok() {
+        return ResponseResult.ok(null);
+    }
+
+    public static <T> ResponseResult<T> ok(T data) {
+        ResponseResult<T> ok = new ResponseResult<>();
+        ok.setCode(200);
+        ok.setMsg("success");
+        ok.setData(data);
+        return ok;
+    }
+
+    public static <T> ResponseResult<T> fail(BizResponseEnum exceptionEnum) {
+        return ResponseResult.fail(exceptionEnum, null);
+    }
+
+    public static <T> ResponseResult<T> fail(BizResponseEnum exceptionEnum, Object ext) {
+        ResponseResult<T> ok = new ResponseResult<>();
+        ok.setCode(exceptionEnum.getCode());
+        ok.setMsg(exceptionEnum.getMsg());
+        ok.setExt(ext);
+        return ok;
+    }
+
+    public static <T> ResponseResult<T> fail(Integer code, String msg) {
+        ResponseResult<T> ok = new ResponseResult<>();
+        ok.setCode(code);
+        ok.setMsg(msg);
+        return ok;
+    }
+}

+ 20 - 0
fs-common/src/main/java/com/fs/common/enums/BizResponseEnum.java

@@ -0,0 +1,20 @@
+package com.fs.common.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum BizResponseEnum {
+    SUCCESS(200, "操作成功"),
+    FAIL(500, "操作失败"),
+    PARAM_ERROR(400, "参数错误"),
+    DATA_NOT_EXIST(1002, "数据不存在");
+
+    private final Integer code;
+    private final String msg;
+
+    BizResponseEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+}

+ 0 - 48
fs-company-app/src/main/java/com/fs/app/controller/QwController.java

@@ -1,48 +0,0 @@
-package com.fs.app.controller;
-
-
-import com.fs.common.core.domain.R;
-import com.fs.qw.param.newqw.QwExternalContactPageListParam;
-import com.fs.qw.service.IQwExternalContactService;
-import com.fs.qw.vo.newqw.QwExternalContactListVo;
-import com.github.pagehelper.Page;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-
-@Api("企微相关接口")
-@RestController
-@RequestMapping("/fsUser")
-public class QwController extends AppBaseController {
-
-    @Autowired
-    private IQwExternalContactService qwExternalContactService;
-
-    @PostMapping("/getFsUserList")
-    public R pageList(@RequestBody QwExternalContactPageListParam param) {
-        param.setUserId(Long.parseLong(getUserId()));
-        PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        param.setIsBlack(false);
-        List<QwExternalContactListVo> list = qwExternalContactService.selectQwExternalContactPageList(param);
-        PageInfo<QwExternalContactListVo> pageInfo = new PageInfo<>(list);
-        return R.ok().put("data", pageInfo);
-    }
-
-    @PostMapping("/getBlackUserList")
-    public R pageListBlack(@RequestBody QwExternalContactPageListParam param) {
-        param.setUserId(Long.parseLong(getUserId()));
-        PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        param.setIsBlack(true);
-        List<QwExternalContactListVo> list = qwExternalContactService.selectQwExternalContactPageList(param);
-        PageInfo<QwExternalContactListVo> pageInfo = new PageInfo<>(list);
-        return R.ok().put("data", pageInfo);
-    }
-
-}

+ 78 - 0
fs-company-app/src/main/java/com/fs/app/controller/QwUserController.java

@@ -0,0 +1,78 @@
+package com.fs.app.controller;
+
+
+import com.fs.common.core.domain.R;
+import com.fs.common.core.domain.ResponseResult;
+import com.fs.qw.param.newparam.ContactTagListParam;
+import com.fs.qw.param.newparam.ExternalContactPageListParam;
+import com.fs.qw.service.IQwExternalContactService;
+import com.fs.qw.service.IQwTagService;
+import com.fs.qw.vo.QwTagVO;
+import com.fs.qw.vo.newvo.ExternalContactDetailsVO;
+import com.fs.qw.vo.newvo.ExternalContactListVO;
+import com.fs.qw.vo.newvo.ExternalContactPageVO;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+@Api(tags = "企微用户相关接口")
+@RestController
+@RequestMapping("/app/user")
+public class QwUserController extends AppBaseController {
+
+    @Autowired
+    private IQwExternalContactService qwExternalContactService;
+
+    @Autowired
+    private IQwTagService tagService;
+
+    @GetMapping("/pageList")
+    @ApiOperation("会员分页列表")
+    public ResponseResult<PageInfo<ExternalContactListVO>> pageList(ExternalContactPageListParam param) {
+        param.setUserId(Long.parseLong(getUserId()));
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        List<ExternalContactListVO> list = qwExternalContactService.externalContactPageList(param);
+        PageInfo<ExternalContactListVO> pageInfo = new PageInfo<>(list);
+        return ResponseResult.ok(pageInfo);
+    }
+
+    @GetMapping("/totalNumber")
+    @ApiOperation("会员数量统计")
+    public ResponseResult<ExternalContactPageVO> getTotalNumber() {
+        ExternalContactPageVO contactNumber = qwExternalContactService.getContactNumber(Long.parseLong(getUserId()));
+        return ResponseResult.ok(contactNumber);
+    }
+
+    @GetMapping("/details")
+    @ApiOperation("会员详情")
+    public ResponseResult<ExternalContactDetailsVO> getUserDetails(@ApiParam(value = "外部联系人id", required = true) @RequestParam Long contactId,
+                                                                   @ApiParam(value = "时间tab,不传表示查询全部,分别是:今天、昨天、前天、近七天", required = true) @RequestParam String dateTag) {
+        return ResponseResult.ok(qwExternalContactService.getUserDetails(Long.parseLong(getUserId()), contactId, dateTag));
+    }
+
+    @GetMapping("/tagList")
+    @ApiOperation("会员标签列表")
+    public ResponseResult<PageInfo<QwTagVO>> getTagList(ContactTagListParam param) {
+        param.setUserId(Long.parseLong(getUserId()));
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        List<QwTagVO> tagList = tagService.getTagListByUserId(param);
+        PageInfo<QwTagVO> pageInfo = new PageInfo<>(tagList);
+        return ResponseResult.ok(pageInfo);
+    }
+
+    @PutMapping("/disabled")
+    @ApiOperation("批量禁用会员")
+    public ResponseResult<Boolean> disabledUser(@ApiParam(value = "联系人id集合", required = true) @RequestBody String[] ids) {
+        Boolean r = qwExternalContactService.disabledUser(ids);
+        return ResponseResult.ok(r);
+    }
+
+
+}

+ 17 - 3
fs-service-system/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java

@@ -6,13 +6,15 @@ import com.fs.qw.param.ConversionStatisticsParam;
 import com.fs.qw.param.QwCountCustomerParam;
 import com.fs.qw.param.QwExternalContactParam;
 import com.fs.qw.param.QwExternalContactVOTime;
-import com.fs.qw.param.newqw.QwExternalContactPageListParam;
+import com.fs.qw.param.newparam.ExternalContactPageListParam;
 import com.fs.qw.result.QwExternalContactByQwResult;
 import com.fs.qw.result.QwExternalContactLogVo;
 import com.fs.qw.result.QwExternalContactVo;
 import com.fs.qw.vo.QwExternalContactFsCrmVO;
 import com.fs.qw.vo.QwExternalContactVO;
-import com.fs.qw.vo.newqw.QwExternalContactListVo;
+import com.fs.qw.vo.newvo.ExternalContactDetailsVO;
+import com.fs.qw.vo.newvo.ExternalContactListVO;
+import com.fs.qw.vo.newvo.ExternalContactNumVO;
 import com.fs.qwApi.param.QwExternalContactHParam;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -20,7 +22,9 @@ import org.apache.ibatis.annotations.Update;
 import org.springframework.stereotype.Repository;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 企业微信客户Mapper接口
@@ -330,5 +334,15 @@ public interface QwExternalContactMapper extends BaseMapper<QwExternalContact> {
     @Select("select id,external_user_id,tag_ids from qw_external_contact where  qw_user_id=#{id} ")
     List<QwExternalContact> selectExternalUserIdsByQwUserId(Long id);
 
-    List<QwExternalContactListVo> selectQwExternalContactPageList(QwExternalContactPageListParam param);
+    List<ExternalContactListVO> selectExternalContactPageList(ExternalContactPageListParam param);
+
+    List<ExternalContactNumVO> getContactNumber(@Param("userId") Long userId);
+
+    ExternalContactDetailsVO getCountAnswer (@Param("userId") Long userId, @Param("contactId") Long contactId, @Param("dateTag") String dateTag);
+
+    ExternalContactDetailsVO getCountRedPacket (@Param("userId") Long userId, @Param("contactId") Long contactId, @Param("dateTag") String dateTag);
+
+    List<QwExternalContact> selectContactByIds(@Param("ids") List<String> ids);
+
+    int updateContactByIds(@Param("ids") List<String> ids,@Param("status") Integer status);
 }

+ 3 - 0
fs-service-system/src/main/java/com/fs/qw/mapper/QwTagMapper.java

@@ -1,6 +1,7 @@
 package com.fs.qw.mapper;
 
 import com.fs.qw.domain.QwTag;
+import com.fs.qw.param.newparam.ContactTagListParam;
 import com.fs.qw.vo.QwTagVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -80,4 +81,6 @@ public interface QwTagMapper
     List<QwTagVO> selectQwTagListVO(QwTag qwTag);
     @Select("select * from qw_tag where name=#{trimTag} and corp_id=#{corpId} limit 1" )
     QwTagVO selectQwTagByName(@Param("trimTag") String trimTag, @Param("corpId")String corpId );
+
+    List<QwTagVO> selectTagListByUserId(ContactTagListParam param);
 }

+ 23 - 0
fs-service-system/src/main/java/com/fs/qw/param/newparam/ContactTagListParam.java

@@ -0,0 +1,23 @@
+package com.fs.qw.param.newparam;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+@Data
+public class ContactTagListParam implements Serializable {
+
+    @ApiModelProperty(value = "页码,默认为1", required = true)
+    private Integer pageNum =1;
+
+    @ApiModelProperty(value = "页大小,默认为10", required = true)
+    private Integer pageSize = 10;
+
+    @ApiModelProperty(value = "用户id,不用传")
+    private Long userId;
+
+}
+

+ 43 - 0
fs-service-system/src/main/java/com/fs/qw/param/newparam/ExternalContactPageListParam.java

@@ -0,0 +1,43 @@
+package com.fs.qw.param.newparam;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+
+@Data
+public class ExternalContactPageListParam implements Serializable {
+
+    @ApiModelProperty(value = "页码,默认为1", required = true)
+    private Integer pageNum = 1;
+
+    @ApiModelProperty(value = "页大小,默认为10", required = true)
+    private Integer pageSize = 10;
+
+    @ApiModelProperty(value = "模糊搜索,可以通过微信名称、电话来模糊匹配")
+    private String keyword;
+
+    @ApiModelProperty(value = "用户id,不用传")
+    private Long userId;
+
+    @ApiModelProperty(value = "是否是黑名单,默认是false", required = true)
+    private Boolean isBlack = false;
+
+    @ApiModelProperty(value = "注册时间-开始")
+    private String registerStartTime;
+
+    @ApiModelProperty(value = "注册时间-结束")
+    private String registerEndTime;
+
+    @ApiModelProperty(value = "标签")
+    private String[] tagIds;
+
+    @ApiModelProperty(value = "tab序号,0全部;1今日新增;2今日完播;3未看过课")
+    private String tabValue;
+
+    @ApiModelProperty(value = "看课状态,0全部;1未看过课;2正常看课;3停止看课")
+    private String watchCourseType;
+
+}
+

+ 0 - 49
fs-service-system/src/main/java/com/fs/qw/param/newqw/QwExternalContactPageListParam.java

@@ -1,49 +0,0 @@
-package com.fs.qw.param.newqw;
-
-
-import com.fs.his.param.BaseParam;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.io.Serializable;
-
-
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class QwExternalContactPageListParam extends BaseParam implements Serializable {
-    @ApiModelProperty(value = "用户id,不用传")
-    private Long userId;
-
-    @ApiModelProperty(value = "公司id")
-    private String companyId;
-
-    @ApiModelProperty(value = "公司员工id")
-    private String companyUserId;
-
-    @ApiModelProperty(value = "tab序号,0全部;1今日新增;2今日完播;3未看过课")
-    private String queryValue;
-
-    @ApiModelProperty(value = "注册时间-开始")
-    private String regiesterStartTime;
-
-    @ApiModelProperty(value = "注册时间-结束")
-    private String regiesterEndTime;
-
-    @ApiModelProperty(value = "模糊搜索")
-    private String searchValue;
-
-    @ApiModelProperty(value = "")
-    private String type;
-
-    @ApiModelProperty(value = "看课状态,0全部;1未看过课;2正常看课;3停止看课")
-    private String watchCourseType;
-
-    @ApiModelProperty(value = "")
-    private String[] tagIds;
-
-    private Boolean isBlack;
-
-
-}
-

+ 35 - 3
fs-service-system/src/main/java/com/fs/qw/service/IQwExternalContactService.java

@@ -3,14 +3,17 @@ package com.fs.qw.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.domain.ResponseResult;
 import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.param.*;
-import com.fs.qw.param.newqw.QwExternalContactPageListParam;
+import com.fs.qw.param.newparam.ExternalContactPageListParam;
 import com.fs.qw.result.QwExternalContactLogVo;
 import com.fs.qw.result.QwExternalContactVo;
 import com.fs.qw.vo.QwExternalContactVO;
 import com.fs.qw.vo.QwSopRuleTimeVO;
-import com.fs.qw.vo.newqw.QwExternalContactListVo;
+import com.fs.qw.vo.newvo.ExternalContactDetailsVO;
+import com.fs.qw.vo.newvo.ExternalContactListVO;
+import com.fs.qw.vo.newvo.ExternalContactPageVO;
 import com.fs.qwApi.param.QwExternalContactHParam;
 import org.codehaus.jettison.json.JSONException;
 
@@ -18,6 +21,7 @@ import java.io.IOException;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 企业微信客户Service接口
@@ -161,6 +165,34 @@ public interface IQwExternalContactService extends IService<QwExternalContact> {
 
     void qwExternalContactAddCourseTag();
 
-    List<QwExternalContactListVo> selectQwExternalContactPageList(QwExternalContactPageListParam param);
+    /**
+     * 外部联系人分页查询(黑名单分页查询你)
+     *
+     * @param param 入参对象
+     * @return ExternalContactPageVO vo
+     */
+    List<ExternalContactListVO> externalContactPageList(ExternalContactPageListParam param);
+
+    /**
+     * 获取会员数量
+     * @param userId 登录用户id
+     * @return vo
+     */
+    ExternalContactPageVO getContactNumber(Long userId);
+
+    /**
+     * 获取会员答题情况
+     * @param userId 登录用户id
+     * @param contactId 外部联系人id
+     * @return vo
+     */
+    ExternalContactDetailsVO getUserDetails(Long userId, Long contactId, String dateTag);
+
+    /**
+     * 批量禁用外部联系人
+     * @param ids id数组
+     * @return 是否成功
+     */
+    Boolean disabledUser(String[] ids);
 
 }

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

@@ -3,7 +3,9 @@ package com.fs.qw.service;
 import com.fs.qw.domain.QwTag;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.param.QwTagParam;
+import com.fs.qw.param.newparam.ContactTagListParam;
 import com.fs.qw.vo.QwTagGroupListVO;
+import com.fs.qw.vo.QwTagVO;
 
 import java.util.List;
 
@@ -65,4 +67,13 @@ public interface IQwTagService
     public int deleteQwTagById(Long id);
 
     void AddCourseTag(QwUser user);
+
+    /**
+     * 获取登录用户所属的企业的外部联系人标签
+     *
+     * @param param 分页参数
+     * @return
+     */
+    List<QwTagVO> getTagListByUserId(ContactTagListParam param);
+
 }

+ 46 - 5
fs-service-system/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java

@@ -20,8 +20,11 @@ import com.fs.course.service.IFsCourseLinkService;
 import com.fs.crm.domain.CrmCustomer;
 import com.fs.crm.mapper.CrmCustomerMapper;
 import com.fs.fastGpt.param.SendHookAIParam;
-import com.fs.qw.param.newqw.QwExternalContactPageListParam;
-import com.fs.qw.vo.newqw.QwExternalContactListVo;
+import com.fs.qw.param.newparam.ExternalContactPageListParam;
+import com.fs.qw.vo.newvo.ExternalContactDetailsVO;
+import com.fs.qw.vo.newvo.ExternalContactListVO;
+import com.fs.qw.vo.newvo.ExternalContactNumVO;
+import com.fs.qw.vo.newvo.ExternalContactPageVO;
 import com.fs.store.domain.FsUser;
 import com.fs.store.mapper.FsUserMapper;
 import com.fs.qw.domain.*;
@@ -51,11 +54,13 @@ import com.fs.sop.mapper.QwSopMapper;
 import com.fs.sop.service.ISopUserLogsService;
 import com.fs.voice.utils.StringUtil;
 //import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.text.ParseException;
@@ -163,7 +168,7 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
 
 
 
-    org.slf4j.Logger logger = LoggerFactory.getLogger(getClass());
+    Logger logger = LoggerFactory.getLogger(getClass());
 
     /**
      * 查询企业微信客户
@@ -4257,8 +4262,44 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
     }
 
     @Override
-    public List<QwExternalContactListVo> selectQwExternalContactPageList(QwExternalContactPageListParam param) {
-        return qwExternalContactMapper.selectQwExternalContactPageList(param);
+    public List<ExternalContactListVO> externalContactPageList(ExternalContactPageListParam param) {
+        return qwExternalContactMapper.selectExternalContactPageList(param);
+    }
+
+    @Override
+    public ExternalContactPageVO getContactNumber(Long userId) {
+        List<ExternalContactNumVO> list = qwExternalContactMapper.getContactNumber(userId);
+        Map<String, Integer> map = list.stream().collect(Collectors.toMap(ExternalContactNumVO::getStatus, ExternalContactNumVO::getNum, (v1, v2) -> v1));
+        ExternalContactPageVO pageVO = new ExternalContactPageVO();
+
+        //总数
+        int all = map.values().stream().mapToInt(Integer::intValue).sum();
+        pageVO.setNumber(all-map.get("7"));
+        //获取状态为7(被拉黑)的联系人数量
+        pageVO.setBlackNum(map.get("7"));
+        return pageVO;
+    }
+
+    @Override
+    public ExternalContactDetailsVO getUserDetails(Long userId, Long contactId, String dateTag) {
+        ExternalContactDetailsVO countAnswer = qwExternalContactMapper.getCountAnswer(userId, contactId, dateTag);
+        ExternalContactDetailsVO countRedPacket = qwExternalContactMapper.getCountRedPacket(userId, contactId, dateTag);
+        ExternalContactDetailsVO vo = new ExternalContactDetailsVO();
+        if (countAnswer != null) {
+            BeanUtils.copyProperties(countAnswer, vo);
+        }
+        if (countRedPacket != null) {
+            BeanUtils.copyProperties(countRedPacket, vo);
+        }
+        return vo;
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public Boolean disabledUser(String[] ids) {
+        // 不能使用自带的方法,只能写sql,额。。。。
+        int result = qwExternalContactMapper.updateContactByIds(Arrays.asList(ids), 7);
+        return result > 0;
     }
 
     //发送好友欢迎语

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

@@ -8,6 +8,7 @@ import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.mapper.QwTagGroupMapper;
 import com.fs.qw.mapper.QwTagMapper;
 import com.fs.qw.param.QwTagParam;
+import com.fs.qw.param.newparam.ContactTagListParam;
 import com.fs.qw.service.IQwTagService;
 import com.fs.qw.vo.QwTagGroupListVO;
 import com.fs.qw.vo.QwTagVO;
@@ -39,6 +40,8 @@ public class QwTagServiceImpl implements IQwTagService
     @Autowired
     private QwTagGroupMapper qwTagGroupMapper;
 
+
+
     /**
      * 查询企微客户标签
      *
@@ -189,4 +192,9 @@ public class QwTagServiceImpl implements IQwTagService
 
 
     }
+
+    @Override
+    public List<QwTagVO> getTagListByUserId(ContactTagListParam param) {
+        return qwTagMapper.selectTagListByUserId(param);
+    }
 }

+ 0 - 117
fs-service-system/src/main/java/com/fs/qw/vo/newqw/QwExternalContactListVo.java

@@ -1,117 +0,0 @@
-package com.fs.qw.vo.newqw;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fs.common.annotation.Excel;
-import com.fs.common.core.domain.BaseEntity;
-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 QwExternalContactListVo extends BaseEntity {
-
-    private Long id;
-
-    /** 属于用户id */
-    @Excel(name = "属于用户id")
-    private String userId;
-
-    /** 外部联系人id */
-    @Excel(name = "外部联系人id")
-    private String externalUserId;
-
-    /** 名称 */
-    @Excel(name = "名称")
-    private String name;
-
-    /** 头像 */
-    @Excel(name = "头像")
-    private String avatar;
-
-    /** 用户类别 */
-    @Excel(name = "用户类别")
-    private Integer type;
-
-    /** 性别 */
-    @Excel(name = "性别")
-    private Integer gender;
-
-    /** 描述信息 */
-    @Excel(name = "描述信息")
-    private String description;
-
-    /** 标签id */
-    @Excel(name = "标签id")
-    private String tagIds;
-
-    /** 备注电话号码 */
-    @Excel(name = "备注电话号码")
-    private String remarkMobiles;
-
-    /** 备注企业名称 */
-    @Excel(name = "备注企业名称")
-    private String remarkCorpName;
-
-    /** 来源 */
-    @Excel(name = "来源")
-    private Integer addWay;
-
-    /** oper用户id */
-    @Excel(name = "oper用户id")
-    private String operUserid;
-
-    /** 企业id */
-    @Excel(name = "企业id")
-    private String corpId;
-
-    /** 公司id */
-    @Excel(name = "公司id")
-    private Long companyId;
-
-    /** 员工id */
-    @Excel(name = "员工id")
-    private Long companyUserId;
-    private Long qwUserId;
-    /** 客户id */
-    @Excel(name = "客户id")
-    private Long customerId;
-
-    private Integer transferStatus;
-    private Integer status;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date transferTime;
-    private Integer transferNum;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date lossTime;
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    private Date delTime;
-    private String state;
-    private Long wayId;
-    private Integer stageStatus;
-    private Long fsUserId;
-    private String mpOpenId;
-    private String unionid;
-    // 加微上传状态0未上传1已上传
-    private Integer uploadAddWxStatus;
-    // 注册上传状态0未上传1已上传
-    private Integer uploadRegisterStatus;
-    // 完课上传状态0未上传1已上传
-    private Integer uploadFinishedStatus;
-
-    @ApiModelProperty(value = "企业员工用户账号")
-    private String companyUserName;
-
-    @ApiModelProperty(value = "企业员工用户昵称")
-    private String companyUsernickName;
-
-    @ApiModelProperty(value = "企业微信名")
-    private String  nickName;
-}

+ 26 - 0
fs-service-system/src/main/java/com/fs/qw/vo/newvo/ExternalContactDetailsVO.java

@@ -0,0 +1,26 @@
+package com.fs.qw.vo.newvo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 外部联系人/会员详情 输出参数
+ */
+@Data
+@ApiModel
+public class ExternalContactDetailsVO {
+
+    @ApiModelProperty(value = "答题次数")
+    private int answerTime;
+
+    @ApiModelProperty(value = "答题正确次数")
+    private int answerRightTime;
+
+    @ApiModelProperty(value = "答题红包数")
+    private int answerRedPacketTime;
+
+    @ApiModelProperty(value = "答题红包金额")
+    private int answerRedPacketAmount;
+
+}

+ 53 - 0
fs-service-system/src/main/java/com/fs/qw/vo/newvo/ExternalContactListVO.java

@@ -0,0 +1,53 @@
+package com.fs.qw.vo.newvo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 外部联系人(会员)列表返回对象
+ */
+@Data
+@ApiModel
+public class ExternalContactListVO {
+
+    @ApiModelProperty(value = "外部联系人主键id")
+    private Long id;
+
+    @ApiModelProperty(value = "属于用户id(企微用户id)")
+    private String userId;
+
+    @ApiModelProperty(value = "外部联系人id")
+    private String externalUserId;
+
+    @ApiModelProperty(value = "外部联系人电话")
+    private String mobile;
+
+    @ApiModelProperty(value = "外部联系人状态")
+    private String status;
+
+    @ApiModelProperty(value = "头像")
+    private String avatar;
+
+    @ApiModelProperty(value = "性别")
+    private Integer sex;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "注册时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "企业员工用户账号")
+    private String companyUserName;
+
+    @ApiModelProperty(value = "企业员工用户昵称")
+    private String companyUsernickName;
+
+    @ApiModelProperty(value = "企业微信名")
+    private String  nickName;
+}

+ 20 - 0
fs-service-system/src/main/java/com/fs/qw/vo/newvo/ExternalContactNumVO.java

@@ -0,0 +1,20 @@
+package com.fs.qw.vo.newvo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 外部联系人的不同状态的人员数量
+ */
+@Data
+@ApiModel
+public class ExternalContactNumVO {
+
+    @ApiModelProperty(value = "人员状态")
+    private String status;
+
+    @ApiModelProperty(value = "人员状态对应的数量")
+    private Integer num;
+
+}

+ 20 - 0
fs-service-system/src/main/java/com/fs/qw/vo/newvo/ExternalContactPageVO.java

@@ -0,0 +1,20 @@
+package com.fs.qw.vo.newvo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 外部联系人人员数量统计返回对象
+ */
+@Data
+@ApiModel
+public class ExternalContactPageVO {
+
+    @ApiModelProperty(value = "会员数量")
+    private int number;
+
+    @ApiModelProperty(value = "黑名单数量")
+    private int blackNum;
+
+}

+ 194 - 37
fs-service-system/src/main/resources/mapper/qw/QwExternalContactMapper.xml

@@ -274,63 +274,220 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </delete>
 
-    <select id="selectQwExternalContactPageList" resultType="QwExternalContactListVo">
+    <select id="selectExternalContactPageList" resultType="ExternalContactListVO">
         SELECT
         qw_external_contact.id,
         qw_external_contact.qw_user_id,
-        qw_external_contact.state,
-        qw_external_contact.way_id,
-        qw_external_contact.stage_status,
-        qw_external_contact.open_id,
-        qw_external_contact.is_interact,
-        qw_external_contact.LEVEL,
-        qw_external_contact.unionid,
         qw_external_contact.user_id,
-        qw_external_contact.transfer_time,
-        qw_external_contact.loss_time,
---         qw_external_contact.del_time,
-        qw_external_contact.transfer_num,
         qw_external_contact.external_user_id,
-        qw_external_contact.transfer_status,
+        qw_external_contact.remark_mobiles AS mobile,
         qw_external_contact.STATUS,
         qw_external_contact.create_time,
-        qw_external_contact.NAME as nickName,
+        qw_external_contact.NAME AS nickName,
         qw_external_contact.avatar,
-        qw_external_contact.type,
-        qw_external_contact.gender,
-        qw_external_contact.remark,
-        qw_external_contact.description,
+        qw_external_contact.gender AS sex,
         qw_external_contact.tag_ids,
-        qw_external_contact.remark_mobiles,
-        qw_external_contact.remark_corp_name,
-        qw_external_contact.add_way,
-        qw_external_contact.oper_userid as mpOpenId,
         qw_external_contact.corp_id,
-        qw_external_contact.company_id,
-        qw_external_contact.company_user_id,
-        qw_external_contact.customer_id,
-        qw_external_contact.fs_user_id,
         company_user.user_id AS companyUserId,
         company_user.user_name AS companyUserName,
-        company_user.nick_name AS companyUserNickName,
-        qw_user.qw_user_name as nickName
+        company_user.nick_name AS companyUserNickName
         FROM
         qw_external_contact
         LEFT JOIN qw_user ON qw_external_contact.user_id = qw_user.qw_user_id
         LEFT JOIN company_user ON qw_user.company_user_id = company_user.user_id
         WHERE  company_user.user_id = #{userId}
-        <if test = "isBlack">
-          AND qw_external_contact.status = 7
+        <choose>
+            <when test = "isBlack">
+                AND qw_external_contact.status = 7
+            </when>
+            <otherwise>
+                AND qw_external_contact.status != 7
+            </otherwise>
+        </choose>
+        <if test="keyword != null and keyword !='' ">
+            AND (qw_external_contact.NAME LIKE concat('%',#{keyword},'%') or  qw_external_contact.remark_mobiles LIKE concat('%',#{keyword},'%'))
+--             AND concat(qw_external_contact.NAME, qw_external_contact.remark_mobiles) LIKE concat('%',#{keyword},'%')
         </if>
-        <if test="companyId != null">
-        AND company_user.company_id = #{companyId}
+        <if test="registerStartTime != null and registerStartTime !='' ">
+        AND qw_external_contact.create_time &gt;= #{registerStartTime}
         </if>
-
-        <if test="regiesterStartTime != null and regiesterStartTime !='' ">
-        AND qw_external_contact.create_time &gt;= #{regiesterStartTime}
+        <if test="registerEndTime != null and registerEndTime !='' ">
+        AND qw_external_contact.create_time &lt;= #{registerEndTime}
+        </if>
+        <if test="tagIds != null and tagIds.length > 0">
+            AND
+            <foreach collection="tagIds" item="item" index="index" open="(" separator="or" close=")">
+                tag_ids LIKE concat('%"',#{item},'"%')
+            </foreach>
+        </if>
+        <if test="tabValue != null and tabValue !='' ">
+            <choose>
+                <when test = "tabValue == 1">
+                    AND DAY(qw_external_contact.create_time) = DAY(NOW())
+                </when>
+                <when test = "tabValue == 2">
+--                     暂时不做
+                    AND 1!=1
+                </when>
+                <when test = "tabValue == 3">
+                    --                     暂时不做
+                    AND 1!=1
+                </when>
+            </choose>
+        </if>
+        <if test="watchCourseType != null and watchCourseType !='' ">
+            <choose>
+                <when test = "watchCourseType == 1">
+                    AND 1!=1
+                </when>
+                <when test = "watchCourseType == 2">
+                    AND 1!=1
+                </when>
+                <when test = "watchCourseType == 3">
+                    AND 1!=1
+                </when>
+            </choose>
         </if>
-        <if test="regiesterEndTime != null and regiesterEndTime !='' ">
-        AND qw_external_contact.create_time &lt;= #{regiesterEndTime}
+    </select>
+
+    <select id="getContactNumber" resultType="ExternalContactNumVO">
+        SELECT
+            qw_external_contact.STATUS as status,
+            count( qw_external_contact.id ) as num
+        FROM
+            qw_external_contact
+                LEFT JOIN qw_user ON qw_external_contact.user_id = qw_user.qw_user_id
+                LEFT JOIN company_user ON qw_user.company_user_id = company_user.user_id
+        WHERE
+            company_user.user_id = #{userId}
+        GROUP BY
+            qw_external_contact.STATUS
+    </select>
+
+    <select id="getCountAnswer" resultType="ExternalContactDetailsVO">
+        SELECT
+            count( DISTINCT log_id ) AS answerTime,
+            is_right,
+            qw_external_contact.id,
+            qw_external_contact.external_user_id,
+            qw_external_contact.qw_user_id
+        FROM
+            fs_course_answer_logs
+                LEFT JOIN qw_user ON qw_user.id = fs_course_answer_logs.qw_user_id
+                LEFT JOIN qw_external_contact ON qw_external_contact.user_id = qw_user.qw_user_id
+        WHERE
+            fs_course_answer_logs.company_user_id = #{userId}
+        <if test="dateTag != null and dateTag !='' ">
+            <choose>
+                <when test = "dateTag == '今天'">
+                    and to_days(fs_course_answer_logs.create_time) = to_days(now())
+                </when>
+                <when test = "dateTag == ' 昨天'">
+                    and to_days(now()) - to_days(fs_course_answer_logs.create_time) &lt;= 1
+                </when>
+                <when test = "dateTag == '前天'">
+                    and to_days(now()) - to_days(fs_course_answer_logs.create_time) &lt;= 2
+                </when>
+                <when test = "dateTag == '近七天'">
+                    and DATE_SUB(CURDATE(), INTERVAL 7 DAY) &lt;= date(fs_course_answer_logs.create_time)
+                </when>
+            </choose>
         </if>
+        GROUP BY
+            qw_external_contact.id
+        HAVING
+            qw_external_contact.id = #{contactId}
+
+        union all
+
+        SELECT
+            count( DISTINCT log_id ) AS answerRightTime,
+            is_right,
+            qw_external_contact.id,
+            qw_external_contact.external_user_id,
+            qw_external_contact.qw_user_id
+        FROM
+            fs_course_answer_logs
+                LEFT JOIN qw_user ON qw_user.id = fs_course_answer_logs.qw_user_id
+                LEFT JOIN qw_external_contact ON qw_external_contact.user_id = qw_user.qw_user_id
+        WHERE
+            fs_course_answer_logs.company_user_id = #{userId} and fs_course_answer_logs.is_right = 1
+            <if test="dateTag != null and dateTag !='' ">
+                <choose>
+                    <when test = "dateTag == '今天'">
+                        and to_days(fs_course_answer_logs.create_time) = to_days(now())
+                    </when>
+                    <when test = "dateTag == ' 昨天'">
+                        and to_days(now()) - to_days(fs_course_answer_logs.create_time) &lt;= 1
+                    </when>
+                    <when test = "dateTag == '前天'">
+                        and to_days(now()) - to_days(fs_course_answer_logs.create_time) &lt;= 2
+                    </when>
+                    <when test = "dateTag == '近七天'">
+                        and DATE_SUB(CURDATE(), INTERVAL 7 DAY) &lt;= date(fs_course_answer_logs.create_time)
+                    </when>
+                </choose>
+            </if>
+        GROUP BY
+            qw_external_contact.id
+        HAVING
+            qw_external_contact.id = #{contactId}
+    </select>
+
+    <select id="getCountRedPacket" resultType="ExternalContactDetailsVO">
+        SELECT
+            count( DISTINCT log_id ) AS answerRedPacketTime,
+            sum( amount ) AS answerRedPacketAmount,
+            amount,
+            qw_external_contact.id,
+            qw_external_contact.external_user_id,
+            qw_external_contact.qw_user_id
+        FROM
+            fs_course_red_packet_log
+                LEFT JOIN qw_user ON qw_user.id = fs_course_red_packet_log.qw_user_id
+                LEFT JOIN qw_external_contact ON qw_external_contact.user_id = qw_user.qw_user_id
+        WHERE
+            fs_course_red_packet_log.company_user_id = #{userId}
+            <if test="dateTag != null and dateTag !='' ">
+            <choose>
+                <when test = "dateTag == '今天'">
+                    and to_days(fs_course_red_packet_log.create_time) = to_days(now())
+                </when>
+                <when test = "dateTag == ' 昨天'">
+                    and to_days(now()) - to_days(fs_course_red_packet_log.create_time) &lt;= 1
+                </when>
+                <when test = "dateTag == '前天'">
+                    and to_days(now()) - to_days(fs_course_red_packet_log.create_time) &lt;= 2
+                </when>
+                <when test = "dateTag == '近七天'">
+                    and DATE_SUB(CURDATE(), INTERVAL 7 DAY) &lt;= date(fs_course_red_packet_log.create_time)
+                </when>
+            </choose>
+            </if>
+        GROUP BY
+            qw_external_contact.id
+        HAVING
+            qw_external_contact.id = #{contactId}
+    </select>
+
+
+    <select id="selectContactByIds" resultType="QwExternalContact">
+    SELECT
+    qw_external_contact.id,
+    qw_external_contact.STATUS
+    from qw_external_contact
+    where id in
+          <foreach collection="ids" item="id" index="index" open="(" separator="," close=")">
+             (#{id})
+          </foreach>
     </select>
+
+    <update id="updateContactByIds" parameterType="map">
+        update qw_external_contact
+        set status = #{status}
+        where id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
 </mapper>

+ 15 - 0
fs-service-system/src/main/resources/mapper/qw/QwTagMapper.xml

@@ -97,4 +97,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <delete id="deleteQwTagByGroupId" parameterType="String">
         delete from qw_tag where group_id =#{id}
     </delete>
+
+    <select id="selectTagListByUserId" resultType="QwTagVO">
+        SELECT DISTINCT
+            qw_tag.id,
+            qw_tag.tag_id,
+            qw_tag.`name`,
+            qw_tag.corp_id
+        FROM
+            qw_tag
+                LEFT JOIN qw_external_contact qec ON qw_tag.corp_id = qec.corp_id
+                LEFT JOIN qw_user ON qw_user.qw_user_id = qec.user_id
+                LEFT JOIN company_user cu ON qw_user.company_user_id = cu.user_id
+        WHERE
+            cu.user_id = #{userId}
+    </select>
 </mapper>