From fabe5684d31e0c52548b33b7afbfec0855f9880e Mon Sep 17 00:00:00 2001
From: nickchange <126672920+nickchange@users.noreply.github.com>
Date: 星期四, 30 十一月 2023 19:09:01 +0800
Subject: [PATCH] 11.30
---
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java | 312 +++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 262 insertions(+), 50 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 e5a6145..a025fe7 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
@@ -1,7 +1,6 @@
package com.dsh.account.service.impl;
-import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
@@ -19,15 +18,10 @@
import com.dsh.account.dto.*;
import com.dsh.account.entity.*;
import com.dsh.account.enums.RechargeRecordEnum;
-import com.dsh.account.feignclient.activity.IntroduceRewardsClient;
-import com.dsh.account.feignclient.activity.MerChandiseClient;
-import com.dsh.account.feignclient.activity.MerChandiseStoreClient;
-import com.dsh.account.feignclient.activity.UserConponClient;
+import com.dsh.account.feignclient.activity.*;
import com.dsh.account.feignclient.activity.model.*;
import com.dsh.account.feignclient.competition.DeductionCompetitionsClient;
import com.dsh.account.feignclient.competition.model.BillingDataRequestVo;
-import com.dsh.account.feignclient.competition.model.PaymentCompetition;
-import com.dsh.account.feignclient.competition.model.PurchaseRecordVo;
import com.dsh.account.feignclient.course.CoursePackageClient;
import com.dsh.account.feignclient.course.CoursePackageConfigClient;
import com.dsh.account.feignclient.course.CoursePaymentClient;
@@ -37,7 +31,6 @@
import com.dsh.account.feignclient.other.RechargeConfigClient;
import com.dsh.account.feignclient.other.SiteClient;
import com.dsh.account.feignclient.other.StoreClient;
-import com.dsh.account.feignclient.other.model.SiteBooking;
import com.dsh.account.feignclient.other.model.Store;
import com.dsh.account.feignclient.other.model.StoreDetailOfCourse;
import com.dsh.account.feignclient.other.model.TImgConfig;
@@ -46,7 +39,6 @@
import com.dsh.account.model.AppUserByNameAndPhoneDTO;
import com.dsh.account.model.dto.Coupon;
import com.dsh.account.model.query.appUserQuery.QueryAppUser;
-import com.dsh.account.model.vo.DetailsListVo;
import com.dsh.account.model.vo.QueryAppUserVO;
import com.dsh.account.model.vo.classDetails.CourseVenue;
import com.dsh.account.model.vo.classDetails.ExerciseVideo;
@@ -156,9 +148,6 @@
private CoursePackageConfigClient cpconClient;
@Resource
- private PayMoneyUtil payMoneyUtil;
-
- @Resource
private SiteClient stClient;
@Autowired
private TAppUserMapper appUserMapper;
@@ -182,6 +171,16 @@
private TAppUserService appUserService;
@Resource
private MerChandiseClient merChandiseClient;
+
+ @Autowired
+ private PayMoneyUtil payMoneyUtil;
+
+ @Resource
+ private UserCouponPaymentClient userCouponPaymentClient;
+
+
+
+
// 对数据进行分页处理的方法
private static Page<Goods> getPage(List<Goods> dataList, Pageable pageable) {
@@ -304,6 +303,7 @@
;
}
}
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if (tStudents.size() > 0) {
TStudent tStudent = tStudents.get(0);
classInfoVo.setStuId(tStudent.getId());
@@ -329,7 +329,7 @@
course.setTotalNums(ToolUtil.isEmpty(tCoursePackagePayment.getTotalCourseNums()) ? 0 : tCoursePackagePayment.getTotalCourseNums());
course.setDeductedNums(ToolUtil.isEmpty(tCoursePackagePayment.getDeductionNums()) ? 0 : tCoursePackagePayment.getDeductionNums());
course.setRemainingNums(ToolUtil.isEmpty(tCoursePackagePayment.getResidueNums()) ? 0 : tCoursePackagePayment.getResidueNums());
- course.setPeriodOfValidity(tCoursePackagePayment.getPeriodOfValidity());
+ course.setPeriodOfValidity(sdf.format(tStudent.getValidity()));
course.setIsAble(tCoursePackagePayment.getIsAble());
course.setCourseType(tCoursePackagePayment.getCourseType());
courseList.add(course);
@@ -1281,9 +1281,6 @@
@Override
@Transactional
public synchronized ResultUtil productRedemptionOperation(Integer userIdFormRedis, GoodsExchangeVo exchangeType) {
- System.out.println("exchangeType:--->");
-
-
ReturnModel returnModel = new ReturnModel();
Long returnId = null;
//如果是兑换优惠卷
@@ -1295,7 +1292,7 @@
queryIds.add(coupon.getId());
queryIds.add(userIdFormRedis);
Integer counts = userConponClient.queryCounts(queryIds);
- if (coupon.getQuantityIssued() - counts == 0) {
+ if (coupon.getQuantityIssued().compareTo(counts) == 0) {
return new ResultUtil(0, "当前数量不足");
}
//查询该用户是否超出限领数量
@@ -1304,40 +1301,56 @@
if (usercounts == coupon.getPickUpQuantity()) {
return new ResultUtil<>(0, "限领数量已达最大");
}
-// userConponClient.queryCouponById(exchangeType.getGoodId());
- UserCoupon userCoupon = new UserCoupon();
- userCoupon.setCouponId(exchangeType.getGoodId());
- userCoupon.setUserId(userIdFormRedis);
- userCoupon.setStatus(1);
- userCoupon.setInsertTime(new Date());
- userConponClient.insertToAppuserCoupon(userCoupon);
- //扣积分
- TAppUser user = appUserService.getById(userIdFormRedis);
- if (user.getIntegral() < coupon.getIntegral().intValue()) {
- return new ResultUtil<>(0, "当前用户积分不足");
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+ String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+ //生成支付订单
+ UserCouponPayment userCouponPayment = new UserCouponPayment();
+ userCouponPayment.setCouponId(exchangeType.getGoodId());
+ userCouponPayment.setUserId(userIdFormRedis);
+ userCouponPayment.setStatus(1);
+ userCouponPayment.setCode(code);
+ userCouponPayment.setPayType(coupon.getRedemptionMethod());
+ userCouponPayment.setIntegral(coupon.getIntegral().intValue());
+ userCouponPayment.setCash(coupon.getCash().doubleValue());
+ userCouponPayment.setCashPayType(exchangeType.getPayType());
+ userCouponPayment.setInsertTime(new Date());
+
+ //积分兑换
+ if(coupon.getRedemptionMethod() == 1){
+ UserCoupon userCoupon = new UserCoupon();
+ userCoupon.setCouponId(exchangeType.getGoodId());
+ userCoupon.setUserId(userIdFormRedis);
+ userCoupon.setStatus(1);
+ userCoupon.setInsertTime(new Date());
+ userConponClient.insertToAppuserCoupon(userCoupon);
+ //扣积分
+ TAppUser user = appUserService.getById(userIdFormRedis);
+ if (user.getIntegral() < coupon.getIntegral().intValue()) {
+ return new ResultUtil<>(0, "当前用户积分不足");
+ }
+ user.setIntegral(user.getIntegral() - coupon.getIntegral().intValue());
+ appUserService.updateById(user);
+
+ userCouponPayment.setStatus(2);
+ userCouponPayment.setPaymentTime(new Date());
+ userCouponPaymentClient.addUserCouponPayment(userCouponPayment);
+ return ResultUtil.success(returnId);
}
- user.setIntegral(user.getIntegral() - coupon.getIntegral().intValue());
- appUserService.updateById(user);
-
- //记录
-// UserPointsMerchandise pointsMerchandise = new UserPointsMerchandise();
-// pointsMerchandise.setPointsMerchandiseId(exchangeType.getGoodId());
-// pointsMerchandise.setUserId(userIdFormRedis);
-// pointsMerchandise.setStatus(1);
-// pointsMerchandise.setState(1);
-// pointsMerchandise.setPayStatus(1);
-//// if (merchandise.getUseScope() == 3){
-//// if (exchangeType.getGoodsType() == 2){
-//// CoursePackage coursePackage = cpageClient.queryCoursePackageById(merchandise.getCoursePackageId());
-//// pointsMerchandise.setStoreId(coursePackage.getStoreId());
-//// }else {
-//// pointsMerchandise.setStoreId(exchangeType.getStoreId());
-//// }
-//// }
-//// pointsMerchandise.setCode(code);
-// returnId = mcClient.saveDetailsUserPointMercase(pointsMerchandise);
-
- return ResultUtil.success(returnId);
+ //积分+现金
+ if(coupon.getRedemptionMethod() == 1){
+ userCouponPaymentClient.addUserCouponPayment(userCouponPayment);
+ try {
+ if(exchangeType.getPayType() == 1){
+ return weChatPaymentCoupon("购买优惠券", userCouponPayment);
+ }
+ if(exchangeType.getPayType() == 2){
+ return aliPaymentCoupon("购买优惠券", userCouponPayment);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
}
@@ -1558,6 +1571,205 @@
}
+
+ /**
+ * 优惠券微信支付
+ * @param body
+ * @param userCouponPayment
+ * @return
+ * @throws Exception
+ */
+ 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(), "/base/coupon/weChatPaymentCouponCallback", "APP", "");
+ if (weixinpay.getCode() == 200) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ int num = 1;
+ int wait = 0;
+ while (num <= 10) {
+ int min = 5000;
+ wait += (min * num);
+ Thread.sleep(wait);
+ UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code);
+ if (userCouponPayment1.getStatus() == 2) {
+ break;
+ }
+ ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
+ if (resultUtil.getCode() == 200 && userCouponPayment1.getStatus() == 1) {
+ /**
+ * SUCCESS—支付成功,
+ * REFUND—转入退款,
+ * NOTPAY—未支付,
+ * CLOSED—已关闭,
+ * REVOKED—已撤销(刷卡支付),
+ * USERPAYING--用户支付中,
+ * PAYERROR--支付失败(其他原因,如银行返回失败)
+ */
+ Map<String, String> data1 = resultUtil.getData();
+ String s = data1.get("trade_state");
+ String transaction_id = data1.get("transaction_id");
+ if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) {
+ //有待支付的订单,这里不处理
+ userCouponPayment1.setStatus(-1);
+ userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
+ break;
+ }
+ if ("SUCCESS".equals(s)) {
+ userCouponPayment1.setStatus(2);
+ userCouponPayment1.setPaymentTime(new Date());
+ userCouponPayment1.setOrderNumber(transaction_id);
+ userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
+
+ UserCoupon userCoupon = new UserCoupon();
+ userCoupon.setCouponId(userCouponPayment1.getCouponId());
+ userCoupon.setUserId(userCouponPayment1.getUserId());
+ userCoupon.setStatus(1);
+ userCoupon.setInsertTime(new Date());
+ userConponClient.insertToAppuserCoupon(userCoupon);
+
+ if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){
+ //扣积分
+ TAppUser user = appUserService.getById(userCouponPayment1.getUserId());
+ user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue());
+ appUserService.updateById(user);
+ }
+ break;
+ }
+ if ("USERPAYING".equals(s)) {
+ num++;
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ }
+ return weixinpay;
+ }
+
+
+ /**
+ * 优惠券支付宝支付
+ *
+ * @param uid
+ * @param paymentPrice
+ * @param paymentCourseVo
+ * @return
+ * @throws Exception
+ */
+ public ResultUtil aliPaymentCoupon(String body, UserCouponPayment userCouponPayment) throws Exception {
+ String code = userCouponPayment.getCode();
+ Double cash = userCouponPayment.getCash();
+
+ ResultUtil alipay = payMoneyUtil.alipay(body, body, "", code, cash.toString(), "/base/coupon/aliPaymentCouponCallback");
+ if (alipay.getCode() == 200) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(1000);
+
+ int num = 1;
+ int wait = 0;
+ while (num <= 10) {
+ int min = 5000;
+ wait += (min * num);
+ Thread.sleep(wait);
+ UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code);
+ if (userCouponPayment1.getStatus() == 2) {
+ break;
+ }
+ AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code);
+ if (null != alipayTradeQueryResponse) {
+ /**
+ * WAIT_BUYER_PAY(交易创建,等待买家付款)、
+ * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、
+ * TRADE_SUCCESS(交易支付成功)、
+ * TRADE_FINISHED(交易结束,不可退款)
+ */
+ String s = alipayTradeQueryResponse.getTradeStatus();
+
+ String tradeNo = alipayTradeQueryResponse.getTradeNo();
+ if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) {
+ //有待支付的订单,这里不处理
+ userCouponPayment1.setStatus(-1);
+ userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
+ break;
+ }
+ if ("TRADE_SUCCESS".equals(s)) {
+ userCouponPayment1.setStatus(2);
+ userCouponPayment1.setPaymentTime(new Date());
+ userCouponPayment1.setOrderNumber(tradeNo);
+ userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
+
+ UserCoupon userCoupon = new UserCoupon();
+ userCoupon.setCouponId(userCouponPayment1.getCouponId());
+ userCoupon.setUserId(userCouponPayment1.getUserId());
+ userCoupon.setStatus(1);
+ userCoupon.setInsertTime(new Date());
+ userConponClient.insertToAppuserCoupon(userCoupon);
+
+ if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){
+ //扣积分
+ TAppUser user = appUserService.getById(userCouponPayment1.getUserId());
+ user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue());
+ appUserService.updateById(user);
+ }
+ break;
+ }
+ if ("WAIT_BUYER_PAY".equals(s)) {
+ num++;
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ }
+ return alipay;
+ }
+
+ /**
+ * 支付回调
+ * @param code
+ * @param orderNumber
+ * @return
+ */
+ @Override
+ public ResultUtil paymentCouponCallback(String code, String orderNumber) {
+ UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code);
+ if (userCouponPayment1.getStatus() == 2) {
+ return ResultUtil.success();
+ }
+ userCouponPayment1.setStatus(2);
+ userCouponPayment1.setPaymentTime(new Date());
+ userCouponPayment1.setOrderNumber(orderNumber);
+ userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
+
+ UserCoupon userCoupon = new UserCoupon();
+ userCoupon.setCouponId(userCouponPayment1.getCouponId());
+ userCoupon.setUserId(userCouponPayment1.getUserId());
+ userCoupon.setStatus(1);
+ userCoupon.setInsertTime(new Date());
+ userConponClient.insertToAppuserCoupon(userCoupon);
+
+ if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){
+ //扣积分
+ TAppUser user = appUserService.getById(userCouponPayment1.getUserId());
+ user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue());
+ appUserService.updateById(user);
+ }
+ return ResultUtil.success();
+ }
+
public boolean dealAppUserIntegral(Integer appUserId, TAppUser appUser, Integer points) {
try {
if (ToolUtil.isEmpty(appUser.getIntegral()) || (ToolUtil.isNotEmpty(appUser.getIntegral()) && appUser.getIntegral() < points)) {
--
Gitblit v1.7.1