QwExternalContactMapper.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. package com.fs.qw.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.fs.qw.domain.QwExternalContact;
  4. import com.fs.qw.param.ConversionStatisticsParam;
  5. import com.fs.qw.param.QwCountCustomerParam;
  6. import com.fs.qw.param.QwExternalContactParam;
  7. import com.fs.qw.param.QwExternalContactVOTime;
  8. import com.fs.qw.param.newparam.ExternalContactPageListParam;
  9. import com.fs.qw.result.QwExternalContactByQwResult;
  10. import com.fs.qw.result.QwExternalContactLogVo;
  11. import com.fs.qw.result.QwExternalContactVo;
  12. import com.fs.qw.vo.QwExternalContactFsCrmVO;
  13. import com.fs.qw.vo.QwExternalContactFsUserVO;
  14. import com.fs.qw.vo.QwExternalContactVO;
  15. import com.fs.qw.vo.newvo.ExternalContactDetailsVO;
  16. import com.fs.qw.vo.newvo.ExternalContactListVO;
  17. import com.fs.qw.vo.newvo.ExternalContactNumVO;
  18. import com.fs.qwApi.param.QwExternalContactHParam;
  19. import org.apache.ibatis.annotations.Param;
  20. import org.apache.ibatis.annotations.Select;
  21. import org.apache.ibatis.annotations.Update;
  22. import org.springframework.stereotype.Repository;
  23. import java.util.ArrayList;
  24. import java.util.Arrays;
  25. import java.util.List;
  26. import java.util.Map;
  27. /**
  28. * 企业微信客户Mapper接口
  29. *
  30. * @author fs
  31. * @date 2024-06-20
  32. */
  33. @SuppressWarnings("ALL")
  34. @Repository
  35. public interface QwExternalContactMapper extends BaseMapper<QwExternalContact> {
  36. /**
  37. * 查询企业微信客户
  38. *
  39. * @param id 企业微信客户主键
  40. * @return 企业微信客户
  41. */
  42. public QwExternalContact selectQwExternalContactById(Long id);
  43. @Select("SELECT id,stage_status,fs_user_id from qw_external_contact where id=#{id}")
  44. public QwExternalContact selectQwExternalContactByIdForStageStatus(@Param("id") Long id);
  45. @Select("SELECT\n" +
  46. "\tec.stage_status,\n" +
  47. "\tec.fs_user_id,\n" +
  48. "\tfu.jpush_id,\n" +
  49. "\tfu.login_device \n" +
  50. "FROM\n" +
  51. "\tqw_external_contact ec\n" +
  52. "\tLEFT JOIN fs_user fu ON ec.fs_user_id = fu.user_id \n" +
  53. "WHERE\n" +
  54. "\tid = #{id}")
  55. public QwExternalContactFsUserVO selectQwExternalContactByIdForFsUser(@Param("id") Long id);
  56. @Select("select * from qw_external_contact where fs_user_id=#{id} ")
  57. public List<QwExternalContact> selectQwExternalContactByMiniUserId(Long id);
  58. @Select("select qec.*,cc.user_id as miniUserId from qw_external_contact qec " +
  59. "left join crm_customer cc on qec.customer_id= cc.customer_id " +
  60. "where qec.id=#{id} ")
  61. public QwExternalContactFsCrmVO selectQwExternalContactByIdToCrm(Long id);
  62. /** 根据外部联系人的userid 获取到详细信息 */
  63. @Select("SELECT * FROM qw_external_contact WHERE external_user_id = #{externalUserId} AND corp_id=#{corpId}")
  64. public List<QwExternalContact> selectQwExternalContactByExternalUserId(@Param("externalUserId") String externalUserId,@Param("corpId") String corpId);
  65. public int batchUpdateQwExternalContactStatus(@Param("notInExternalUseridList") List<String> notInExternalUseridList,
  66. @Param("qwUserId") String qwUserId,
  67. @Param("corpId") String corpId);
  68. @Select("SELECT * FROM qw_external_contact WHERE external_user_id = #{externalUserId} AND corp_id=#{corpId} and user_id=#{qwUserId} limit 1")
  69. public QwExternalContact selectQwExternalContactByExternalUserIdAndQwUserId(@Param("externalUserId") String externalUserId,@Param("corpId") String corpId,@Param("qwUserId") String qwUserId);
  70. @Select("<script>" +
  71. "SELECT " +
  72. " COUNT( DISTINCT qec.external_user_id ) AS count " +
  73. " FROM " +
  74. " qw_external_contact qec " +
  75. "<if test='map.selectType ==2 and map.groupChatSelectList.size()!=0 '> " +
  76. "left join qw_group_chat_user qcu ON qec.user_id = qcu.invitor " +
  77. "</if>" +
  78. " WHERE " +
  79. " qec.user_id IN " +
  80. " <foreach collection='map.userIdsSelectList' item='item' index='index' open='(' separator=',' close=')'> #{item} </foreach> " +
  81. " AND qec.corp_id = #{map.corpId} " +
  82. "<if test ='map.selectType ==2 and map.gender!=99 '> " +
  83. "and qec.gender = #{map.gender} " +
  84. "</if> " +
  85. "<if test ='map.selectType ==2 and map.groupChatSelectList.size()!=0 '> " +
  86. " and qcu.chat_id in <foreach collection='map.groupChatSelectList' item='item' index='index' open='(' separator=',' close=')'> #{item} </foreach> " +
  87. "</if> " +
  88. "<if test ='map.selectType ==2 and map.tagsIdsSelectList.size()!=0 '> " +
  89. " and <foreach collection='map.tagsIdsSelectList' item='item' index='index' open='( 1=2 ' separator='' close=')'> or find_in_set( #{item} , REGEXP_REPLACE ( qec.tag_ids, '[\"\\\\[\\\\]]', '' ) ) </foreach> " +
  90. "</if> " +
  91. "<if test ='map.selectType ==2 and map.outTagsIdsSelectList.size()!=0 '> " +
  92. " and <foreach collection='map.outTagsIdsSelectList' item='item' index='index' open='( 1=2 ' separator='' close=')'> or find_in_set( #{item} , REGEXP_REPLACE ( qec.tag_ids, '[\"\\\\[\\\\]]', '' ) ) </foreach> " +
  93. "</if> " +
  94. "<if test ='map.selectType ==2 and map.timeScreenCharge.size()!=0 and map.timeScreenCharge != null and map.timeScreenCharge.size() == 2 '> " +
  95. " and qec.create_time BETWEEN #{map.timeScreenCharge[0]} and #{map.timeScreenCharge[1]}" +
  96. "</if> " +
  97. "</script>")
  98. public int expectQwGroupMsgCountCustomer(@Param("map")QwCountCustomerParam userIdList);
  99. @Select("<script>" +
  100. "SELECT " +
  101. " DISTINCT qec.external_user_id AS externalUserIdS " +
  102. " FROM " +
  103. " qw_external_contact qec " +
  104. "<if test='map.selectType ==2 and map.groupChatSelectList.size()!=0 '> " +
  105. "left join qw_group_chat_user qcu ON qec.user_id = qcu.invitor " +
  106. "</if>" +
  107. " WHERE " +
  108. " qec.user_id IN " +
  109. " <foreach collection='map.userIdsSelectList' item='item' index='index' open='(' separator=',' close=')'> #{item} </foreach> " +
  110. " AND qec.corp_id = #{corpId} " +
  111. "<if test ='map.selectType ==2 and map.gender!=99 '> " +
  112. "and qec.gender = #{map.gender} " +
  113. "</if> " +
  114. "<if test ='map.selectType ==2 and map.groupChatSelectList.size()!=0 '> " +
  115. " and qcu.chat_id in <foreach collection='map.groupChatSelectList' item='item' index='index' open='(' separator=',' close=')'> #{item} </foreach> " +
  116. "</if> " +
  117. "<if test ='map.selectType ==2 and map.tagsIdsSelectList.size()!=0 '> " +
  118. " and <foreach collection='map.tagsIdsSelectList' item='item' index='index' open='( 1=2 ' separator='' close=')'> or find_in_set( #{item} , REGEXP_REPLACE ( qec.tag_ids, '[\"\\\\[\\\\]]', '' ) ) </foreach> " +
  119. "</if> " +
  120. "<if test ='map.selectType ==2 and map.outTagsIdsSelectList.size()!=0 '> " +
  121. " and <foreach collection='map.outTagsIdsSelectList' item='item' index='index' open='( 1=2 ' separator='' close=')'> or not find_in_set( #{item} , REGEXP_REPLACE ( qec.tag_ids, '[\"\\\\[\\\\]]', '' ) ) </foreach> " +
  122. "</if> " +
  123. "<if test ='map.selectType ==2 and map.timeScreenCharge.size()!=0 and map.timeScreenCharge != null and map.timeScreenCharge.size() == 2 '> " +
  124. " and qec.create_time BETWEEN #{map.timeScreenCharge[0]} and #{map.timeScreenCharge[1]}" +
  125. "</if> " +
  126. "</script>")
  127. public ArrayList<String> selectQwGroupMsgExpectCustomerList(@Param("map")QwCountCustomerParam userIdList, @Param("corpId") String corpId);
  128. /**
  129. * 查询企业微信客户列表
  130. *
  131. * @param qwExternalContact 企业微信客户
  132. * @return 企业微信客户集合
  133. */
  134. public List<QwExternalContact> selectQwExternalContactList(QwExternalContact qwExternalContact);
  135. @Select("select external_user_id from qw_external_contact where user_id=#{qwUserId} and corp_id=#{corpId}")
  136. public List<String> selectQwExternalContactListAll(@Param("qwUserId") String qwUserId ,@Param("corpId") String corpId);
  137. @Select("select external_user_id from qw_external_contact where user_id=#{qwUserId} and corp_id=#{corpId} and status!=4")
  138. public List<String> selectQwExternalContactListAllNoDel(@Param("qwUserId") String qwUserId ,@Param("corpId") String corpId);
  139. @Select("select external_user_id from qw_external_contact where user_id=#{qwUserId} and corp_id=#{corpId} and status= 4 ")
  140. public List<String> selectQwExternalContactListAllByStatus(@Param("qwUserId") String qwUserId ,@Param("corpId") String corpId);
  141. /**
  142. * 新增企业微信客户
  143. *
  144. * @param qwExternalContact 企业微信客户
  145. * @return 结果
  146. */
  147. public int insertQwExternalContact(QwExternalContact qwExternalContact);
  148. /**
  149. * 修改企业微信客户
  150. *
  151. * @param qwExternalContact 企业微信客户
  152. * @return 结果
  153. */
  154. public int updateQwExternalContact(QwExternalContact qwExternalContact);
  155. public int batchUpdateQwExternalContact(List<QwExternalContact> qwExternalContact);
  156. @Update("update qw_external_contact set qw_user_id=#{qwUserId} , company_user_id =#{companyUserId} " +
  157. "where user_id=#{userId} and corp_id=#{corpId} ")
  158. public int updateQwExternalContactByQwUserId(QwExternalContact qwExternalContact);
  159. /**
  160. * 修改CRM客户
  161. */
  162. @Update("update qw_external_contact set customer_id=#{customerId} where external_user_id=#{externalUserId} and corp_id=#{corpId}")
  163. public int updateQwExternalContactByExternalUserId(QwExternalContact qwExternalContact);
  164. @Update("update qw_external_contact set fs_user_id=null where id =#{id}")
  165. public int updateQwExternalContactUnBindUserId(@Param("id") Long id);
  166. /**
  167. * 删除企业微信客户
  168. *
  169. * @param id 企业微信客户主键
  170. * @return 结果
  171. */
  172. public int deleteQwExternalContactById(Long id);
  173. /**
  174. * 批量删除企业微信客户
  175. *
  176. * @param ids 需要删除的数据主键集合
  177. * @return 结果
  178. */
  179. public int deleteQwExternalContactByIds(Long[] ids);
  180. @Select({"<script> " +
  181. "select ec.*,qu.qw_user_name,qd.dept_name as departmentName from qw_external_contact ec " +
  182. "left join qw_user qu on ec.user_id=qu.qw_user_id and qu.corp_id=ec.corp_id " +
  183. "left join qw_dept qd on qd.dept_id=qu.department and qd.corp_id=qu.corp_id " +
  184. "<where> \n" +
  185. " <if test=\"userId != null and userId != ''\"> and ec.user_id like concat( #{userId}, '%') </if>\n" +
  186. " <if test=\"qwUserName != null and qwUserName != ''\"> and qu.qw_user_name like concat( #{qwUserName}, '%') </if>\n" +
  187. " <if test=\"externalUserId != null and externalUserId != ''\"> and ec.external_user_id = #{externalUserId}</if>\n" +
  188. " <if test=\"name != null and name != ''\"> and ec.name like concat( #{name}, '%')</if>\n" +
  189. " <if test=\"type != null \"> and ec.type = #{type}</if>\n" +
  190. " <if test=\"gender != null \"> and ec.gender = #{gender}</if>\n" +
  191. " <if test=\"description != null and description != ''\"> and ec.description = #{description}</if>\n" +
  192. "<if test ='tagIds!=null and tagIds.size()!=0 '> " +
  193. " and <foreach collection='tagIds' item='item' index='index' open='( 1=2 ' separator='' close=')'> or find_in_set( #{item} , REGEXP_REPLACE ( ec.tag_ids, '[\"\\\\[\\\\]]', '' ) ) </foreach> " +
  194. "</if> " +
  195. " <if test=\"remarkMobiles != null and remarkMobiles != ''\"> and ec.remark_mobiles like concat( #{remarkMobiles}, '%')</if>\n" +
  196. " <if test=\"remark != null and remark != ''\"> and ec.remark like concat('%', #{remark}, '%')</if>\n" +
  197. " <if test=\"remarkCorpName != null and remarkCorpName != ''\"> and ec.remark_corp_name like concat('%', #{remarkCorpName}, '%')</if>\n" +
  198. " <if test=\"addWay != null \"> and ec.add_way = #{addWay}</if>\n" +
  199. " <if test=\"operUserid != null and operUserid != ''\"> and ec.oper_userid = #{operUserid}</if>\n" +
  200. " <if test=\"corpId != null and corpId != ''\"> and ec.corp_id = #{corpId}</if>\n" +
  201. " <if test=\"companyId != null \"> and qu.company_id = #{companyId}</if>\n" +
  202. " <if test=\"companyUserId != null \"> and ec.company_user_id = #{companyUserId}</if>\n" +
  203. " <if test=\"customerId != null \"> and ec.customer_id = #{customerId}</if>\n" +
  204. " <if test=\"status != null \"> and ec.status = #{status}</if>\n" +
  205. " <if test=\"stageStatus != null \"> and ec.stage_status = #{stageStatus}</if>\n" +
  206. " <if test=\"transferStatus != null \"> and ec.transfer_status = #{transferStatus}</if>\n" +
  207. " <if test=\"qwUserId != null \"> and ec.qw_user_id = #{qwUserId}</if>\n" +
  208. " <if test=\"level != null \"> and ec.level = #{level}</if>\n" +
  209. " <if test=\"levelType != null \"> and ec.level_type = #{levelType}</if>\n" +
  210. " <if test=\"isBind == 'isBind' \"> and ec.customer_id is not null </if> \n" +
  211. " <if test=\"isBind == 'noBind' \"> and ec.customer_id is null </if> \n" +
  212. " <if test=\"isBindMini == 'isBindMini' \"> and ec.fs_user_id is not null </if> \n" +
  213. " <if test=\"isBindMini == 'noBindMini' \"> and ec.fs_user_id is null </if> \n" +
  214. " <if test=\"lossTime != null \"> and DATE(ec.loss_time) = DATE(#{lossTime})</if>\n" +
  215. " <if test=\"createTime != null \">and DATE(ec.create_time) = DATE(#{createTime})</if>\n" +
  216. " <if test=\"delTime != null \"> and DATE(ec.del_time) = DATE(#{delTime})</if>\n" +
  217. " <if test=\"sTime != null \"> and DATE(ec.create_time) &gt;= DATE(#{sTime})</if>\n" +
  218. " <if test=\"eTime != null \"> and DATE(ec.create_time) &lt;= DATE(#{eTime})</if>\n" +
  219. " </where>"+
  220. "order by ec.id desc"+
  221. "</script>"})
  222. List<QwExternalContactVO> selectQwExternalContactListVO(QwExternalContactParam qwExternalContact);
  223. List<QwExternalContactVOTime> selectQwExternalContactListVOByIds(@Param("ids") List<Long> ids);
  224. @Select("select * from qw_external_contact where external_user_id=#{externalUserid} and user_id=#{userId} and corp_id=#{corpId} limit 1")
  225. QwExternalContact selectQwExternalContactUserIdAndExternalIdAndCompanyId(@Param("externalUserid")String externalUserid,@Param("userId") String userId,@Param("corpId") String corpId);
  226. @Select("select id,user_id,external_user_id,name,avatar,fs_user_id,remark,description,qw_user_id " +
  227. "from qw_external_contact " +
  228. "where external_user_id=#{externalUserid} " +
  229. "and user_id=#{userId} " +
  230. "and corp_id=#{corpId} limit 1")
  231. QwExternalContact selectQwExternalByExternalIdAndCompanyIdToIdAndFs(@Param("externalUserid")String externalUserid,@Param("userId") String userId,@Param("corpId") String corpId);
  232. /**
  233. * 修改 状态
  234. */
  235. @Update("update qw_external_contact set status=#{map.status} where user_id=#{map.userId} and corp_id= #{map.corpId} and external_user_id=#{map.externalUserId} ")
  236. public int updateQwExternalContactByUseridBlock(@Param("map") QwExternalContact qwExternalContact);
  237. @Update("update qw_external_contact set status=#{map.status},transfer_status=#{map.transferStatus} " +
  238. "where user_id=#{map.userId} and corp_id= #{map.corpId} and external_user_id=#{map.externalUserId} ")
  239. public int updateQwExternalContactByUseridTransfer(@Param("map") QwExternalContact qwExternalContact);
  240. @Select("select q.id,q.external_user_id,q.user_id from qw_external_contact q " +
  241. "left join fs_user u on u.user_id = q.fs_user_id where u.user_id = #{userId} limit 1 ")
  242. QwExternalContact selectQwExternalContactByUserId(@Param("userId")Long userId);
  243. @Select("select external_user_id from qw_external_contact q " +
  244. "left join crm_customer c on c.customer_id = q.customer_id " +
  245. "left join fs_user u on u.user_id = c.user_id where u.user_id = #{userId} ")
  246. String selectExternalUserIdByUserId(@Param("userId")Long userId);
  247. @Select("select * from qw_external_contact where fs_user_id = #{userId} ")
  248. QwExternalContact selectExternalByFsUserId(@Param("userId")Long userId);
  249. @Update("UPDATE qw_external_contact SET company_id = #{companyId},company_user_id=#{companyUserId} WHERE corp_id = #{corpId} and user_id =#{qwUserId}")
  250. void updateBindUserByQwUser(@Param("corpId")String corpId, @Param("qwUserId")String qwUserId, @Param("companyId")Long companyId, @Param("companyUserId")Long companyUserId);
  251. @Select("SELECT * FROM qw_external_contact " +
  252. " WHERE user_id = #{map.userId} " +
  253. "AND external_user_id = #{map.externalUserId} " +
  254. "AND corp_id =#{map.corpId} " +
  255. "limit 1 ")
  256. QwExternalContact getQwExternalContactDetails(@Param("map")QwExternalContactHParam param);
  257. // @Select("SELECT *\n" +
  258. // "FROM qw_external_contact\n" +
  259. // "WHERE user_id IN ('LiuQin_1')\n" +
  260. // " AND DATE(create_time) = '2025-01-04'\n" +
  261. // " AND `status` = 0\n" +
  262. // " AND transfer_status = 0 \n" +
  263. // "\tAnd type=1\n" +
  264. // "\tand corp_id='ww5a88c4f879f204c5' ")
  265. // List<QwExternalContact> getQwExternalContactDetailsText();
  266. @Select("SELECT id FROM qw_external_contact " +
  267. " WHERE user_id = #{map.userId} " +
  268. "AND external_user_id = #{map.externalUserId} " +
  269. "AND corp_id =#{map.corpId} limit 1 ")
  270. Long getQwExternalContactId(@Param("map")QwExternalContactHParam param);
  271. @Select("SELECT \n" +
  272. " ANY_VALUE(qec.external_user_id) AS external_user_id,\n" +
  273. " qec.name\n" +
  274. "FROM qw_external_contact qec\n" +
  275. "JOIN qw_user qu ON qec.qw_user_id = qu.id\n" +
  276. "WHERE \n" +
  277. " qu.app_key = #{appKey}\n" +
  278. " AND qec.type = 1\n" +
  279. " AND qec.status = 0\n" +
  280. " AND qec.name REGEXP '^[一-龥]+$'\n" +
  281. "GROUP BY qec.name\n" +
  282. "HAVING COUNT(*) = 1\n" +
  283. "ORDER BY LENGTH(qec.name) DESC\n" +
  284. "LIMIT 1;\n")
  285. QwExternalContactByQwResult getExternalContactByAppKey(@Param("appKey") String appKey);
  286. List<QwExternalContactVo> selectAllQwJoinAdClickLog(@Param("type") Integer type);
  287. List<QwExternalContactLogVo> selectAllFormAd(ConversionStatisticsParam param);
  288. @Select("select * from qw_external_contact where date(create_time) ='2025-02-10' and (`status` =0 or `status` =3) and qw_user_id=#{id} ")
  289. List<QwExternalContact> selectExternalUserIdByQwUserId(Long id);
  290. @Select("select id from qw_external_contact where qw_user_id=#{id} ")
  291. List<Long> selectExternalUserByQwUserId(Long id);
  292. @Select("select id,external_user_id,tag_ids from qw_external_contact where qw_user_id=#{id} ")
  293. List<QwExternalContact> selectExternalUserIdsByQwUserId(Long id);
  294. @Select("select id,first_time,qw_user_id,create_time from qw_external_contact where id=#{id} ")
  295. QwExternalContact selectQwExternalContactTimeById(Long id);
  296. List<ExternalContactListVO> selectExternalContactPageList(ExternalContactPageListParam param);
  297. List<ExternalContactNumVO> getContactNumber(@Param("userId") Long userId);
  298. ExternalContactDetailsVO getCountAnswer (@Param("userId") Long userId, @Param("contactId") Long contactId, @Param("dateTag") String dateTag);
  299. ExternalContactDetailsVO getCountRedPacket (@Param("userId") Long userId, @Param("contactId") Long contactId, @Param("dateTag") String dateTag);
  300. List<QwExternalContact> selectContactByIds(@Param("ids") List<String> ids);
  301. int updateContactByIds(@Param("ids") List<String> ids,@Param("status") Integer status);
  302. int batchUpdateContactByIds(@Param("list") List<Map<Long, Integer>> list);
  303. List<QwExternalContactVOTime> selectQwExternalContactListVOByUserIds(@Param("ids") List<String> ids);
  304. /**
  305. * 查询外部联系人是否宠粉
  306. * @param id
  307. * @return
  308. */
  309. @Select("select is_repeat from qw_external_contact where user_id=${userId} limit 1")
  310. Integer selectQwIsRepeat(@Param("userId") Long id);
  311. }