瀏覽代碼

Merge remote-tracking branch 'origin/developer' into developer

zhijiezhao 2 年之前
父節點
當前提交
fd23aa162a

+ 20 - 0
src/main/java/com/caimei365/tools/controller/BaseApi.java

@@ -3,13 +3,17 @@ package com.caimei365.tools.controller;
 import com.caimei365.tools.service.CmBehaviorRecordService;
 import com.caimei365.tools.service.CmOrganValueSystemService;
 import com.caimei365.tools.service.CmRepurchaseFrequencyService;
+import com.caimei365.tools.service.CmVipCouponService;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.java.Log;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.io.IOException;
 
 /**
  * Description
@@ -20,12 +24,14 @@ import javax.annotation.Resource;
 @RestController
 @RequiredArgsConstructor
 @RequestMapping("/tools")
+@Slf4j
 public class BaseApi {
 
     @Resource
     private CmOrganValueSystemService cmOrganValueSystemService;
     @Resource private CmRepurchaseFrequencyService cmRepurchaseFrequencyService;
     @Resource private CmBehaviorRecordService cmBehaviorRecordService;
+    @Resource private CmVipCouponService cmVipCouponService;
 
     @Value(value = "${swagger.enabled}")
     private Boolean swaggerEnabled;
@@ -38,6 +44,20 @@ public class BaseApi {
         return "欢迎使用!";
     }
 
+    /**
+     * 临时接口
+     */
+    /*@GetMapping("/record/update")
+    public void svipCoupon(Integer startId, Integer endId) throws IOException {
+
+        cmBehaviorRecordService.setIpAddress(startId, endId);
+    }*/
+
+    /**
+     * 数据ip地址
+     * @param startId
+     * @param endId
+     */
     /*@GetMapping("/base/oldData")
     public void oldData(Integer startId, Integer endId) {
         cmBehaviorRecordService.setIpAddress(startId,endId);

+ 37 - 4
src/main/java/com/caimei365/tools/mapper/CmBehaviorRecordMapper.java

@@ -1,9 +1,10 @@
 package com.caimei365.tools.mapper;
 
-import com.caimei365.tools.model.po.CmBehaviorRecordPo;
+import com.caimei365.tools.model.po.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -44,12 +45,44 @@ public interface CmBehaviorRecordMapper {
      * 查询所有老数据
      * @return
      */
-    List<CmBehaviorRecordPo> findList(@Param("startId") Integer startId, @Param("endId") Integer endId);
+    List<CmUserPo> findList(@Param("startId") Integer startId, @Param("endId") Integer endId);
 
     /**
      * 修改老数据ip所在地
-     * @param cmBehaviorRecordPo
+     * @param userPo
      */
-    void updateOldData(CmBehaviorRecordPo cmBehaviorRecordPo);
+    void updateOldData(CmUserPo userPo);
+
+    List<CmVipCouponPo> selSvipCoupon(@Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    void updateSvipCoupon(CmVipCouponPo cmVipCouponPo);
+
+    void insertVipCouponMonth(CmVipCouponPo cmVipCouponPo);
+
+    List<CmCouponPo> selCoupon();
+
+    void updateCoupon(CmCouponPo cmCouponPo);
+
+    void insertCoupon(CmCouponPo cmCouponPo);
+
+    Integer selById();
+
+    List<CmCouponAssociatePo> selCouponPro(@Param("couponId") String couponId);
+
+    void insertCouponAssociate(CmCouponAssociatePo associate);
+
+    Integer selSvipCouponById();
+
+    void insertRelation(CmVipCouponRelation cmVipCouponRelation);
+
+    List<CmBehaviorRecordPo> countNum(@Param("accessDate") String accessDate);
+
+    CmBehaviorRecordPo userIdAcc(@Param("IP") String IP, @Param("accessDate") String accessDate);
+
+    List<CmBehaviorRecordPo> selBehaviorList(@Param("IP") String IP, @Param("accessDate") String accessDate);
+
+    void updateBehavior(CmBehaviorRecordPo cmBehaviorRecordPo);
+
+    void selYesterdayList( @Param("accessDate") String accessDate);
 }
 

