From 32f925357776c46bd9e35cf9aad4fdd0f6535d1d Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 22 十月 2019 09:21:35 +0800
Subject: [PATCH] 订单奖励修改

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java |  497 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 493 insertions(+), 4 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 39ba789..4c29b74 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
@@ -1,16 +1,28 @@
 package com.yeshi.fanli.service.impl.money.extract;
 
+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;
 import java.util.List;
 import java.util.Map;
-import java.util.UUID;
 
 import javax.annotation.Resource;
 
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.DocumentHelper;
+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;
 import com.alipay.api.AlipayClient;
@@ -33,6 +45,7 @@
 import com.yeshi.fanli.entity.bus.user.Extract;
 import com.yeshi.fanli.entity.bus.user.ExtractAuditRecord;
 import com.yeshi.fanli.entity.bus.user.ExtractRecord;
+import com.yeshi.fanli.entity.bus.user.ExtractWeiXinRecord;
 import com.yeshi.fanli.entity.bus.user.HongBaoV2;
 import com.yeshi.fanli.entity.bus.user.PayInfo;
 import com.yeshi.fanli.entity.bus.user.UserAccountBindingHistory;
@@ -47,13 +60,14 @@
 import com.yeshi.fanli.log.LogHelper;
 import com.yeshi.fanli.service.inter.config.ConfigService;
 import com.yeshi.fanli.service.inter.config.SystemConfigService;
-import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
 import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
 import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
 import com.yeshi.fanli.service.inter.money.UserMoneyService;
 import com.yeshi.fanli.service.inter.money.extract.ExtractRecordService;
 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.HongBaoV2Service;
 import com.yeshi.fanli.service.inter.order.OrderUserStatisticService;
 import com.yeshi.fanli.service.inter.push.PushService;
 import com.yeshi.fanli.service.inter.user.UserAccountBindingHistoryService;
@@ -62,6 +76,8 @@
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.GsonUtil;
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
+import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.TimeUtil;
 import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 
 import net.sf.json.JSONObject;
@@ -131,6 +147,10 @@
 
 	@Resource
 	private OrderUserStatisticService orderUserStatisticService;
+	
+	@Resource
+	private ExtractWeiXinRecordService extractWeiXinRecordService;
+	
 
 	@Transactional
 	public Integer addExtract(Extract extract) {
@@ -374,6 +394,7 @@
 	 * @param extract
 	 * @param session
 	 */
+	//TODO 杞处閫昏緫闇�瑕佹敼鍙橈紝鍥哄畾IP
 	@Transactional
 	private void extractByZhiFuBao(Extract extract, AdminUser adminUser) {
 		LogHelper.userErrorInfo("鎻愮幇:寮�濮嬮�氳繃鎻愮幇-"+extract.getId());
@@ -381,10 +402,9 @@
 		AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
 				Constant.alipayConfig.getAppId(), privateKey, "json", "gbk", null, "RSA2");
 		AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
-		String uuid = UUID.randomUUID().toString().replace("-", "");
 		String appName = Constant.systemCommonConfig.getProjectChineseName();
 		JSONObject json = new JSONObject();
-		json.put("out_biz_no", uuid);
+		json.put("out_biz_no", "widthdraw_"+extract.getId());//鏈�闀块暱搴�64浣嶏紝鏀寔鑻辨枃锛屼笅鍒掔嚎锛屾暟瀛�
 		json.put("payee_type", "ALIPAY_LOGONID");
 		json.put("payee_account", extract.getAccount());
 		json.put("amount", extract.getMoney());
@@ -732,4 +752,473 @@
 		else
 			return money;
 	}
