|
@@ -2,22 +2,35 @@ package com.huiju.estateagents.third.service.impl;
|
2
|
2
|
|
3
|
3
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
4
|
4
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
5
|
+import com.github.binarywang.wxpay.bean.request.WxPaySendRedpackRequest;
|
|
6
|
+import com.github.binarywang.wxpay.bean.result.WxPaySendRedpackResult;
|
|
7
|
+import com.github.binarywang.wxpay.config.WxPayConfig;
|
|
8
|
+import com.github.binarywang.wxpay.exception.WxPayException;
|
|
9
|
+import com.github.binarywang.wxpay.service.WxPayService;
|
|
10
|
+import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
|
5
|
11
|
import com.huiju.estateagents.base.ResponseBean;
|
6
|
12
|
import com.huiju.estateagents.common.CommConstant;
|
7
|
13
|
import com.huiju.estateagents.common.MD5Utils;
|
8
|
14
|
import com.huiju.estateagents.drainage.entity.TaDrainage;
|
9
|
15
|
import com.huiju.estateagents.drainage.mapper.TaDrainageMapper;
|
|
16
|
+import com.huiju.estateagents.entity.TaPerson;
|
|
17
|
+import com.huiju.estateagents.entity.TaWxPayConfig;
|
|
18
|
+import com.huiju.estateagents.mapper.TaPersonMapper;
|
|
19
|
+import com.huiju.estateagents.mapper.TaWxPayConfigMapper;
|
10
|
20
|
import com.huiju.estateagents.redpack.entity.*;
|
11
|
21
|
import com.huiju.estateagents.redpack.mapper.*;
|
12
|
22
|
import com.huiju.estateagents.third.entity.TaThirdPartyMiniappConfig;
|
13
|
23
|
import com.huiju.estateagents.third.mapper.TaThirdPartyMiniappConfigMapper;
|
14
|
24
|
import com.huiju.estateagents.third.service.ITaThirdPartyMiniappConfigService;
|
15
|
25
|
import me.chanjar.weixin.mp.bean.result.WxMpUser;
|
|
26
|
+import org.apache.commons.lang3.StringUtils;
|
16
|
27
|
import org.springframework.beans.factory.annotation.Autowired;
|
17
|
28
|
import org.springframework.stereotype.Service;
|
18
|
29
|
|
|
30
|
+import java.net.InetAddress;
|
19
|
31
|
import java.time.LocalDateTime;
|
20
|
32
|
import java.util.List;
|
|
33
|
+import java.util.Random;
|
21
|
34
|
import java.util.stream.Collectors;
|
22
|
35
|
|
23
|
36
|
/**
|
|
@@ -58,6 +71,27 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
|
58
|
71
|
@Autowired
|
59
|
72
|
private TaRedPacketMoneyMapper taRedPacketmonetMapper;
|
60
|
73
|
|
|
74
|
+ @Autowired
|
|
75
|
+ private TaWxPayConfigMapper taWxPayConfigMapper;
|
|
76
|
+
|
|
77
|
+ @Autowired
|
|
78
|
+ private TaRedPacketClientMapper taRedPacketClientMapper;
|
|
79
|
+
|
|
80
|
+ @Autowired
|
|
81
|
+ private TaOrgAccountMapper taOrgAccountMapper;
|
|
82
|
+
|
|
83
|
+ @Autowired
|
|
84
|
+ private TaOrgOrderMapper taOrgOrderMapper;
|
|
85
|
+
|
|
86
|
+ @Autowired
|
|
87
|
+ private TaOrgOrderDetailMapper taOrgOrderDetailMapper;
|
|
88
|
+
|
|
89
|
+ @Autowired
|
|
90
|
+ private TaOrgAccountDetailedListMapper taOrgAccountDetailedListMapper;
|
|
91
|
+
|
|
92
|
+ @Autowired
|
|
93
|
+ private TaPersonMapper taPersonMapper;
|
|
94
|
+
|
61
|
95
|
/**
|
62
|
96
|
* 校验是否合法第三方接口调用
|
63
|
97
|
*
|
|
@@ -230,7 +264,7 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
|
230
|
264
|
TaRedPacketHelp taRedPacketHelp = taRedPacketHelpMapper.selectById(taDrainage.getActivityId());
|
231
|
265
|
|
232
|
266
|
//助力
|
233
|
|
- String result = saveRedPacketHistory(taMpMiniapp, parentMpMiniapp, taRedPacketHelp, orgId);
|
|
267
|
+ String result = saveRedPacketHistory(taMpMiniapp, parentMpMiniapp, taRedPacketHelp, orgId,mpAppid);
|
234
|
268
|
if (result.equals("success")){
|
235
|
269
|
ResponseBean.error(result,ResponseBean.ERROR_ILLEGAL_PARAMS);
|
236
|
270
|
}
|
|
@@ -238,7 +272,7 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
|
238
|
272
|
return ResponseBean.success(taRedPacketHelp.getSuccessTip());
|
239
|
273
|
}
|
240
|
274
|
|
241
|
|
- private synchronized String saveRedPacketHistory(TaMpMiniapp taMpMiniapp, TaMpMiniapp parentMpMiniapp, TaRedPacketHelp taRedPacketHelp, Integer orgId) {
|
|
275
|
+ private synchronized String saveRedPacketHistory(TaMpMiniapp taMpMiniapp, TaMpMiniapp parentMpMiniapp, TaRedPacketHelp taRedPacketHelp, Integer orgId, String mpAppid) {
|
242
|
276
|
//查看我是否助力过
|
243
|
277
|
QueryWrapper<TaRedPacketHistory> queryWrapper = new QueryWrapper();
|
244
|
278
|
queryWrapper.eq("activity_id",taRedPacketHelp.getActivityId());
|
|
@@ -268,8 +302,11 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
|
268
|
302
|
parentRedPacketHistory.eq("target_mp_person",parentMpMiniapp.getMpPersonId());
|
269
|
303
|
parentRedPacketHistory.eq("target_miniapp_person",parentMpMiniapp.getMiniappPersonId());
|
270
|
304
|
List<TaRedPacketHistory> parentRedPacketHistories = taRedPacketHistoryMapper.selectList(parentRedPacketHistory);
|
271
|
|
- Boolean redPackageState = parentRedPacketHistories.size() + 1 <= taRedPacketHelp.getHelpSuccesPersons();
|
272
|
305
|
|
|
306
|
+ //查看是否助力成功
|
|
307
|
+ if (parentRedPacketHistories.size() + 1 > taRedPacketHelp.getHelpSuccesPersons()){
|
|
308
|
+ return "助力已完成,无需助力。";
|
|
309
|
+ }
|
273
|
310
|
|
274
|
311
|
//助力
|
275
|
312
|
TaRedPacketHistory taRedPacketHistory = new TaRedPacketHistory();
|
|
@@ -281,10 +318,8 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
|
281
|
318
|
taRedPacketHistory.setTargetMiniappPerson(parentMpMiniapp.getMiniappPersonId());
|
282
|
319
|
taRedPacketHistory.setTargetMpPerson(parentMpMiniapp.getMpPersonId());
|
283
|
320
|
taRedPacketHistoryMapper.insert(taRedPacketHistory);
|
284
|
|
- if (redPackageState){
|
285
|
|
- //发送红包
|
286
|
|
- sendRedPackage(taMpMiniapp, parentMpMiniapp, taRedPacketHelp, orgId);
|
287
|
|
- }
|
|
321
|
+ //发送红包
|
|
322
|
+ sendRedPackage(taMpMiniapp, parentMpMiniapp, taRedPacketHelp, orgId,mpAppid);
|
288
|
323
|
return "success";
|
289
|
324
|
}
|
290
|
325
|
|
|
@@ -294,9 +329,138 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
|
294
|
329
|
* @param parentMpMiniapp
|
295
|
330
|
* @param taRedPacketHelp
|
296
|
331
|
* @param orgId
|
|
332
|
+ * @param mpAppid
|
297
|
333
|
*/
|
298
|
|
- private synchronized void sendRedPackage(TaMpMiniapp taMpMiniapp, TaMpMiniapp parentMpMiniapp, TaRedPacketHelp taRedPacketHelp, Integer orgId) {
|
|
334
|
+ private synchronized void sendRedPackage(TaMpMiniapp taMpMiniapp, TaMpMiniapp parentMpMiniapp, TaRedPacketHelp taRedPacketHelp, Integer orgId, String mpAppid) {
|
|
335
|
+ //红包金额设置相关信息
|
299
|
336
|
TaRedPacketMoney taRedPacketMoney = taRedPacketmonetMapper.selectById(taRedPacketHelp.getActivityId());
|
300
|
|
-
|
|
337
|
+ //总账户金额
|
|
338
|
+ TaOrgAccount taOrgAccount = taOrgAccountMapper.selectOne(new QueryWrapper<TaOrgAccount>().eq("org_id", orgId).eq("status", CommConstant.STATUS_NORMAL));
|
|
339
|
+ //金额不足直接返回
|
|
340
|
+ if (taRedPacketMoney.getBalance() == 0){
|
|
341
|
+ return;
|
|
342
|
+ }
|
|
343
|
+ //账户余额不足
|
|
344
|
+ if (taOrgAccount.getRealBalance() == 0){
|
|
345
|
+ return;
|
|
346
|
+ }
|
|
347
|
+ //发送红包已达上限
|
|
348
|
+ if (taRedPacketMoney.getPacketSendedNum() + 1 > taRedPacketMoney.getLimitPacketNum()){
|
|
349
|
+ return;
|
|
350
|
+ }
|
|
351
|
+ //获取红包的随机数
|
|
352
|
+ int redPackageMoney = getRedPackageMoney(taRedPacketMoney.getMaxPacket(), taRedPacketMoney.getMinPacket());
|
|
353
|
+ redPackageMoney = taOrgAccount.getRealBalance() < redPackageMoney ? taOrgAccount.getRealBalance() : redPackageMoney;
|
|
354
|
+
|
|
355
|
+ //获取红包支付相关的配置
|
|
356
|
+ TaRedPacketClient taRedPacketClient = taRedPacketClientMapper.selectById(taRedPacketHelp.getActivityId());
|
|
357
|
+ //获取收红包人的openid
|
|
358
|
+ TaMpPerson parentMpPerson = taMpPersonMapper.selectById(parentMpMiniapp.getMpPersonId());
|
|
359
|
+ //发送红包
|
|
360
|
+ WxPayService wxPayService = getWxPayService();
|
|
361
|
+ WxPaySendRedpackRequest build = WxPaySendRedpackRequest.newBuilder()
|
|
362
|
+// .consumeMchId(wxPayService.getConfig().getMchId())
|
|
363
|
+ .actName(taRedPacketClient.getActivityName())//活动名称
|
|
364
|
+ .clientIp(String.valueOf(InetAddress.getLoopbackAddress()))//Ip地址
|
|
365
|
+ .mchBillNo("HB123456")//商户订单号
|
|
366
|
+// .msgAppid(mpAppid)
|
|
367
|
+ .remark(taRedPacketClient.getRemark())//备注
|
|
368
|
+ .reOpenid(parentMpPerson.getMpOpenid())//接受红包的用户openid
|
|
369
|
+
|
|
370
|
+ .sceneId("")//场景id
|
|
371
|
+ .sendName(taRedPacketClient.getMchName())//红包发送者名称
|
|
372
|
+ .totalAmount(redPackageMoney)//付款金额,单位分
|
|
373
|
+ .totalNum(1)//红包发放总人数
|
|
374
|
+ .wishing(taRedPacketClient.getBlessing())//红包祝福语
|
|
375
|
+ .wxAppid(mpAppid)//公众账号appid
|
|
376
|
+ .build();
|
|
377
|
+ try {
|
|
378
|
+ WxPaySendRedpackResult wxPaySendRedpackResult = wxPayService.sendRedpack(build);
|
|
379
|
+ String resultCode = wxPaySendRedpackResult.getResultCode();
|
|
380
|
+ if (resultCode.equals("SUCCESS")){
|
|
381
|
+ //插入订单表并扣钱反更新
|
|
382
|
+ saveRedpacketOrder("HB123456",wxPaySendRedpackResult,parentMpMiniapp,taRedPacketHelp,orgId,mpAppid);
|
|
383
|
+ }else {
|
|
384
|
+ return;
|
|
385
|
+ }
|
|
386
|
+ } catch (WxPayException e) {
|
|
387
|
+ e.printStackTrace();
|
|
388
|
+ }
|
|
389
|
+ }
|
|
390
|
+
|
|
391
|
+ private synchronized void saveRedpacketOrder(String tradeNo, WxPaySendRedpackResult wxPaySendRedpackResult, TaMpMiniapp parentMpMiniapp, TaRedPacketHelp taRedPacketHelp, Integer orgId, String mpAppid) {
|
|
392
|
+ //先扣钱
|
|
393
|
+ TaOrgAccount taOrgAccount = taOrgAccountMapper.selectOne(new QueryWrapper<TaOrgAccount>().eq("org_id", orgId).eq("status", CommConstant.STATUS_NORMAL));
|
|
394
|
+ taOrgAccount.setRealBalance(taOrgAccount.getRealBalance() - wxPaySendRedpackResult.getTotalAmount());
|
|
395
|
+ taOrgAccountMapper.updateById(taOrgAccount);
|
|
396
|
+ TaRedPacketMoney taRedPacketMoney = taRedPacketmonetMapper.selectById(taRedPacketHelp.getActivityId());
|
|
397
|
+ taRedPacketMoney.setBalance(taRedPacketMoney.getBalance()-wxPaySendRedpackResult.getTotalAmount());
|
|
398
|
+ taRedPacketmonetMapper.updateById(taRedPacketMoney);
|
|
399
|
+
|
|
400
|
+ //插入组织订单表
|
|
401
|
+ TaOrgOrder taOrgOrder = new TaOrgOrder();
|
|
402
|
+ taOrgOrder.setAmount(wxPaySendRedpackResult.getTotalAmount());
|
|
403
|
+ taOrgOrder.setCreateDate(LocalDateTime.now());
|
|
404
|
+ taOrgOrder.setOrgId(orgId);
|
|
405
|
+ taOrgOrder.setPayDate(LocalDateTime.now());
|
|
406
|
+ taOrgOrder.setStatus(CommConstant.STATUS_NORMAL);
|
|
407
|
+ taOrgOrder.setTradeNo(tradeNo);
|
|
408
|
+ taOrgOrder.setTradingStatus(CommConstant.TRADING_STATUS_SUCCESS);
|
|
409
|
+ taOrgOrderMapper.insert(taOrgOrder);
|
|
410
|
+
|
|
411
|
+ //插入组织订单明细表
|
|
412
|
+ TaOrgOrderDetail taOrgOrderDetail = new TaOrgOrderDetail();
|
|
413
|
+ taOrgOrderDetail.setAmount(wxPaySendRedpackResult.getTotalAmount());
|
|
414
|
+ taOrgOrderDetail.setItemType(CommConstant.ITEM_TYPE_REDPACKAGE);
|
|
415
|
+ taOrgOrderDetail.setOrderId(taOrgOrder.getOrderId());
|
|
416
|
+ taOrgOrderDetail.setOrgId(orgId);
|
|
417
|
+ taOrgOrderDetail.setQuantity(1);
|
|
418
|
+ taOrgOrderDetail.setReceiverId(parentMpMiniapp.getMiniappPersonId());
|
|
419
|
+ taOrgOrderDetail.setReceiverMpId(parentMpMiniapp.getMpPersonId());
|
|
420
|
+ TaPerson taPerson = taPersonMapper.selectById(parentMpMiniapp.getMiniappPersonId());
|
|
421
|
+ taOrgOrderDetail.setReceiverName(taPerson.getNickname());
|
|
422
|
+ taOrgOrderDetail.setStatus(CommConstant.STATUS_NORMAL);
|
|
423
|
+ taOrgOrderDetail.setTargetId(taRedPacketHelp.getActivityId());
|
|
424
|
+ taOrgOrderDetail.setTargetType(CommConstant.ITEM_TYPE_REDPACKAGE);
|
|
425
|
+ taOrgOrderDetailMapper.insert(taOrgOrderDetail);
|
|
426
|
+
|
|
427
|
+ //插入账户流水表
|
|
428
|
+ TaOrgAccountDetailedList taOrgAccountDetailedList = new TaOrgAccountDetailedList();
|
|
429
|
+ taOrgAccountDetailedList.setAccountId(taOrgAccount.getAccountId());
|
|
430
|
+ taOrgAccountDetailedList.setAmount(wxPaySendRedpackResult.getTotalAmount());
|
|
431
|
+ taOrgAccountDetailedList.setCreateDate(LocalDateTime.now());
|
|
432
|
+ taOrgAccountDetailedList.setOrderId(taOrgOrder.getOrderId());
|
|
433
|
+ taOrgAccountDetailedList.setOrgId(orgId);
|
|
434
|
+ taOrgAccountDetailedList.setSignType(-1);
|
|
435
|
+ taOrgAccountDetailedList.setStatus(CommConstant.STATUS_NORMAL);
|
|
436
|
+ taOrgAccountDetailedListMapper.insert(taOrgAccountDetailedList);
|
|
437
|
+
|
|
438
|
+ }
|
|
439
|
+
|
|
440
|
+ /**
|
|
441
|
+ * 获取商户号信息
|
|
442
|
+ * @return
|
|
443
|
+ */
|
|
444
|
+ private WxPayService getWxPayService() {
|
|
445
|
+ TaWxPayConfig taWxPayConfig = taWxPayConfigMapper.selectOne(new QueryWrapper<TaWxPayConfig>().eq("org_id", 0));
|
|
446
|
+ WxPayConfig payConfig = new WxPayConfig();
|
|
447
|
+ payConfig.setAppId(StringUtils.trimToNull(taWxPayConfig.getAppid()));
|
|
448
|
+ payConfig.setMchId(StringUtils.trimToNull(taWxPayConfig.getMchId()));
|
|
449
|
+ payConfig.setMchKey(StringUtils.trimToNull(taWxPayConfig.getMchKey()));
|
|
450
|
+ payConfig.setKeyPath(StringUtils.trimToNull(taWxPayConfig.getApiPath()));
|
|
451
|
+ WxPayService wxPayService =new WxPayServiceImpl();
|
|
452
|
+ wxPayService.setConfig(payConfig);
|
|
453
|
+ return wxPayService;
|
|
454
|
+ }
|
|
455
|
+
|
|
456
|
+ /**
|
|
457
|
+ * 获取范围值之内的红包的随机数
|
|
458
|
+ * @param maxPacket
|
|
459
|
+ * @param minPacket
|
|
460
|
+ * @return
|
|
461
|
+ */
|
|
462
|
+ private int getRedPackageMoney(Integer maxPacket, Integer minPacket) {
|
|
463
|
+ Random random = new Random();
|
|
464
|
+ return random.nextInt(maxPacket)%(maxPacket - minPacket + 1) + minPacket;
|
301
|
465
|
}
|
302
|
466
|
}
|