+ 13 - 1
src/main/java/com/caimei365/tools/model/po/CmBehaviorRecordPo.java

@@ -13,7 +13,7 @@ import java.util.Date;
 @Data
 public class CmBehaviorRecordPo {
 
-    private Integer recordID ;
+    private Integer recordID;
     /**
      * 访问人IP地址
      */
@@ -90,4 +90,16 @@ public class CmBehaviorRecordPo {
      * ip所属地
      */
     private String region;
+    /**
+     * 请求头 userAgent
+     */
+    private String userAgent;
+    /**
+     * 删除标记 0否 其余是
+     */
+    private String delFlag;
+    /**
+     * 统计数
+     */
+    private Integer count;
 }

+ 24 - 0
src/main/java/com/caimei365/tools/model/po/CmCouponAssociatePo.java

@@ -0,0 +1,24 @@
+package com.caimei365.tools.model.po;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/2/2
+ */
+@Data
+public class CmCouponAssociatePo {
+    private Integer id;
+    private Integer couponId;       //优惠券id
+    private Integer productId;      //商品id(对应活动券)
+    private String pcStatus;        //pc状态 0停用 1启用
+    private String appletsStatus;       //小程序状态 0停用 1启用
+    private Integer sort;       //排序值
+    private Date addTime;       //添加时间
+    private String delFlag;     //删除标记 0否 其余是
+
+}

+ 5 - 0
src/main/java/com/caimei365/tools/model/po/CmCouponPo.java

@@ -18,12 +18,14 @@ import java.util.List;
 public class CmCouponPo implements Serializable {
 
     private static final long serialVersionUID = 1L;
+    private String id;
     private String name;        // 活动主题
     private BigDecimal couponAmount;        // 优惠券金额(面值)
     private BigDecimal touchPrice;        // 优惠满减条件金额
     private Date startDate;        // 使用开始时间(有效期)
     private Date endDate;        // 使用结束时间(有效期)
     private Integer receivePeriod;		// 领取期限(天)
+    private Integer useTimeFlag;		// 领取期限同开始-开始时间
     private Integer receiveFlag;		// 领取期限同开始-结束时间
     private Integer usePeriod;		// 使用期限(天)
     private String status;        // 状态 0未生效 1已生效 2已关闭 3已失效
@@ -57,4 +59,7 @@ public class CmCouponPo implements Serializable {
 
     private Date receiveDate;   // 领取时间
     private Date useEndDate;    // 使用截止时间
+    private String delFlag;    // 删除标记
+    private Date createDate;    // 创建时间
+    private Integer configure;  // 专属优惠券配置 1是、0否
 }

+ 1 - 0
src/main/java/com/caimei365/tools/model/po/CmUserPo.java

@@ -40,6 +40,7 @@ public class CmUserPo implements Serializable {
     private String auditNote;        // auditNote
     private String registerTime;        // 注册时间
     private String registerIP;        // 注册ip
+    private String ipAddress;        // 注册ip地址
     private String loginTime;        // 登录时间
     private String loginFailTime;        // 登录失败次数
     private String loginIP;        // 登录ip

+ 20 - 0
src/main/java/com/caimei365/tools/model/po/CmVipCouponPo.java

@@ -0,0 +1,20 @@
+package com.caimei365.tools.model.po;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/2/1
+ */
+@Data
+public class CmVipCouponPo {
+    private String id;
+    private String useTime;    //生效月份
+    private Date updateTime; //更新时间
+    private String status; //0关闭,1未关闭
+    private String delFlag; //删除标记
+}

+ 21 - 0
src/main/java/com/caimei365/tools/model/po/CmVipCouponRelation.java

@@ -0,0 +1,21 @@
+package com.caimei365.tools.model.po;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/2/1
+ */
+@Data
+public class CmVipCouponRelation {
+    //优惠券id
+    private String couponId;
+    //优惠券id
+    private String montId;
+    private Date updateTime;
+    private String delFlag;
+}

+ 7 - 1
src/main/java/com/caimei365/tools/service/CmBehaviorRecordService.java

@@ -3,6 +3,8 @@ package com.caimei365.tools.service;
 import com.caimei365.tools.model.po.CmBehaviorRecordPo;
 import com.caimei365.tools.model.po.IpSavePo;
 
+import java.io.IOException;
+
 /**
  * Description
  *
@@ -14,5 +16,9 @@ public interface CmBehaviorRecordService {
 
     void updateBehaviorTime();
 
-    void setIpAddress(Integer startId, Integer endId);
+    void setIpAddress(Integer startId, Integer endId) throws IOException;
+
+    void updateBehaviorUser();
+
+    void insertBehaviorUser();
 }

+ 14 - 0
src/main/java/com/caimei365/tools/service/CmVipCouponService.java

@@ -0,0 +1,14 @@
+package com.caimei365.tools.service;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/2/1
+ */
+public interface CmVipCouponService {
+    /**
+     * 放开优惠券,创建下季度优惠券
+     */
+    void openCoupon();
+}

+ 82 - 9
src/main/java/com/caimei365/tools/service/impl/CmBehaviorRecordServiceImpl.java

@@ -3,6 +3,7 @@ package com.caimei365.tools.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.caimei365.tools.mapper.CmBehaviorRecordMapper;
 import com.caimei365.tools.model.po.CmBehaviorRecordPo;
+import com.caimei365.tools.model.po.CmUserPo;
 import com.caimei365.tools.model.po.IpSavePo;
 import com.caimei365.tools.service.CmBehaviorRecordService;
 import lombok.extern.slf4j.Slf4j;
@@ -160,7 +161,7 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
                             String value = split1[1];
                             String trim = value.trim();
                             if (StringUtils.isNotBlank(trim)) {
-                                log.info("referer============》"+trim);
+//                                log.info("referer============》"+trim);
                                 // 浏览器链接
                                 cmBehaviorRecordPo.setReferer(trim);
                                 // 访问来源
@@ -169,6 +170,24 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
                             }
                         }
                     }
+                    // 设置删除标记 判定爬虫
+                    cmBehaviorRecordPo.setDelFlag("0");
+                    // 浏览器userAgent
+                    if (str.startsWith("userAgent") && str.contains("=")) {
+                        String[] split1 = str.split("=");
+                        if (split1.length > 1) {
+                            String value = split1[1];
+                            String trim = value.trim();
+                            if (StringUtils.isNotBlank(trim)) {
+                                log.info("userAgent============》"+trim);
+                                // 浏览器userAgent
+                                cmBehaviorRecordPo.setUserAgent(trim);
+                                if (boolReptiles(trim)) {
+                                    cmBehaviorRecordPo.setDelFlag("1");
+                                }
+                            }
+                        }
+                    }
                 }
             }
 