+	
+	
+	
+	@Transactional(rollbackFor = Exception.class)
+	@Override
+	public void autoExtract(UserInfo user) {
+		if (user == null || user.getWxOpenId() == null || user.getWxUnionId() == null ||
+				user.getState() != UserInfo.STATE_NORMAL)
+			return;
+		
+		Date date = new Date();
+		BigDecimal money = new BigDecimal(Constant.AUTO_EXTRACT_MONEY);
+		
+		// 1銆佹彃鍏ヨ褰�
+		ExtractWeiXinRecord extractRecord = new ExtractWeiXinRecord();
+		extractRecord.setUid(user.getId());
+		extractRecord.setOpenId(user.getWxOpenId());
+		extractRecord.setUnionId(user.getWxUnionId() );
+		extractRecord.setMoney(money);
+		extractRecord.setCreateTime(date);
+		extractRecord.setUpdateTime(date);
+		extractWeiXinRecordService.insertSelective(extractRecord);
+		
+		// 浜ゆ槗鍙�
+		Long recordId = extractRecord.getId();
+		String billno = "BanLiExtract" + recordId;
+		
+		// 鏇存柊璁板綍
+		ExtractWeiXinRecord updeteRecord = null;
+		
+		String mchId = "1520950211";
+		String appId = "wx5c0d167c6e3ad726";
+		String key = "XYJkJ2018FAfaodCCx899mLl138rfGVd";
+		
+		// 2銆佸彂鏀惧井淇$孩鍖�
+		RedPackParams redPackParams = new RedPackParams();
+		redPackParams.setBillno(billno);
+		redPackParams.setMchId(mchId);
+		redPackParams.setWxappId(appId);
+		redPackParams.setSendName("鏉挎牀蹇渷");
+		redPackParams.setOpenid(user.getWxOpenId());
+		redPackParams.setMoney(money);
+		redPackParams.setTotalNum(1);
+		redPackParams.setWishing("璐︽埛涓墿浣欎綑棰濊鍦ㄦ湰App鍐呭畬鎴愭彁鐜�");
+		redPackParams.setClientIp("106.80.118.163");
+		redPackParams.setActName("鑷姩鎻愮幇");
+		redPackParams.setKey(key);
+		redPackParams.setRemark("寰俊鑷姩鎻愮幇");
+		//redPackParams.setSceneId(null);
+		//redPackParams.setRiskInfo(null);
+		
+		
+		// 鍙戠敓绾㈠寘鐘舵��
+		boolean stateRedPack = false;
+		
+		String pwd = "1520950211";
+		InputStream cert = ExtractServiceImpl.class.getClassLoader().getResourceAsStream("certificate/apiclient_cert.p12"); // 璇诲彇.p12鏂囦欢
+		// 鎵ц鍙戞斁绾㈠寘
+		try {
+			String result = WXPayUtil.redPackToOpenId(redPackParams, pwd, cert);
+			if (!StringUtil.isNullOrEmpty(result)) {
+				stateRedPack = parseSendResult(result);
+			}
+			
+			if (!stateRedPack) {
+				String redPackRecord = WXPayUtil.getRedPackRecord(billno, mchId, appId, key, pwd, cert);
+				if (!StringUtil.isNullOrEmpty(redPackRecord)) {
+					updeteRecord = parseDTO(redPackRecord);
+				}
+			}
+		} catch (Exception e) {
+			String redPackRecord = WXPayUtil.getRedPackRecord(billno, mchId, appId, key, pwd, cert);
+			if (!StringUtil.isNullOrEmpty(redPackRecord)) {
+				updeteRecord = parseDTO(redPackRecord);
+			}
+			LogHelper.errorDetailInfo(e);
+		}
+		try {
+			cert.close();
+		} catch (IOException e1) {
+			e1.printStackTrace();
+		}
+		
+		// 鏇存柊淇℃伅
+		if (updeteRecord == null) {
+			updeteRecord = new ExtractWeiXinRecord();
+		} else {
+			stateRedPack = true;
+		}
+		
+		updeteRecord.setId(recordId);
+		updeteRecord.setStatus(ExtractWeiXinRecord.SENDING);
+		updeteRecord.setBillno(billno);
+		extractWeiXinRecordService.updateByPrimaryKeySelective(updeteRecord);
+		
+		// 绾㈠寘鍙戞斁澶辫触
+		if (!stateRedPack) 
+			return; 
+		
+		// 3銆佸姞鍏ヨ祫閲戞槑缁�
+		UserMoneyDetail detail = new UserMoneyDetail();
+		detail.setCreateTime(new Date());
+		detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.extractAutoWX.name() + ":" + recordId));
+		detail.setMoney(money);
+		detail.setTitle(UserMoneyDetailTypeEnum.extractAutoWX.getDesc());
+		detail.setType(UserMoneyDetailTypeEnum.extractAutoWX);
+		detail.setUpdateTime(new Date());
+		detail.setUserInfo(user);
+		try {
+			userMoneyDetailService.addUserMoneyDetail(detail);
+		} catch (UserMoneyDetailException e) {
+			LogHelper.errorDetailInfo(e);
+		}
+		
+		// 4銆佸彂閫佹秷鎭�氱煡
+		String desc = "涓轰繚闅滀綘鐨勮处鎴蜂綑棰濆畨鍏紝鑷姩鎻愮幇閲戦灏嗕笉浼氶珮浜�5鍏�";
+		String beizu = "璐︽埛涓墿浣欎綑棰濊鍦ㄦ湰App鍐呭畬鎴愭彁鐜�";
+		userMoneyMsgNotificationService.extractAuto(extractRecord, "鏈鍙�-鎻愮幇涓�", desc, beizu);
+	}
+
+	
+	private boolean parseSendResult(String result) {
+		try {
+			Document document = DocumentHelper.parseText(result);
+			// 鑾峰彇鏍硅妭鐐瑰厓绱犲璞�
+		    Element root = document.getRootElement();
+		    Element returnCode = root.element("return_code");
+		   
+		    if (!"SUCCESS".equalsIgnoreCase(returnCode.getText())) {
+		    	Element returnMsg = root.element("return_msg");
+		    	System.out.println(returnMsg.getText()); 
+		    	return false;
+		    } 
+		    
+	    	Element resultCode = root.element("result_code");
+	    	if (!"SUCCESS".equalsIgnoreCase(resultCode.getText())) {
+		    	Element errCode = root.element("err_code");
+		    	Element errCodeDes = root.element("err_code_des");
+		    	System.out.println(errCode.getText() + ":" + errCodeDes.getText()); 
+		    	return false;
+	    	}
+	    	return true;
+		} catch (DocumentException e) {
+			e.printStackTrace();
+			LogHelper.errorDetailInfo(e);
+		}
+		return false;
+	}
+	
+	
+	private ExtractWeiXinRecord parseDTO(String result) {
+		try {
+			
+			Document document = DocumentHelper.parseText(result);
+			// 鑾峰彇鏍硅妭鐐瑰厓绱犲璞�
+		    Element root = document.getRootElement();
+		    Element returnCode = root.element("return_code");
+		   
+		    if (!"SUCCESS".equalsIgnoreCase(returnCode.getText())) {
+		    	Element returnMsg = root.element("return_msg");
+		    	System.out.println(returnMsg.getText()); 
+		    	return null;
+		    } 
+		    
+	    	Element resultCode = root.element("result_code");
+	    	if (!"SUCCESS".equalsIgnoreCase(resultCode.getText())) {
+		    	Element errCode = root.element("err_code");
+		    	Element errCodeDes = root.element("err_code_des");
+		    	System.out.println(errCode.getText() + ":" + errCodeDes.getText()); 
+	    	}
+		    	
+	    	ExtractWeiXinRecord resultRecord = new ExtractWeiXinRecord();
+	    	resultRecord.setBillno(root.element("result_code").getText());
+	    	resultRecord.setDetailno(root.element("detail_id").getText());
+	    	resultRecord.setStatus(root.element("status").getText());
+	    	resultRecord.setSendType(root.element("send_type").getText());
+	    	resultRecord.setHbType(root.element("result_code").getText());
+	    	
+	    	String totalNum = root.element("total_num").getText();
+	    	resultRecord.setTotalNum(Integer.parseInt(totalNum));
+	    	
+	    	String sendTime = root.element("send_time").getText();
+	    	resultRecord.setSendTime(new Date(TimeUtil.convertDateToTemp2(sendTime)));
+	    	
+	    	 Element element = root.element("hblist");
+	    	 Iterator<?> iterator = element.elementIterator();
+	         while (iterator.hasNext()) {
+	             Element childElement = (Element)iterator.next();
+                 Element rcvTime = childElement.element("rcv_time");
+                 resultRecord.setRcvTime(new Date(TimeUtil.convertDateToTemp2(rcvTime.getText())));
+                 break;
+	        } 
+	    	return resultRecord;
+	    	
+		} catch (DocumentException e) {
+			e.printStackTrace();
+			LogHelper.errorDetailInfo(e);
+		}
+		return null;
+	}
+	
+	
+	
+	@Override
+	public List<UserInfo> preAutoUser() throws Exception {
+		int page = 0;
+		int pageSize = 100;
+		int maxSize = 300;
+		Date nowDate = new Date();
+		// 涓�銆佽嚜鍔ㄦ彁鐜伴拡瀵圭殑鐢ㄦ埛缇わ細 鍓嶆彁鏉′欢:鐢ㄦ埛鍦ㄨ窛浠�60澶╁埌90澶╁唴鏈椿璺冭繃鐨勭敤鎴�
+		String beganDate = DateUtil.reduceDayTostring(90, nowDate);
+		String endDate = DateUtil.reduceDayTostring(60, nowDate);
+		// 鏉′欢3锛氳窛绂讳笂涓�娆℃垚鍔熼鍙栧井淇$孩鍖呭凡缁忚秴杩囦簡30澶╂椂闂达紝鍙湪绗�31澶╁啀娆′笅鍙戯紱
+		String receivedDate = DateUtil.reduceDayTostring(30, nowDate);
+		// 鏉′欢4锛氳窛绂讳笂涓�娆℃湭鎴愬姛棰嗗彇寰俊绾㈠寘宸茬粡瓒呰繃浜�15澶╂椂闂达紝鍙湪绗�16澶╁啀娆′笅鍙戯紱
+		String refundDate = DateUtil.reduceDayTostring(15, nowDate);
+		
+		// 浣欓鏈�浣庨檺鍒�
+		BigDecimal minSurplus = BigDecimal.valueOf(Constant.AUTO_EXTRACT_MIN_SURPLUS);
+		
+		List<UserInfo> list = new ArrayList<UserInfo>();
+		
+		while (true) {
+			// 鏌ヨ婊¤冻鏉′欢 1銆�2 鐨剈id
+			List<UserInfo> listUser = userInfoService.getAutoExtractUser(page * pageSize, pageSize, minSurplus, beganDate, endDate);
+			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> getAutoExtractOpenIds() throws Exception {
+		int page = 0;
+		int pageSize = 100;
+		int maxSize = 301; // appId + 瀹為檯openid300涓�
+		Date nowDate = new Date();
+		// 涓�銆佽嚜鍔ㄦ彁鐜伴拡瀵圭殑鐢ㄦ埛缇わ細 鍓嶆彁鏉′欢:鐢ㄦ埛鍦ㄨ窛浠�60澶╁埌90澶╁唴鏈椿璺冭繃鐨勭敤鎴�
+		String beganDate = DateUtil.reduceDayTostring(90, nowDate);
+		String endDate = DateUtil.reduceDayTostring(60, nowDate);
+		// 鏉′欢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<UserInfo> listUser = userInfoService.getAutoExtractUser(page * pageSize, pageSize, minSurplus, beganDate, endDate);
+			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, 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 && !StringUtil.isNullOrEmpty(userInfo.getWxOpenId())
+				&& !StringUtil.isNullOrEmpty(userInfo.getWxUnionId()) && 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.RECEIVED.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.RECEIVED.equals(status)) {
+			// 鍙戦�佹秷鎭�氱煡
+			userMoneyMsgNotificationService.extractAuto(record, "宸查鍙�-宸叉彁鐜�", null, null);
+		} else if (ExtractWeiXinRecord.REFUND.equals(status)) {
+			// 璧勯噾鏄庣粏
+			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);
+			
+			// 鍙戦�佹秷鎭�氱煡
+			userMoneyMsgNotificationService.extractAuto(record, "宸查��鍥�-浣欓涓�", null, null);
+		}
+	}
+	
 }

--
Gitblit v1.8.0