| @@ -10,3 +10,9 @@ INSERT INTO `mallink`.`wx_tags_type`(`id`, `name`, `group_id`, `group_name`, `fl | |||||
| INSERT INTO `mallink`.`wx_tags`(`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES (176, '运动频率低', 4, '行为偏好', 31, '运动频率'); | INSERT INTO `mallink`.`wx_tags`(`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES (176, '运动频率低', 4, '行为偏好', 31, '运动频率'); | ||||
| INSERT INTO `mallink`.`wx_tags`(`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES (177, '运动频率中', 4, '行为偏好', 31, '运动频率'); | INSERT INTO `mallink`.`wx_tags`(`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES (177, '运动频率中', 4, '行为偏好', 31, '运动频率'); | ||||
| INSERT INTO `mallink`.`wx_tags`(`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES (178, '运动频率高', 4, '行为偏好', 31, '运动频率'); | INSERT INTO `mallink`.`wx_tags`(`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES (178, '运动频率高', 4, '行为偏好', 31, '运动频率'); | ||||
| INSERT INTO `mallink`.`wx_tags_type`(`id`, `name`, `group_id`, `group_name`, `flag`) VALUES (32, '购买力', 4, '行为偏好', 1); | |||||
| INSERT INTO `mallink`.`wx_tags`(`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES (179, '购买力弱', 4, '行为偏好', 32, '购买力'); | |||||
| INSERT INTO `mallink`.`wx_tags`(`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES (180, '购买力中', 4, '行为偏好', 32, '购买力'); | |||||
| INSERT INTO `mallink`.`wx_tags`(`id`, `name`, `group_id`, `group_name`, `type_id`, `type_name`) VALUES (181, '购买力强', 4, '行为偏好', 32, '购买力'); | |||||
| @@ -0,0 +1,46 @@ | |||||
| /* | |||||
| Navicat Premium Data Transfer | |||||
| Source Server : 101.200.130.134 | |||||
| Source Server Type : MySQL | |||||
| Source Server Version : 50728 | |||||
| Source Host : 101.200.130.134:3306 | |||||
| Source Schema : mallink | |||||
| Target Server Type : MySQL | |||||
| Target Server Version : 50728 | |||||
| File Encoding : 65001 | |||||
| Date: 20/08/2021 15:37:07 | |||||
| */ | |||||
| SET NAMES utf8mb4; | |||||
| SET FOREIGN_KEY_CHECKS = 0; | |||||
| -- ---------------------------- | |||||
| -- Table structure for jm_sport_order | |||||
| -- ---------------------------- | |||||
| DROP TABLE IF EXISTS `jm_sport_order`; | |||||
| CREATE TABLE `jm_sport_order` ( | |||||
| `id` bigint(20) NOT NULL COMMENT '主键ID', | |||||
| `order_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, | |||||
| `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', | |||||
| `parent_tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '父租户ID', | |||||
| `user_phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, | |||||
| `user_id` bigint(20) DEFAULT NULL COMMENT 'c端用户id', | |||||
| `product_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, | |||||
| `num` int(11) DEFAULT NULL COMMENT '数量', | |||||
| `price` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付金额', | |||||
| `payment` int(11) NOT NULL COMMENT '分', | |||||
| `payment_time` datetime(0) DEFAULT NULL COMMENT '支付时间', | |||||
| `pay_way` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '支付途径', | |||||
| `gym_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '消费的场馆', | |||||
| `create_date` datetime(0) NOT NULL COMMENT '创建时间', | |||||
| `update_date` datetime(0) NOT NULL COMMENT '更新时间', | |||||
| PRIMARY KEY (`id`) USING BTREE, | |||||
| UNIQUE INDEX `id_UNIQUE`(`id`) USING BTREE, | |||||
| UNIQUE INDEX `order_id`(`order_id`) USING BTREE, | |||||
| INDEX `idx_user`(`user_id`) USING BTREE COMMENT '订单索引-用户' | |||||
| ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '订单正反向交易各产生一个单独订单,用order_number保持正反向交易一致。' ROW_FORMAT = Dynamic; | |||||
| SET FOREIGN_KEY_CHECKS = 1; | |||||
| @@ -16,6 +16,8 @@ import org.springframework.web.bind.annotation.RequestMapping; | |||||
| import org.springframework.web.bind.annotation.ResponseBody; | import org.springframework.web.bind.annotation.ResponseBody; | ||||
| import org.springframework.web.bind.annotation.RestController; | import org.springframework.web.bind.annotation.RestController; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.math.BigDecimal; | |||||
| import java.math.RoundingMode; | |||||
| import java.text.SimpleDateFormat; | import java.text.SimpleDateFormat; | ||||
| import java.util.Date; | import java.util.Date; | ||||
| import java.util.Locale; | import java.util.Locale; | ||||
| @@ -137,6 +139,12 @@ public class JinMaoController extends BaseController { | |||||
| logger.info("dfh order:"+param); | logger.info("dfh order:"+param); | ||||
| try { | try { | ||||
| String price = param.get("price")==null?"":param.get("price").toString(); | String price = param.get("price")==null?"":param.get("price").toString(); | ||||
| Integer payment = 0; | |||||
| if(StringUtils.isNotBlank(price)) { | |||||
| payment = new BigDecimal(price) | |||||
| .multiply(new BigDecimal(100)) | |||||
| .intValue(); | |||||
| } | |||||
| Integer num = param.get("num")==null?1:Integer.parseInt(param.get("num").toString()); | Integer num = param.get("num")==null?1:Integer.parseInt(param.get("num").toString()); | ||||
| String userPhone = param.get("userPhone")==null?"":param.get("userPhone").toString(); | String userPhone = param.get("userPhone")==null?"":param.get("userPhone").toString(); | ||||
| String gymName = param.get("gymName")==null?"":param.get("gymName").toString(); | String gymName = param.get("gymName")==null?"":param.get("gymName").toString(); | ||||
| @@ -162,6 +170,7 @@ public class JinMaoController extends BaseController { | |||||
| order.setProductName(productName); | order.setProductName(productName); | ||||
| order.setNum(num); | order.setNum(num); | ||||
| order.setPrice(price); | order.setPrice(price); | ||||
| order.setPayment(payment); | |||||
| order.setPaymentTime(paymentTime); | order.setPaymentTime(paymentTime); | ||||
| order.setPayWay(payWay); | order.setPayWay(payWay); | ||||
| order.setGymName(gymName); | order.setGymName(gymName); | ||||
| @@ -28,6 +28,8 @@ public class JmSportOrder extends TenantEntity { | |||||
| @io.swagger.annotations.ApiModelProperty(value="支付金额",name="price") | @io.swagger.annotations.ApiModelProperty(value="支付金额",name="price") | ||||
| private String price; | private String price; | ||||
| private Integer payment;//分 | |||||
| @io.swagger.annotations.ApiModelProperty(value="支付时间",name="paymentTime") | @io.swagger.annotations.ApiModelProperty(value="支付时间",name="paymentTime") | ||||
| private Date paymentTime; | private Date paymentTime; | ||||
| @@ -220,6 +220,10 @@ public enum EnumTag { | |||||
| ID_177(177L, EnumTagType.ID_31,"运动频率中"), | ID_177(177L, EnumTagType.ID_31,"运动频率中"), | ||||
| ID_178(178L, EnumTagType.ID_31,"运动频率高"), | ID_178(178L, EnumTagType.ID_31,"运动频率高"), | ||||
| ID_179(179L, EnumTagType.ID_32,"购买力低"), | |||||
| ID_180(180L, EnumTagType.ID_32,"购买力中"), | |||||
| ID_181(181L, EnumTagType.ID_32,"购买力强"), | |||||
| ID_1000(1000L, EnumTagType.ID_50,"一天以内"), | ID_1000(1000L, EnumTagType.ID_50,"一天以内"), | ||||
| ID_1001(1001L, EnumTagType.ID_50,"一周以内"), | ID_1001(1001L, EnumTagType.ID_50,"一周以内"), | ||||
| ID_1002(1002L, EnumTagType.ID_50,"一月以内"), | ID_1002(1002L, EnumTagType.ID_50,"一月以内"), | ||||
| @@ -44,6 +44,8 @@ public enum EnumTagType { | |||||
| ID_31(31L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_4, "运动频率"), | ID_31(31L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_4, "运动频率"), | ||||
| ID_32(32L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_4, "购买力"), | |||||
| ID_0(0L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_10, "会员手机"), | ID_0(0L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_10, "会员手机"), | ||||
| ID_50(50L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_10, "会员会龄"), | ID_50(50L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_10, "会员会龄"), | ||||
| ID_51(51L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_10, "会员等级"), | ID_51(51L, EnumTagTypeFlag.FLAG_SINGLE, EnumTagGroup.ID_10, "会员等级"), | ||||
| @@ -11,4 +11,5 @@ public interface JmSportOrderMapper extends CommonMapper<JmSportOrder, Long> { | |||||
| Integer findCount(JmSportOrder record); | Integer findCount(JmSportOrder record); | ||||
| Integer findAvgPayment(JmSportOrder jmSportOrder); | |||||
| } | } | ||||
| @@ -735,18 +735,42 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { | |||||
| jmSportOrder.updateTenantInfo(tenantEntity); | jmSportOrder.updateTenantInfo(tenantEntity); | ||||
| int count = jmSportOrderMapper.findCount(jmSportOrder); | int count = jmSportOrderMapper.findCount(jmSportOrder); | ||||
| // 平均30天订单数>3 高 | |||||
| // 3>平均30天订单数>1.5 中 | |||||
| // 1.5>平均30天订单数>0 低 | |||||
| float verifiedRate = (float)count/30; | float verifiedRate = (float)count/30; | ||||
| if (verifiedRate > 1F/4) | |||||
| if (verifiedRate > 1F/10) | |||||
| resList = assign(user, EnumTag.ID_178); | resList = assign(user, EnumTag.ID_178); | ||||
| else if (verifiedRate > 1F/7) | |||||
| else if (verifiedRate > 1F/20) | |||||
| resList = assign(user, EnumTag.ID_177); | resList = assign(user, EnumTag.ID_177); | ||||
| else if (verifiedRate > 1F/30) | |||||
| else | |||||
| resList = assign(user, EnumTag.ID_176); | resList = assign(user, EnumTag.ID_176); | ||||
| return resList; | return resList; | ||||
| } | } | ||||
| private List<WxTags> assignTypeId32(WxCUserBasicInfo user,TenantEntity tenantEntity) { | |||||
| List<WxTags> resList = null; | |||||
| JmSportOrder jmSportOrder = new JmSportOrder(); | |||||
| jmSportOrder.setUserId(user.getId()); | |||||
| jmSportOrder.updateTenantInfo(tenantEntity); | |||||
| Integer avgPayment = jmSportOrderMapper.findAvgPayment(jmSportOrder); | |||||
| // 30>平均订单金额>50 强购买力 | |||||
| // 30>平均订单金额>10 中购买力 | |||||
| // 10>平均订单金额>0 弱购买力 | |||||
| if(avgPayment != null){ | |||||
| if (avgPayment.intValue() >= 30) | |||||
| resList = assign(user, EnumTag.ID_181); | |||||
| else if (avgPayment.intValue() >= 10) | |||||
| resList = assign(user, EnumTag.ID_180); | |||||
| else | |||||
| resList = assign(user, EnumTag.ID_179); | |||||
| } | |||||
| return resList; | |||||
| } | |||||
| //打标接口 | //打标接口 | ||||
| @Override | @Override | ||||
| public List<WxTags> assignTags(List<Long> tagIdList, WxCUserBasicInfo user) { | public List<WxTags> assignTags(List<Long> tagIdList, WxCUserBasicInfo user) { | ||||
| @@ -947,7 +971,10 @@ public class WxCUserTagsServiceImpl implements WxCUserTagsService { | |||||
| WxCUserBasicInfo param = (WxCUserBasicInfo) obj; | WxCUserBasicInfo param = (WxCUserBasicInfo) obj; | ||||
| WxCUserBasicInfo user = wxCUserBasicInfoMapper.selectById(param.getId(),param.getFinalTenantId()); | WxCUserBasicInfo user = wxCUserBasicInfoMapper.selectById(param.getId(),param.getFinalTenantId()); | ||||
| if (user != null) { | if (user != null) { | ||||
| //运动频次 | |||||
| resList = assignTypeId31(user,tenantEntity); | resList = assignTypeId31(user,tenantEntity); | ||||
| //购买力 | |||||
| resList = assignTypeId32(user,tenantEntity); | |||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| @@ -12,6 +12,7 @@ | |||||
| <result column="num" jdbcType="INTEGER" property="num"/> | <result column="num" jdbcType="INTEGER" property="num"/> | ||||
| <result column="price" jdbcType="VARCHAR" property="price"/> | <result column="price" jdbcType="VARCHAR" property="price"/> | ||||
| <result column="payment" jdbcType="INTEGER" property="payment"/> | |||||
| <result column="payment_time" jdbcType="TIMESTAMP" property="paymentTime"/> | <result column="payment_time" jdbcType="TIMESTAMP" property="paymentTime"/> | ||||
| <result column="pay_way" jdbcType="VARCHAR" property="payWay"/> | <result column="pay_way" jdbcType="VARCHAR" property="payWay"/> | ||||
| @@ -23,7 +24,7 @@ | |||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| `id`,`order_id`,`tenant_id`,`parent_tenant_id`,`user_phone`,`user_id`, | `id`,`order_id`,`tenant_id`,`parent_tenant_id`,`user_phone`,`user_id`, | ||||
| `product_name`,`num`,`price`,`payment_time`,`pay_way`, | |||||
| `product_name`,`num`,`price`,`payment`,`payment_time`,`pay_way`, | |||||
| `gym_name`, | `gym_name`, | ||||
| `create_date`,`update_date` | `create_date`,`update_date` | ||||
| </sql> | </sql> | ||||
| @@ -99,6 +100,36 @@ | |||||
| <if test=" null != userId "> | <if test=" null != userId "> | ||||
| and `user_id` = #{userId} | and `user_id` = #{userId} | ||||
| </if> | </if> | ||||
| <if test="startDate != null"> | |||||
| and `payment_time` >= #{startDate} | |||||
| </if> | |||||
| <if test="endDate != null"> | |||||
| and `payment_time` <= #{endDate} | |||||
| </if> | |||||
| </select> | |||||
| <select id="findAvgPayment" parameterType="com.iformall.domain.po.JmSportOrder" resultType="Integer"> | |||||
| select TRUNCATE(Avg(payment),0) | |||||
| from jm_sport_order | |||||
| where 1 = 1 | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != userId "> | |||||
| and `user_id` = #{userId} | |||||
| </if> | |||||
| <if test="startDate != null"> | |||||
| and `payment_time` >= #{startDate} | |||||
| </if> | |||||
| <if test="endDate != null"> | |||||
| and `payment_time` <= #{endDate} | |||||
| </if> | |||||
| </select> | </select> | ||||
| </mapper> | </mapper> | ||||