Forráskód Böngészése

用户行为优化1.0.5

huangzhiguo 1 éve
szülő
commit
b3372e285f

+ 15 - 0
src/main/java/com/caimei365/tools/mapper/MessageMapper.java

@@ -34,4 +34,19 @@ public interface MessageMapper {
      * @return
      */
     List<ClubPo> getUnActiveClub(@Param("serviceProviderId") Integer serviceProviderId);
+
+    /**
+     * 该天到现在填写了咨询记录的机构
+     * @param accessDate
+     * @return
+     */
+    List<Integer> getRemarkClub(@Param("accessDate") String accessDate);
+
+    /**
+     * 协销当天活跃用户
+     * @param accessDate
+     * @param spId
+     * @return
+     */
+    List<ClubPo> getBehaviorActiveInfo(@Param("accessDate") String accessDate, @Param("spId") Integer spId);
 }

+ 4 - 1
src/main/java/com/caimei365/tools/model/po/ClubPo.java

@@ -153,6 +153,9 @@ public class ClubPo implements Serializable
 
     /** $column.columnComment */
     private Integer empnum;
-
+    /**
+     * 访问时间
+     */
+    private String behaviorTime;
 }
 

+ 8 - 1
src/main/java/com/caimei365/tools/service/MessageService.java

@@ -7,6 +7,13 @@ package com.caimei365.tools.service;
  * @date : 2023/11/2
  */
 public interface MessageService {
-
+    /**
+     * 不活跃机构发送模板消息
+     */
     void UnActiveMessage();
+
+    /**
+     * 活跃机构发送模板消息
+     */
+    void getBehaviorActiveInfo();
 }

+ 88 - 5
src/main/java/com/caimei365/tools/service/impl/MessageServiceImpl.java

