Sfoglia il codice sorgente

用户行为优化

huangzhiguo 1 anno fa
parent
commit
72d45cb165
22 ha cambiato i file con 941 aggiunte e 143 eliminazioni
  1. 30 4
      src/main/java/com/caimei365/tools/controller/BaseApi.java
  2. 35 0
      src/main/java/com/caimei365/tools/listener/TouristLine.java
  3. 51 3
      src/main/java/com/caimei365/tools/mapper/CmBehaviorRecordMapper.java
  4. 19 0
      src/main/java/com/caimei365/tools/mapper/CmBehaviorTouristInfoDao.java
  5. 46 2
      src/main/java/com/caimei365/tools/mapper/CmOrganValueSystemMapper.java
  6. 37 0
      src/main/java/com/caimei365/tools/mapper/MessageMapper.java
  7. 8 0
      src/main/java/com/caimei365/tools/model/po/CmBehaviorRecordPo.java
  8. 28 0
      src/main/java/com/caimei365/tools/model/po/CmBehaviorTouristInfoPo.java
  9. 42 9
      src/main/java/com/caimei365/tools/model/po/CmOrganValueSystemPo.java
  10. 82 0
      src/main/java/com/caimei365/tools/model/po/ServiceproviderPo.java
  11. 45 0
      src/main/java/com/caimei365/tools/model/po/UserOrganPo.java
  12. 8 1
      src/main/java/com/caimei365/tools/service/CmOrganValueSystemService.java
  13. 12 0
      src/main/java/com/caimei365/tools/service/MessageService.java
  14. 71 15
      src/main/java/com/caimei365/tools/service/impl/CmBehaviorRecordServiceImpl.java
  15. 103 76
      src/main/java/com/caimei365/tools/service/impl/CmOrganValueSystemServiceImpl.java
  16. 125 0
      src/main/java/com/caimei365/tools/service/impl/MessageServiceImpl.java
  17. 22 3
      src/main/java/com/caimei365/tools/task/CmOrganValueSystemTask.java
  18. 57 11
      src/main/resources/mapper/CmBehaviorRecordMapper.xml
  19. 10 0
      src/main/resources/mapper/CmBehaviorTouristInfoDao.xml
  20. 88 18
      src/main/resources/mapper/CmOrganValueSystemMapper.xml
  21. 1 1
      src/main/resources/mapper/MessageCenter.xml
  22. 21 0
      src/main/resources/mapper/MessageMapper.xml

+ 30 - 4
src/main/java/com/caimei365/tools/controller/BaseApi.java

@@ -39,6 +39,8 @@ public class BaseApi {
     @Resource
     private WeChatService weChatService;
 
+    @Resource private MessageService messageService;
+
     @Value(value = "${swagger.enabled}")
     private Boolean swaggerEnabled;
 
@@ -57,14 +59,38 @@ public class BaseApi {
     }
 
     /**
-     * 临时接口
+     * 用户活跃
      */
-    /*@GetMapping("/record/update")
+    @GetMapping("/record/update")
     public void svipCoupon() throws IOException {
 //        cmVipCouponService.openCoupon();
 //        cmBehaviorRecordService.updateClubAddress(startId, endId);
-        cmBehaviorRecordService.insertTodayData();
-    }*/
+        cmOrganValueSystemService.insertOrgan();
+    }
+
+    /**
+     * 用户价值
+     */
+    @GetMapping("/record/getData")
+    public void getData(){
+        cmOrganValueSystemService.insertcustomer();
+    }
+
+    /**
+     * 合并ip
+     */
+    @GetMapping("/record/getBehavior")
+    public void getBehavior(){
+        cmBehaviorRecordService.updateBehaviorUser();
+    }
+
+    /**
+     * 协销信息提醒
+     */
+    @GetMapping("/record/message")
+    public void getMessage(){
+        messageService.UnActiveMessage();
+    }
 
     /**
      * 临时接口

+ 35 - 0
src/main/java/com/caimei365/tools/listener/TouristLine.java

@@ -0,0 +1,35 @@
+package com.caimei365.tools.listener;
+
+import com.caimei365.tools.mapper.CmBehaviorTouristInfoDao;
+import com.caimei365.tools.model.po.CmBehaviorTouristInfoPo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
+import org.apache.rocketmq.spring.core.RocketMQListener;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/11/1
+ */
+@Slf4j
+@Component
+@RocketMQMessageListener(
+        topic = "Tourist",
+        consumerGroup = "tourist_group"
+)
+public class TouristLine implements RocketMQListener<String> {
+
+    @Resource private CmBehaviorTouristInfoDao cmBehaviorTouristInfoDao;
+
+    @Override
+    public void onMessage(String tourist) {
+        log.info("收到消息===Tourist" + tourist);
+        CmBehaviorTouristInfoPo touristInfo = new CmBehaviorTouristInfoPo();
+        touristInfo.setTouristId(tourist);
+        cmBehaviorTouristInfoDao.insertTourist(touristInfo);
+    }
+}

+ 51 - 3
src/main/java/com/caimei365/tools/mapper/CmBehaviorRecordMapper.java

