|
|
|
@ -10,6 +10,10 @@ import javax.annotation.Resource;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
|
|
|
|
import org.joda.time.DateTime;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.data.redis.core.BoundListOperations;
|
|
|
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
@ -28,6 +32,8 @@ import au.com.royalpay.payment.manage.mappers.system.CustomerMapper;
|
|
|
|
|
import au.com.royalpay.payment.manage.mappers.system.CustomerRelationAlipayMapper;
|
|
|
|
|
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
|
|
|
|
|
import au.com.royalpay.payment.tools.exceptions.NotFoundException;
|
|
|
|
|
import au.com.royalpay.payment.tools.lock.Locker;
|
|
|
|
|
import au.com.royalpay.payment.tools.lock.LockerRedisImpl;
|
|
|
|
|
import au.com.royalpay.payment.tools.utils.PageListUtils;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -45,6 +51,13 @@ public class CustomerImpressionServiceImpl implements CustomerImpressionService
|
|
|
|
|
private CustomerRelationAlipayMapper customerRelationAlipayMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
private CustomerMapper customerMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
private Locker locker;
|
|
|
|
|
@Resource
|
|
|
|
|
private StringRedisTemplate stringRedisTemplate;
|
|
|
|
|
|
|
|
|
|
private static String CUSTOMER_IMPRESSION_PREFIX = "Customer_impression_insert";
|
|
|
|
|
Logger logger = LoggerFactory.getLogger(CustomerImpressionServiceImpl.class);
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public JSONObject listPageble(CustomerImpressionQuery customerImpressionQuery) {
|
|
|
|
@ -92,8 +105,12 @@ public class CustomerImpressionServiceImpl implements CustomerImpressionService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional
|
|
|
|
|
public void generate(int client_id) {
|
|
|
|
|
Date now = new Date();
|
|
|
|
|
DateTime dt = new DateTime(2018, 1, 20, 0, 0);
|
|
|
|
|
if (now.compareTo(dt.toDate()) > 0) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
JSONObject params = new JSONObject();
|
|
|
|
|
params.put("client_id", client_id);
|
|
|
|
|
params.put("include_success_status", 3);
|
|
|
|
@ -102,58 +119,59 @@ public class CustomerImpressionServiceImpl implements CustomerImpressionService
|
|
|
|
|
params.put("confirm_time", lastRecord.get(0).getDate("update_time"));
|
|
|
|
|
}
|
|
|
|
|
List<JSONObject> orders = orderMapper.listAnalysisClientCustomer(params);
|
|
|
|
|
Date now = new Date();
|
|
|
|
|
for (JSONObject order : orders) {
|
|
|
|
|
if (StringUtils.isEmpty(order.getString("channel"))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
JSONObject userInfo = customerMapper.findCustomerByOpenId(order.getString("customer_id"));
|
|
|
|
|
String customer_id = order.getString("customer_id");
|
|
|
|
|
JSONObject userInfo = customerMapper.findCustomerByOpenId(customer_id);
|
|
|
|
|
if (userInfo == null) {
|
|
|
|
|
userInfo = customerRelationAlipayMapper.findCustomerByUserId(order.getString("customer_id"));
|
|
|
|
|
userInfo = customerRelationAlipayMapper.findCustomerByUserId(customer_id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
JSONObject clientCustomerInfo = clientCustomersMapper.getClientCustomerWithNull(client_id, order.getString("customer_id"));
|
|
|
|
|
JSONObject clientCustomerInfo = clientCustomersMapper.getClientCustomerWithNull(client_id, customer_id);
|
|
|
|
|
if (clientCustomerInfo == null) {
|
|
|
|
|
JSONObject client_customer = new JSONObject();
|
|
|
|
|
client_customer.put("client_id", order.getIntValue("client_id"));
|
|
|
|
|
client_customer.put("customer_id", order.getString("customer_id"));
|
|
|
|
|
client_customer.put("channel", order.getString("channel"));
|
|
|
|
|
client_customer.put("tag", "不活跃用户");
|
|
|
|
|
if (userInfo != null) {
|
|
|
|
|
client_customer.put("headimg", userInfo.getString("headimg"));
|
|
|
|
|
client_customer.put("nick_name", userInfo.getString("nickname"));
|
|
|
|
|
locker.lock(CUSTOMER_IMPRESSION_PREFIX+customer_id, 30_000, 30_000);
|
|
|
|
|
try {
|
|
|
|
|
JSONObject client_customer = new JSONObject();
|
|
|
|
|
client_customer.put("client_id", order.getIntValue("client_id"));
|
|
|
|
|
client_customer.put("customer_id", order.getString("customer_id"));
|
|
|
|
|
client_customer.put("channel", order.getString("channel"));
|
|
|
|
|
client_customer.put("tag", "不活跃用户");
|
|
|
|
|
if (userInfo != null) {
|
|
|
|
|
client_customer.put("headimg", userInfo.getString("headimg"));
|
|
|
|
|
client_customer.put("nick_name", userInfo.getString("nickname"));
|
|
|
|
|
}
|
|
|
|
|
client_customer.put("payment_times", order.getIntValue("payment_times"));
|
|
|
|
|
client_customer.put("total_amount", order.getBigDecimal("total_amount"));
|
|
|
|
|
client_customer.put("update_time", now);
|
|
|
|
|
client_customer.put("last_payment_time", order.getDate("confirm_time"));
|
|
|
|
|
clientCustomersMapper.insert(client_customer);
|
|
|
|
|
} finally {
|
|
|
|
|
locker.unlock(customer_id);
|
|
|
|
|
}
|
|
|
|
|
client_customer.put("payment_times", order.getIntValue("payment_times"));
|
|
|
|
|
client_customer.put("total_amount", order.getBigDecimal("total_amount"));
|
|
|
|
|
client_customer.put("update_time", now);
|
|
|
|
|
client_customer.put("last_payment_time", order.getDate("confirm_time"));
|
|
|
|
|
clientCustomersMapper.insert(client_customer);
|
|
|
|
|
} else {
|
|
|
|
|
clientCustomerInfo.put("payment_times", clientCustomerInfo.getIntValue("payment_times") + order.getIntValue("payment_times"));
|
|
|
|
|
BigDecimal total_amount = clientCustomerInfo.getBigDecimal("total_amount");
|
|
|
|
|
if (total_amount != null) {
|
|
|
|
|
clientCustomerInfo.put("total_amount", clientCustomerInfo.getBigDecimal("total_amount").add(order.getBigDecimal("total_amount")));
|
|
|
|
|
} else {
|
|
|
|
|
clientCustomerInfo.put("total_amount", order.getBigDecimal("total_amount"));
|
|
|
|
|
}
|
|
|
|
|
clientCustomerInfo.put("payment_times", order.getIntValue("payment_times"));
|
|
|
|
|
clientCustomerInfo.put("client_id", order.getIntValue("client_id"));
|
|
|
|
|
clientCustomerInfo.put("customer_id", order.getString("customer_id"));
|
|
|
|
|
clientCustomerInfo.put("total_amount", order.getBigDecimal("total_amount"));
|
|
|
|
|
if (userInfo != null) {
|
|
|
|
|
clientCustomerInfo.put("headimg", userInfo.getString("headimg"));
|
|
|
|
|
clientCustomerInfo.put("nick_name", userInfo.getString("nickname"));
|
|
|
|
|
}
|
|
|
|
|
clientCustomerInfo.put("channel", order.getString("channel"));
|
|
|
|
|
clientCustomerInfo.put("tag", "不活跃用户");
|
|
|
|
|
clientCustomerInfo.put("update_time", now);
|
|
|
|
|
clientCustomerInfo.put("last_payment_time", order.getDate("confirm_time"));
|
|
|
|
|
clientCustomersMapper.update(clientCustomerInfo);
|
|
|
|
|
clientCustomersMapper.updateAfterPaymentFinish(clientCustomerInfo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
generateTag(client_id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void generateTag(int client_id) {
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional
|
|
|
|
|
public void generateTag(int client_id) {
|
|
|
|
|
JSONObject params = new JSONObject();
|
|
|
|
|
DateTime dt = new DateTime();
|
|
|
|
|
dt = dt.minusMonths(5);
|
|
|
|
|
dt = dt.minusMonths(1);
|
|
|
|
|
params.put("confirm_time", dt.toDate());
|
|
|
|
|
params.put("client_id", client_id);
|
|
|
|
|
List<JSONObject> orders = orderMapper.listAnalysisClientCustomer(params);
|
|
|
|
@ -176,6 +194,67 @@ public class CustomerImpressionServiceImpl implements CustomerImpressionService
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void generateInfo() {
|
|
|
|
|
Date now = new Date();
|
|
|
|
|
DateTime dt = new DateTime(2018, 1, 19, 3, 0);
|
|
|
|
|
if (dt.toDate().compareTo(now) > 0) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
BoundListOperations<String, String> ops = stringRedisTemplate.boundListOps("customer_impression");
|
|
|
|
|
String redisValue = ops.leftPop();
|
|
|
|
|
|
|
|
|
|
while (!StringUtils.isEmpty(redisValue)) {
|
|
|
|
|
try {
|
|
|
|
|
JSONObject order = JSONObject.parseObject(redisValue);
|
|
|
|
|
redisValue = ops.leftPop();
|
|
|
|
|
if (StringUtils.isEmpty(order.getString("channel"))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
String customer_id = order.getString("customer_id");
|
|
|
|
|
JSONObject userInfo = customerMapper.findCustomerByOpenId(customer_id);
|
|
|
|
|
if (userInfo == null) {
|
|
|
|
|
userInfo = customerRelationAlipayMapper.findCustomerByUserId(customer_id);
|
|
|
|
|
}
|
|
|
|
|
JSONObject clientCustomerInfo = clientCustomersMapper.getClientCustomerWithNull(order.getIntValue("client_id"), customer_id);
|
|
|
|
|
if (clientCustomerInfo == null) {
|
|
|
|
|
locker.lock(CUSTOMER_IMPRESSION_PREFIX+customer_id, 30_000, 30_000);
|
|
|
|
|
try {
|
|
|
|
|
JSONObject client_customer = new JSONObject();
|
|
|
|
|
client_customer.put("client_id", order.getIntValue("client_id"));
|
|
|
|
|
client_customer.put("customer_id", order.getString("customer_id"));
|
|
|
|
|
client_customer.put("channel", order.getString("channel"));
|
|
|
|
|
client_customer.put("tag", "不活跃用户");
|
|
|
|
|
if (userInfo != null) {
|
|
|
|
|
client_customer.put("headimg", userInfo.getString("headimg"));
|
|
|
|
|
client_customer.put("nick_name", userInfo.getString("nickname"));
|
|
|
|
|
}
|
|
|
|
|
client_customer.put("payment_times", 1);
|
|
|
|
|
client_customer.put("update_time", now);
|
|
|
|
|
client_customer.put("total_amount", order.getBigDecimal("total_amount"));
|
|
|
|
|
client_customer.put("last_payment_time", order.getDate("confirm_time"));
|
|
|
|
|
clientCustomersMapper.insert(client_customer);
|
|
|
|
|
} finally {
|
|
|
|
|
locker.unlock(customer_id);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
clientCustomerInfo.put("payment_times", 1);
|
|
|
|
|
clientCustomerInfo.put("client_id", order.getIntValue("client_id"));
|
|
|
|
|
clientCustomerInfo.put("customer_id", order.getString("customer_id"));
|
|
|
|
|
clientCustomerInfo.put("total_amount", order.getBigDecimal("total_amount"));
|
|
|
|
|
if (userInfo != null) {
|
|
|
|
|
clientCustomerInfo.put("headimg", userInfo.getString("headimg"));
|
|
|
|
|
clientCustomerInfo.put("nick_name", userInfo.getString("nickname"));
|
|
|
|
|
}
|
|
|
|
|
clientCustomerInfo.put("last_payment_time", order.getDate("confirm_time"));
|
|
|
|
|
clientCustomersMapper.updateAfterPaymentFinish(clientCustomerInfo);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
logger.debug("Reduce Customer Impression Error Redis Value =" + redisValue, e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void modifyNameRemark(int client_id, String customer_id, String name_remark) {
|
|
|
|
|
JSONObject clientCustomerInfo = clientCustomersMapper.getClientCustomer(client_id, customer_id);
|
|
|
|
@ -185,5 +264,4 @@ public class CustomerImpressionServiceImpl implements CustomerImpressionService
|
|
|
|
|
clientCustomerInfo.put("name_remak", name_remark);
|
|
|
|
|
clientCustomersMapper.update(clientCustomerInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|