@@ -13,10 +13,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * Description
@@ -39,6 +36,9 @@ public class MessageServiceImpl implements MessageService {
 
     @Resource private MessageMapper messageMapper;
 
+    /**
+     * 协销不活跃机构
+     */
     @Override
     public void UnActiveMessage() {
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -81,7 +81,90 @@ public class MessageServiceImpl implements MessageService {
                 JSONObject miniProgram = new JSONObject();
                 miniProgram.put("appid", miniAppId);
                 // 跳转链接
-                 miniProgram.put("pagepath", "/pages/seller/club/club-inactive-list?serviceProviderId="+serviceprovider.getServiceProviderId());
+                 miniProgram.put("pagepath", "/pages/seller/club/club-inactive-list?type=1&serviceProviderId="+serviceprovider.getServiceProviderId());
+                // 获取openId
+                String openid = messageMapper.getOpenidListByPermission(serviceprovider.getUnionId());
+
+                JSONObject json = new JSONObject(new LinkedHashMap());
+                json.put("touser", openid);
+                json.put("template_id", "xvOy9dwbCK-GeCUBnNV6XLzw_afavHBtT5wKgH_ZIpU");
+                json.put("url", "https://www.caimei365.com/");
+                json.put("miniprogram", miniProgram);
+                json.put("data", data);
+                // json 字符串
+                String jsonString = json.toJSONString();
+                log.info(">>>>>>>>推送微信模板消息:" + jsonString);
+                try {
+                    String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + getAccessToken();
+                    // 发送请求
+                    String result = RequestUtil.httpRequest(requestUrl, "POST", jsonString);
+                    log.info(">>>>>>>>推送结果:" + result);
+                } catch (Exception e) {
+                    log.info("推送微信模板消息失败:" + e);
+                }
+            }
+        }
+    }
+
+    /**
+     * 活跃机构发送模板消息
+     */
+    @Override
+    public void getBehaviorActiveInfo() {
+        Date date = new Date();
+        // 获取三天前日期
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.DAY_OF_MONTH, -3);
+        Date time = calendar.getTime();
+        String format = dateFormat.format(time);
+        // 协销信息
+        List<ServiceproviderPo> serviceInfo = messageMapper.getServiceInfo();
+        // 三天前活跃且填写咨询记录的机构
+        String newFormat = format + " 00:00:00";
+        List<Integer> remarkClub = messageMapper.getRemarkClub(newFormat);
+        for (ServiceproviderPo serviceprovider: serviceInfo) {
+            // 协销三天前活跃机构
+            List<ClubPo> activeClub = messageMapper.getBehaviorActiveInfo(format, serviceprovider.getServiceProviderId());
+            String clubName = "";
+            if (null != activeClub && activeClub.size() > 0) {
+                for (ClubPo club : activeClub) {
+                    //三天前活跃,但是这三天没有填写过咨询记录
+                    if (!remarkClub.contains(Integer.parseInt(club.getClubID()))) {
+                        if (StringUtils.isNotBlank(club.getName())) {
+                            clubName += club.getName() + "  ";
+                        } else if (StringUtils.isNotBlank(club.getLinkMan())) {
+                            clubName += club.getLinkMan() + "  ";
+                        }
+                    }
+                }
+                if (clubName.length() > 10) {
+                    String substring = clubName.substring(0, 9);
+                    clubName = substring + "等" + activeClub.size() + "家机构";
+                }
+                JSONObject first = new JSONObject();
+                first.put("value", "客户咨询跟进提醒");
+                JSONObject keyword1 = new JSONObject();
+                keyword1.put("value", "活跃客户咨询记录填写提醒");
+                JSONObject keyword2 = new JSONObject();
+                keyword2.put("value", clubName);
+                JSONObject keyword3 = new JSONObject();
+                keyword3.put("value", StringUtils.isNotBlank(activeClub.get(0).getBehaviorTime()) ? activeClub.get(0).getBehaviorTime() : "");
+                JSONObject remark = new JSONObject();
+                remark.put("value", "点击查看详情,查看咨询记录详情。");
+
+                JSONObject data = new JSONObject();
+                data.put("first", first);
+                data.put("keyword1", keyword1);
+                data.put("keyword2", keyword2);
+                data.put("keyword3", keyword3);
+                data.put("remark", remark);
+
+                JSONObject miniProgram = new JSONObject();
+                miniProgram.put("appid", miniAppId);
+                // 跳转链接
+                miniProgram.put("pagepath", "/pages/seller/club/club-inactive-list?type=1&serviceProviderId="+serviceprovider.getServiceProviderId());
                 // 获取openId
                 String openid = messageMapper.getOpenidListByPermission(serviceprovider.getUnionId());
 

+ 8 - 0
src/main/java/com/caimei365/tools/task/CmOrganValueSystemTask.java

@@ -98,6 +98,14 @@ public class CmOrganValueSystemTask {
         messageService.UnActiveMessage();
     }
 
+    /**
+     * 每天10点 给协销微信模板提醒 -- 不活跃机构
+     */
+    @Scheduled(cron = "0 0 15 * * ?")
+    public void getBehaviorActiveMessage() {
+        messageService.getBehaviorActiveInfo();
+    }
+
     /**
      * 每天获取前一天机构需求标签
      */

+ 36 - 0
src/main/resources/mapper/MessageMapper.xml

@@ -19,4 +19,40 @@
           AND ser.serviceProviderID = #{serviceProviderId}
         GROUP BY coas.userID
     </select>
+
+    <select id="getRemarkClub" resultType="java.lang.Integer">
+        SELECT
+        ccr.clubId
+        FROM cm_club_remarks ccr
+        LEFT JOIN club c ON c.clubId = ccr.clubId
+        WHERE ccr.addTime <![CDATA[ >= ]]> #{accessDate} AND ccr.addTime <![CDATA[ <= ]]> NOW()
+        UNION
+        SELECT
+        cvr.clubId
+        FROM cm_visitor_remarks cvr
+        LEFT JOIN club c ON c.clubId = cvr.clubId
+        WHERE cvr.clubId != '' AND cvr.clubId IS NOT NULL
+        AND cvr.addTime <![CDATA[ >= ]]> #{accessDate} AND cvr.addTime <![CDATA[ <= ]]> NOW()
+    </select>
+
+    <select id="getBehaviorActiveInfo" resultType="com.caimei365.tools.model.po.ClubPo">
+        SELECT
+            cbr.userId,
+            MIN(cbr.accessTime) as behaviorTime,
+            coas.activeState,
+            c.name AS name,
+            c.linkMan AS linkMan
+        FROM cm_behavior_record cbr
+                 LEFT JOIN cm_organ_active_system coas ON coas.userId = cbr.userId
+                 LEFT JOIN club c ON c.userId = cbr.userId
+        WHERE cbr.userId != 0
+          AND cbr.accessDate = #{accessDate}
+          AND coas.addTime LIKE concat('%', #{accessDate}, '%')
+          AND coas.activeStatus = 0
+          AND c.spId = #{spId}
+        GROUP BY cbr.userId
+        order by MIN(cbr.accessTime) asc
+    </select>
+
+
 </mapper>