@@ -15,6 +15,8 @@ import java.util.List;
 @Mapper
 public interface CmBehaviorRecordMapper {
 
+    String getShopName(@Param("shopId") Integer shopId);
+
     /**
      * 用户行为记录
      * @param cmBehaviorRecordPo
@@ -99,14 +101,60 @@ public interface CmBehaviorRecordMapper {
      */
     void insertRelation(CmVipCouponRelation cmVipCouponRelation);
 
-    List<CmBehaviorRecordPo> countNum(@Param("accessDate") String accessDate);
+    /**
+     * 小程序 openId
+     * @param accessDate
+     * @return
+     */
+    List<String> getRecodeOpenId(@Param("accessDate") String accessDate);
 
-    CmBehaviorRecordPo userIdAcc(@Param("IP") String IP, @Param("accessDate") String accessDate);
+    /**
+     * 查询openId 对应的用户
+     * @param accessDate
+     * @param openIdList
+     * @return
+     */
+    List<CmBehaviorRecordPo> getRecordOpenIdInfo(@Param("accessDate") String accessDate, @Param("openIdList") List<String> openIdList);
 
-    List<CmBehaviorRecordPo> selBehaviorList(@Param("IP") String IP, @Param("accessDate") String accessDate);
+    /**
+     * 游客id
+     * @param accessDate
+     * @return
+     */
+    List<String> getRecodeTouristId(@Param("accessDate") String accessDate);
 
+    /**
+     * 游客对应用户信息
+     * @param accessDate
+     * @param touristIds
+     * @return
+     */
+    List<CmBehaviorTouristInfoPo> getTouristInfo(@Param("accessDate") String accessDate, @Param("touristIds") List<String> touristIds);
+
+    /**
+     * 获取游客id对应的ip
+     * @param accessDate
+     * @param touristId
+     * @return
+     */
+    String getTouristIdByIp(@Param("accessDate") String accessDate, @Param("touristId") String touristId);
+    /**
+     * 修改数据
+     * @param cmBehaviorRecordPo
+     */
     void updateBehavior(CmBehaviorRecordPo cmBehaviorRecordPo);
 
+    /**
+     * 根据游客Id修改用户浏览信息
+     * @param cmBehaviorRecordPo
+     */
+    void updateBehaviorByTouristId(CmBehaviorRecordPo cmBehaviorRecordPo);
+
+    /**
+     * 用户昨日数据
+     * @param accessDate
+     * @return
+     */
     List<CmBehaviorRecordPo> selYesterdayList(@Param("accessDate") String accessDate);
 
     /**

+ 19 - 0
src/main/java/com/caimei365/tools/mapper/CmBehaviorTouristInfoDao.java

@@ -0,0 +1,19 @@
+package com.caimei365.tools.mapper;
+
+import com.caimei365.tools.model.po.CmBehaviorTouristInfoPo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/11/6
+ */
+@Mapper
+public interface CmBehaviorTouristInfoDao {
+    /**
+     * 添加游客信息
+     * @param touristInfo
+     */
+    void insertTourist(CmBehaviorTouristInfoPo touristInfo);
+}

+ 46 - 2
src/main/java/com/caimei365/tools/mapper/CmOrganValueSystemMapper.java

@@ -1,6 +1,8 @@
 package com.caimei365.tools.mapper;
 
 import com.caimei365.tools.model.po.CmOrganValueSystemPo;
+import com.caimei365.tools.model.po.CmUserPo;
+import com.caimei365.tools.model.po.UserOrganPo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -56,10 +58,46 @@ public interface CmOrganValueSystemMapper {
     List<Integer> silent();
 
     /**
-     * 用户价值
+     * 已添加用户活跃的的机构
      * @return
      */
-    List<CmOrganValueSystemPo> customerValue();
+    List<CmOrganValueSystemPo> getOrganUserId();
+
+    /**
+     * 所有的机构
+     * @return
+     */
+    List<CmUserPo> getClubUserId();
+
+    /**
+     * 机构登录时间
+     * @return
+     */
+    List<UserOrganPo> getClubLoginTime();
+
+    /**
+     * 机构咨询记录数
+     * @return
+     */
+    List<UserOrganPo> getClubRemarks();
+
+    /**
+     * 机构半年内子订单数
+     * @return
+     */
+    List<UserOrganPo> getClubShopOrder();
+
+    /**
+     * 机构一年内子订单数、需支付金额
+     * @return
+     */
+    UserOrganPo getUserAmount(@Param("userId") Integer userId);
+
+    /**
+     * 用户访问数据
+     * @return
+     */
+   List<UserOrganPo> getBehaviorNumber(@Param("userId") Integer userId);
 
     /**
      * 修改旧数据
@@ -70,4 +108,10 @@ public interface CmOrganValueSystemMapper {
      * @param organList
      */
     void organBatch(CmOrganValueSystemPo organList);
+
+    /**
+     * 修改用户活跃状态
+     * @param organList
+     */
+    void updateOrganBatch(CmOrganValueSystemPo organList);
 }

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

@@ -0,0 +1,37 @@
+package com.caimei365.tools.mapper;
+
+import com.caimei365.tools.model.po.ClubPo;
+import com.caimei365.tools.model.po.ServiceproviderPo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/11/2
+ */
+@Mapper
+public interface MessageMapper {
+    /**
+     * 协销信息
+     * @return
+     */
+    List<ServiceproviderPo> getServiceInfo();
+
+    /**
+     * 获取openId
+     * @param unionId
+     * @return
+     */
+    String getOpenidListByPermission(String unionId);
+
+    /**
+     * 协销下不活跃机构
+     * @param serviceProviderId
+     * @return
+     */
+    List<ClubPo> getUnActiveClub(@Param("serviceProviderId") Integer serviceProviderId);
+}

+ 8 - 0
src/main/java/com/caimei365/tools/model/po/CmBehaviorRecordPo.java

@@ -106,6 +106,14 @@ public class CmBehaviorRecordPo {
      * 删除标记 0否 其余是
      */
     private String delFlag;
+    /**
+     * 游客编号
+     */
+    private String touristId;
+    /**
+     * 小程序openId
+     */
+    private String openId;
     /**
      * 统计数
      */

+ 28 - 0
src/main/java/com/caimei365/tools/model/po/CmBehaviorTouristInfoPo.java

@@ -0,0 +1,28 @@
+package com.caimei365.tools.model.po;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/11/1
+ */
+@Data
+public class CmBehaviorTouristInfoPo {
+    private Integer id;
+    /**
+     * 用户Id
+     */
+    private Integer userId;
+    /**
+     * 游客编号
+     */
+    private String touristId;
+    /**
+     * 添加时间
+     */
+    private Date addTime;
+}

+ 42 - 9
src/main/java/com/caimei365/tools/model/po/CmOrganValueSystemPo.java

@@ -12,14 +12,47 @@ import java.util.Date;
  */
 @Data
 public class CmOrganValueSystemPo {
-    private Integer organID;
-    private Integer userID; // 用户ID
-    private String activeState;    //活跃状态
-    private String customerValue;  //客户价值
-    private Integer stage;  //阶段:0本阶段 1上阶段 2其他阶段
-    private Integer delType;    //是否启用:0禁用状态,1启用状态(本阶段启用,其他阶段禁用)
 
-    private Double payableAmount;   //交易总金额
-    private Double number;  // 交易次数
-    private Integer orderTime;   //最近交易时间
+    private Integer organId;
+    /**
+     * // 用户ID
+     */
+    private Integer userId;
+    /**
+     * 活跃状态
+     */
+    private String activeState;
+    /**
+     * 客户价值
+     */
+    private String customerValue;
+    /**
+     * 活跃状态 0:活跃、1:不活跃
+     */
+    private Integer activeStatus;
+    /**
+     * 客户价值 0:高价值客户、1:一般价值客户、2:潜在价值客户、3:低价值客户
+     */
+    private Integer customerStatus;
+    /**
+     * 阶段:0本阶段 1上阶段 2其他阶段
+     */
+    private Integer stage;
+    /**
+     * 是否启用:0禁用状态,1启用状态(本阶段启用,其他阶段禁用)
+     */
+    private Integer delType;
+    /**
+     * 交易总金额
+     */
+
+    private Double payableAmount;
+    /**
+     * 交易次数
+     */
+    private Double number;
+    /**
+     * 最近交易时间
+     */
+    private Integer orderTime;
 }

+ 82 - 0
src/main/java/com/caimei365/tools/model/po/ServiceproviderPo.java

@@ -0,0 +1,82 @@
+package com.caimei365.tools.model.po;
+
+import lombok.Data;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/11/2
+ */
+@Data
+public class ServiceproviderPo {
+    private Integer serviceProviderId;
+    /**
+     * 对应的userId
+     */
+    private Integer userId;
+    /**
+     * 组织Id 采美组织默认为0,具体对应cm_mall_organize表ID
+     */
+    private Integer organizeId;
+    /**
+     * 小程序openid
+     */
+    private String openid;
+    /**
+     * 微信unionId
+     */
+    private String unionId;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 联系人
+     */
+    private String linkMan;
+    /**
+     * 联系手机
+     */
+    private String contractMobile;
+    /**
+     * 联系邮箱
+     */
+    private String contractEmail;
+    /**
+     * 联系人 1 职务
+     */
+    private String duty;
+    /**
+     * 审核状态
+     */
+    private String auditStatus;
+    /**
+     * 审核时间
+     */
+    private String auditTime;
+    /**
+     * 审核信息
+     */
+    private String auditNote;
+    /**
+     * 是否可用 1可用
+     */
+    private String validFlag;
+    /**
+     * 创客状态,见表c_serviceproviderstatus或枚举ServiceProviderStatus
+     */
+    private Integer status;
+    /**
+     * 创建时间
+     */
+    private String addTime;
+    /**
+     * 创客经理Id
+     */
+    private Integer mainServiceProviderID;
+    /**
+     * 协销二维码
+     */
+    private String qrCode;
+}

+ 45 - 0
src/main/java/com/caimei365/tools/model/po/UserOrganPo.java

@@ -0,0 +1,45 @@
+package com.caimei365.tools.model.po;
+
+import lombok.Data;
+
+/**
+ * Description
+ *
+ * @author : hzg
+ * @date : 2023/11/7
+ */
+@Data
+public class UserOrganPo {
+    /**
+     * 用户Id
+     */
+    private Integer userId;
+    /**
+     * 机构id
+     */
+    private Integer clubId;
+    /**
+     * 用户登录时间
+     */
+    private String loginTime;
+    /**
+     * 咨询记录数
+     */
+    private Integer number;
+    /**
+     * 沟通情况 0 已沟通 1联系不上
+     */
+    private Integer situation;
+    /**
+     * 用户子订单数
+     */
+    private Integer shopOrderNumber;
+    /**
+     * 用户子订单应支付金额
+     */
+    private Double amount;
+    /**
+     * 访问次数
+     */
+    private Integer recordNumber;
+}

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

@@ -7,6 +7,13 @@ package com.caimei365.tools.service;
  * @date : 2022/10/24
  */
 public interface CmOrganValueSystemService {
-
+    /**
+     * 用户活跃状态
+     */
     void insertOrgan();
+
+    /**
+     * 用户价值
+     */
+    void insertcustomer();
 }

+ 12 - 0
src/main/java/com/caimei365/tools/service/MessageService.java

@@ -0,0 +1,12 @@
+package com.caimei365.tools.service;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/11/2
+ */
+public interface MessageService {
+
+    void UnActiveMessage();
+}

+ 71 - 15
src/main/java/com/caimei365/tools/service/impl/CmBehaviorRecordServiceImpl.java

@@ -149,6 +149,15 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
                             }
                         }
                     }
