Przeglądaj źródła

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

zhijiezhao 2 lat temu
rodzic
commit
23bf2df540

+ 2 - 1
src/main/java/com/caimei365/tools/controller/BaseApi.java

@@ -63,7 +63,8 @@ public class BaseApi {
      */
     /*@GetMapping("/record/update")
     public void svipCoupon() throws IOException {
-
+//        cmVipCouponService.openCoupon();
+//        cmBehaviorRecordService.updateClubAddress(startId, endId);
         cmBehaviorRecordService.insertTodayData();
     }*/
 

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

@@ -53,10 +53,18 @@ public interface CmBehaviorRecordMapper {
      */
     void updateOldData(CmUserPo userPo);
 
-    List<CmVipCouponPo> selSvipCoupon(@Param("startTime") String startTime, @Param("endTime") String endTime);
+    CmVipCouponPo selSvipCoupon(@Param("startTime") String startTime, @Param("endTime") String endTime);
 
+    /**
+     * 将本季度优惠券开放
+     * @param cmVipCouponPo
+     */
     void updateSvipCoupon(CmVipCouponPo cmVipCouponPo);
 
+    /**
+     * 生成下一季度优惠券
+     * @param cmVipCouponPo
+     */
     void insertVipCouponMonth(CmVipCouponPo cmVipCouponPo);
 
     List<CmCouponPo> selCoupon();
@@ -65,14 +73,20 @@ public interface CmBehaviorRecordMapper {
 
     void insertCoupon(CmCouponPo cmCouponPo);
 
-    Integer selById();
-
-    List<CmCouponAssociatePo> selCouponPro(@Param("couponId") String couponId);
+    List<CmCouponAssociatePo> selCouponPro(@Param("couponId") Integer couponId);
 
+    /**
+     * 插入新优惠券商品
+     * @param associate
+     */
     void insertCouponAssociate(CmCouponAssociatePo associate);
 
     Integer selSvipCouponById();
 
+    /**
+     * vip优惠券月份关系
+     * @param cmVipCouponRelation
+     */
     void insertRelation(CmVipCouponRelation cmVipCouponRelation);
 
     List<CmBehaviorRecordPo> countNum(@Param("accessDate") String accessDate);
@@ -116,6 +130,12 @@ public interface CmBehaviorRecordMapper {
      */
     void delTodayData();
 
+    /**
+     * 所有供应商关联标签
+     * @return
+     */
+    List<String> shopKeyword();
+
     /**
      * 查询供应商id
      * @param strList 页面标签
@@ -135,5 +155,28 @@ public interface CmBehaviorRecordMapper {
      * @param shopId 供应商id
      */
     void insertShopId(@Param("recordId") Integer recordId, @Param("shopId") Integer shopId);
+
+    /**
+     * 个人机构注册ip
+     * @return
+     */
+    List<CmBehaviorRecordPo> selRegisterIP(Integer startId, Integer endId);
+
+    /**
+     * 省份
+     * @return
+     */
+    Integer selProvince(@Param("regionPro") String regionPro);
+
+    /**
+     * 市
+     * @return
+     */
+    AddressPo selCity(@Param("regionCity") String regionCity);
+
+    /**
+     * 更新机构地址数据
+     */
+    void upClubAddress(@Param("clubId") String clubId, @Param("provinceId") Integer provinceId, @Param("cityId") Integer cityId);
 }
 

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

@@ -0,0 +1,21 @@
+package com.caimei365.tools.model.po;
+
+import lombok.Data;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/4/6
+ */
+@Data
+public class AddressPo {
+    /**
+     * 省份Id
+     */
+    private Integer provinceId;
+    /**
+     * 市Id
+     */
+    private Integer cityId;
+}

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

@@ -159,4 +159,16 @@ public class CmBehaviorRecordPo {
      * 标签
      */
     private String label;
+    /**
+     * 用户注册IP
+     */
+    private String registerIp;
+    /**
+     * 机构省份Id
+     */
+    private Integer provinceId;
+    /**
+     * 机构市Id
+     */
+    private Integer cityId;
 }

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

@@ -18,7 +18,7 @@ import java.util.List;
 public class CmCouponPo implements Serializable {
 
     private static final long serialVersionUID = 1L;
-    private String id;
+    private Integer id;
     private String name;        // 活动主题
     private BigDecimal couponAmount;        // 优惠券金额(面值)
     private BigDecimal touchPrice;        // 优惠满减条件金额

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

@@ -13,7 +13,7 @@ import java.util.Date;
 @Data
 public class CmVipCouponRelation {
     //优惠券id
-    private String couponId;
+    private Integer couponId;
     //优惠券id
     private String montId;
     private Date updateTime;

+ 2 - 0
src/main/java/com/caimei365/tools/service/CmBehaviorRecordService.java

@@ -23,4 +23,6 @@ public interface CmBehaviorRecordService {
     void insertBehaviorUser();
 
     void insertTodayData();
+
+    void updateClubAddress(Integer startId, Integer endId);
 }

+ 141 - 8
src/main/java/com/caimei365/tools/service/impl/CmBehaviorRecordServiceImpl.java

@@ -2,6 +2,7 @@ package com.caimei365.tools.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.caimei365.tools.mapper.CmBehaviorRecordMapper;
+import com.caimei365.tools.model.po.AddressPo;
 import com.caimei365.tools.model.po.CmBehaviorRecordPo;
 import com.caimei365.tools.model.po.CmUserPo;
 import com.caimei365.tools.model.po.IpSavePo;
@@ -362,16 +363,36 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
         List<CmBehaviorRecordPo> yesterdayList = recordMapper.selYesterdayList(format);
         // 详细数据
         List<CmBehaviorRecordPo> selDataList = recordMapper.selDataList(format);
+        // 获取供应商关联所有标签
+        List<String> keywords = recordMapper.shopKeyword();
         for (CmBehaviorRecordPo data : yesterdayList) {
             ArrayList<String> item = new ArrayList();
             ArrayList<String> shopNames = new ArrayList();
             int num = 0;
             for (CmBehaviorRecordPo recordPo : selDataList) {
                 if (recordPo.getIP().equals(data.getIP()) && recordPo.getUserId().equals(data.getUserId())) {
-                    if (num < 5) {
-                        if (!item.contains(recordPo.getPageLabel())) {
-                            item.add(recordPo.getPageLabel());
-                            num++;
+                    // 标签信息 对多存储10个
+                    if (num < 10) {
+                        if (StringUtils.isNotBlank(recordPo.getPageLabel())) {
+                            if (recordPo.getPageLabel().contains(",")) {
+                                String[] split = recordPo.getPageLabel().split(",");
+                                for (String s : split) {
+                                    if (keywords.contains(s)) {
+                                        if (!item.contains(s)) {
+                                            item.add(s);
+                                            num++;
+                                        }
+                                    }
+                                }
+                            } else {
+                                if (keywords.contains(recordPo.getPageLabel())) {
+                                    if (!item.contains(recordPo.getPageLabel())) {
+                                        item.add(recordPo.getPageLabel());
+                                        num++;
+                                    }
+                                }
+                            }
+
                         }
                     }
                     if (StringUtils.isNotBlank(recordPo.getRelevanceShop()) && !shopNames.contains(recordPo.getRelevanceShop())) {
@@ -404,6 +425,7 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
         int id = 1;
         // 所有用户供应商数据
         List<CmBehaviorRecordPo> selDataList = recordMapper.selDataList(format);
+        List<String> keywords = recordMapper.shopKeyword();
         for (CmBehaviorRecordPo data : todayData) {
             ArrayList<String> item = new ArrayList();
             ArrayList<String> shopNames = new ArrayList();
@@ -413,10 +435,27 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
             for (CmBehaviorRecordPo recordPo : selDataList) {
                 if (recordPo.getIP().equals(data.getIP()) && recordPo.getUserId().equals(data.getUserId())) {
                     // 标签信息
-                    if (num < 5) {
-                        if (!item.contains(recordPo.getPageLabel())) {
-                            item.add(recordPo.getPageLabel());
-                            num++;
+                    if (num < 10) {
+                        if (StringUtils.isNotBlank(recordPo.getPageLabel())) {
+                            if (recordPo.getPageLabel().contains(",")) {
+                                String[] split = recordPo.getPageLabel().split(",");
+                                for (String s : split) {
+                                    if (keywords.contains(s)) {
+                                        if (!item.contains(s)) {
+                                            item.add(s);
+                                            num++;
+                                        }
+                                    }
+                                }
+                            } else {
+                                if (keywords.contains(recordPo.getPageLabel())) {
+                                    if (!item.contains(recordPo.getPageLabel())) {
+                                        item.add(recordPo.getPageLabel());
+                                        num++;
+                                    }
+                                }
+                            }
+
                         }
                     }
                     // 供应商
@@ -428,6 +467,54 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
             data.setLabel(StringUtils.strip(item.toString(), "[]"));
             data.setRelevanceShop(StringUtils.strip(shopNames.toString(), "[]"));
             recordMapper.inBehaviorToday(data);
+            log.info("====今日用户行为列表数据已生成====");
+        }
+    }
+
+    @Override
+    public void updateClubAddress(Integer startId, Integer endId) {
+        List<CmBehaviorRecordPo> recordPoList = recordMapper.selRegisterIP(startId, endId);
+        if (recordPoList.size() > 0) {
+            recordPoList.forEach(r -> {
+                if (StringUtils.isNotBlank(r.getRegisterIp()) && (null == r.getProvinceId() && null == r.getCityId())) {
+                    log.info("个人机构地址初始化=====》"+r.getClubId());
+                    try {
+                        Map<String, String> map = recordAddress(r.getRegisterIp());
+                        if (!map.isEmpty()) {
+                            // 省份
+                            String regionPro = map.get("regionPro");
+                            Integer provinceId = recordMapper.selProvince(regionPro);
+                            // 市
+                            String regionCity = map.get("regionCity");
+                            AddressPo addressPo = recordMapper.selCity(regionCity);
+
+                            Integer cityId = null;
+                            if (null != provinceId) {
+                                if (null != addressPo) {
+                                    if (null != addressPo.getProvinceId()) {
+                                        if (addressPo.getProvinceId().equals(provinceId)) {
+                                            // 省份id与地址表的省份地址对应 取地址表地址 机构给予 省、市地址
+                                            recordMapper.upClubAddress(r.getClubId(), provinceId, addressPo.getCityId());
+                                        } else {
+                                            // 省份id与地址表的省份地址不对应 取地址表地址
+                                            provinceId = addressPo.getProvinceId();
+                                            recordMapper.upClubAddress(r.getClubId(), provinceId, addressPo.getCityId());
+                                        }
+                                    } else {
+                                        // 地址表没有省份id 机构给予省份地址Id
+                                        recordMapper.upClubAddress(r.getClubId(), provinceId, cityId);
+                                    }
+                                } else {
+                                    // 省份不为空 市为空,机构给予省份地址Id
+                                    recordMapper.upClubAddress(r.getClubId(), provinceId, cityId);
+                                }
+                            }
+                        }
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            });
         }
     }
 
@@ -470,6 +557,52 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
         }
         return region;
     }
+    // 获取IP对应地址 ---- 太平洋
+    public static Map<String, String> recordAddress(String ip) throws IOException {
+        URL url = null;
+        HttpURLConnection connection = null;
+        String encoding = "gbk";
+        String text = "";
+        String line = "";
+        String regionPro = "";
+        String regionCity = "";
+        Map<String,String> map = new HashMap<>();
+        String urlStr = "http://whois.pconline.com.cn/ipJson.jsp?ip=" + ip + "&json=true";
+        try {
+            url = new URL(urlStr);
+            connection = (HttpURLConnection) url.openConnection();    //新建链接实例
+            connection.setConnectTimeout(20000);    //设置链接超时时间,单位毫秒
+            connection.setReadTimeout(20000);        //设置读取数据超时时间,单位毫秒
+            connection.setDoOutput(true);        //是否打开输出流true|false
+            connection.setDoInput(true);        //是否打开输入流true|false
+            connection.setRequestMethod("GET");        // 提交方式get|post
+            connection.setUseCaches(false);        // 是否加入缓存true|false
+            connection.connect();    //打开链接端口
+
+            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));    // 往对端写完数据对端服务器返回数据。以BufferedReader流来读取
+
+            while ((line = reader.readLine()) != null) {
+                text += line + "\n";
+            }
+            reader.close();
+
+            JSONObject jsonObject = JSONObject.parseObject(text);
+            // 省份
+            regionPro = jsonObject.get("pro").toString();
+            map.put("regionPro", regionPro);
+            // 市区
+            regionCity = jsonObject.get("city").toString();
+            map.put("regionCity", regionCity);
+
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } finally {
+            if (connection != null) {
+                connection.disconnect();    //关闭连接
+            }
+        }
+        return map;
+    }
 
     private String source(String link) {
         if (link.contains("www.baidu.com")) {

+ 28 - 38
src/main/java/com/caimei365/tools/service/impl/CmVipCouponServiceImpl.java

@@ -46,19 +46,15 @@ public class CmVipCouponServiceImpl implements CmVipCouponService {
         String endTime = simpleDateFormat.format(time);
         CmVipCouponPo vipCouponPo = new CmVipCouponPo();
 
-        List<CmVipCouponPo> cmVipCouponPoList = cmBehaviorRecordMapper.selSvipCoupon(startTime, endTime);
+        CmVipCouponPo cmVipCouponPo = 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);
-            }
-        }
+        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);
@@ -66,10 +62,9 @@ public class CmVipCouponServiceImpl implements CmVipCouponService {
         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) {
-
+            int couponId = cmCouponPo.getId();  // 获取专属优惠券id
             cmCouponPo.setConfigure(0);
             // 修改优惠券配置属性
             cmBehaviorRecordMapper.updateCoupon(cmCouponPo);
@@ -81,38 +76,33 @@ public class CmVipCouponServiceImpl implements CmVipCouponService {
             cmCouponPo.setCreateDate(new Date());
             cmCouponPo.setDelFlag("0");
             cmBehaviorRecordMapper.insertCoupon(cmCouponPo);
+
+            /*
+             * vip优惠券月份关系
+             */
+            CmVipCouponRelation relation = new CmVipCouponRelation();
+            relation.setCouponId(cmCouponPo.getId());
+            relation.setMontId(vipCouponPo.getId());
+            relation.setDelFlag("0");
+            relation.setUpdateTime(date);
+            cmBehaviorRecordMapper.insertRelation(relation);
+
             // 插入新优惠券商品
-            Integer integer = cmBehaviorRecordMapper.selById();
-            List<CmCouponAssociatePo> associatePoList = cmBehaviorRecordMapper.selCouponPro(cmCouponPo.getId());
+            List<CmCouponAssociatePo> associatePoList = cmBehaviorRecordMapper.selCouponPro(couponId);
+            log.info("couponId=======>"+couponId);
             if (associatePoList.size() != 0) {
                 for (CmCouponAssociatePo couponAssociatePo : associatePoList) {
-                    couponAssociatePo.setCouponId(integer);
+                    log.info("associatePoList =======>"+couponAssociatePo);
+                    couponAssociatePo.setCouponId(cmCouponPo.getId());
                     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
+    /**
+    * 输入日期字符串比如201703,返回当月第一天的Date
     */
     public static Date getMinDay(String month) {
         try {
@@ -127,8 +117,8 @@ public class CmVipCouponServiceImpl implements CmVipCouponService {
         return null;
     }
 
-    /*
-    输入日期字符串,返回下个月1号0点
+    /**
+    * 输入日期字符串,返回下个月1号0点
     */
     public static Date getMaxDay(String month) {
         try {

+ 35 - 7
src/main/resources/mapper/CmBehaviorRecordMapper.xml

@@ -46,7 +46,7 @@
         SET delFlag = 0
         WHERE id = #{id}
     </update>
-    <insert id="insertVipCouponMonth">
+    <insert id="insertVipCouponMonth" parameterType="com.caimei365.tools.model.po.CmVipCouponPo" keyProperty="id" useGeneratedKeys="true" >
         INSERT INTO cm_svip_coupon_month (useTime, updateTime, status,delFlag)
         VALUES (#{useTime}, #{updateTime}, #{status}, #{delFlag})
     </insert>
@@ -78,7 +78,7 @@
         moneyCouponType,
         createDate,
         delFlag
-        FROM cm_coupon WHERE configure = 1
+        FROM cm_coupon WHERE delFlag = 0 AND configure = 1
     </select>
 
     <update id="updateCoupon">
@@ -86,7 +86,7 @@
         SET configure = #{configure}
         WHERE id = #{id}
     </update>
-    <insert id="insertCoupon">
+    <insert id="insertCoupon" parameterType="com.caimei365.tools.model.po.CmCouponPo" keyProperty="id" useGeneratedKeys="true">
         INSERT INTO cm_coupon(
             name,
             couponPayWay,
@@ -143,11 +143,8 @@
              #{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 * from cm_coupon_product where delFlag = 0 and couponId = #{couponId}
     </select>
     <insert id="insertCouponAssociate">
         INSERT INTO `cm_coupon_product` (
@@ -395,6 +392,13 @@
     <delete id="delTodayData">
         TRUNCATE TABLE cm_behavior_record_today
     </delete>
+    <select id="shopKeyword" resultType="java.lang.String">
+        SELECT cusf.keyword FROM cm_shop_relevance csr
+             LEFT JOIN cm_shop_label csl ON csr.id = csl.relevanceId
+             LEFT JOIN cm_user_search_frequency cusf ON csl.keywordId = cusf.id
+        WHERE  csr.delFlag = 0 AND
+            csl.delFlag = 0
+    </select>
     <select id="shopIds" resultType="java.lang.Integer">
         SELECT DISTINCT csr.shopID FROM cm_shop_relevance csr
             LEFT JOIN cm_shop_label csl ON csr.id = csl.relevanceId
@@ -415,5 +419,29 @@
     <insert id="insertShopId">
         insert into cm_behavior_shopId (recordID, shopID) values (#{recordId}, #{shopId})
     </insert>
+    <select id="selRegisterIP" resultType="com.caimei365.tools.model.po.CmBehaviorRecordPo">
+        SELECT u.userID as userId, u.registerIP as registerIp, c.clubID as clubId, c.provinceID as provinceId , c.cityID as cityId
+        FROM USER u
+        LEFT JOIN club c ON c.userID = u.userID
+        WHERE u.userIdentity = 4 and c.clubID between #{startId} and #{endId}
+    </select>
+    <select id="selProvince" resultType="java.lang.Integer">
+        SELECT provinceID as provinceId FROM province WHERE NAME LIKE concat('%', #{regionPro} ,'%') limit 1
+    </select>
+    <select id="selCity" resultType="com.caimei365.tools.model.po.AddressPo">
+        SELECT cityID as cityId, provinceID as provinceId FROM city WHERE NAME LIKE concat('%', #{regionCity} ,'%') AND validFlag = 1 limit 1
+    </select>
+    <update id="upClubAddress">
+        update club
+        <set>
+            <if test="provinceId != null and provinceId != ''">
+                provinceID = #{provinceId},
+            </if>
+            <if test="cityId != null and cityId != ''">
+                cityID = #{cityId}
+            </if>
+        </set>
+        where clubID = #{clubId}
+    </update>
 </mapper>