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