+                    // 访问页面类型为供应商主页 且供应商 id 不为空的时候 将页面 pageLabel 改为供应商名称
+                    if ( null != cmBehaviorRecordPo.getShopId() && 14 == cmBehaviorRecordPo.getPageType()) {
+                        // 获取供应商名称
+                        String shopName = recordMapper.getShopName(cmBehaviorRecordPo.getShopId());
+                        if (StringUtils.isNotBlank(shopName)) {
+                            cmBehaviorRecordPo.setPageLabel(shopName);
+                        }
+
+                    }
                     // 商品ID
                     if (str.startsWith("productId") && str.contains("=")) {
                         String[] split1 = str.split("=");
@@ -179,7 +188,6 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
                             String value = split1[1];
                             String trim = value.trim();
                             if (StringUtils.isNotBlank(trim)) {
-//                                log.info("referer============》"+trim);
                                 // 浏览器链接
                                 cmBehaviorRecordPo.setReferer(trim);
                                 // 访问来源
@@ -197,7 +205,6 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
                             String value = split1[1];
                             String trim = value.trim();
                             if (StringUtils.isNotBlank(trim)) {
-                                log.info("userAgent============》" + trim);
                                 // 浏览器userAgent
                                 cmBehaviorRecordPo.setUserAgent(trim);
                                 if (boolReptiles(trim)) {
@@ -206,6 +213,34 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
                             }
                         }
                     }
+                    // 游客编号
+                    if (str.startsWith("touristId") && str.contains("=")) {
+                        String[] split1 = str.split("=");
+                        if (split1.length > 1) {
+                            String value = split1[1];
+                            String trim = value.trim();
+                            if (StringUtils.isNotBlank(trim)) {
+                                log.info("touristId============》" + trim);
+                                cmBehaviorRecordPo.setTouristId(trim);
+                            }
+                        }
+                    }
+                    if (StringUtils.isEmpty(cmBehaviorRecordPo.getTouristId()) || StringUtils.isBlank(cmBehaviorRecordPo.getTouristId())) {
+                        cmBehaviorRecordPo.setTouristId("000000");
+                    }
+                    // openId
+                    if (str.startsWith("openId") && str.contains("=")) {
+                        String[] split1 = str.split("=");
+                        if (split1.length > 1) {
+                            String value = split1[1];
+                            String trim = value.trim();
+                            if (StringUtils.isNotBlank(trim)) {
+                                log.info("openId============》" + trim);
+                                 cmBehaviorRecordPo.setOpenId(trim);
+                            }
+                        }
+                    }
+
                 }
             }
 