@@ -238,22 +257,68 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
     }
 
     @Override
-    public void setIpAddress(Integer startId, Integer endId) {
-        List<CmBehaviorRecordPo> list = recordMapper.findList(startId,endId);
+    public void setIpAddress(Integer startId, Integer endId) throws IOException {
+        List<CmUserPo> list = recordMapper.findList(startId,endId);
         String region = "";
-        for (CmBehaviorRecordPo recordPo: list) {
+        for (CmUserPo user: list) {
             try {
                 // 获取ip所在地
-                region = recordIp(recordPo.getIP());
-                recordPo.setRegion(region);
-                recordPo.setIsReckon("1");
-                recordMapper.updateOldData(recordPo);
+                region = recordIp(user.getRegisterIP());
+                user.setIpAddress(region);
+                recordMapper.updateOldData(user);
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }
 
+    @Override
+    public void updateBehaviorUser() {
+        log.info("====合并IP====");
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        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());
+                        recordMapper.updateBehavior(cmBehaviorRecordPo);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 昨日用户行为列表数据生成
+     */
+    @Override
+    public void insertBehaviorUser() {
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        calendar.add(Calendar.DAY_OF_MONTH,-1);
+        Date time = calendar.getTime();
+        String format = dateFormat.format(time);
+
+        // 获取昨天数据
+        recordMapper.selYesterdayList(format);
+        log.info("====昨日用户行为列表数据已生成====");
+    }
+
 
     // 获取IP对应地址 ---- 太平洋
     public static String recordIp(String ip) throws IOException {
@@ -288,7 +353,7 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
             e.printStackTrace();
         } finally {
             if (connection != null) {
-                connection.disconnect();	//关闭谅解
+                connection.disconnect();	//关闭连接
             }
         }
         return region;
@@ -324,4 +389,12 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
         }
         return null;
     }
+    private boolean boolReptiles(String userAgent) {
+        if (userAgent.contains("serpstatbot") || userAgent.contains("spider") || userAgent.contains("Googlebot") || userAgent.contains("bingbot")
+            || userAgent.contains("SeznamBot") || userAgent.contains("YisouSpider") || userAgent.contains("petalbot") || userAgent.contains("YandexBot")
+            || userAgent.contains("AhrefsBot")) {
+            return true;
+        }
+        return false;
+    }
 }

+ 145 - 0
src/main/java/com/caimei365/tools/service/impl/CmVipCouponServiceImpl.java

@@ -0,0 +1,145 @@
+package com.caimei365.tools.service.impl;
+
+import com.caimei365.tools.mapper.CmBehaviorRecordMapper;
+import com.caimei365.tools.model.po.CmCouponAssociatePo;
+import com.caimei365.tools.model.po.CmCouponPo;
+import com.caimei365.tools.model.po.CmVipCouponPo;
+import com.caimei365.tools.model.po.CmVipCouponRelation;
+import com.caimei365.tools.service.CmVipCouponService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/2/1
+ */
+@Slf4j
+@Service
+public class CmVipCouponServiceImpl implements CmVipCouponService {
+    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+    private static Calendar calendar = Calendar.getInstance();
+
+    @Autowired
+    private CmBehaviorRecordMapper cmBehaviorRecordMapper;
+    /**
+     * 放开优惠券,创建下季度优惠券
+     */
+    @Override
+    public void openCoupon() {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
+        Date date = new Date();
+        String startTime = simpleDateFormat.format(date);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.MONTH,3);
+        Date time = calendar.getTime();
+        String endTime = simpleDateFormat.format(time);
+        CmVipCouponPo vipCouponPo = new CmVipCouponPo();
+
+        List<CmVipCouponPo> cmVipCouponPoList = cmBehaviorRecordMapper.selSvipCoupon(startTime, endTime);
+        // 将本季度优惠券开放
+        if (cmVipCouponPoList.size() != 0) {
+            for (CmVipCouponPo cmVipCouponPo : cmVipCouponPoList) {
+                cmBehaviorRecordMapper.updateSvipCoupon(cmVipCouponPo);
+                // 生成下一季度优惠券
+                vipCouponPo.setUseTime(endTime);
+                vipCouponPo.setStatus("1");
+                vipCouponPo.setUpdateTime(date);
+                vipCouponPo.setDelFlag("1");
+                cmBehaviorRecordMapper.insertVipCouponMonth(vipCouponPo);
+            }
+        }
+        // 修改专属优惠券配置中优惠券的有效时间
+        calendar.setTime(time);
+        calendar.add(Calendar.MONTH,2);
+        Date times =calendar.getTime();
+        String formatTime = simpleDateFormat.format(times);
+        Date startDate = getMinDay(endTime);
+        Date endDate = getMaxDay(formatTime);
+        CmCouponAssociatePo associatePo = new CmCouponAssociatePo();
+        List<CmCouponPo> cmCouponPoList = cmBehaviorRecordMapper.selCoupon();
+        for (CmCouponPo cmCouponPo: cmCouponPoList) {
+
+            cmCouponPo.setConfigure(0);
+            // 修改优惠券配置属性
+            cmBehaviorRecordMapper.updateCoupon(cmCouponPo);
+            // 插入专属优惠券配置中优惠券
+            cmCouponPo.setName("超级会员优惠券"+endTime);
+            cmCouponPo.setStartDate(startDate);
+            cmCouponPo.setEndDate(endDate);
+            cmCouponPo.setConfigure(1);
+            cmCouponPo.setCreateDate(new Date());
+            cmCouponPo.setDelFlag("0");
+            cmBehaviorRecordMapper.insertCoupon(cmCouponPo);
+            // 插入新优惠券商品
+            Integer integer = cmBehaviorRecordMapper.selById();
+            List<CmCouponAssociatePo> associatePoList = cmBehaviorRecordMapper.selCouponPro(cmCouponPo.getId());
+            if (associatePoList.size() != 0) {
+                for (CmCouponAssociatePo couponAssociatePo : associatePoList) {
+                    couponAssociatePo.setCouponId(integer);
+                    cmBehaviorRecordMapper.insertCouponAssociate(couponAssociatePo);
+                }
+            }
+        }
+        log.info("========优惠券创建成功========");
+        /*
+         * vip优惠券月份关系
+         */
+        CmVipCouponRelation relation = new CmVipCouponRelation();
+        Integer cmVipCouponPoId = cmBehaviorRecordMapper.selSvipCouponById();
+        List<CmCouponPo> cmCouponPos = cmBehaviorRecordMapper.selCoupon();
+        if (cmVipCouponPoId != 0 && cmVipCouponPoId != null) {
+            for (int i = 0; i < cmCouponPos.size() ; i++) {
+                relation.setCouponId(cmCouponPos.get(i).getId());
+                relation.setMontId(cmVipCouponPoId.toString());
+                relation.setDelFlag("0");
+                relation.setUpdateTime(date);
+                cmBehaviorRecordMapper.insertRelation(relation);
+            }
+        }
+
+        log.info("========vip优惠券月份关系创建========");
+    }
+
+    /*
+    输入日期字符串比如201703,返回当月第一天的Date
+    */
+    public static Date getMinDay(String month) {
+        try {
+            Date nowDate = sdf.parse(month);
+            calendar = Calendar.getInstance();
+            calendar.setTime(nowDate);
+            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
+            return calendar.getTime();
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /*
+    输入日期字符串,返回下个月1号0点
+    */
+    public static Date getMaxDay(String month) {
+        try {
+            Date nowDate = sdf.parse(month);
+            calendar = Calendar.getInstance();
+            calendar.setTime(nowDate);
+            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+            calendar.add(Calendar.DAY_OF_MONTH,1);
+            return calendar.getTime();
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

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

@@ -2,6 +2,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 lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Configuration;
@@ -26,6 +27,8 @@ public class CmOrganValueSystemTask {
 
     @Resource private CmBehaviorRecordService cmBehaviorRecordService;
 
+    @Resource private CmVipCouponService cmVipCouponService;
+
     /**
      * 每月一号更新用户活跃状态、用户价值
      */
@@ -41,4 +44,23 @@ public class CmOrganValueSystemTask {
     public void behaviorAccessDuration() {
         cmBehaviorRecordService.updateBehaviorTime();
     }
+
+    /**
+     * 每天修改前一天的符合条件的数据
+     */
+    @Scheduled(cron = "0 5 0 * * ?")
+    public void updateBehavior() { cmBehaviorRecordService.updateBehaviorUser();}
+
+    /**
+     * 每天生成前一天的符用户行为列表数据
+     */
+    @Scheduled(cron = "0 15 0 * * ?")
+    public void insertBehaviorUser() { cmBehaviorRecordService.insertBehaviorUser();}
+    /**
+     * 每个季度创建专属优惠券
+     */
+    @Scheduled(cron = "0 00 00 1 5,8,11,2 ?")
+    public void svipCoupon() {
+        cmVipCouponService.openCoupon();
+    }
 }

+ 211 - 8
src/main/resources/mapper/CmBehaviorRecordMapper.xml

@@ -2,8 +2,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">
     <insert id="insertRecord">
-        INSERT INTO cm_behavior_record (IP, userID, pagePath, pageType, pageLabel, behaviorType, productID, accessTime, accessDuration, accessDate,referer,accessSource,accessClient,isReckon,region)
-        VALUES(#{IP},#{userId},#{pagePath},#{pageType},#{pageLabel},#{behaviorType},#{productId},#{accessTime},#{accessDuration},#{accessDate},#{referer},#{accessSource},#{accessClient},#{isReckon},#{region})
+        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>
 
     <select id="toDateRecode" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
@@ -20,18 +20,221 @@
     <update id="updateDuration">
         UPDATE cm_behavior_record
         SET accessDuration = #{accessDuration},
-            isReckon = #{isReckon},
-            region = #{region}
+            isReckon = #{isReckon}
         WHERE recordID = #{recordID}
     </update>
-    <select id="findList" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
-        SELECT * FROM cm_behavior_record where recordID between #{startId} and #{endId}
+    <select id="findList" resultType="com.caimei365.tools.model.po.CmUserPo">
+        SELECT userID, registerIP FROM USER where userID between #{startId} and #{endId}
     </select>
     <update id="updateOldData">
+        UPDATE USER
+        SET ipAddress = #{ipAddress}
+        WHERE userID = #{userID}
+    </update>
+
+
+    <select id="selSvipCoupon" resultType="com.caimei365.tools.model.po.CmVipCouponPo">
+        SELECT id,
+               useTime,
+               updateTime,
+               status,
+               delFlag
+        FROM cm_svip_coupon_month WHERE delFlag != 0 AND useTime BETWEEN #{startTime} AND #{endTime}
+    </select>
+    <update id="updateSvipCoupon">
+        UPDATE cm_svip_coupon_month
+        SET delFlag = 0
+        WHERE id = #{id}
+    </update>
+    <insert id="insertVipCouponMonth">
+        INSERT INTO cm_svip_coupon_month (useTime, updateTime, status,delFlag)
+        VALUES (#{useTime}, #{updateTime}, #{status}, #{delFlag})
+    </insert>
+    <select id="selCoupon" resultType="com.caimei365.tools.model.po.CmCouponPo">
+        SELECT
+        id,
+        name,
+        couponAmount,
+        touchPrice,
+        startDate,
+        endDate,
+        receivePeriod,
+        useTimeFlag,
+        receiveFlag,
+        usePeriod,
+        status,
+        couponType,
+        vipFlag,
+        userId,
+        shopId,
+        productType,
+        pcBanner,
+        appletsBanner,
+        categoryType,
+        couponsMode,
+        moneyCouponPrice,
+        moneyCouponFlag,
+        couponPayWay,
+        moneyCouponType,
+        createDate,
+        delFlag
+        FROM cm_coupon WHERE configure = 1
+    </select>
+
+    <update id="updateCoupon">
+        UPDATE cm_coupon
+        SET configure = #{configure}
+        WHERE id = #{id}
+    </update>
+    <insert id="insertCoupon">
+        INSERT INTO cm_coupon(
+            name,
+            couponPayWay,
+            couponAmount,
+            touchPrice,
+            startDate,
+            endDate,
+            receivePeriod,
+            receiveFlag,
+            useTimeFlag,
+            usePeriod,
+            status,
+            couponType,
+            vipFlag,
+            userId,
+            shopId,
+            productType,
+            pcBanner,
+            appletsBanner,
+            categoryType,
+            couponsMode,
+            createDate,
+            moneyCouponPrice,
+            moneyCouponFlag,
+            moneyCouponType,
+            delFlag,
+            configure
+        ) VALUES (
+             #{name},
+             #{couponPayWay},
+             #{couponAmount},
+             #{touchPrice},
+             #{startDate},
+             #{endDate},
+             #{receivePeriod},
+             #{receiveFlag},
+             #{useTimeFlag},
+             #{usePeriod},
+             #{status},
+             #{couponType},
+             #{vipFlag},
+             #{userId},
+             #{shopId},
+             #{productType},
+             #{pcBanner},
+             #{appletsBanner},
+             #{categoryType},
+             #{couponsMode},
+             #{createDate},
+             #{moneyCouponPrice},
+             #{moneyCouponFlag},
+             #{moneyCouponType},
+             #{delFlag},
+             #{configure}
+         )
+    </insert>
+    <select id="selById" resultType="integer">
+        select max(id) as id from cm_coupon
+    </select>
+    <select id="selCouponPro" resultType="com.caimei365.tools.model.po.CmCouponAssociatePo">
+        select * from cm_coupon_product where couponId = #{couponId}
+    </select>
+    <insert id="insertCouponAssociate">
+        INSERT INTO `cm_coupon_product` (
+            `couponId`, `productId`, `pcStatus`,
+            `appletsStatus`,
+            `sort`, `addTime`, `delFlag`
+        )
+        VALUES
+            (
+                #{couponId}, #{productId}, #{pcStatus},
+                #{appletsStatus},
+                #{sort}, #{addTime}, #{delFlag}
+            )
+    </insert>
+    <select id="selSvipCouponById" resultType="integer">
+        SELECT max(id) as id FROM cm_svip_coupon_month
+    </select>
+    <insert id="insertRelation">
+        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>
+    <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>
+    <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>
+    <update id="updateBehavior">
         UPDATE cm_behavior_record
-        SET isReckon = #{isReckon},
-            region = #{region}
+        SET IP = #{IP},
+        userID = #{userId}
         WHERE recordID = #{recordID}
     </update>
+    <select id="selYesterdayList">
+        INSERT INTO cm_behavior_record_index (IP, userID, clubID, lastAccessTime, companyType, corporateName,
+        contacts, phoneNumber, spName, number, consultName, consultMobile, behaviorType, productID, accessTime, accessDuration, accessDate, accessClient, region, delFlag)
+        SELECT
+        b.IP,
+        b.userID,
+        c.clubID,
+        MAX(b.accessTime) AS lastAccessTime,
+        (
+        CASE WHEN u.userIdentity = 2 THEN 2
+        WHEN u.userIdentity = 4 THEN 2
+        WHEN u.userIdentity = 3 THEN 3
+        WHEN b.userID = 0 THEN 1
+        END)AS companyType,
+        (
+        CASE WHEN b.userID = 0 THEN ''
+        WHEN u.userIdentity = 2 THEN c.name
+        WHEN u.userIdentity = 4 THEN IF(c.name != u.userName,c.name,'')
+        END)AS corporateName,
+        (
+        CASE WHEN b.userID = 0 THEN ''
+        WHEN b.userID != 0 THEN u.userName
+        END)AS contacts,
+        (CASE WHEN u.userIdentity = 2 THEN c.contractMobile
+        WHEN u.userIdentity = 4 THEN c.contractMobile
+        WHEN u.userIdentity = 3 THEN s.contractMobile
+        END)AS phoneNumber,
+        (SELECT CASE STATUS WHEN 91 THEN '采美默认协销经理(官方账号)' ELSE linkMan END FROM serviceprovider WHERE serviceProviderID = c.spID) AS spName,
+        COUNT(b.IP) AS numbers,
+        (SELECT consultName
+        FROM cm_roos_information
+        WHERE IP = b.IP AND createTime LIKE CONCAT('%',b.accessDate,'%') AND (consultName IS NOT NULL OR consultName = '') LIMIT 1) AS consultName,
+        (SELECT consultMobile
+        FROM cm_roos_information
+        WHERE IP = b.IP AND createTime LIKE CONCAT('%',b.accessDate,'%') AND (consultName IS NOT NULL OR consultName = '') LIMIT 1) AS consultMobile,
+        b.behaviorType,
+        b.productID,
+        b.accessTime,
+        SUM(b.accessDuration) AS accessDuration,
+        b.accessDate,
+        b.accessClient,
+        b.region AS region,
+        b.delFlag
+        FROM cm_behavior_record b
+        LEFT JOIN USER u ON b.userID = u.userID
+        LEFT JOIN club c ON b.userID = c.userID
+        LEFT JOIN shop s ON b.userID = s.userID
+        WHERE  b.IP != '106.55.202.118' AND b.delFlag = 0  AND b.accessDate = #{accessDate}
+        GROUP BY b.IP, b.accessDate,b.userID, b.behaviorType ORDER BY b.accessTime DESC
+    </select>
 </mapper>