From f27c390100838b75c468ce92330276b68e476ef5 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 15 十月 2019 10:20:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java |  191 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 190 insertions(+), 1 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 e271163..4b479cc 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
@@ -3,6 +3,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
@@ -17,7 +19,9 @@
 import org.dom4j.Element;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.yeshi.utils.DateUtil;
 import org.yeshi.utils.entity.wx.RedPackParams;
+import org.yeshi.utils.entity.wx.RedPackRecord;
 import org.yeshi.utils.wx.WXPayUtil;
 
 import com.alipay.api.AlipayApiException;
@@ -950,12 +954,197 @@
 	}
 	
 	
-	public void downAutoOpenIdFile() {
+	@Override
+	public List<String> getAutoExtractOpenIds() 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);
 		
+		// 鎻愮幇閲戦
+		BigDecimal money = BigDecimal.valueOf(Constant.AUTO_EXTRACT_MONEY);
+		// 浣欓鏈�浣庨檺鍒�
+		BigDecimal minSurplus = BigDecimal.valueOf(Constant.AUTO_EXTRACT_MIN_SURPLUS);
 		
+		List<String> listOpendIDs = new ArrayList<String>();
+		// 棣栬appID
+		listOpendIDs.add(Constant.getWXAccount(null, null).getAppId());
 		