@@ -352,24 +387,45 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
         calendar.add(Calendar.DAY_OF_MONTH, -1);
         Date time = calendar.getTime();
         String format = dateFormat.format(time);
-        // 前一天数据身份中是否只有 机构-游客、供应商-游客
-        List<CmBehaviorRecordPo> countNumList = recordMapper.countNum(format);
-        if (countNumList.size() != 0 && countNumList != null) {
-            for (CmBehaviorRecordPo countNum : countNumList) {
-                if (countNum.getCount() == 2) {
-                    // 查询机构/供应商ip、userID,用于调整游客数据
-                    CmBehaviorRecordPo recordPo = recordMapper.userIdAcc(countNum.getIP(), format);
-                    // 查询游客数据
-                    List<CmBehaviorRecordPo> behaviorList = recordMapper.selBehaviorList(countNum.getIP(), format);
-                    // 将游客数据中的ip和userId修改为机构/供应商数据
-                    for (CmBehaviorRecordPo cmBehaviorRecordPo : behaviorList) {
-                        cmBehaviorRecordPo.setIP(recordPo.getIP());
-                        cmBehaviorRecordPo.setUserId(recordPo.getUserId());
+        // 小程序 合并数据使用openId
+        List<String> openIdList = recordMapper.getRecodeOpenId(format);
+        if (null != openIdList && openIdList.size() > 0) {
+            // 查询小程序数据
+            List<CmBehaviorRecordPo> behaviorList = recordMapper.getRecordOpenIdInfo(format, openIdList);
+            for (String openId : openIdList) {
+                // 将游客数据中的ip和userId修改为机构/供应商数据
+                for (CmBehaviorRecordPo cmBehaviorRecordPo : behaviorList) {
+                    if (openId.equals(cmBehaviorRecordPo.getOpenId())) {
+                        cmBehaviorRecordPo.setIP(cmBehaviorRecordPo.getIP());
+                        cmBehaviorRecordPo.setUserId(cmBehaviorRecordPo.getUserId());
+                        cmBehaviorRecordPo.setOpenId(openId);
+                        cmBehaviorRecordPo.setAccessDate(format);
                         recordMapper.updateBehavior(cmBehaviorRecordPo);
                     }
                 }
             }
         }
+        // 网站 合并按游客Id 合并数据
+        List<String> recodeTouristId = recordMapper.getRecodeTouristId(format);
+        if (null != recodeTouristId && recodeTouristId.size() > 0) {
+            // 游客对应用户信息
+            List<CmBehaviorTouristInfoPo> touristInfo = recordMapper.getTouristInfo(format, recodeTouristId);
+            if (null != touristInfo) {
+                for (String touristId : recodeTouristId) {
+                    for (CmBehaviorTouristInfoPo touristInfoPo : touristInfo) {
+                        if (touristId.equals(touristInfoPo.getTouristId())) {
+                            CmBehaviorRecordPo cmBehaviorRecordPo = new CmBehaviorRecordPo();
+                            cmBehaviorRecordPo.setIP(recordMapper.getTouristIdByIp(touristId, format));
+                            cmBehaviorRecordPo.setUserId(touristInfoPo.getUserId().toString());
+                            cmBehaviorRecordPo.setTouristId(touristId);
+                            cmBehaviorRecordPo.setAccessDate(format);
+                            //更具游客信息合并用户浏览记录
+                            recordMapper.updateBehaviorByTouristId(cmBehaviorRecordPo);
+                        }
+                    }
+                }
+            }
+        }
     }
 
     /**

+ 103 - 76
src/main/java/com/caimei365/tools/service/impl/CmOrganValueSystemServiceImpl.java

@@ -2,13 +2,17 @@ package com.caimei365.tools.service.impl;
 
 import com.caimei365.tools.mapper.CmOrganValueSystemMapper;
 import com.caimei365.tools.model.po.CmOrganValueSystemPo;
+import com.caimei365.tools.model.po.CmUserPo;
+import com.caimei365.tools.model.po.UserOrganPo;
 import com.caimei365.tools.service.CmOrganValueSystemService;
+import lombok.extern.java.Log;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * Description
@@ -23,96 +27,119 @@ public class CmOrganValueSystemServiceImpl implements CmOrganValueSystemService
     @Resource
     private CmOrganValueSystemMapper cmOrganValueSystemMapper;
 
-
+    /**
+     * 用户活跃状态
+     */
     @Override
     public void insertOrgan() {
 
-        List<CmOrganValueSystemPo> list = new ArrayList();
-        // 新增用户
-        List<Integer> newAdd = cmOrganValueSystemMapper.newAdd();
-        // 活跃用户
-        List<Integer> active = cmOrganValueSystemMapper.active();
-        // 不活跃用户
-        List<Integer> inactive = cmOrganValueSystemMapper.inactive();
-        // 流失用户
-        List<Integer> loss = cmOrganValueSystemMapper.loss();
-        // 回流用户
-        List<Integer> backflow = cmOrganValueSystemMapper.backflow();
-        // 忠诚用户
-        List<Integer> loyal = cmOrganValueSystemMapper.loyal();
-        // 沉默用户
-        List<Integer> silent = cmOrganValueSystemMapper.silent();
-        // 客户价值
-        List<CmOrganValueSystemPo> customerValue = cmOrganValueSystemMapper.customerValue();
 
-        // 更改上一阶段数据
-        cmOrganValueSystemMapper.updateOrgan();
+        // 已添加用户活跃的的机构
+        List<CmOrganValueSystemPo> organList = cmOrganValueSystemMapper.getOrganUserId();
+        // 用户信息
+        List<CmUserPo> userList = cmOrganValueSystemMapper.getClubUserId();
+        // 用户的登录时间
+        List<UserOrganPo> clubLoginTime = cmOrganValueSystemMapper.getClubLoginTime();
+        // 机构咨询记录数
+        List<UserOrganPo> clubRemarks = cmOrganValueSystemMapper.getClubRemarks();
+        // 机构半年内子订单数
+        List<UserOrganPo> clubShopOrder = cmOrganValueSystemMapper.getClubShopOrder();
 
-        log.info("插入--------------------------------》");
-        for (CmOrganValueSystemPo organValueSystem : customerValue) {
+        log.info("用户活跃状态--------------------------------》");
+        for (CmUserPo user : userList) {
+            // 用户上一次数据
+            List<CmOrganValueSystemPo> organValueList = organList.stream().filter(organ -> organ.getUserId().equals(user.getUserID())).collect(Collectors.toList());
+            // 登录时间
+            List<UserOrganPo> loginTime = clubLoginTime.stream().filter(login -> login.getUserId().equals(user.getUserID())).collect(Collectors.toList());
+            // 咨询记录
+            List<UserOrganPo> clubRemark = clubRemarks.stream().filter(remark -> remark.getClubId().toString().equals(user.getClubID())).collect(Collectors.toList());
+            // 子订单数
+            List<UserOrganPo> shopOrder = clubShopOrder.stream().filter(shop -> shop.getUserId().equals(user.getUserID())).collect(Collectors.toList());
 
             CmOrganValueSystemPo systemPo = new CmOrganValueSystemPo();
-            // 判断用户活跃状态
-            if (newAdd.contains(organValueSystem.getUserID())) {
-                systemPo.setActiveState("新增用户");
-            }
-            if (active.contains(organValueSystem.getUserID())) {
-                systemPo.setActiveState("活跃用户");
-            }
-            if (inactive.contains(organValueSystem.getUserID())) {
+            systemPo.setStage(0);
+            systemPo.setDelType(1);
+            if ((null != loginTime &&  loginTime.size() > 0)|| (null != shopOrder &&  shopOrder.size() > 0)) {
+                if ( null != clubRemark &&  clubRemark.size() > 0 ) {
+                    UserOrganPo organ = clubRemark.get(0);
+                    if (organ.getSituation() == 0) {
+                        systemPo.setActiveState("活跃用户");
+                        systemPo.setActiveStatus(0);
+                    } else {
+                        systemPo.setActiveState("不活跃用户");
+                        systemPo.setActiveStatus(1);
+                    }
+                } else {
+                    systemPo.setActiveState("活跃用户");
+                    systemPo.setActiveStatus(0);
+                }
+            } else {
                 systemPo.setActiveState("不活跃用户");
+                systemPo.setActiveStatus(1);
             }
-            if (loss.contains(organValueSystem.getUserID())) {
-                systemPo.setActiveState("流失用户");
-            }
-            if (backflow.contains(organValueSystem.getUserID())) {
-                systemPo.setActiveState("回流用户");
-            }
-            if (loyal.contains(organValueSystem.getUserID())) {
-                systemPo.setActiveState("忠诚用户");
-            }
-            if (silent.contains(organValueSystem.getUserID())) {
-                systemPo.setActiveState("沉默用户");
+            if (null != organValueList && organValueList.size() > 0) {
+                // 修改
+                systemPo.setOrganId(organValueList.get(0).getOrganId());
+                cmOrganValueSystemMapper.updateOrganBatch(systemPo);
+            } else {
+                // 添加
+                systemPo.setUserId(user.getUserID());
+                cmOrganValueSystemMapper.organBatch(systemPo);
             }
+        }
+    }
 
-            // 判断客户价值
-            // 距今时间
-            Integer orderTimeDay = organValueSystem.getOrderTime();
-            // 购买频率
-            Double number = organValueSystem.getNumber() / 24;
-            // 交易金额
-            Double payableAmount = organValueSystem.getPayableAmount() / 24;
-            if (orderTimeDay > 60 && number >= 1 && payableAmount < 100000) {
-                systemPo.setCustomerValue("一般保持客户");
-            }
-            if (orderTimeDay < 60 && number < 1 && payableAmount < 100000) {
-                systemPo.setCustomerValue("一般发展客户");
-            }
-            if (orderTimeDay < 60 && number >= 1 && payableAmount < 100000) {
-                systemPo.setCustomerValue("一般价值客户");
-            }
-            if (orderTimeDay > 60 && number < 1 && payableAmount < 100000) {
-                systemPo.setCustomerValue("一般挽留客户");
-            }
-            if (orderTimeDay > 60 && number >= 1 && payableAmount >= 100000) {
-                systemPo.setCustomerValue("重要保持客户");
-            }
-            if (orderTimeDay < 60 && number < 1 && payableAmount >= 100000) {
-                systemPo.setCustomerValue("重要发展客户");
-            }
-            if (orderTimeDay < 60 && number >= 1 && payableAmount >= 100000) {
-                systemPo.setCustomerValue("重要价值客户");
-            }
-            if (orderTimeDay > 60 && number < 1 && payableAmount >= 100000) {
-                systemPo.setCustomerValue("一般保持客户");
+    /**
+     * 用户价值
+     */
+    @Override
+    public void insertcustomer() {
+        log.info("用户价值--------------------------------》");
+        // 已添加用户活跃的的机构
+        List<CmOrganValueSystemPo> organList = cmOrganValueSystemMapper.getOrganUserId();
+        // 用户信息
+        List<CmUserPo> userList = cmOrganValueSystemMapper.getClubUserId();
+        for (CmUserPo user : userList) {
+            // 用户上一次数据
+            List<CmOrganValueSystemPo> organValueList = organList.stream().filter(organ -> organ.getUserId().equals(user.getUserID())).collect(Collectors.toList());
+            // 用户应支付金额
+            UserOrganPo userAmount = cmOrganValueSystemMapper.getUserAmount(user.getUserID());
+            // 用户访问数据
+            List<UserOrganPo> behaviorNumber = cmOrganValueSystemMapper.getBehaviorNumber(user.getUserID());
+            Integer number = 0;
+            if (null != behaviorNumber && behaviorNumber.size() > 0) {
+                number = behaviorNumber.size() / 12;
             }
-
-            systemPo.setUserID(organValueSystem.getUserID());
+            CmOrganValueSystemPo systemPo = new CmOrganValueSystemPo();
             systemPo.setStage(0);
             systemPo.setDelType(1);
-
-            // 添加新数据
-            cmOrganValueSystemMapper.organBatch(systemPo);
+            if (null != userAmount) {
+                if (null != userAmount.getShopOrderNumber() && userAmount.getShopOrderNumber() >= 5) {
+                    systemPo.setCustomerValue("高价值客户");
+                    systemPo.setCustomerStatus(0);
+                } else if ((null != userAmount.getShopOrderNumber() && userAmount.getShopOrderNumber() < 5) && userAmount.getAmount() > 50000d) {
+                    systemPo.setCustomerValue("一般价值客户");
+                    systemPo.setCustomerStatus(1);
+                } else if ((null != userAmount.getShopOrderNumber() && userAmount.getShopOrderNumber() < 5) && userAmount.getAmount() > 50000d && number > 1) {
+                    systemPo.setCustomerValue("潜在价值客户");
+                    systemPo.setCustomerStatus(2);
+                } else  {
+                    systemPo.setCustomerValue("低价值客户");
+                    systemPo.setCustomerStatus(3);
+                }
+            } else {
+                systemPo.setCustomerValue("低价值客户");
+                systemPo.setCustomerStatus(3);
+            }
+            if (null != organValueList && organValueList.size() > 0) {
+                // 修改
+                systemPo.setOrganId(organValueList.get(0).getOrganId());
+                cmOrganValueSystemMapper.updateOrganBatch(systemPo);
+            } else {
+                // 添加
+                systemPo.setUserId(user.getUserID());
+                cmOrganValueSystemMapper.organBatch(systemPo);
+            }
         }
     }
 }

+ 125 - 0
src/main/java/com/caimei365/tools/service/impl/MessageServiceImpl.java

@@ -0,0 +1,125 @@
+package com.caimei365.tools.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.caimei365.tools.mapper.MessageMapper;
+import com.caimei365.tools.model.po.ClubPo;
+import com.caimei365.tools.model.po.ServiceproviderPo;
+import com.caimei365.tools.service.MessageService;
+import com.caimei365.tools.utils.RequestUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+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;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/11/2
+ */
+@Slf4j
+@Service
+public class MessageServiceImpl implements MessageService {
+
+    @Value("${wx.mini-app-id}")
+    private String miniAppId;
+    @Value("${wx.mini-app-secret}")
+    private String miniAppSecret;
+    @Value("${wx.crm-app-id}")
+    private String crmAppId;
+    @Value("${wx.crm-app-secret}")
+    private String crmAppSecret;
+
+    @Resource private MessageMapper messageMapper;
+
+    @Override
+    public void UnActiveMessage() {
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date date = new Date();
+        // 协销信息
+        List<ServiceproviderPo> serviceInfo = messageMapper.getServiceInfo();
+        for (ServiceproviderPo serviceprovider: serviceInfo) {
+            List<ClubPo> unActiveClub = messageMapper.getUnActiveClub(serviceprovider.getServiceProviderId());
+            String clubName = "";
+            if (null != unActiveClub) {
+                for (ClubPo club : unActiveClub) {
+                    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 + "等" + unActiveClub.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", dateFormat.format(date));
+                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?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);
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 微信公众号获取access_token
+     *
+     * @return access_token
+     */
+    public String getAccessToken() throws Exception {
+        String link = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
+        link = link.replace("APPID", crmAppId);
+        link = link.replace("APPSECRET", crmAppSecret);
+        String result = RequestUtil.sendGet(link);
+        log.info("微信公众号获取access_token>>>" + link);
+        log.info("微信公众号获取access_token>>>" + result);
+        Map<String, Object> map = JSONObject.parseObject(result, Map.class);
+        return (String) map.get("access_token");
+    }
+}

+ 22 - 3
src/main/java/com/caimei365/tools/task/CmOrganValueSystemTask.java

@@ -3,6 +3,7 @@ package com.caimei365.tools.task;
 import com.caimei365.tools.service.CmBehaviorRecordService;
 import com.caimei365.tools.service.CmOrganValueSystemService;
 import com.caimei365.tools.service.CmVipCouponService;
+import com.caimei365.tools.service.MessageService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Configuration;
@@ -29,14 +30,24 @@ public class CmOrganValueSystemTask {
 
     @Resource private CmVipCouponService cmVipCouponService;
 
+    @Resource private MessageService messageService;
+
     /**
-     * 每月一号更新用户活跃状态、用户价值
+     * 每天生成用户活跃状态
      */
-    @Scheduled(cron = "0 15 0 1 * ?")
+    @Scheduled(cron = "0 13 0 * * ?")
     public void organData(){
         cmOrganValueSystemService.insertOrgan();
     }
 
+    /**
+     * 每月一号更新用户价值
+     */
+    @Scheduled(cron = "0 15 0 1 * ?")
+    public void organCustomer(){
+        cmOrganValueSystemService.insertcustomer();
+    }
+
     /**
      * 每小时统计计算真实访问时长
      */
@@ -46,7 +57,7 @@ public class CmOrganValueSystemTask {
     }
 
     /**
-     * 每天修改前一天的符合条件的数据
+     * 每天修改前一天的符合条件的数据 合并ip
      */
     @Scheduled(cron = "0 5 0 * * ?")
     public void updateBehavior() { cmBehaviorRecordService.updateBehaviorUser();}
@@ -75,4 +86,12 @@ public class CmOrganValueSystemTask {
      */
     @Scheduled(cron = "0 0 8 * * ?")
     public void pageStatistics(){ cmBehaviorRecordService.pageStatistics();}
+
+    /**
+     * 每天10点 给协销微信模板提醒 -- 不活跃机构
+     */
+    @Scheduled(cron = "0 0 10 * * ?")
+    public void getMessageSer() {
+        messageService.UnActiveMessage();
+    }
 }

+ 57 - 11
src/main/resources/mapper/CmBehaviorRecordMapper.xml

@@ -1,9 +1,16 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.caimei365.tools.mapper.CmBehaviorRecordMapper">
+
+    <select id="getShopName" resultType="java.lang.String">
+        select name from shop where shopId = #{shopId}
+    </select>
+
     <insert id="insertRecord" parameterType="com.caimei365.tools.model.po.CmBehaviorRecordPo" useGeneratedKeys="true" keyProperty="recordID">
-        INSERT INTO cm_behavior_record (IP, userID, pagePath, pageType, pageLabel, behaviorType, productID, accessTime, accessDuration, accessDate,referer,accessSource,accessClient,isReckon,region,userAgent,delFlag)
-        VALUES(#{IP},#{userId},#{pagePath},#{pageType},#{pageLabel},#{behaviorType},#{productId},#{accessTime},#{accessDuration},#{accessDate},#{referer},#{accessSource},#{accessClient},#{isReckon},#{region},#{userAgent},#{delFlag})
+        INSERT INTO cm_behavior_record (IP, userID, touristId, pagePath, pageType, pageLabel, behaviorType, productID, accessTime,
+                                        accessDuration, accessDate, referer, accessSource, accessClient, isReckon, region, userAgent, openId, delFlag)
+        VALUES(#{IP}, #{userId}, #{touristId}, #{pagePath}, #{pageType}, #{pageLabel}, #{behaviorType}, #{productId}, #{accessTime},
+               #{accessDuration}, #{accessDate}, #{referer}, #{accessSource}, #{accessClient}, #{isReckon}, #{region}, #{userAgent}, #{openId}, #{delFlag})
     </insert>
 
     <select id="toDateRecode" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
@@ -194,23 +201,61 @@
         INSERT INTO cm_svip_coupon(couponId, montId, updateTime,delFlag)
         VALUES(#{couponId}, #{montId}, #{updateTime},#{delFlag})
     </insert>
-    <select id="countNum" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
-        SELECT IP as IP, COUNT(DISTINCT userID) as count FROM cm_behavior_record
-        where accessDate = #{accessDate}
-        GROUP BY IP, accessDate ORDER BY accessDate DESC
+
+    <select id="getRecodeOpenId" resultType="java.lang.String">
+        SELECT openId as count FROM cm_behavior_record where accessDate = #{accessDate} and accessClient = 1 GROUP BY openId
     </select>
-    <select id="userIdAcc" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
-        SELECT IP as IP, userID as userId FROM cm_behavior_record WHERE IP = #{IP} AND accessDate = #{accessDate} GROUP BY IP ,userID ORDER BY userID DESC LIMIT 1
+
+    <select id="getRecordOpenIdInfo" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
+        SELECT ip as IP, userID as userId, openId FROM cm_behavior_record
+        <where>
+            userId is not null and userId != '' and userId = 0 and accessDate = #{accessDate}
+            <if test="openIdList.size()>0">
+                and openId in
+                <foreach collection="openIdList" item="openId" open="(" separator="," close=")">
+                    #{openId}
+                </foreach>
+            </if>
+        </where>
+        group by userId
     </select>
-    <select id="selBehaviorList" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
-        SELECT recordID as recordID, IP as IP, userID as userId FROM cm_behavior_record WHERE IP = #{IP} AND  userID = 0 AND accessDate = #{accessDate}
+
+    <select id="getRecodeTouristId" resultType="java.lang.String">
+        SELECT touristId FROM cm_behavior_record WHERE accessDate = #{accessDate} and accessClient = 0 GROUP BY touristId
     </select>
+
+    <select id="getTouristInfo" resultType="com.caimei365.tools.model.po.CmBehaviorTouristInfoPo">
+        select userId, touristId, addTime from cm_behavior_tourist_info
+        <where>
+            userId is not null and userId != '' and addTime like concat('%',#{accessDate},'%')
+            <if test="touristIds.size() > 0">
+                and touristId in
+                <foreach collection="touristIds" item="touristId" open="(" separator="," close=")">
+                    #{touristId}
+                </foreach>
+            </if>
+        </where>
+        group by userId
+    </select>
+
+    <select id="getTouristIdByIp" resultType="java.lang.String">
+        SELECT ip FROM cm_behavior_record WHERE accessDate = #{accessDate} and touristId = #{touristId}
+    </select>
+
     <update id="updateBehavior">
         UPDATE cm_behavior_record
         SET IP = #{IP},
         userID = #{userId}
-        WHERE recordID = #{recordID}
+        WHERE openId = #{openId} and accessDate = #{accessDate}
     </update>
+
+    <update id="updateBehaviorByTouristId">
+        update cm_behavior_record
+        SET userID = #{userId},
+            IP = #{IP}
+        WHERE touristId = #{touristId} and accessDate = #{accessDate}
+    </update>
+
     <select id="selYesterdayList" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
         SELECT
             b.IP,
@@ -255,6 +300,7 @@
             b.accessClient,
             b.region AS region,
             u.registerTime AS addTime,
+            (SELECT touristId FROM cm_behavior_record WHERE accessDate = #{accessDate} and IP = b.IP ORDER BY accessTime DESC LIMIT 1) AS touristId,
             b.delFlag
         FROM cm_behavior_record b
                  LEFT JOIN USER u ON b.userID = u.userID

+ 10 - 0
src/main/resources/mapper/CmBehaviorTouristInfoDao.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei365.tools.mapper.CmBehaviorTouristInfoDao">
+
+    <insert id="insertTourist">
+        insert into cm_behavior_tourist_info (touristId, addTime)
+        values (#{touristId}, now())
+    </insert>
+
+</mapper>

+ 88 - 18
src/main/resources/mapper/CmOrganValueSystemMapper.xml

@@ -231,20 +231,70 @@
         )
         )
     </select>
-    <select id="customerValue" resultType="com.caimei365.tools.model.po.CmOrganValueSystemPo">
-        SELECT u.userID as userID,IFNULL(b.payableAmount, 0)as payableAmount,IFNULL(b.num, 0) as number,TIMESTAMPDIFF(DAY, IFNULL(b.orderTime, '2000-01-01 00:00:00'), NOW()) as orderTime
-        FROM USER u LEFT JOIN
-            (SELECT DISTINCT u.userID AS userID,SUM(co.payableAmount) AS payableAmount,COUNT(co.orderNo) AS num,MAX(co.orderTime) AS orderTime FROM USER u LEFT JOIN cm_order co ON u.userID = co.userID
-            WHERE TIMESTAMPDIFF(YEAR, co.orderTime, NOW()) <![CDATA[ < ]]> 2
-            AND co.orderNo NOT IN (
-                SELECT orderNo FROM cm_order WHERE
-                STATUS = 6 OR refundType = 2
-                OR orderID IN (
-                        SELECT orderID FROM cm_order_product WHERE productID IN (6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 6069) GROUP BY orderID
-                    )
-            )
-            GROUP BY u.userID
-        ) b ON u.userID = b.userID
+
+    <select id="getOrganUserId" resultType="com.caimei365.tools.model.po.CmOrganValueSystemPo">
+        SELECT organID as organId, userId FROM cm_organ_value_system
+    </select>
+
+    <select id="getClubUserId" resultType="com.caimei365.tools.model.po.CmUserPo">
+        SELECT userID, clubID FROM user WHERE userId IS NOT NULL AND userId != ''
+    </select>
+
+    <!--机构登录时间-->
+    <select id="getClubLoginTime" resultType="com.caimei365.tools.model.po.UserOrganPo">
+        SELECT
+        c.clubId,
+        c.userId,
+        u.loginTime
+        FROM club c
+        LEFT JOIN USER u ON c.userId = u.userId
+        where u.loginTime > DATE_SUB(NOW(), INTERVAL 6 MONTH)
+    </select>
+    <!--机构咨询记录数-->
+    <select id="getClubRemarks" resultType="com.caimei365.tools.model.po.UserOrganPo">
+        SELECT clubId, SUM(cou) AS number, communicationSituation as situation FROM (
+           SELECT c.clubId, COUNT(*) AS cou, (SELECT communicationSituation FROM cm_club_remarks WHERE clubId = c.clubId ORDER BY ADDTIME DESC LIMIT 1) AS communicationSituation
+           FROM club c
+                    LEFT JOIN cm_club_remarks ccr ON c.clubId = ccr.clubId
+           WHERE ccr.addTime > DATE_SUB(NOW(), INTERVAL 6 MONTH) AND ccr.communicationSituation != 1 GROUP BY c.clubId
+           UNION
+           SELECT c.clubId, COUNT(*) AS cou, (SELECT communicationSituation FROM cm_visitor_remarks WHERE clubId = c.clubId ORDER BY ADDTIME DESC LIMIT 1) AS communicationSituation
+           FROM club c
+                    LEFT JOIN cm_visitor_remarks cvr ON c.clubId = cvr.clubId
+           WHERE cvr.addTime > DATE_SUB(NOW(), INTERVAL 6 MONTH) AND cvr.communicationSituation != 1 GROUP BY c.clubId
+       ) remark GROUP BY clubId
+    </select>
+
+    <!--机构子订单数-->
+    <select id="getClubShopOrder" resultType="com.caimei365.tools.model.po.UserOrganPo">
+        SELECT u.userId, COUNT(*) AS shopOrderNumber
+        FROM user u
+        LEFT JOIN cm_shop_order cso ON cso.userId = u.userId
+        WHERE cso.shopId != 998 AND cso.orderTime > DATE_SUB(NOW(), INTERVAL 6 MONTH) GROUP BY u.userId
+    </select>
+    <!--机构子订单数、需支付金额-->
+    <select id="getUserAmount" resultType="com.caimei365.tools.model.po.UserOrganPo">
+        SELECT
+        userId,
+        clubId,
+        COUNT(shopOrderId) AS shopOrderNumber,
+        SUM(needPayAmount) AS amount
+        FROM cm_shop_order
+        WHERE userId != '' AND userId IS NOT NULL
+        AND clubId != '' AND clubId IS NOT NULL
+        and userId = #{userId}
+        AND orderTime > DATE_SUB(NOW(), INTERVAL 1 YEAR)
+        GROUP BY userId
+    </select>
+
+    <select id="getBehaviorNumber" resultType="com.caimei365.tools.model.po.UserOrganPo">
+        SELECT
+            userId,
+            COUNT(recordID) as recordNumber
+        FROM cm_behavior_record
+        WHERE userId != 0 AND accessTime > DATE_SUB(NOW(), INTERVAL 1 YEAR)
+          and userId = #{userId}
+        GROUP BY accessDate
     </select>
 
     <update id="updateOrgan">
@@ -257,9 +307,29 @@
     </update>
 
     <insert id="organBatch" parameterType="java.util.List">
-        insert into cm_organ_value_system
-        (userID, activeState, customerValue, stage, delType)
-        values
-        (#{userID},#{activeState},#{customerValue},#{stage},#{delType})
+        insert into cm_organ_value_system (userID, activeState, customerValue, activeStatus, customerStatus, stage, delType)
+        values (#{userId},#{activeState},#{customerValue},#{activeStatus}, #{customerStatus}, #{stage},#{delType})
     </insert>
+
+    <update id="updateOrganBatch">
+        update cm_organ_value_system
+        set <if test="userId != null">
+                userID = #{userId},
+            </if>
+            <if test="activeState != null and activeState != ''">
+                activeState = #{activeState},
+            </if>
+            <if test="customerValue != null and customerValue != ''">
+                customerValue = #{customerValue},
+            </if>
+            <if test="activeStatus != null">
+                activeStatus = #{activeStatus},
+            </if>
+            <if test="customerStatus != null">
+                customerStatus = #{customerStatus},
+            </if>
+            stage = #{stage},
+            delType = #{delType}
+        where organID = #{organId}
+    </update>
 </mapper>

+ 1 - 1
src/main/resources/mapper/MessageCenter.xml

@@ -4,7 +4,7 @@
     <insert id="addMessageCenter">
         INSERT INTO message_center (shopID, clubID, userType, messageType, content, time, accountType, couponType, orderID, orderMessageType,
                                     couponFee, couponMessageType, ShopMessType, ShopTieredType, reasonContent)
-        VALUES (#{shopId}, #{clubId}, #{userType}, #{messageType}, #{content}, now(), #{accountType}, #{couponType},#{orderID},#{orderMessageType},
+        VALUES (#{shopId}, #{clubId}, #{userType}, #{messageType}, #{content}, now(), #{accountType}, #{couponType},#{orderId},#{orderMessageType},
                 #{couponFee}, #{couponMessageType}, #{shopMessType}, #{shopTieredType}, #{reasonContent})
     </insert>
     <insert id="sendInsideMessage">

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

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei365.tools.mapper.MessageMapper">
+    <select id="getServiceInfo" resultType="com.caimei365.tools.model.po.ServiceproviderPo">
+        SELECT serviceProviderId, userID, openid, unionId, linkMan
+        FROM serviceprovider WHERE organizeID = 0  AND openId IS NOT NULL AND openId != '' AND status = 90 AND serviceProviderID != 1342 and serviceProviderID = 1370
+    </select>
+
+    <select id="getOpenidListByPermission" resultType="java.lang.String">
+        SELECT openid FROM wechat_user WHERE unionId= #{unionId}
+    </select>
+
+    <select id="getUnActiveClub" resultType="com.caimei365.tools.model.po.ClubPo">
+        SELECT c.name as name, c.linkMan as linkMan FROM cm_organ_value_system covs
+              LEFT JOIN club c ON c.userID = covs.userId
+              LEFT JOIN serviceprovider ser ON c.spId = ser.serviceProviderID
+        WHERE covs.delType = 1 AND covs.stage = 0 AND covs.activeStatus = 1
+          AND ser.serviceProviderID = #{serviceProviderId}
+        GROUP BY covs.userID
+    </select>
+</mapper>