Authored by linlong

Merge branch 'master' into fix_0223

1 package com.yoho.unions.common.redis; 1 package com.yoho.unions.common.redis;
2 2
3 import com.yoho.core.redis.YHListOperations; 3 import com.yoho.core.redis.YHListOperations;
  4 +import com.yoho.core.redis.YHRedisTemplate;
4 import com.yoho.unions.common.utils.SerializeUtils; 5 import com.yoho.unions.common.utils.SerializeUtils;
  6 +import com.yoho.unions.helper.CacheKeyHelper;
  7 +import org.apache.commons.collections.CollectionUtils;
5 import org.apache.commons.lang3.StringUtils; 8 import org.apache.commons.lang3.StringUtils;
6 import org.slf4j.Logger; 9 import org.slf4j.Logger;
7 import org.slf4j.LoggerFactory; 10 import org.slf4j.LoggerFactory;
@@ -9,6 +12,9 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -9,6 +12,9 @@ import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.stereotype.Component; 12 import org.springframework.stereotype.Component;
10 13
11 import javax.annotation.Resource; 14 import javax.annotation.Resource;
  15 +import java.util.ArrayList;
  16 +import java.util.Collection;
  17 +import java.util.concurrent.TimeUnit;
12 18
13 @Component 19 @Component
14 public class RedisListCache { 20 public class RedisListCache {
@@ -17,6 +23,8 @@ public class RedisListCache { @@ -17,6 +23,8 @@ public class RedisListCache {
17 23
18 @Resource(name="yhListOperations") 24 @Resource(name="yhListOperations")
19 YHListOperations<String, String> yhListOperations; 25 YHListOperations<String, String> yhListOperations;
  26 + @Resource
  27 + YHRedisTemplate<String, String> yHRedisTemplate;
20 28
21 /** 29 /**
22 * redis rightPop 操作 30 * redis rightPop 操作
@@ -66,4 +74,33 @@ public class RedisListCache { @@ -66,4 +74,33 @@ public class RedisListCache {
66 74
67 } 75 }
68 76
  77 + public <T> void rightPushAll(String key,Collection<T> values, long timeout, TimeUnit unit) {
  78 + logger.debug("Enter rightPushAll redis list. key is {}, value is {}, timeout is {}, unit is {}", key, values, timeout, unit);
  79 + // 如果是空列表,直接返回
  80 + if (CollectionUtils.isEmpty(values)) {
  81 + return;
  82 + }
  83 +
  84 + String cacheKey = key;
  85 + // 如果获取的key为空,则说明缓存开关是关闭的
  86 + if (StringUtils.isEmpty(cacheKey)) {
  87 + return;
  88 + }
  89 + try {
  90 + Collection<String> strValues = new ArrayList<String>();
  91 + for (T t : values) {
  92 + String strValue = CacheKeyHelper.value2String(t);
  93 + if (StringUtils.isEmpty(strValue)) {
  94 + continue;
  95 + }
  96 + strValues.add(strValue);
  97 + }
  98 + yhListOperations.rightPushAll(cacheKey, strValues);
  99 + yHRedisTemplate.longExpire(cacheKey, timeout, unit);
  100 +
  101 + } catch (Exception e) {
  102 + logger.warn("rightPushAll redis list operation failed. key is {}", cacheKey, e);
  103 + }
  104 + }
  105 +
69 } 106 }
  1 +package com.yoho.unions.vo;
  2 +
  3 +import java.io.Serializable;
  4 +import java.math.BigDecimal;
  5 +
  6 +/**
  7 + * 转化数据
  8 + * Created by yoho on 2017/2/22.
  9 + */
  10 +public class TransInfo implements Serializable {
  11 +
  12 + //标示是普通交寄还是首单交寄
  13 + private String type;
  14 +
  15 + private BigDecimal orderAmount;
  16 +
  17 + private String udid;
  18 +
  19 + private String uid;
  20 +
  21 + private String ordercode;
  22 +
  23 + public String getUid() {
  24 + return uid;
  25 + }
  26 +
  27 + public void setUid(String uid) {
  28 + this.uid = uid;
  29 + }
  30 +
  31 + public String getOrdercode() {
  32 + return ordercode;
  33 + }
  34 +
  35 + public void setOrdercode(String ordercode) {
  36 + this.ordercode = ordercode;
  37 + }
  38 +
  39 + public String getType() {
  40 + return type;
  41 + }
  42 +
  43 + public void setType(String type) {
  44 + this.type = type;
  45 + }
  46 +
  47 + public BigDecimal getOrderAmount() {
  48 + return orderAmount;
  49 + }
  50 +
  51 + public void setOrderAmount(BigDecimal orderAmount) {
  52 + this.orderAmount = orderAmount;
  53 + }
  54 +
  55 + public String getUdid() {
  56 + return udid;
  57 + }
  58 +
  59 + public void setUdid(String udid) {
  60 + this.udid = udid;
  61 + }
  62 +}
  1 +package com.yoho.unions.dal;
  2 +
  3 +
  4 +import com.yoho.unions.dal.model.UnionActivity;
  5 +
  6 +public interface IUnionActivityDAO {
  7 +
  8 + int insert(UnionActivity record);
  9 +
  10 + int insertSelective(UnionActivity record);
  11 +
  12 + UnionActivity selectByPrimaryKey(Long id);
  13 +
  14 + UnionActivity selectByUdid(String udid);
  15 +}
1 -//package com.yoho.unions.dal;  
2 -//  
3 -//  
4 -//import com.yoho.unions.dal.model.UnionDepartmentUrl;  
5 -//  
6 -//public interface IUnionDepartmentUrlDAO {  
7 -// int deleteByPrimaryKey(Integer id);  
8 -//  
9 -// int insert(UnionDepartmentUrl record);  
10 -//  
11 -// int insertSelective(UnionDepartmentUrl record);  
12 -//  
13 -// UnionDepartmentUrl selectByPrimaryKey(Integer id);  
14 -//  
15 -// int updateByPrimaryKeySelective(UnionDepartmentUrl record);  
16 -//  
17 -// int updateByPrimaryKey(UnionDepartmentUrl record);  
18 -//  
19 -// UnionDepartmentUrl selectByUnionType(String unionType);  
20 -//}  
1 -//package com.yoho.unions.dal;  
2 -//  
3 -//  
4 -//import com.yoho.unions.dal.model.UnionType;  
5 -//  
6 -//public interface IUnionTypeDAO {  
7 -// int deleteByPrimaryKey(Integer id);  
8 -//  
9 -// int insert(UnionType record);  
10 -//  
11 -// int insertSelective(UnionType record);  
12 -//  
13 -// UnionType selectByPrimaryKey(Integer id);  
14 -//  
15 -// UnionType selectByUnionType(Integer unionType);  
16 -//  
17 -// int updateByPrimaryKeySelective(UnionType record);  
18 -//  
19 -// int updateByPrimaryKey(UnionType record);  
20 -//}  
@@ -27,6 +27,8 @@ public class MktMarketingUrl { @@ -27,6 +27,8 @@ public class MktMarketingUrl {
27 27
28 private String mktActivityCode; 28 private String mktActivityCode;
29 29
  30 + private String landingPageUrl;
  31 +
30 public String getMktActivityCode() { 32 public String getMktActivityCode() {
31 return mktActivityCode; 33 return mktActivityCode;
32 } 34 }
@@ -130,4 +132,12 @@ public class MktMarketingUrl { @@ -130,4 +132,12 @@ public class MktMarketingUrl {
130 public void setCreateTime(Integer createTime) { 132 public void setCreateTime(Integer createTime) {
131 this.createTime = createTime; 133 this.createTime = createTime;
132 } 134 }
  135 +
  136 + public String getLandingPageUrl() {
  137 + return landingPageUrl;
  138 + }
  139 +
  140 + public void setLandingPageUrl(String landingPageUrl) {
  141 + this.landingPageUrl = landingPageUrl;
  142 + }
133 } 143 }
  1 +package com.yoho.unions.dal.model;
  2 +
  3 +public class UnionActivity {
  4 + private Long id;
  5 +
  6 + private String udid;
  7 +
  8 + private String muid;
  9 +
  10 + private String unionType;
  11 +
  12 + private String clientType;
  13 +
  14 + private String advertiserId;
  15 +
  16 + private String clickId;
  17 +
  18 + private Integer createTime;
  19 +
  20 + public Long getId() {
  21 + return id;
  22 + }
  23 +
  24 + public void setId(Long id) {
  25 + this.id = id;
  26 + }
  27 +
  28 + public String getUdid() {
  29 + return udid;
  30 + }
  31 +
  32 + public void setUdid(String udid) {
  33 + this.udid = udid == null ? null : udid.trim();
  34 + }
  35 +
  36 + public String getMuid() {
  37 + return muid;
  38 + }
  39 +
  40 + public void setMuid(String muid) {
  41 + this.muid = muid == null ? null : muid.trim();
  42 + }
  43 +
  44 + public String getUnionType() {
  45 + return unionType;
  46 + }
  47 +
  48 + public void setUnionType(String unionType) {
  49 + this.unionType = unionType == null ? null : unionType.trim();
  50 + }
  51 +
  52 + public String getClientType() {
  53 + return clientType;
  54 + }
  55 +
  56 + public void setClientType(String clientType) {
  57 + this.clientType = clientType == null ? null : clientType.trim();
  58 + }
  59 +
  60 + public String getAdvertiserId() {
  61 + return advertiserId;
  62 + }
  63 +
  64 + public void setAdvertiserId(String advertiserId) {
  65 + this.advertiserId = advertiserId == null ? null : advertiserId.trim();
  66 + }
  67 +
  68 + public String getClickId() {
  69 + return clickId;
  70 + }
  71 +
  72 + public void setClickId(String clickId) {
  73 + this.clickId = clickId == null ? null : clickId.trim();
  74 + }
  75 +
  76 + public Integer getCreateTime() {
  77 + return createTime;
  78 + }
  79 +
  80 + public void setCreateTime(Integer createTime) {
  81 + this.createTime = createTime;
  82 + }
  83 +}
  1 +package com.yoho.unions.dal.model;
  2 +
  3 +import java.math.BigDecimal;
  4 +
  5 +/**
  6 + * Created by yoho on 2017/2/22.
  7 + */
  8 +public class UnionActivityTrans {
  9 +
  10 + //订单金额
  11 + private BigDecimal order_amount;
  12 + //设备号
  13 + private String udid;
  14 +
  15 + private String uid;
  16 +
  17 + private String order_code;
  18 +
  19 + public String getUid() {
  20 + return uid;
  21 + }
  22 +
  23 + public void setUid(String uid) {
  24 + this.uid = uid;
  25 + }
  26 +
  27 + public String getUdid() {
  28 + return udid;
  29 + }
  30 +
  31 + public void setUdid(String udid) {
  32 + this.udid = udid;
  33 + }
  34 +
  35 + public BigDecimal getOrder_amount() {
  36 + return order_amount;
  37 + }
  38 +
  39 + public void setOrder_amount(BigDecimal order_amount) {
  40 + this.order_amount = order_amount;
  41 + }
  42 +
  43 + public String getOrder_code() {
  44 + return order_code;
  45 + }
  46 +
  47 + public void setOrder_code(String order_code) {
  48 + this.order_code = order_code;
  49 + }
  50 +}
@@ -15,10 +15,11 @@ @@ -15,10 +15,11 @@
15 <result column="status" property="status" jdbcType="INTEGER" /> 15 <result column="status" property="status" jdbcType="INTEGER" />
16 <result column="create_time" property="createTime" jdbcType="INTEGER" /> 16 <result column="create_time" property="createTime" jdbcType="INTEGER" />
17 <result column="mkt_activity_code" property="mktActivityCode" jdbcType="VARCHAR" /> 17 <result column="mkt_activity_code" property="mktActivityCode" jdbcType="VARCHAR" />
  18 + <result column="landing_page_url" property="landingPageUrl" jdbcType="VARCHAR" />
18 </resultMap> 19 </resultMap>
19 <sql id="Base_Column_List" > 20 <sql id="Base_Column_List" >
20 union_type, division_code, class_code, channel_code, device_code, dept_id, create_id, 21 union_type, division_code, class_code, channel_code, device_code, dept_id, create_id,
21 - name, src_url, dest_url, status, create_time,mkt_activity_code 22 + name, src_url, dest_url, status, create_time,mkt_activity_code,landing_page_url
22 </sql> 23 </sql>
23 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" > 24 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
24 select 25 select
  1 +<?xml version="1.0" encoding="UTF-8" ?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3 +<mapper namespace="com.yoho.unions.dal.IUnionActivityDAO" >
  4 + <resultMap id="BaseResultMap" type="com.yoho.unions.dal.model.UnionActivity" >
  5 + <id column="id" property="id" jdbcType="BIGINT" />
  6 + <result column="udid" property="udid" jdbcType="VARCHAR" />
  7 + <result column="muid" property="muid" jdbcType="VARCHAR" />
  8 + <result column="union_type" property="unionType" jdbcType="VARCHAR" />
  9 + <result column="client_type" property="clientType" jdbcType="VARCHAR" />
  10 + <result column="advertiser_id" property="advertiserId" jdbcType="VARCHAR" />
  11 + <result column="click_id" property="clickId" jdbcType="VARCHAR" />
  12 + <result column="create_time" property="createTime" jdbcType="INTEGER" />
  13 + </resultMap>
  14 + <sql id="Base_Column_List" >
  15 + id, udid, muid, union_type, client_type, advertiser_id, click_id, create_time
  16 + </sql>
  17 +
  18 + <select id="selectByUdid" resultMap="BaseResultMap">
  19 + select <include refid="Base_Column_List" />
  20 + from union_activity
  21 + where udid = #{udid} limit 1
  22 + </select>
  23 + <insert id="insert" parameterType="com.yoho.unions.dal.model.UnionActivity" >
  24 + insert into union_activity (id, udid, muid,
  25 + union_type, client_type, advertiser_id,
  26 + click_id, create_time)
  27 + values (#{id,jdbcType=BIGINT}, #{udid,jdbcType=VARCHAR}, #{muid,jdbcType=VARCHAR},
  28 + #{unionType,jdbcType=VARCHAR}, #{clientType,jdbcType=VARCHAR}, #{advertiserId,jdbcType=VARCHAR},
  29 + #{clickId,jdbcType=VARCHAR}, #{createTime,jdbcType=INTEGER})
  30 + </insert>
  31 + <insert id="insertSelective" parameterType="com.yoho.unions.dal.model.UnionActivity" >
  32 + insert into union_activity
  33 + <trim prefix="(" suffix=")" suffixOverrides="," >
  34 + <if test="id != null" >
  35 + id,
  36 + </if>
  37 + <if test="udid != null" >
  38 + udid,
  39 + </if>
  40 + <if test="muid != null" >
  41 + muid,
  42 + </if>
  43 + <if test="unionType != null" >
  44 + union_type,
  45 + </if>
  46 + <if test="clientType != null" >
  47 + client_type,
  48 + </if>
  49 + <if test="advertiserId != null" >
  50 + advertiser_id,
  51 + </if>
  52 + <if test="clickId != null" >
  53 + click_id,
  54 + </if>
  55 + <if test="createTime != null" >
  56 + create_time,
  57 + </if>
  58 + </trim>
  59 + <trim prefix="values (" suffix=")" suffixOverrides="," >
  60 + <if test="id != null" >
  61 + #{id,jdbcType=BIGINT},
  62 + </if>
  63 + <if test="udid != null" >
  64 + #{udid,jdbcType=VARCHAR},
  65 + </if>
  66 + <if test="muid != null" >
  67 + #{muid,jdbcType=VARCHAR},
  68 + </if>
  69 + <if test="unionType != null" >
  70 + #{unionType,jdbcType=VARCHAR},
  71 + </if>
  72 + <if test="clientType != null" >
  73 + #{clientType,jdbcType=VARCHAR},
  74 + </if>
  75 + <if test="advertiserId != null" >
  76 + #{advertiserId,jdbcType=VARCHAR},
  77 + </if>
  78 + <if test="clickId != null" >
  79 + #{clickId,jdbcType=VARCHAR},
  80 + </if>
  81 + <if test="createTime != null" >
  82 + #{createTime,jdbcType=INTEGER},
  83 + </if>
  84 + </trim>
  85 + </insert>
  86 +
  87 +</mapper>
@@ -62,7 +62,7 @@ public class ActivateUnionRest { @@ -62,7 +62,7 @@ public class ActivateUnionRest {
62 * @return 62 * @return
63 */ 63 */
64 @RequestMapping("/activateUnion") 64 @RequestMapping("/activateUnion")
65 - @ResponseBody public ActiveUnionResponseBO activateUnion(ActivateUnionRequestVO vo, HttpServletRequest request, HttpServletResponse response) { 65 + @ResponseBody public UnionResponse activateUnion(ActivateUnionRequestVO vo, HttpServletRequest request, HttpServletResponse response) {
66 log.info("activateUnion with param is {}", vo); 66 log.info("activateUnion with param is {}", vo);
67 if ("iphone".equals(vo.getClient_type())) { 67 if ("iphone".equals(vo.getClient_type())) {
68 vo.setClient_type(ClientTypeEnum.IOS.getName()); 68 vo.setClient_type(ClientTypeEnum.IOS.getName());
@@ -97,7 +97,7 @@ public class ActivateUnionRest { @@ -97,7 +97,7 @@ public class ActivateUnionRest {
97 97
98 if (!ClientTypeEnum.ANDROID.getName().equalsIgnoreCase(clientType) && !ClientTypeEnum.IOS.getName().equalsIgnoreCase(clientType)) { 98 if (!ClientTypeEnum.ANDROID.getName().equalsIgnoreCase(clientType) && !ClientTypeEnum.IOS.getName().equalsIgnoreCase(clientType)) {
99 log.warn("activateUnion error with param is {}", vo); 99 log.warn("activateUnion error with param is {}", vo);
100 - return new ActiveUnionResponseBO(600, "error"); 100 + return new UnionResponse(200, "error",new JSONObject());
101 } 101 }
102 //IP取出来的有可能是42.239.40.36,123.151.42.50,只取第一个 102 //IP取出来的有可能是42.239.40.36,123.151.42.50,只取第一个
103 String IP = RemoteIPInterceptor.getRemoteIP(); 103 String IP = RemoteIPInterceptor.getRemoteIP();
@@ -108,20 +108,11 @@ public class ActivateUnionRest { @@ -108,20 +108,11 @@ public class ActivateUnionRest {
108 } 108 }
109 bo.setClientIp(clientIp); 109 bo.setClientIp(clientIp);
110 //多线程处理 110 //多线程处理
111 - exe.execute(new RunActivate(bo));  
112 - return new ActiveUnionResponseBO(200, "success"); 111 + //exe.execute(new RunActivate(bo));
  112 + return getGoUrl(bo);
113 } 113 }
114 114
115 - public static class RunActivate implements Runnable {  
116 -  
117 - public RunActivate(ActivateUnionRequestBO bo) {  
118 - this.bo = bo;  
119 - }  
120 -  
121 - private ActivateUnionRequestBO bo;  
122 -  
123 - @Override  
124 - public void run() { 115 + private UnionResponse getGoUrl(ActivateUnionRequestBO bo){
125 MainUnionService service = null; 116 MainUnionService service = null;
126 if (ClientTypeEnum.ANDROID.getName().equalsIgnoreCase(bo.getClient_type())) { 117 if (ClientTypeEnum.ANDROID.getName().equalsIgnoreCase(bo.getClient_type())) {
127 //处理安卓的服务 118 //处理安卓的服务
@@ -150,7 +141,20 @@ public class ActivateUnionRest { @@ -150,7 +141,20 @@ public class ActivateUnionRest {
150 //调用统一的联盟激活接口 141 //调用统一的联盟激活接口
151 IUnionService unionService = SpringContextUtil.getBean("unionServiceImpl", IUnionService.class); 142 IUnionService unionService = SpringContextUtil.getBean("unionServiceImpl", IUnionService.class);
152 activeUnion.info("activeUnion request is {}",bo); 143 activeUnion.info("activeUnion request is {}",bo);
153 - unionService.activateUnion(bo); 144 + return unionService.activateUnion(bo);
  145 + }
  146 +
  147 + public static class RunActivate implements Runnable {
  148 +
  149 + public RunActivate(ActivateUnionRequestBO bo) {
  150 + this.bo = bo;
  151 + }
  152 +
  153 + private ActivateUnionRequestBO bo;
  154 +
  155 + @Override
  156 + public void run() {
  157 +
154 158
155 } 159 }
156 public ActivateUnionRequestBO getBo() { 160 public ActivateUnionRequestBO getBo() {
1 package com.yoho.unions.server.service; 1 package com.yoho.unions.server.service;
2 2
3 import com.yoho.unions.vo.OrderInfo; 3 import com.yoho.unions.vo.OrderInfo;
  4 +import com.yoho.unions.vo.TransInfo;
4 import com.yoho.unions.vo.UnionOrderReqVO; 5 import com.yoho.unions.vo.UnionOrderReqVO;
5 6
6 import java.util.List; 7 import java.util.List;
@@ -9,4 +10,6 @@ public interface IUnionOrderService { @@ -9,4 +10,6 @@ public interface IUnionOrderService {
9 10
10 public List<OrderInfo> getUnionOrders(UnionOrderReqVO req); 11 public List<OrderInfo> getUnionOrders(UnionOrderReqVO req);
11 12
  13 + public List<TransInfo> getTrandInfo(UnionOrderReqVO req);
  14 +
12 } 15 }
1 package com.yoho.unions.server.service.impl; 1 package com.yoho.unions.server.service.impl;
2 2
  3 +import com.yoho.service.model.union.UnionTrans;
3 import com.yoho.unions.common.redis.RedisHashCache; 4 import com.yoho.unions.common.redis.RedisHashCache;
4 import com.yoho.unions.common.redis.RedisListCache; 5 import com.yoho.unions.common.redis.RedisListCache;
  6 +import com.yoho.unions.dal.model.UnionActivityTrans;
5 import com.yoho.unions.dal.model.UnionOrders; 7 import com.yoho.unions.dal.model.UnionOrders;
6 import com.yoho.unions.dal.model.UnionOrdersGoods; 8 import com.yoho.unions.dal.model.UnionOrdersGoods;
7 import com.yoho.unions.server.service.IUnionOrderService; 9 import com.yoho.unions.server.service.IUnionOrderService;
8 import com.yoho.unions.vo.OrderInfo; 10 import com.yoho.unions.vo.OrderInfo;
9 import com.yoho.unions.vo.OrdersGood; 11 import com.yoho.unions.vo.OrdersGood;
  12 +import com.yoho.unions.vo.TransInfo;
10 import com.yoho.unions.vo.UnionOrderReqVO; 13 import com.yoho.unions.vo.UnionOrderReqVO;
11 import org.apache.commons.collections.CollectionUtils; 14 import org.apache.commons.collections.CollectionUtils;
12 import org.apache.commons.lang3.StringUtils; 15 import org.apache.commons.lang3.StringUtils;
@@ -26,8 +29,14 @@ public class UnionOrderServiceImpl implements IUnionOrderService { @@ -26,8 +29,14 @@ public class UnionOrderServiceImpl implements IUnionOrderService {
26 29
27 private static final String UNION_ORDER_KEY = "union:orders"; 30 private static final String UNION_ORDER_KEY = "union:orders";
28 31
  32 + private static final String UNION_TRAND = "YH:BD:ORDER:UNIONS";
  33 +
29 private static final String UNION_ORDER_GOODS_KEY_PRE = "union:order_goods:"; 34 private static final String UNION_ORDER_GOODS_KEY_PRE = "union:order_goods:";
30 35
  36 + private static final String UNION_TRANS_UNIONTYPE = "YH:BD:UNI:1:ORDER:";
  37 +
  38 + private static final String UNION_NORMAL_TRANS_UNIONTYPE = "YH:BD:UNI:ALL:ORDER:";
  39 +
31 @Autowired 40 @Autowired
32 private RedisListCache redisListCache; 41 private RedisListCache redisListCache;
33 42
@@ -59,6 +68,7 @@ public class UnionOrderServiceImpl implements IUnionOrderService { @@ -59,6 +68,7 @@ public class UnionOrderServiceImpl implements IUnionOrderService {
59 orderInfo.setOrdersGoods(ordersGoodList); 68 orderInfo.setOrdersGoods(ordersGoodList);
60 resList.add(orderInfo); 69 resList.add(orderInfo);
61 } 70 }
  71 + logger.info("Exit getUnionOrders: resList size is {}",resList.size());
62 return resList; 72 return resList;
63 73
64 }catch(Exception e){ 74 }catch(Exception e){
@@ -67,6 +77,53 @@ public class UnionOrderServiceImpl implements IUnionOrderService { @@ -67,6 +77,53 @@ public class UnionOrderServiceImpl implements IUnionOrderService {
67 } 77 }
68 } 78 }
69 79
  80 + @Override
  81 + public List<TransInfo> getTrandInfo(UnionOrderReqVO req) {
  82 + logger.info("Enter getTrandInfo: request param is {}", req);
  83 + try {
  84 + List<TransInfo> resList = new ArrayList<TransInfo>();
  85 + Long size = redisListCache.size(UNION_TRAND);
  86 + int sizeInt = size == null ? 0 : size.intValue();
  87 + logger.info("getTrandInfo UNION_TRAND size is {}",size);
  88 + if (sizeInt > 0) {
  89 + for (int i = 0; i < size; i++) {
  90 + UnionTrans unionTrans = redisListCache.rightPop(UNION_TRAND, UnionTrans.class);
  91 + String union_type = unionTrans.getUnion_type();
  92 + //首单交寄
  93 + String firstOrder = UNION_TRANS_UNIONTYPE + union_type;
  94 + //普通交寄
  95 + String normalOrder = UNION_NORMAL_TRANS_UNIONTYPE + union_type;
  96 + List<UnionActivityTrans> firstOrderList = new ArrayList<>();
  97 + Long firstOrderSize = redisListCache.size(firstOrder);
  98 + Long normalOrderSize = redisListCache.size(normalOrder);
  99 + if (firstOrderSize > 0) {
  100 + for (int j = 0; j < firstOrderSize; j++) {
  101 + UnionActivityTrans unionActivityTrans = redisListCache.rightPop(firstOrder, UnionActivityTrans.class);
  102 + firstOrderList.add(unionActivityTrans);
  103 + }
  104 +
  105 + }
  106 + logger.info("getFirstOrderList: from bigdata redis: key is {}, result size is {}", firstOrder, firstOrderList == null ? 0 : firstOrderList.size());
  107 + List<UnionActivityTrans> normalOrderList = new ArrayList<>();
  108 + if (normalOrderSize > 0) {
  109 + for (int k = 0; k < normalOrderSize; k++) {
  110 + UnionActivityTrans unionActivityTrans = redisListCache.rightPop(normalOrder, UnionActivityTrans.class);
  111 + normalOrderList.add(unionActivityTrans);
  112 + }
  113 + }
  114 + logger.info("getNormalOrderList: from bigdata redis: key is {}, result size is {}", normalOrder, normalOrderList == null ? 0 : normalOrderList.size());
  115 + resList = this.convertTrans(resList,firstOrderList, normalOrderList);
  116 + }
  117 + }
  118 + logger.info("exit getTrandInfo result size is {}",resList.size());
  119 + return resList;
  120 +
  121 + } catch (Exception e) {
  122 + logger.warn("getTrandInfo: get orders from bigdata redis failed, error is {}", e.getMessage());
  123 + return null;
  124 + }
  125 + }
  126 +
70 private OrderInfo convertToUnionOrderBo(UnionOrders unionOrder){ 127 private OrderInfo convertToUnionOrderBo(UnionOrders unionOrder){
71 if(null == unionOrder){ 128 if(null == unionOrder){
72 return null; 129 return null;
@@ -114,4 +171,35 @@ public class UnionOrderServiceImpl implements IUnionOrderService { @@ -114,4 +171,35 @@ public class UnionOrderServiceImpl implements IUnionOrderService {
114 return resList; 171 return resList;
115 } 172 }
116 173
  174 + private List<TransInfo> convertTrans(List<TransInfo> resList,List<UnionActivityTrans> firstOrderList,List<UnionActivityTrans> normalOrderList){
  175 + if(CollectionUtils.isEmpty(firstOrderList)&&CollectionUtils.isEmpty(normalOrderList)){
  176 + return null;
  177 + }
  178 +
  179 + if(CollectionUtils.isNotEmpty(firstOrderList)){
  180 + for(UnionActivityTrans unionActivityTrans:firstOrderList){
  181 + TransInfo transInfo = new TransInfo();
  182 + //首单设为1
  183 + transInfo.setType("1");
  184 + transInfo.setUdid(unionActivityTrans.getUdid());
  185 + transInfo.setOrderAmount(unionActivityTrans.getOrder_amount());
  186 + transInfo.setUid(unionActivityTrans.getUid());
  187 + transInfo.setOrdercode(unionActivityTrans.getOrder_code());
  188 + resList.add(transInfo);
  189 + }
  190 + }
  191 + if(CollectionUtils.isNotEmpty(normalOrderList)){
  192 + for(UnionActivityTrans unionActivityTran:normalOrderList){
  193 + TransInfo transInfo = new TransInfo();
  194 + //正常单设为2
  195 + transInfo.setType("2");
  196 + transInfo.setUdid(unionActivityTran.getUdid());
  197 + transInfo.setOrderAmount(unionActivityTran.getOrder_amount());
  198 + transInfo.setUid(unionActivityTran.getUid());
  199 + transInfo.setOrdercode(unionActivityTran.getOrder_code());
  200 + resList.add(transInfo);
  201 + }
  202 + }
  203 + return resList;
  204 + }
117 } 205 }
@@ -19,6 +19,7 @@ import com.yoho.service.model.union.request.ActivateUnionRequestBO; @@ -19,6 +19,7 @@ import com.yoho.service.model.union.request.ActivateUnionRequestBO;
19 import com.yoho.service.model.union.request.ClickUnionRequestBO; 19 import com.yoho.service.model.union.request.ClickUnionRequestBO;
20 import com.yoho.service.model.union.response.UnionResponse; 20 import com.yoho.service.model.union.response.UnionResponse;
21 import com.yoho.unions.common.enums.ClientTypeEnum; 21 import com.yoho.unions.common.enums.ClientTypeEnum;
  22 +import com.yoho.unions.common.redis.RedisListCache;
22 import com.yoho.unions.common.redis.RedisValueCache; 23 import com.yoho.unions.common.redis.RedisValueCache;
23 import com.yoho.unions.common.utils.DateUtil; 24 import com.yoho.unions.common.utils.DateUtil;
24 import com.yoho.unions.common.utils.HttpUtils; 25 import com.yoho.unions.common.utils.HttpUtils;
@@ -34,6 +35,7 @@ import org.slf4j.LoggerFactory; @@ -34,6 +35,7 @@ import org.slf4j.LoggerFactory;
34 import org.springframework.context.ApplicationEventPublisher; 35 import org.springframework.context.ApplicationEventPublisher;
35 import org.springframework.context.ApplicationEventPublisherAware; 36 import org.springframework.context.ApplicationEventPublisherAware;
36 import org.springframework.stereotype.Service; 37 import org.springframework.stereotype.Service;
  38 +
37 import javax.annotation.Resource; 39 import javax.annotation.Resource;
38 import java.net.URLDecoder; 40 import java.net.URLDecoder;
39 import java.util.List; 41 import java.util.List;
@@ -84,6 +86,9 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -84,6 +86,9 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
84 RedisValueCache redisValueCache; 86 RedisValueCache redisValueCache;
85 87
86 @Resource 88 @Resource
  89 + RedisListCache redisListCache;
  90 +
  91 + @Resource
87 IMktMarketingUrlDAO mktMarketingUrlDAO; 92 IMktMarketingUrlDAO mktMarketingUrlDAO;
88 93
89 @Resource 94 @Resource
@@ -93,6 +98,9 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -93,6 +98,9 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
93 IUnionActivityLogsDAO unionActivityLogsDAO; 98 IUnionActivityLogsDAO unionActivityLogsDAO;
94 99
95 @Resource 100 @Resource
  101 + IUnionActivityDAO unionActivityDAO;
  102 +
  103 + @Resource
96 IUnionTypeMatchDAO unionTypeMatchDAO; 104 IUnionTypeMatchDAO unionTypeMatchDAO;
97 105
98 @Resource(name="unionServiceImpl") 106 @Resource(name="unionServiceImpl")
@@ -183,24 +191,17 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -183,24 +191,17 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
183 yHRedisTemplate.longExpire(key, activeTime.get(), TimeUnit.HOURS); 191 yHRedisTemplate.longExpire(key, activeTime.get(), TimeUnit.HOURS);
184 clickUnion.info("clickUnion set redis second success. with key={}, value={}", key, JSON.toJSONString(request)); 192 clickUnion.info("clickUnion set redis second success. with key={}, value={}", key, JSON.toJSONString(request));
185 193
186 -// log.info("clickUnion set redis success with request={}", request);  
187 -  
188 -// if (union != null) {  
189 -// //如果90天以内,已经存在点击记录,则不需要插入或更新数据库  
190 -// log.info("clickUnion have click in 90 days with request={}", request);  
191 -// return new UnionResponse(); 194 +// UnionActivityTrans unionActivityTrans = new UnionActivityTrans();
  195 +// List<UnionActivityTrans> list = new ArrayList<>();
  196 +// for(int i=0;i<3;i++){
  197 +// UnionActivityTrans unionActivityTrans = new UnionActivityTrans();
  198 +// unionActivityTrans.setOrdercode("123");
  199 +// unionActivityTrans.setUdid("234");
  200 +// unionActivityTrans.setOrderAmount(new BigDecimal(12));
  201 +// unionActivityTrans.setUid("12");
  202 +// list.add(unionActivityTrans);
192 // } 203 // }
193 - //保存信息到数据库  
194 -// UnionLogs logs = new UnionLogs();  
195 -// logs.setTd(request.getTd());  
196 -// logs.setAppId(request.getAppid());  
197 -// logs.setClientType(request.getClient_type());  
198 -// logs.setUnionType(Byte.valueOf(request.getUnion_type()));  
199 -// logs.setCreateTime(DateUtil.getCurrentTimeSecond());  
200 -// logs.setUpdateTime(logs.getCreateTime());  
201 -// logs.setAddParams(JSON.toJSONString(request));  
202 -// logs.setIsActivate(Byte.valueOf("0"));  
203 -// unionLogsDAO.insert(logs); 204 +// redisListCache.rightPushAll("UNION:KEY:123",list,activeTime.get(),TimeUnit.HOURS);
204 205
205 return new UnionResponse(); 206 return new UnionResponse();
206 } catch (Exception e) { 207 } catch (Exception e) {
@@ -216,25 +217,25 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -216,25 +217,25 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
216 // 检查输入参数 217 // 检查输入参数
217 if (StringUtils.isEmpty(request.getAppid())) { 218 if (StringUtils.isEmpty(request.getAppid())) {
218 log.warn("activateUnion error because appid is empty with param is {}", request); 219 log.warn("activateUnion error because appid is empty with param is {}", request);
219 - return new UnionResponse(201, "appid is empty"); 220 + return new UnionResponse(200, "appid is empty",new JSONObject());
220 } 221 }
221 if (StringUtils.isEmpty(request.getTd())) { 222 if (StringUtils.isEmpty(request.getTd())) {
222 log.warn("activateUnion error because td is empty with param is {}", request); 223 log.warn("activateUnion error because td is empty with param is {}", request);
223 - return new UnionResponse(201, "td is empty"); 224 + return new UnionResponse(200, "td is empty",new JSONObject());
224 } 225 }
225 if (StringUtils.isEmpty(request.getUdid())) { 226 if (StringUtils.isEmpty(request.getUdid())) {
226 log.warn("activateUnion error because udid is empty with param is {}", request); 227 log.warn("activateUnion error because udid is empty with param is {}", request);
227 - return new UnionResponse(201, "udid is empty"); 228 + return new UnionResponse(200, "udid is empty",new JSONObject());
228 } 229 }
229 230
230 if (ClientTypeEnum.IOS.getName().equals(request.getClient_type()) && StringUtils.isEmpty(request.getIdfa())) { 231 if (ClientTypeEnum.IOS.getName().equals(request.getClient_type()) && StringUtils.isEmpty(request.getIdfa())) {
231 log.warn("activateUnion error because idfa is empty with request is {}", request); 232 log.warn("activateUnion error because idfa is empty with request is {}", request);
232 - return new UnionResponse(201, "idfa is empty"); 233 + return new UnionResponse(200, "idfa is empty",new JSONObject());
233 } 234 }
234 235
235 if (ClientTypeEnum.ANDROID.getName().equals(request.getClient_type()) && StringUtils.isEmpty(request.getImei())) { 236 if (ClientTypeEnum.ANDROID.getName().equals(request.getClient_type()) && StringUtils.isEmpty(request.getImei())) {
236 log.warn("activateUnion error because imei is empty with request is {}", request); 237 log.warn("activateUnion error because imei is empty with request is {}", request);
237 - return new UnionResponse(201, "imei is empty"); 238 + return new UnionResponse(200, "imei is empty",new JSONObject());
238 } 239 }
239 240
240 try{ 241 try{
@@ -315,7 +316,7 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -315,7 +316,7 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
315 value = yhValueOperations.get(key); 316 value = yhValueOperations.get(key);
316 if(StringUtils.isNotEmpty(value)){ 317 if(StringUtils.isNotEmpty(value)){
317 ipMatch.info("activateUnion with IP params td is {},imei is {},idfa is {},IP is {},---- clickMsg is {}",request.getTd(),request.getImei(),request.getIdfa(),request.getClientIp(),value); 318 ipMatch.info("activateUnion with IP params td is {},imei is {},idfa is {},IP is {},---- clickMsg is {}",request.getTd(),request.getImei(),request.getIdfa(),request.getClientIp(),value);
318 - return new UnionResponse(204, "user not click"); 319 + return new UnionResponse(200, "user not click",new JSONObject());
319 } 320 }
320 321
321 } 322 }
@@ -326,7 +327,7 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -326,7 +327,7 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
326 // 如果redis中不存在存在该用户点击信息,则退出 327 // 如果redis中不存在存在该用户点击信息,则退出
327 if (StringUtils.isEmpty(value)) { 328 if (StringUtils.isEmpty(value)) {
328 log.warn("activateUnion error user not click info. with param is {}", request); 329 log.warn("activateUnion error user not click info. with param is {}", request);
329 - return new UnionResponse(204, "user not click"); 330 + return new UnionResponse(200, "user not click",new JSONObject());
330 } 331 }
331 332
332 // 把存储的字符串变为对象 333 // 把存储的字符串变为对象
@@ -348,17 +349,23 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -348,17 +349,23 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
348 //强制删除带ip的key 349 //强制删除带ip的key
349 yHRedisTemplate.delete(UNION_KEY + "_" + request.getClientIp() + "_" + request.getAppkey()); 350 yHRedisTemplate.delete(UNION_KEY + "_" + request.getClientIp() + "_" + request.getAppkey());
350 351
351 - if (union != null && union.getIsActivate() != null && union.getIsActivate().byteValue() == 1) {  
352 - // 如果90天之内有过激活日志,则不允许重复激活  
353 - log.warn("activateUnion error because 90 days has activate info with param is {}", request);  
354 - return new UnionResponse(203, "have activite in 90 days");  
355 - }  
356 String unionTypekey = "yh:union:uniontype:"+click.getUnion_type(); 352 String unionTypekey = "yh:union:uniontype:"+click.getUnion_type();
357 MktMarketingUrl mktMarketingUrl = redisValueCache.get(unionTypekey,MktMarketingUrl.class); 353 MktMarketingUrl mktMarketingUrl = redisValueCache.get(unionTypekey,MktMarketingUrl.class);
358 if(mktMarketingUrl==null){ 354 if(mktMarketingUrl==null){
359 mktMarketingUrl = mktMarketingUrlDAO.selectByPrimaryKey(Long.valueOf(click.getUnion_type())); 355 mktMarketingUrl = mktMarketingUrlDAO.selectByPrimaryKey(Long.valueOf(click.getUnion_type()));
360 redisValueCache.set(unionTypekey, mktMarketingUrl, 1, TimeUnit.HOURS); 356 redisValueCache.set(unionTypekey, mktMarketingUrl, 1, TimeUnit.HOURS);
361 } 357 }
  358 +
  359 + JSONObject result = new JSONObject();
  360 + result.put("landing_page_url",StringUtils.isEmpty(mktMarketingUrl.getLandingPageUrl()) ? "" : mktMarketingUrl.getLandingPageUrl());
  361 +
  362 + if (union != null && union.getIsActivate() != null && union.getIsActivate().byteValue() == 1) {
  363 + // 如果90天之内有过激活日志,则不允许重复激活
  364 + log.warn("activateUnion error because 90 days has activate info with param is {}", request);
  365 + return new UnionResponse(200, "have activite in 90 days",result);
  366 + }
  367 +// UnionTypeModel u = UnionConstant.unionTypeMap.get(Integer.parseInt(click.getUnion_type()));
  368 +
362 UnionTypeModel u = new UnionTypeModel(); 369 UnionTypeModel u = new UnionTypeModel();
363 u.setName(mktMarketingUrl.getName()); 370 u.setName(mktMarketingUrl.getName());
364 u.setValue(String.valueOf(mktMarketingUrl.getUnionType())); 371 u.setValue(String.valueOf(mktMarketingUrl.getUnionType()));
@@ -406,7 +413,7 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -406,7 +413,7 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
406 j.put("tdid", request.getTdid()); 413 j.put("tdid", request.getTdid());
407 activeDingdang.info(j.toString()); 414 activeDingdang.info(j.toString());
408 } 415 }
409 - return new UnionResponse(203, "have activite in 90 days"); 416 + return new UnionResponse(200, "have activite in 90 days",result);
410 } 417 }
411 } 418 }
412 419
@@ -489,7 +496,7 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -489,7 +496,7 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
489 } 496 }
490 if (StringUtils.isEmpty(url)) { 497 if (StringUtils.isEmpty(url)) {
491 log.info("activateUnion in success request is {}", request); 498 log.info("activateUnion in success request is {}", request);
492 - return new UnionResponse(); 499 + return new UnionResponse(200,"success",result);
493 } 500 }
494 if(!"3".equals(union_type)||!"100000000000453".equals(union_type)){ 501 if(!"3".equals(union_type)||!"100000000000453".equals(union_type)){
495 url = URLDecoder.decode(url, "UTF-8"); 502 url = URLDecoder.decode(url, "UTF-8");
@@ -506,21 +513,26 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -506,21 +513,26 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
506 activeUnion.info("activateUnion call union success url={}, and result={}", url, pair); 513 activeUnion.info("activateUnion call union success url={}, and result={}", url, pair);
507 if (pair.getLeft() != 200) { 514 if (pair.getLeft() != 200) {
508 log.warn("callback error with request={}", request); 515 log.warn("callback error with request={}", request);
509 - return new UnionResponse(204, "callback error"); 516 + return new UnionResponse(200, "callback error",result);
510 } 517 }
  518 + //如果来源是广点通,则把广点通的一些信息记入表,给之后做转化上报使用
  519 + if(union_type.equals("3")){
  520 + saveUnionActivity(click,request);
  521 + }
  522 +
  523 +
511 } catch (Exception e) { 524 } catch (Exception e) {
512 log.error("callback error with request={}", request, e); 525 log.error("callback error with request={}", request, e);
513 //return new UnionResponse(204, "callback error"); 526 //return new UnionResponse(204, "callback error");
514 } 527 }
515 528
516 -  
517 activeUnion.info("activateUnion in success request is {}", request); 529 activeUnion.info("activateUnion in success request is {}", request);
518 530
519 - return new UnionResponse(); 531 + return new UnionResponse(200,"success",result);
520 532
521 } catch (Exception e) { 533 } catch (Exception e) {
522 log.error("activateUnion error with request={}", request, e); 534 log.error("activateUnion error with request={}", request, e);
523 - return new UnionResponse(300, e.getMessage()); 535 + return new UnionResponse(200, e.getMessage(),new JSONObject());
524 } 536 }
525 537
526 } 538 }
@@ -567,6 +579,30 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher @@ -567,6 +579,30 @@ public class UnionServiceImpl implements IUnionService,ApplicationEventPublisher
567 }); 579 });
568 } 580 }
569 581
  582 + private void saveUnionActivity(ClickUnionRequestBO click,ActivateUnionRequestBO request){
  583 + taskExecutor.execute(new Runnable(){
  584 + @Override
  585 + public void run()
  586 + {
  587 + UnionActivity unionActivity = new UnionActivity();
  588 + unionActivity.setClientType(request.getClient_type());
  589 + unionActivity.setUdid(request.getUdid());
  590 + if(StringUtils.isNotEmpty(click.getIdfa())){
  591 + unionActivity.setUdid(click.getIdfa());
  592 + }else {
  593 + unionActivity.setUdid(click.getImei());
  594 + }
  595 + unionActivity.setUnionType(click.getUnion_type());
  596 + //广点通的账号id存入的是click的commonUse字段
  597 + unionActivity.setAdvertiserId(click.getCommonUse());
  598 + //广点通点击id
  599 + unionActivity.setClickId(click.getClickId());
  600 + unionActivity.setCreateTime(DateUtil.getCurrentTimeSecond());
  601 + unionActivityDAO.insertSelective(unionActivity);
  602 + }
  603 + });
  604 + }
  605 +
570 @Override 606 @Override
571 public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { 607 public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
572 this.publisher = applicationEventPublisher; 608 this.publisher = applicationEventPublisher;
  1 +package com.yoho.unions.server.task;
  2 +
  3 +import com.yoho.service.model.union.response.UnionResponse;
  4 +import com.yoho.unions.common.enums.ClientTypeEnum;
  5 +import com.yoho.unions.common.utils.DateUtil;
  6 +import com.yoho.unions.common.utils.HttpUtils;
  7 +import com.yoho.unions.dal.IUnionActivityDAO;
  8 +import com.yoho.unions.dal.IUnionConfigDAO;
  9 +import com.yoho.unions.dal.model.UnionActivity;
  10 +import com.yoho.unions.dal.model.UnionConfig;
  11 +import com.yoho.unions.server.service.IUnionOrderService;
  12 +import com.yoho.core.common.utils.MD5;
  13 +import org.apache.commons.codec.binary.Base64;
  14 +import com.yoho.unions.vo.TransInfo;
  15 +import com.yoho.unions.vo.UnionOrderReqVO;
  16 +import org.apache.commons.collections.CollectionUtils;
  17 +import org.apache.commons.lang.StringUtils;
  18 +import org.apache.commons.lang3.tuple.Pair;
  19 +import org.slf4j.Logger;
  20 +import org.slf4j.LoggerFactory;
  21 +import org.springframework.beans.factory.annotation.Autowired;
  22 +import org.springframework.scheduling.annotation.Scheduled;
  23 +import org.springframework.stereotype.Component;
  24 +
  25 +import javax.annotation.Resource;
  26 +import java.io.UnsupportedEncodingException;
  27 +import java.math.BigDecimal;
  28 +import java.net.URLEncoder;
  29 +import java.util.List;
  30 +
  31 +/**
  32 + * 广点通转化数据上报,定时从大数据抽取数据,然后联盟拼接,上报给广点通
  33 + * Created by yoho on 2017/2/22.
  34 + */
  35 +@Component
  36 +public class GdtTransTask {
  37 +
  38 + static Logger log = LoggerFactory.getLogger(GdtTransTask.class);
  39 +
  40 + @Autowired
  41 + private IUnionOrderService unionOrderService;
  42 +
  43 + @Resource
  44 + IUnionActivityDAO unionActivityDAO;
  45 +
  46 + @Resource
  47 + IUnionConfigDAO unionConfigDAO;
  48 +
  49 + @Scheduled(cron = "0 0/6 * * * ?")
  50 + public void run() {
  51 + UnionOrderReqVO reqVO = new UnionOrderReqVO();
  52 + reqVO.setLimit(10);
  53 + this.execute(reqVO);
  54 + }
  55 +
  56 + public void execute(UnionOrderReqVO reqVO){
  57 + //从大数据中取出联盟需要的广点通带来转化的设备号,和金额
  58 +
  59 + List<TransInfo> transInfoList = unionOrderService.getTrandInfo(reqVO);
  60 + if (CollectionUtils.isEmpty(transInfoList)) {
  61 + return;
  62 + }
  63 + //将取出来的数据进行拼接
  64 + for(TransInfo transInfo:transInfoList){
  65 + log.info("enter trans udid is {},ordercode is {}",transInfo.getUdid(),transInfo.getOrdercode());
  66 + String udid = transInfo.getUdid();
  67 + //利用udid去表中查出是两个广点通账号带来的
  68 + UnionActivity unionActivity = unionActivityDAO.selectByUdid(udid);
  69 +
  70 + if(unionActivity==null){
  71 + continue;
  72 + }
  73 + //按照广点通要求拼接数据
  74 + String url = urlEode(unionActivity,transInfo);
  75 + //改成httpclient方式调用
  76 + Pair<Integer, String> pair = HttpUtils.httpGet(url);
  77 + log.info("GdtTransTask call union success url={}, and result={}", url, pair);
  78 + if (pair.getLeft() != 200) {
  79 + log.warn("callback error with request={}", url);
  80 + }
  81 +
  82 + }
  83 + }
  84 +
  85 + public String urlEode(UnionActivity requestBO,TransInfo transInfo) {
  86 + log.info("enter GdtTransTask.urlEode requestBO is {}, transInfo is {} ", requestBO,transInfo);
  87 + // 根据不同的应用类型,获取不同的加密密钥和签名密钥
  88 + String encryptKey = "BAAAAAAAAAAABZJQ";
  89 + String signKey = "1461f1237d22dfc7";
  90 + String muid4MD5 = requestBO.getMuid();
  91 + String url = "http://t.gdt.qq.com/conv/app/";
  92 + //有货在智慧推的账号id
  93 + String uid = "365136";
  94 + if(StringUtils.isNotEmpty(requestBO.getAdvertiserId())){
  95 + uid = requestBO.getAdvertiserId();
  96 + }
  97 + String clientType = ClientTypeEnum.IOS.getName();
  98 + if(StringUtils.isNotEmpty(requestBO.getClientType())){
  99 + clientType = requestBO.getClientType().toLowerCase();
  100 + }
  101 + UnionConfig unionConfig = unionConfigDAO.selectByUidAndClientType(Integer.valueOf(uid),clientType);
  102 + if(null!=unionConfig){
  103 + encryptKey = unionConfig.getEncryptKey();
  104 + signKey = unionConfig.getSignKey();
  105 + url = unionConfig.getUrl();
  106 + }
  107 + //APPID可以固定根据clientType判断
  108 + String appId = "490655927";
  109 + if(clientType.equals(ClientTypeEnum.ANDROID.getName())){
  110 + appId = "100898104";
  111 + }
  112 + int conv_time = DateUtil.getCurrentTimeSecond();
  113 + String page = null;
  114 + String query_string = null;
  115 + String clickId = requestBO.getClickId();
  116 + StringBuffer bf = new StringBuffer();
  117 + StringBuffer sf = new StringBuffer();
  118 + page = bf.append(url).append(appId).append("/conv?click_id=").append(clickId).append("&muid=").append(muid4MD5).append("&conv_time=").append(conv_time).append("&value=").append(transInfo.getOrderAmount().multiply(new BigDecimal(100))).toString();
  119 + query_string = sf.append("click_id=").append(clickId).append("&muid=").append(muid4MD5).append("&conv_time=").append(conv_time).append("&value=").append(transInfo.getOrderAmount().multiply(new BigDecimal(100))).toString();
  120 + log.info("enter GdtTransTask.urlEode page is {}",page);
  121 + log.info("enter GdtTransTask.urlEode query_string is {}",query_string);
  122 + // 对url进行加密
  123 + String encode_page = null;
  124 + try {
  125 + encode_page = URLEncoder.encode(page, "UTF-8");
  126 + log.info("activateZhiHuitui urlEncoder is{} ", encode_page);
  127 + } catch (UnsupportedEncodingException e) {
  128 + log.error("encode exception.", e);
  129 + }
  130 + // 将签名密钥和提交方式与加密后的url进行拼接
  131 + StringBuffer urlBuffer = new StringBuffer();
  132 +
  133 + String property = urlBuffer.append(signKey).append("&GET&").append(encode_page).toString();
  134 + String signature = MD5.md5(property);
  135 + StringBuffer base = new StringBuffer();
  136 + String base_data = base.append(query_string).append("&sign=").append(signature).toString();
  137 +
  138 + // 简单异或处理
  139 + String data = simpleXorByGdt(base_data, encryptKey);
  140 + // base64编码
  141 + String ret = Base64.encodeBase64String(data.getBytes());
  142 + // 64位处理之后,防止里面有换行符
  143 + String retRep = ret.replaceAll("\n", "");
  144 + // 将64位处理之后的值,按照url加密的方式进行加密
  145 + try {
  146 + retRep = URLEncoder.encode(retRep, "UTF-8");
  147 + log.info("activateUnion retRep is{}", retRep);
  148 + } catch (UnsupportedEncodingException e) {
  149 + log.error("encode exception.", e);
  150 + }
  151 + // conv_type,,现在只有移动应用激活类型(MOBILEAPP_ACTIVITE);
  152 + String convType = "MOBILEAPP_COST";
  153 + if(transInfo.getType().equals("1")){
  154 + convType = "MOBILEAPP_ADDTOCART";
  155 + }
  156 + StringBuffer sb = new StringBuffer();
  157 + url = sb.append(url).append(appId).append("/conv?v=").append(retRep).append("&conv_type=").append(convType).append("&app_type=").append(clientTypeConver(clientType)).append("&advertiser_id=").append(uid).toString();
  158 + log.info("GdtTransTask url is {}", url);
  159 + return url;
  160 + }
  161 +
  162 + /**
  163 + * 简单异或
  164 + *
  165 + * @param source
  166 + * @param key
  167 + * @return
  168 + */
  169 + private String simpleXorByGdt(String source, String key) {
  170 + String result = "";
  171 + int j = 0;
  172 + for (int i = 0; i < source.length(); i++) {
  173 + int c1 = source.charAt(i);
  174 + int c2 = key.charAt(j);
  175 +
  176 + result = result + (char) (c1 ^ c2);
  177 + j = j + 1;
  178 + j = j % (key.length());
  179 + }
  180 +
  181 + return result;
  182 + }
  183 +
  184 + private String clientTypeConver(String clientType) {
  185 + if (StringUtils.isEmpty(clientType)) {
  186 + return null;
  187 + }
  188 + if (ClientTypeEnum.ANDROID.getName().equalsIgnoreCase(clientType)) {
  189 + return clientType.toUpperCase();
  190 + } else {
  191 + return "IOS";
  192 + }
  193 +
  194 + }
  195 +}
@@ -42,5 +42,7 @@ datasources: @@ -42,5 +42,7 @@ datasources:
42 - com.yoho.unions.dal.IUnionTypeMatchDAO 42 - com.yoho.unions.dal.IUnionTypeMatchDAO
43 - com.yoho.unions.dal.ITencentMktActivityDAO 43 - com.yoho.unions.dal.ITencentMktActivityDAO
44 - com.yoho.unions.dal.ITencentMktCouponHistoryDAO 44 - com.yoho.unions.dal.ITencentMktCouponHistoryDAO
  45 + - com.yoho.unions.dal.IUnionActivityDAO
  46 + - com.yoho.unions.dal.IUnionConfigDAO
45 47
46 readOnlyInSlave: true 48 readOnlyInSlave: true
@@ -43,5 +43,7 @@ datasources: @@ -43,5 +43,7 @@ datasources:
43 - com.yoho.unions.dal.IUnionTypeMatchDAO 43 - com.yoho.unions.dal.IUnionTypeMatchDAO
44 - com.yoho.unions.dal.ITencentMktActivityDAO 44 - com.yoho.unions.dal.ITencentMktActivityDAO
45 - com.yoho.unions.dal.ITencentMktCouponHistoryDAO 45 - com.yoho.unions.dal.ITencentMktCouponHistoryDAO
  46 + - com.yoho.unions.dal.IUnionActivityDAO
  47 + - com.yoho.unions.dal.IUnionConfigDAO
46 48
47 readOnlyInSlave: true 49 readOnlyInSlave: true
1 package com.test; 1 package com.test;
2 2
3 import java.io.UnsupportedEncodingException; 3 import java.io.UnsupportedEncodingException;
  4 +import java.math.BigDecimal;
4 import java.net.URLDecoder; 5 import java.net.URLDecoder;
5 import java.net.URLEncoder; 6 import java.net.URLEncoder;
6 7
@@ -30,7 +31,7 @@ public class Test { @@ -30,7 +31,7 @@ public class Test {
30 String encryptKey = "test_encrypt_key"; 31 String encryptKey = "test_encrypt_key";
31 String signKey = "test_sign_key"; 32 String signKey = "test_sign_key";
32 String muid4MD5 = "0f074dc8e1f0547310e729032ac0730b"; 33 String muid4MD5 = "0f074dc8e1f0547310e729032ac0730b";
33 - String url = "http://jump.t.l.qq.com/conv/app/"; 34 + String url = "http://t.gdt.qq.com/conv/app/";
34 //有货在智慧推的账号id 35 //有货在智慧推的账号id
35 String uid = "18261"; 36 String uid = "18261";
36 37
@@ -40,20 +41,33 @@ public class Test { @@ -40,20 +41,33 @@ public class Test {
40 // clientType = requestBO.getClient_type().toLowerCase(); 41 // clientType = requestBO.getClient_type().toLowerCase();
41 // } 42 // }
42 43
43 - String client_ip = "10.11.12.13"; 44 +// if(org.apache.commons.lang.StringUtils.isNotEmpty(requestBO.getAdvertiserId())){
  45 +// uid = requestBO.getAdvertiserId();
  46 +// }
  47 +// String clientType = ClientTypeEnum.IOS.getName();
  48 +// if(org.apache.commons.lang.StringUtils.isNotEmpty(requestBO.getClientType())){
  49 +// clientType = requestBO.getClientType().toLowerCase();
  50 +// }
  51 +// UnionConfig unionConfig = unionConfigDAO.selectByUidAndClientType(Integer.valueOf(uid),clientType);
  52 +// if(null!=unionConfig){
  53 +// encryptKey = unionConfig.getEncryptKey();
  54 +// signKey = unionConfig.getSignKey();
  55 +// url = unionConfig.getUrl();
  56 +// }
  57 + //APPID可以固定根据clientType判断
44 String appId = "112233"; 58 String appId = "112233";
45 - int conv_time =1422263664; 59 + if(clientType.equals(ClientTypeEnum.ANDROID.getName())){
  60 + appId = "112233";
  61 + }
  62 + int conv_time = DateUtil.getCurrentTimeSecond();
46 String page = null; 63 String page = null;
47 String query_string = null; 64 String query_string = null;
48 StringBuffer bf = new StringBuffer(); 65 StringBuffer bf = new StringBuffer();
49 StringBuffer sf = new StringBuffer(); 66 StringBuffer sf = new StringBuffer();
50 - if (StringUtils.isEmpty(client_ip)){  
51 - page = bf.append(url).append(appId).append("/conv?muid=").append(muid4MD5).append("&conv_time=").append(conv_time).toString();  
52 - query_string = sf.append("muid=").append(muid4MD5).append("&conv_time=").append(conv_time).toString();  
53 - }else{  
54 - page = bf.append(url).append(appId).append("/conv?muid=").append(muid4MD5).append("&conv_time=").append(conv_time).append("&client_ip=").append(client_ip).toString();  
55 - query_string = sf.append("muid=").append(muid4MD5).append("&conv_time=").append(conv_time).append("&client_ip=").append(client_ip).toString();  
56 - } 67 +
  68 + page = bf.append(url).append(appId).append("/conv?click_id=").append("007210548a030059ccdfd1d4").append("&muid=").append(muid4MD5).append("&conv_time=").append(conv_time).append("&client_ip=10.11.12.13").toString();
  69 + query_string = sf.append("click_id=").append("007210548a030059ccdfd1d4").append("&muid=").append(muid4MD5).append("&conv_time=").append(conv_time).append("&client_ip=10.11.12.13").toString();
  70 +
57 // 对url进行加密 71 // 对url进行加密
58 String encode_page = null; 72 String encode_page = null;
59 try { 73 try {
@@ -84,11 +98,15 @@ public class Test { @@ -84,11 +98,15 @@ public class Test {
84 log.error("encode exception.", e); 98 log.error("encode exception.", e);
85 } 99 }
86 // conv_type,,现在只有移动应用激活类型(MOBILEAPP_ACTIVITE); 100 // conv_type,,现在只有移动应用激活类型(MOBILEAPP_ACTIVITE);
87 - String convType = "MOBILE_APP_ACTIVITE"; 101 + String convType = "MOBILEAPP_COST";
  102 +// if(transInfo.getType().equals("1")){
  103 +// convType = "MOBILEAPP_ADDTOCART";
  104 +// }
88 StringBuffer sb = new StringBuffer(); 105 StringBuffer sb = new StringBuffer();
89 - url = sb.append(url).append(112233).append("/conv?v=").append(retRep).append("&conv_type=").append(convType).append("&app_type=").append(clientTypeConver("Android")).append("&advertiser_id=").append(uid).toString();  
90 - log.info("zhihuitui url is {}", url);  
91 - System.out.print(url); 106 + url = sb.append(url).append(appId).append("/conv?v=").append(retRep).append("&conv_type=").append(convType).append("&app_type=").append(clientTypeConver(clientType)).append("&advertiser_id=").append(uid).toString();
  107 + log.info("GdtTransTask url is {}", url);
  108 + String md5 = MD5.md5("862380036648114");
  109 + System.out.print(md5);
92 } 110 }
93 111
94 private static String clientTypeConver(String clientType) { 112 private static String clientTypeConver(String clientType) {