diff --git a/src/main/java/au/com/royalpay/payment/manage/apps/core/CustomerImpressionService.java b/src/main/java/au/com/royalpay/payment/manage/apps/core/CustomerImpressionService.java index 36e3c92f5..5ea8c6f61 100644 --- a/src/main/java/au/com/royalpay/payment/manage/apps/core/CustomerImpressionService.java +++ b/src/main/java/au/com/royalpay/payment/manage/apps/core/CustomerImpressionService.java @@ -14,6 +14,7 @@ public interface CustomerImpressionService { JSONObject findOne(int client_id,String customer_id); void generateTag(int client_id); + void generate(int client_id); void generateInfo(); diff --git a/src/main/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionServiceImpl.java index 47a479195..b56bef18c 100644 --- a/src/main/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionServiceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionServiceImpl.java @@ -1,6 +1,8 @@ package au.com.royalpay.payment.manage.apps.core.impls; +import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.annotation.Resource; @@ -96,68 +98,62 @@ public class CustomerImpressionServiceImpl implements CustomerImpressionService return customer; } - // @Override - // @Transactional - // public void generate(int client_id) { - // JSONObject params = new JSONObject(); - // params.put("client_id", client_id); - // params.put("include_success_status", 3); - // PageList lastRecord = clientCustomersMapper.listCustomerInfo(params, new PageBounds(1, 1, - // Order.formString("update_time.desc"))); - // if (!CollectionUtils.isEmpty(lastRecord)) { - // params.put("confirm_time", lastRecord.get(0).getDate("update_time")); - // } - // List 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")); - // if (userInfo == null) { - // userInfo = customerRelationAlipayMapper.findCustomerByUserId(order.getString("customer_id")); - // } - // - // JSONObject clientCustomerInfo = clientCustomersMapper.getClientCustomerWithNull(client_id, - // order.getString("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")); - // } - // 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")); - // } - // 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); - // } - // } - // generateTag(client_id); - // } + @Override + public void generate(int client_id) { + JSONObject params = new JSONObject(); + params.put("client_id", client_id); + params.put("include_success_status", 3); + PageList lastRecord = clientCustomersMapper.listCustomerInfo(params, new PageBounds(1, 1, Order.formString("update_time.desc"))); + if (!CollectionUtils.isEmpty(lastRecord)) { + params.put("confirm_time", lastRecord.get(0).getDate("update_time")); + } + List 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")); + if (userInfo == null) { + userInfo = customerRelationAlipayMapper.findCustomerByUserId(order.getString("customer_id")); + } + + JSONObject clientCustomerInfo = clientCustomersMapper.getClientCustomerWithNull(client_id, order.getString("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")); + } + 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")); + } + 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); + } + } + } @Override @Transactional @@ -189,6 +185,11 @@ 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 ops = stringRedisTemplate.boundListOps("customer_impression"); String redisValue = ops.leftPop(); @@ -197,7 +198,7 @@ public class CustomerImpressionServiceImpl implements CustomerImpressionService JSONObject order = JSONObject.parseObject(redisValue); redisValue = ops.leftPop(); if (StringUtils.isEmpty(order.getString("channel"))) { - continue; + continue; } JSONObject userInfo = customerMapper.findCustomerByOpenId(order.getString("customer_id")); if (userInfo == null) { diff --git a/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java b/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java index ec3dd6246..a562dd076 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java @@ -51,6 +51,27 @@ public class CustomerImpressionTask { } } + @Scheduled(cron = "0 0 3 * * ?") + public void generate() { + List clients = clientMapper.listValidClient(); + List> splitList = new ArrayList<>(); + for (int i = 0; i < clients.size(); i+=200) { + if(i+200>clients.size()){ + splitList.add(clients.subList(i,clients.size())); + }else { + splitList.add(clients.subList(i,i+200)); + } + + } + for (List splitClients : splitList) { + Runnable task = () -> splitClients.forEach((p)->{ + System.out.println("当前执行到"+p.getIntValue("client_id")); + customerImpressionService.generate(p.getIntValue("client_id")); + }); + generatePool.execute(task); + } + } + @Scheduled(cron = "0/1 * * * * ?") public void generateInfo() { customerImpressionService.generateInfo();