From 4706fa0dcd761c13f0f7f33e4e7ab804e0a21f4f Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期六, 12 十月 2019 19:19: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 | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 227 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 8f04887..e271163 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,24 @@ package com.yeshi.fanli.service.impl.money.extract; +import java.io.IOException; +import java.io.InputStream; import java.math.BigDecimal; 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.entity.wx.RedPackParams; +import org.yeshi.utils.wx.WXPayUtil; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; @@ -33,6 +41,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; @@ -52,6 +61,7 @@ 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; @@ -62,6 +72,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 +143,10 @@ @Resource private OrderUserStatisticService orderUserStatisticService; + + @Resource + private ExtractWeiXinRecordService extractWeiXinRecordService; + @Transactional public Integer addExtract(Extract extract) { @@ -732,4 +748,214 @@ 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; + } + + + public void downAutoOpenIdFile() { + + + + + + } + } -- Gitblit v1.8.0