From b3068671b4eab47d9cec1e7f2a763db247ea0d10 Mon Sep 17 00:00:00 2001
From: luofl <1442745593@qq.com>
Date: 星期五, 11 四月 2025 14:18:36 +0800
Subject: [PATCH] 1
---
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java | 273 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 253 insertions(+), 20 deletions(-)
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
index a120571..02c7717 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -130,6 +130,7 @@
@Resource
private UserConponClient ucponClient;
+
@Resource
private CoursePackageClient cpageClient;
@@ -156,6 +157,7 @@
@Resource
private IntroduceRewardsClient introduceRewardsClient;
+
private String aliAppid = "2021004105665036";//支付宝appid
@@ -1362,11 +1364,9 @@
}
//查询该用户是否超出限领数量
Integer usercounts = userConponClient.queryCounts1(queryIds);
-
if (usercounts == coupon.getPickUpQuantity()) {
return new ResultUtil<>(0, "限领数量已达最大");
}
-
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
//生成支付订单
@@ -1407,7 +1407,12 @@
userCouponPaymentClient.addUserCouponPayment(userCouponPayment);
try {
if(exchangeType.getPayType() == 1){
- return weChatPaymentCoupon("购买优惠券", userCouponPayment);
+ String temp = "0";
+ if (coupon.getPublisherType()!=null && coupon.getPublisherType() != 2){
+ // 做分账
+ temp = "1";
+ }
+ return weChatPaymentCoupon("购买优惠券-"+temp, userCouponPayment);
}
if(exchangeType.getPayType() == 2){
return aliPaymentCoupon("购买优惠券", userCouponPayment);
@@ -1417,9 +1422,7 @@
}
}
}
-
-
- System.out.println(exchangeType);
+ System.out.println("兑换积分商品"+exchangeType);
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
@@ -1520,13 +1523,23 @@
if(null != merchandise.getIntegral()){
pointsMerchandise.setIntegral(merchandise.getIntegral() * goodsNums);
}
- if(exchangeType.getExchangeType() == 2){
+ if(exchangeType.getExchangeType() == 2 || exchangeType.getExchangeType() == 3){
pointsMerchandise.setCash(merchandise.getCash());
pointsMerchandise.setCashPayType(exchangeType.getPayType());
}
+
+ Double m = new BigDecimal((merchandise.getIntegral() == null ? 0 : merchandise.getIntegral())).add((merchandise.getCash() == null ? BigDecimal.ZERO : merchandise.getCash())).doubleValue();
+ if((m * goodsNums) == 0) {
+ pointsMerchandise.setPayStatus(2);
+ pointsMerchandise.setPaymentTime(new Date());
+ }
returnId = mcClient.saveDetailsUserPointMercase(pointsMerchandise);
+ if((m * goodsNums) == 0 && pointsMerchandise.getPayStatus() == 2){
+ returnModel.setReturnId(returnId);
+ return ResultUtil.success(returnModel);
+ }
-
+ System.err.println("兑换方式"+exchangeType);
switch (exchangeType.getExchangeType()) {
// 积分
case 1:
@@ -1620,9 +1633,11 @@
coursePackageOrder.setInsertTime(new Date());
coursePackageOrder.setOrderType(2);
paymentClient.savePaymentCoursePackage(coursePackageOrder);
- return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code);
- } else {
- return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code);
+ return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code,merchandise.getId());
+ } else if (merchandise.getType() == 1){
+ return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code,merchandise.getId());
+ }else if(merchandise.getType() == 3){
+ return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code,merchandise.getId());
}
} catch (Exception e) {
return ResultUtil.runErr();
@@ -1642,9 +1657,9 @@
case 1:
try {
if (merchandise.getType() == 2) {
- return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code);
+ return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code,merchandise.getId());
} else {
- return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code);
+ return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code,merchandise.getId());
}
} catch (Exception e) {
return ResultUtil.runErr();
@@ -1683,7 +1698,14 @@
public ResultUtil weChatPaymentCoupon(String body, UserCouponPayment userCouponPayment) throws Exception {
String code = userCouponPayment.getCode();
Double cash = userCouponPayment.getCash();
- ResultUtil weixinpay = payMoneyUtil.weixinpay(body, "", code, cash.toString(),
+ Integer couponId = userCouponPayment.getCouponId();
+ Coupon coupon = userConponClient.queryCouponById(couponId);
+ String temp ="0";
+ if (coupon.getPublisherType()!=null&&coupon.getPublisherType()!=2){
+ temp = "1";
+ }
+ System.err.println("购买优惠券");
+ ResultUtil weixinpay = payMoneyUtil.weixinpay(body+"-"+temp, "", code, cash.toString(),
"/base/coupon/weChatPaymentCouponCallback", "APP", "");
if (weixinpay.getCode() == 200) {
new Thread(new Runnable() {
@@ -1698,6 +1720,7 @@
Thread.sleep(wait);
UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code);
if (userCouponPayment1.getStatus() == 2) {
+
break;
}
ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
@@ -1850,7 +1873,8 @@
* @return
*/
@Override
- public ResultUtil paymentCouponCallback(String code, String orderNumber) {
+ public ResultUtil paymentCouponCallback(String code, String orderNumber) throws Exception {
+ System.err.println("进入回调");
UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code);
if (userCouponPayment1.getStatus() == 2) {
return ResultUtil.success();
@@ -1875,8 +1899,70 @@
vo.setRemark("兑换优惠券");
vo.setType(2);
userIntegralChangesService.saveUserIntegralChanges(vo);
-
}
+ Coupon coupon = ucponClient.queryCouponById(userCouponPayment1.getCouponId());
+ // 创建一个两分钟后执行的线程
+ new Thread(() -> {
+ try {
+ Thread.sleep(120000);
+ if (coupon!=null){
+ if (coupon.getPublisherType()!=null&&coupon.getPublisherType()!=2){
+ if (coupon.getPublisherType() == 1){
+ System.err.println("进入分账逻辑");
+ // 根据运营商id获取对应运营商分账比例 返回格式: 微信分账比例,支付宝分账比例
+ String proportionByOperatorId = storeClient.getProportionByOperatorId(coupon.getCityManagerId());
+ System.err.println("分账比例:"+proportionByOperatorId);
+ String[] split = proportionByOperatorId.split(",");
+ String s1 = split[0];
+ if (!s1.equals("未设置")){
+ BigDecimal bigDecimal = new BigDecimal(s1);
+ // 分账比例
+ BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(100)).setScale(2);
+ // 微信商户号
+ String s2 = storeClient.getmerchantNumberByOperatorId(coupon.getCityManagerId());
+ System.err.println("商户号"+s2);
+ System.err.println("分账比例"+bigDecimal1);
+ System.err.println("分账金额"+coupon.getCash().multiply(bigDecimal1));
+ ResultUtil fenzhang = payMoneyUtil.fenzhang(userCouponPayment1.getOrderNumber(), coupon.getCash().multiply(bigDecimal1), s2,"");
+ if (!fenzhang.getCode().equals(200)){
+ System.err.println("分账失败 原因是:"+fenzhang.getMsg());
+ }
+
+ }
+ } else if (coupon.getPublisherType() == 3){
+ // 门店 向上查询运营商
+ Store store = storeClient.queryStoreById(coupon.getCityManagerId());
+ if (store.getOperatorId()==null || store.getOperatorId()==0){
+ // 平台不分账
+ }else{
+ // 根据运营商id获取对应运营商分账比例 返回格式: 微信分账比例,支付宝分账比例
+ String proportionByOperatorId = storeClient.getProportionByOperatorId(store.getOperatorId());
+ String[] split = proportionByOperatorId.split(",");
+ String s1 = split[0];
+ if (!s1.equals("未设置")){
+ BigDecimal bigDecimal = new BigDecimal(s1);
+ // 分账比例
+ BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(100)).setScale(2);
+ // 微信商户号
+ String s2 = storeClient.getmerchantNumberByOperatorId(store.getOperatorId());
+ ResultUtil fenzhang = payMoneyUtil.fenzhang(userCouponPayment1.getOrderNumber(), coupon.getCash().multiply(bigDecimal1), s2,"购买优惠券分账");
+ if (!fenzhang.getCode().equals(200)){
+ System.err.println("分账失败 原因是:"+fenzhang.getMsg());
+ }else{
+ System.err.println("分账成功");
+ return;
+ }
+
+ }
+ }
+ }
+ }
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }).start();
+
return ResultUtil.success();
}
@@ -1944,8 +2030,9 @@
if ("TRADE_SUCCESS".equals(tradeStatus)) {
for (UserPointsMerchandise userPointsMerchandise : userPointsMerchandises) {
userPointsMerchandise.setPayStatus(2);
+ userPointsMerchandise.setPaymentTime(new Date());
userPointsMerchandise.setOrderNumber(tradeNo);
- userPointsMerchandise.setPayType(2);
+ userPointsMerchandise.setCashPayType(2);
userPointsMerchandise.setInsertTime(null);
userPointsMerchandise.setUserId(null);
mcClient.updateDetailsUserPointMercase(userPointsMerchandise);
@@ -2070,10 +2157,45 @@
}
- private ResultUtil WechatPayment(Integer type, BigDecimal cash, String code) throws Exception {
+ private ResultUtil WechatPayment(Integer type, BigDecimal cash, String code,Integer id) throws Exception {
String name = (type == 1 ? "购买实体商品" : type == 2 ? "报名运动营": type == 3 ? "购买门票" : "购买优惠券");
- ResultUtil weixinpay = payMoneyUtil.weixinpay(name, "", code, cash.toString(),
+ System.err.println("微信支付:"+name);
+
+ PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(id);
+ System.err.println("查询积分商品"+pointsMerchandise);
+ // 分账表示 0否1是
+ String temp = "0";
+ switch (type){
+ case 1:
+ temp = "0";
+ break;
+ case 2:
+ // 判断课包属于平台还是运营商
+ CoursePackage coursePackage = cpageClient.queryCoursePackageById(pointsMerchandise.getCoursePackageId());
+ Store store = storeClient.queryStoreById(coursePackage.getStoreId());
+ if (store.getOperatorId() ==null || store.getOperatorId() == 0){
+ // 平台课包 不分账
+ }else{
+ temp = "1";
+ }
+ break;
+ case 3:
+ List<Integer> integers = mcsClient.queryPointMerStoreIds(pointsMerchandise.getId());
+ if (!integers.isEmpty()){
+ Store store1 = storeClient.queryStoreById(integers.get(0));
+ if (store1.getOperatorId() ==null || store1.getOperatorId() == 0){
+ // 平台门票 不分账
+ }else{
+ temp = "1";
+ }
+ }
+ // 查询门票指定的门店 属于平台还是运营商
+ break;
+ }
+ System.err.println("支付");
+ ResultUtil weixinpay = payMoneyUtil.weixinpay(name+"-"+temp, "", code, cash.toString(),
"/base/pointMer/exchangeGoodPaymentWeChatCallback", "APP", "");
+ System.err.println("提交支付"+weixinpay);
if (weixinpay.getCode() == 200) {
new Thread(new Runnable() {
@Override
@@ -2087,6 +2209,8 @@
Thread.sleep(wait);
UserPointsMerchandise userPointsMerchandise = mcClient.queryUserPointMerchaseByCode(code).get(0);
if (userPointsMerchandise.getPayStatus() == 2) {
+
+
break;
}
ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
@@ -2109,8 +2233,9 @@
}
if ("SUCCESS".equals(s)) {
userPointsMerchandise.setPayStatus(2);
+ userPointsMerchandise.setPaymentTime(new Date());
userPointsMerchandise.setOrderNumber(transaction_id);
- userPointsMerchandise.setPayType(1);
+ userPointsMerchandise.setCashPayType(1);
mcClient.updateDetailsUserPointMercase(userPointsMerchandise);
TAppUser tAppUser = baseMapper.selectById(userPointsMerchandise.getUserId());
@@ -2154,7 +2279,9 @@
@Override
public ResultUtil exchangeAddPaymentCallback(String code, String orderNumber) {
+ System.err.println("进入回调"+code);
UserPointsMerchandise userPointsMerchandise = mcClient.queryUserPointMerchaseByCode(code).get(0);
+ System.err.println("商品"+userPointsMerchandise);
if (userPointsMerchandise.getPayStatus() == 2) {
return ResultUtil.success();
}
@@ -2189,7 +2316,113 @@
paymentClient.addCoursePackageOrderStudent(addCoursePackageOrderStudent);
}
}
+ // 创建一个2分钟后执行的线程
+ new Thread(() -> {
+ try {
+ // 休眠两分钟后再调用分账接口 避免提示订单正在处理中
+ Thread.sleep(1000 * 60 * 2);
+ // 分账表示 0否1是
+ String temp = "0";
+ // 运营商id
+ Integer operatorId = 0;
+ System.err.println("商品"+pointsMerchandise);
+ switch (pointsMerchandise.getType()){
+ case 1:
+ temp = "0";
+ break;
+ case 2:
+ // 判断课包属于平台还是运营商
+ CoursePackage coursePackage = cpageClient.queryCoursePackageById(pointsMerchandise.getCoursePackageId());
+ Store store = storeClient.queryStoreById(coursePackage.getStoreId());
+ if (store.getOperatorId() ==null || store.getOperatorId() == 0){
+ // 平台课包 不分账
+ }else{
+ temp = "1";
+ operatorId = store.getOperatorId();
+ }
+ break;
+ case 3:
+ List<Integer> integers = mcsClient.queryPointMerStoreIds(pointsMerchandise.getId());
+ System.err.println("门店ids"+integers);
+ if (!integers.isEmpty()){
+ Store store1 = storeClient.queryStoreById(integers.get(0));
+ if (store1.getOperatorId() ==null || store1.getOperatorId() == 0){
+ // 平台门票 不分账
+ }else{
+ temp = "1";
+ operatorId = store1.getOperatorId();
+ }
+ }
+ // 查询门票指定的门店 属于平台还是运营商
+ break;
+ }
+ System.err.println("运营商id"+operatorId);
+ if (operatorId != 0) {
+ //课程
+ if(pointsMerchandise.getType() == 2){
+ //课程
+ CoursePackageOrder coursePackageOrder1 = paymentClient.getCoursePackageOrderByCode(code);
+ if(null != coursePackageOrder1){
+ coursePackageOrder1.setPayStatus(2);
+ coursePackageOrder1.setOrderNumber(orderNumber);
+ coursePackageOrder1.setAppUserId(null);
+ paymentClient.updateCoursePackageOrder(coursePackageOrder1);
+ GetCoursePackagePaymentConfig getCoursePackagePaymentConfig = new GetCoursePackagePaymentConfig();
+ getCoursePackagePaymentConfig.setCoursePackageId(coursePackageOrder1.getCoursePackageId());
+ getCoursePackagePaymentConfig.setClassHours(coursePackageOrder1.getClassHours());
+ CoursePackagePaymentConfig coursePackagePaymentConfig = paymentClient.getCoursePackagePaymentConfig(getCoursePackagePaymentConfig);
+
+ AddCoursePackageOrderStudent addCoursePackageOrderStudent = new AddCoursePackageOrderStudent();
+ addCoursePackageOrderStudent.setCoursePackageOrderId(coursePackageOrder1.getId());
+ addCoursePackageOrderStudent.setCoursePackagePaymentConfig(coursePackagePaymentConfig);
+ paymentClient.addCoursePackageOrderStudent(addCoursePackageOrderStudent);
+ // 根据运营商id获取对应运营商分账比例 返回格式: 微信分账比例,支付宝分账比例
+ String proportionByOperatorId = storeClient.getProportionByOperatorId(operatorId);
+ String[] split = proportionByOperatorId.split(",");
+ String s1 = split[0];
+ if (!s1.equals("未设置")){
+ BigDecimal bigDecimal = new BigDecimal(s1);
+ // 分账比例
+ BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(100)).setScale(2);
+ // 微信商户号
+ String s2 = storeClient.getmerchantNumberByOperatorId(operatorId);
+
+ ResultUtil fenzhang = payMoneyUtil.fenzhang(orderNumber, coursePackageOrder1.getCashPayment().multiply(bigDecimal1), s2,"运动营商品");
+ if (!fenzhang.getCode().equals(200)){
+ System.err.println("分账失败 原因是:"+fenzhang.getMsg());
+ }
+ }
+ }
+ }else{
+ System.err.println("门票");
+ // 根据运营商id获取对应运营商分账比例 返回格式: 微信分账比例,支付宝分账比例
+ String proportionByOperatorId = storeClient.getProportionByOperatorId(operatorId);
+ System.err.println("分账比例"+proportionByOperatorId);
+ String[] split = proportionByOperatorId.split(",");
+ String s1 = split[0];
+ if (!s1.equals("未设置")){
+ BigDecimal bigDecimal = new BigDecimal(s1);
+ // 分账比例
+ BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(100)).setScale(2);
+ // 微信商户号
+ String s2 = storeClient.getmerchantNumberByOperatorId(operatorId);
+ System.err.println("微信商户号"+s2);
+
+ ResultUtil fenzhang = payMoneyUtil.fenzhang(orderNumber, pointsMerchandise.getCash().multiply(bigDecimal1), s2,"门票");
+ if (!fenzhang.getCode().equals(200)){
+ System.err.println("分账失败 原因是:"+fenzhang.getMsg());
+ }
+ }
+ }
+
+ }
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }).start();
return ResultUtil.success();
}
--
Gitblit v1.7.1