From 0ec22dcf4fd9c4496e6f681e7fab89f56c6e4e8a Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期四, 02 四月 2020 14:45:20 +0800
Subject: [PATCH] vip 消息

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java |  158 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 140 insertions(+), 18 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java
index 5e7a117..210e1b9 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java
@@ -53,6 +53,7 @@
 import com.yeshi.fanli.entity.common.AdminUser;
 import com.yeshi.fanli.entity.money.UserMoneyDetail;
 import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
 import com.yeshi.fanli.exception.ExtractException;
 import com.yeshi.fanli.exception.NotExistObjectException;
 import com.yeshi.fanli.exception.ObjectStateException;
@@ -67,6 +68,7 @@
 import com.yeshi.fanli.service.inter.money.extract.ExtractService;
 import com.yeshi.fanli.service.inter.money.extract.ExtractWeiXinRecordService;
 import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
+import com.yeshi.fanli.service.inter.order.CommonOrderCountService;
 import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
 import com.yeshi.fanli.service.inter.order.OrderUserStatisticService;
 import com.yeshi.fanli.service.inter.push.PushService;
@@ -77,6 +79,7 @@
 import com.yeshi.fanli.util.GsonUtil;
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
 import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.ThreadUtil;
 import com.yeshi.fanli.util.TimeUtil;
 import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 
@@ -151,6 +154,9 @@
 	@Resource
 	private ExtractWeiXinRecordService extractWeiXinRecordService;
 
+	@Resource
+	private CommonOrderCountService commonOrderCountService;
+
 	@Transactional
 	public Integer addExtract(Extract extract) {
 		Integer integer = extract(extract);
@@ -172,10 +178,10 @@
 		updateExtract.setId(id);
 		updateExtract.setState(Extract.STATE_PROCESSING);
 		extractMapper.updateByPrimaryKeySelective(updateExtract);
-		//TODO 鏂扮増閮ㄧ讲鍚庡垹闄�
+		// TODO 鏂扮増閮ㄧ讲鍚庡垹闄�
 		// 鏀瑰彉璧勯噾璁板綍鐘舵��
-		UserMoneyDetail detail = userMoneyDetailService
-				.selectByTypeAndUidAndIdentifyCode(UserMoneyDetailTypeEnum.extract, find.getUserInfo().getId(), find.getId());
+		UserMoneyDetail detail = userMoneyDetailService.selectByTypeAndUidAndIdentifyCode(
+				UserMoneyDetailTypeEnum.extract, find.getUserInfo().getId(), find.getId());
 		if (detail != null) {
 			UserMoneyDetail update = new UserMoneyDetail(detail.getId());
 			update.setShow(true);
@@ -188,7 +194,7 @@
 		return null;
 	}
 
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public synchronized void rejectExtract(long id, String reason, AdminUser admin)
 			throws ObjectStateException, NotExistObjectException {
 		Extract find = extractMapper.selectByPrimaryKey(id);
@@ -268,9 +274,9 @@
 				&& (System.currentTimeMillis() - history.getCreateTime().getTime()) < 1000 * 60 * 60 * 24 * 7L)
 			return 111;
 
-		final String autoExtract = configService.get("extract_way"); // 鏄惁鑷姩杞处
-		final String maxCount = configService.get("extract_count_day");
-		final String maxMoney = configService.get("extract_money_day");
+		final String autoExtract = configService.get(ConfigKeyEnum.extractWay.getKey()); // 鏄惁鑷姩杞处
+		final String maxCount = configService.get(ConfigKeyEnum.extractDayCount.getKey());
+		final String maxMoney = configService.get(ConfigKeyEnum.extractMoneyDay.getKey());
 
 		UserInfo user = userInfoMapper.selectByPrimaryKeyForUpdate(extract.getUserInfo().getId());
 		// 浣欓涓嶈冻
@@ -291,20 +297,31 @@
 
 		extractMapper.insertSelective(extract);
 
-		ExtractAuditRecord auditRecord = new ExtractAuditRecord();
+		final ExtractAuditRecord auditRecord = new ExtractAuditRecord();
 		auditRecord.setBeforeMoney(user.getMyHongBao());
 		auditRecord.setExtract(extract);
 
 		Date minTime = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 180L);