+		while (true) {
+			// 鏌ヨ婊¤冻鏉′欢 1銆�2 鐨剈id
+			List<Long> listId = userInfoService.getAutoExtractUserIds(page * pageSize, pageSize, minSurplus);
+			if (listId == null || listId.isEmpty())
+				break;
+			
+			// 鏌ヨ璁板綍鏄惁婊¤冻
+			List<Long> listValid = extractWeiXinRecordService.getValidUsers(listId, receivedDate, refundDate);
+			if (listValid == null || listValid.isEmpty()) {
+				page ++;
+				continue;
+			}
+			
+			for (Long uid: listValid) {
+				UserInfo userInfo = subHongBaoByUid(uid, money, minSurplus);
+				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);
+		if (userInfo != null && userInfo.getMyHongBao().compareTo(minSurplus) >= 0) {
+			// 寰俊鎻愮幇璁板綍
+			ExtractWeiXinRecord extractRecord = new ExtractWeiXinRecord();
+			extractRecord.setUid(uid);
+			extractRecord.setOpenId(userInfo.getWxOpenId());
+			extractRecord.setUnionId(userInfo.getWxUnionId());
+			extractRecord.setMoney(money);
+			extractRecord.setStatus(ExtractWeiXinRecord.SENDING);
+			extractRecord.setType(ExtractWeiXinRecord.TYPE_MANUAL);
+			extractRecord.setCreateTime(new Date());
+			extractRecord.setUpdateTime(new Date());
+			extractWeiXinRecordService.insertSelective(extractRecord);
+			// 璁板綍id
+			Long recordId = extractRecord.getId();
+			
+			// 璧勯噾鏄庣粏
+			UserMoneyDetail detail = new UserMoneyDetail();
+			detail.setCreateTime(new Date());
+			detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.extractAutoWX.name() + ":" + recordId));
+			detail.setMoney(new BigDecimal("-"+ money.toString()));
+			detail.setTitle(UserMoneyDetailTypeEnum.extractAutoWX.getDesc());
+			detail.setType(UserMoneyDetailTypeEnum.extractAutoWX);
+			detail.setUpdateTime(new Date());
+			detail.setUserInfo(userInfo);
+			
+			// 璧勯噾璁$畻
+			userMoneyService.subUserMoney(userInfo.getId(), money, detail);
+
+			// 4銆佸彂閫佹秷鎭�氱煡
+			String desc = "涓轰繚闅滀綘鐨勮处鎴蜂綑棰濆畨鍏紝鑷姩鎻愮幇閲戦灏嗕笉浼氶珮浜�5鍏�";
+			String beizu = "璐︽埛涓墿浣欎綑棰濊鍦ㄦ湰App鍐呭畬鎴愭彁鐜�";
+			userMoneyMsgNotificationService.extractAuto(extractRecord, "鏈鍙�-鎻愮幇涓�", desc, beizu);
+			
+			// 婊¤冻鏉′欢杩斿洖淇℃伅
+			return userInfo;
+		}
+		return null;
+	}
+	
+	
+	@Override
+	public void updateManualExtractRecord(List<RedPackRecord> list) throws ExtractException{
+		if (list == null || list.isEmpty())
+			throw new ExtractException(1, "绾㈠寘璁板綍淇℃伅涓虹┖");
 		
+		for (RedPackRecord redPackRecord: list) {
+			updateWeiXinRecord(redPackRecord);
+		}
+	}
+	
+	
+	@Transactional(rollbackFor = Exception.class)
+	private void updateWeiXinRecord(RedPackRecord redPackRecord){
+		if (StringUtil.isNullOrEmpty(redPackRecord.getOpenId()))
+			return;
 		
+		ExtractWeiXinRecord record  = extractWeiXinRecordService.getByOpenIdAndType(redPackRecord.getOpenId(), ExtractWeiXinRecord.TYPE_MANUAL);
+		if (record == null)
+			return;
+			
+		// 鐘舵�佽繃婊�
+		String statusOld = record.getStatus();
+		if (StringUtil.isNullOrEmpty(statusOld) ||ExtractWeiXinRecord.REFUND.equals(statusOld) 
+				|| ExtractWeiXinRecord.RFUND_ING.equals(statusOld)) 
+			return;
+		
+		ExtractWeiXinRecord updeteRecord = new ExtractWeiXinRecord();
+		updeteRecord.setId(record.getId());
+		updeteRecord.setUpdateTime(new Date());
+		
+		String billno = redPackRecord.getBillno();
+		if (!StringUtil.isNullOrEmpty(billno)) {
+			updeteRecord.setBillno(billno.replace("`", ""));
+		}
+		
+		String detailno = redPackRecord.getDetailno();
+		if (!StringUtil.isNullOrEmpty(detailno)) {
+			updeteRecord.setDetailno(detailno.replace("`", ""));
+		}
+		
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
+		String rcvTime = redPackRecord.getRcvTime();
+		if (!StringUtil.isNullOrEmpty(rcvTime)) {
+			try {
+				updeteRecord.setRcvTime(sdf.parse(rcvTime));
+			} catch (ParseException e) {
+				e.printStackTrace();
+			}
+		}
+		
+		String sendTime = redPackRecord.getSendTime();
+		if (!StringUtil.isNullOrEmpty(sendTime)) {
+			try {
+				updeteRecord.setSendTime(sdf.parse(sendTime));
+			} catch (ParseException e) {
+				e.printStackTrace();
+			}
+		}
+		
+		String status = redPackRecord.getStatus();
+		if (!StringUtil.isNullOrEmpty(status)) {
+			switch (status) {
+				case "宸插彂鏀惧緟棰嗗彇":
+					status = ExtractWeiXinRecord.SENT;
+					break;
+				case "杩囨湡鏈閫�娆�":
+					status = ExtractWeiXinRecord.REFUND;
+					break;
+				case "宸查鍙�":
+					status = ExtractWeiXinRecord.RECEIVED;
+					break;
+				default:
+					status = null;
+					break;
+			}  
+		}
+		updeteRecord.setStatus(status);
+		
+		// 鏇存柊绾㈠寘璁板綍
+		extractWeiXinRecordService.updateByPrimaryKeySelective(updeteRecord);
+		
+		if (!ExtractWeiXinRecord.REFUND.equals(status))
+			return;
+		
+		// 璧勯噾鏄庣粏
+		UserMoneyDetail detail = new UserMoneyDetail();
+		detail.setCreateTime(new Date());
+		detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.extractAutoWXRefund.name() + ":" + record.getId()));
+		detail.setMoney(record.getMoney());
+		detail.setTitle(UserMoneyDetailTypeEnum.extractAutoWXRefund.getDesc());
+		detail.setType(UserMoneyDetailTypeEnum.extractAutoWXRefund);
+		detail.setUpdateTime(new Date());
+		detail.setUserInfo(new UserInfo(record.getUid()));
+		
+		// 璧勯噾璁$畻
+		userMoneyService.addUserMoney(record.getUid(), record.getMoney(), detail);
 	}
 	
 }

--
Gitblit v1.8.0