-		// 缁熻鏁版嵁
-		int orderCount50More = orderUserStatisticService.countOrderCount100MoreByUidAndMinTime(user.getId(), minTime);
-
-		BigDecimal weiQuanOrderFanAmount = orderUserStatisticService.sumWeiQuanOrderFanAmountByUid(user.getId(),
-				minTime);
-		int weiQuanOrderCount = orderUserStatisticService.countWeiQuanOrderByUid(user.getId(), minTime);
-		auditRecord.setExtraInfoStr(new Gson()
-				.toJson(new ExtractOrderStatisticDTO(orderCount50More, weiQuanOrderCount, weiQuanOrderFanAmount, 0)));
+		
 		extractAuditRecordMapper.insertSelective(auditRecord);
+
+		ThreadUtil.run(new Runnable() {
+
+			@Override
+			public void run() {
+				// 缁熻鏁版嵁
+				int less10Count = commonOrderCountService.countOderByUidAndLess10(user.getId());
+				ExtractAuditRecord update=new ExtractAuditRecord();
+				update.setId(auditRecord.getId());
+				int orderCount50More = orderUserStatisticService.countOrderCount100MoreByUidAndMinTime(user.getId(), minTime);
+				BigDecimal weiQuanOrderFanAmount = orderUserStatisticService.sumWeiQuanOrderFanAmountByUid(user.getId(),
+						minTime);
+				int weiQuanOrderCount = orderUserStatisticService.countWeiQuanOrderByUid(user.getId(), minTime);
+				update.setExtraInfoStr(new Gson().toJson(
+						new ExtractOrderStatisticDTO(orderCount50More, weiQuanOrderCount, weiQuanOrderFanAmount, 0, less10Count)));
+				extractAuditRecordMapper.updateByPrimaryKeySelective(update);
+			}
+		});
 
 		// 鏂扮増璧勯噾璇︽儏
 		UserMoneyDetail userMoneyDetail = null;
@@ -426,7 +443,7 @@
 			response = alipayClient.execute(request);
 			LogHelper.userErrorInfo("鎻愮幇:鏀粯瀹濋�氳繃鎻愮幇鎴愬姛-" + extract.getId());
 		} catch (AlipayApiException e) {
-			e.printStackTrace();
+			LogHelper.errorDetailInfo(e, "鏀粯瀹濊浆璐﹀紓甯�:" + extract.getId(), "");
 			LogHelper.userErrorInfo("鎻愮幇:鏀粯瀹濇彁鐜板紓甯革細" + response + ",鎻愮幇淇℃伅" + GsonUtil.toJson(extract));
 		}
 
@@ -541,7 +558,7 @@
 		return extractMapper.selectByPrimaryKey(id);
 	}
 
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void checkExtract(Long uid) throws ExtractException {
 		BigDecimal compensateMoney = extractMapper.computeCompensateByUid(uid);
@@ -1087,6 +1104,111 @@
 		return listOpendIDs;
 	}
 
+	@Override
+	public List<UserInfo> preAutoUserTo1212() throws Exception {
+		int page = 0;
+		int pageSize = 100;
+		int maxSize = 300;
+		Date nowDate = new Date();
+		// 鏉′欢3锛氳窛绂讳笂涓�娆℃垚鍔熼鍙栧井淇$孩鍖呭凡缁忚秴杩囦簡30澶╂椂闂达紝鍙湪绗�31澶╁啀娆′笅鍙戯紱
+		String receivedDate = DateUtil.reduceDayTostring(30, nowDate);
+		// 鏉′欢4锛氳窛绂讳笂涓�娆℃湭鎴愬姛棰嗗彇寰俊绾㈠寘宸茬粡瓒呰繃浜�15澶╂椂闂达紝鍙湪绗�16澶╁啀娆′笅鍙戯紱
+		String refundDate = DateUtil.reduceDayTostring(15, nowDate);
+		// 浣欓鏈�浣庨檺鍒�
+		List<UserInfo> list = new ArrayList<UserInfo>();
+		while (true) {
+			// 鏌ヨ婊¤冻鏉′欢 1銆�2 鐨剈id
+			List<UserInfo> listUser = userInfoService.getAutoExtractUserTo1212(page * pageSize, pageSize);
+			if (listUser == null || listUser.isEmpty())
+				break;
+
+			List<Long> listId = new ArrayList<Long>();
+			for (UserInfo userInfo : listUser) {
+				listId.add(userInfo.getId());
+			}
+
+			// 鏌ヨ璁板綍鏄惁婊¤冻
+			List<Long> listValid = extractWeiXinRecordService.getValidUsers(listId, receivedDate, refundDate);
+			if (listValid == null || listValid.isEmpty()) {
+				page++;
+				continue;
+			}
+
+			for (Long uid : listValid) {
+				if (list.size() >= maxSize)
+					break;
+				for (UserInfo userInfo : listUser) {
+					if (list.size() >= maxSize)
+						break;
+
+					if (userInfo.getId().longValue() == uid.longValue()) {
+						list.add(userInfo);
+						break;
+					}
+				}
+			}
+
+			if (list.size() >= maxSize)
+				break;
+
+			page++;
+		}
+		return list;
+	}
+
+	@Override
+	public List<String> getAutoExtractOpenIdsTo1212() throws Exception {
+		int page = 0;
+		int pageSize = 100;
+		int maxSize = 301; // appId + 瀹為檯openid300涓�
+		Date nowDate = new Date();
+		// 鏉′欢3锛氳窛绂讳笂涓�娆℃垚鍔熼鍙栧井淇$孩鍖呭凡缁忚秴杩囦簡30澶╂椂闂达紝鍙湪绗�31澶╁啀娆′笅鍙戯紱
+		String receivedDate = DateUtil.reduceDayTostring(30, nowDate);
+		// 鏉′欢4锛氳窛绂讳笂涓�娆℃湭鎴愬姛棰嗗彇寰俊绾㈠寘宸茬粡瓒呰繃浜�15澶╂椂闂达紝鍙湪绗�16澶╁啀娆′笅鍙戯紱
+		String refundDate = DateUtil.reduceDayTostring(15, nowDate);
+
+		// 鎻愮幇閲戦
+		BigDecimal money = BigDecimal.valueOf(1);
+
+		List<String> listOpendIDs = new ArrayList<String>();
+		// 棣栬appID
+		listOpendIDs.add(Constant.getWXAccount(null, null).getAppId());
+
+		while (true) {
+			// 鏌ヨ婊¤冻鏉′欢 1銆�2 鐨剈id
+			List<UserInfo> listUser = userInfoService.getAutoExtractUserTo1212(page * pageSize, pageSize);
+			if (listUser == null || listUser.isEmpty())
+				break;
+
+			List<Long> listId = new ArrayList<Long>();
+			for (UserInfo userInfo : listUser) {
+				listId.add(userInfo.getId());
+			}
+
+			// 鏌ヨ璁板綍鏄惁婊¤冻
+			List<Long> listValid = extractWeiXinRecordService.getValidUsers(listId, receivedDate, refundDate);
+			if (listValid == null || listValid.isEmpty()) {
+				page++;
+				continue;
+			}
+
+			for (Long uid : listValid) {
+				UserInfo userInfo = subHongBaoByUid(uid, money, money);
+				if (userInfo != null) {
+					listOpendIDs.add(userInfo.getWxOpenId());
+					if (listOpendIDs.size() >= maxSize)
+						break;
+				}
+			}
+
+			if (listOpendIDs.size() >= maxSize)
+				break;
+
+			page++;
+		}
+		return listOpendIDs;
+	}
+
 	@Transactional(rollbackFor = Exception.class)
 	private UserInfo subHongBaoByUid(Long uid, BigDecimal money, BigDecimal minSurplus) {
 		UserInfo userInfo = userInfoMapper.selectByPrimaryKeyForUpdate(uid);

--
Gitblit v1.8.0