2025008071805

This commit is contained in:
张潘 2025-08-23 12:34:44 +08:00
parent 238f958a84
commit c3297f0eae
18 changed files with 400 additions and 110 deletions

View File

@ -1,12 +0,0 @@
@echo off
chcp 65001
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN
echo 正在以UTF-8编码启动IDEA...
echo 请用这个脚本启动IDEA来解决中文显示问题
echo.
echo 使用方法:
echo 1. 将此文件复制到IDEA安装目录的bin文件夹中
echo 2. 双击运行此文件来启动IDEA
echo 3. 或者修改IDEA的桌面快捷方式指向此文件
echo.
pause

View File

@ -1072,13 +1072,16 @@ public class AppleOrderController extends BaseController {
Integer paytype = params.get("paytype") != null ? Integer.parseInt(params.get("paytype").toString()) : 1;
Long couponId = params.get("coupon_id") != null ? Long.parseLong(params.get("coupon_id").toString()) : null;
String mtcode = params.get("mtcode") != null ? params.get("mtcode").toString() : null;
System.out.println("-----------------------------------支付完成有一个问题的这里 paytype:"+paytype);
// 4. 查询预支付记录
UsersPayBefor payBefor = usersPayBeforService.selectUsersPayBeforByOrderId(id);
if (payBefor == null) {
return AppletControllerUtil.appletWarning("预支付记录不存在");
}
//已确认支付的订单就不要做金额上的改动直接返回现有就可以
if (payBefor.getStatus() == 2) {
return AppletControllerUtil.appletSuccess();
}
// 5. 验证记录归属权只能查看自己的记录
if (!payBefor.getUid().equals(user.getId())) {
return AppletControllerUtil.appletWarning("无权查看该预支付记录");

View File

@ -1166,14 +1166,11 @@ public class ApplePayController extends BaseController {
// 5. 处理支付
Map<String, Object> payResult = new HashMap<>();
//全额微信支付
if (paytype == 1) {
// 微信支付
// 微信支付余额为0的时候直接过但是还要扣除优惠里面的东西
if (wxMoney.compareTo(BigDecimal.ZERO) <= 0) {
// 金额为0直接走后续逻辑
// payBefor.setStatus(2L); // 已支付
// payBefor.setPaytime(new Date());
// usersPayBeforService.updateUsersPayBefor(payBefor);
//扣减消费金服务金
int flg= BenefitPointsUtil.creatServerOrderData(payBefor);
if (flg==0){
@ -1187,9 +1184,6 @@ public class ApplePayController extends BaseController {
}
}
}
//BenefitPointsUtil.deductServiceAndConsumption(payBefor.getOid(), user, payBefor.getServicemoney(), payBefor.getShopmoney());
//回调方法用来处理订单相关数据
// OrderUtil.prepayCallback(payBefor, user);
payResult.put("istowx", 1);
return AppletControllerUtil.appletSuccess("支付成功");
}

View File

@ -1309,7 +1309,7 @@ public class AppletController extends BaseController {
// 3. 构建查询条件
ServiceGoods queryGoods = new ServiceGoods();
queryGoods.setStatus("1"); // 只查询启用状态的商品
queryGoods.setType(2);// 只查询商品类
// 判断是否查询全部商品
boolean queryAll = "00".equals(cateId.trim()) || cateId.trim().isEmpty();
@ -4090,7 +4090,7 @@ public class AppletController extends BaseController {
orderLogService.insertOrderLog(orderLog);
//解绑虚拟号码
//需要解绑原订单上原师傅和客户的虚拟号
VoiceResponseResult resultObj = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone());
VoiceResponseResult resultObj = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone(), order.getId());
if (resultObj.getResult().equals("000000")) {
orderService.updateOrderPhone(order.getId());
}
@ -4178,8 +4178,11 @@ public class AppletController extends BaseController {
orderLogService.insertOrderLog(orderLog);
// OrderUtil orderUtil = new OrderUtil();
// orderUtil.SaveOrderLog(order);
//绑定号码
Map<String, Object> bindmap = OrderBindWorkerUtil.getOrderBindWorker(order.getId());
//如果没有绑定虚拟号就要绑定绑定号码
if (StringUtils.isBlank(order.getMiddlePhone())){
Map<String, Object> bindmap = OrderBindWorkerUtil.getOrderBindWorker(order.getId());
}
//发送微信推送通知客户师傅已接单
// 6. 返回成功
return AjaxResult.success("接单成功");
@ -4458,7 +4461,7 @@ public class AppletController extends BaseController {
}
// 6. 查询订单日志
OrderLog logQuery = new OrderLog();
logQuery.setOid(order.getId());
logQuery.setOrderId(order.getOrderId());
List<OrderLog> logList = orderLogService.selectOrderLogList(logQuery);
List<Map<String, Object>> logArr = new ArrayList<>();
for (OrderLog log : logList) {
@ -4715,7 +4718,7 @@ public class AppletController extends BaseController {
}
// 6. 查询订单日志
OrderLog logQuery = new OrderLog();
logQuery.setOid(order.getId());
logQuery.setOrderId(order.getOrderId());
List<OrderLog> logList = orderLogService.selectOrderLogList(logQuery);
List<Map<String, Object>> logArr = new ArrayList<>();
for (OrderLog log : logList) {
@ -5258,11 +5261,12 @@ public class AppletController extends BaseController {
newlog.setIsPause(2);
orderLogService.insertOrderLog(newlog);
//需要解绑原订单上原师傅和客户的虚拟号
VoiceResponseResult resultObj = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone());
VoiceResponseResult resultObj = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone(), order.getId());
if (resultObj.getResult().equals("000000")) {
orderService.updateOrderPhone(order.getId());
// orderService.updateOrder(order);
}
//绑定新师傅的虚拟号
//给新师傅进行电话通知
YunXinPhoneUtilAPI.httpsAxbTransfer(newWorker.getPhone(), order.getId());
}
@ -5977,7 +5981,7 @@ public class AppletController extends BaseController {
}
//解绑订单虚拟号
//需要解绑原订单上原师傅和客户的虚拟号
VoiceResponseResult resultObj = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone());
VoiceResponseResult resultObj = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone(), order.getId());
System.out.println("----------------------------------"+resultObj.getResult());
System.out.println("----------------------------------"+resultObj.getResult());
if (resultObj.getResult().equals("000000")) {
@ -6028,7 +6032,7 @@ public class AppletController extends BaseController {
// 6. 保存
orderLogService.insertOrderLog(orderLog);
//解绑号码
YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone());
YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone(), order.getId());
// 小程序推送给用户师傅已经到达
ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId());
@ -7094,9 +7098,9 @@ public class AppletController extends BaseController {
WXsendMsgUtil.sendMsgForUserDoorMoney(userinfo.getOpenid(), orderInfo, serviceGoods);
}
// 3.4 解绑虚拟号
// 3.4 如果还有虚拟号就解绑虚拟号
if (orderInfo.getMiddlePhone() != null) {
VoiceResponseResult unbind = YunXinPhoneUtilAPI.httpsPrivacyUnbind(orderInfo.getWorkerPhone(), orderInfo.getUserPhone(), orderInfo.getMiddlePhone());
VoiceResponseResult unbind = YunXinPhoneUtilAPI.httpsPrivacyUnbind(orderInfo.getWorkerPhone(), orderInfo.getUserPhone(), orderInfo.getMiddlePhone(), orderInfo.getId());
if (unbind.getResult().equals("000000")) {
orderService.updateOrderPhone(orderInfo.getId());
}

View File

@ -134,6 +134,19 @@ public class OrderController extends BaseController {
public AjaxResult getInfo(@PathVariable("id") Long id) {
Order order = orderService.selectOrderById(id);
if (order != null){
if(StringUtils.isBlank(order.getAdressjson())){
UserAddress userAddress=userAddressService.selectUserAddressById(order.getAddressId());
if (userAddress != null) {
try {
order.setAdressjson(JSON.toJSONString(userAddress));
orderService.updateOrder(order);
} catch (Exception e) {
order.setAdressjson(null);
}
}
// Users users=usersService.selectUsersById(order.getUid());
// if()
}
order.setOrderLog(new OrderLog());
}
@ -977,7 +990,7 @@ public class OrderController extends BaseController {
orderLogService.insertOrderLog(orderLog);
//解绑订单虚拟号
//需要解绑原订单上原师傅和客户的虚拟号
VoiceResponseResult resultObj = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone());
VoiceResponseResult resultObj = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone(), order.getId());
if (resultObj.getResult().equals("000000")) {
// order.setWorkerPhone(null);
// order.setUserPhone(null);
@ -986,7 +999,7 @@ public class OrderController extends BaseController {
orderService.updateOrderPhone(order.getId());
} // 4. 更新订单状
//解绑号码
YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone());
// YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone());
// 小程序推送给用户师傅已经到达
ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId());
@ -1098,7 +1111,7 @@ public class OrderController extends BaseController {
// 3.4 解绑虚拟号
if (order.getMiddlePhone() != null) {
VoiceResponseResult unbind = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone());
VoiceResponseResult unbind = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone(), order.getId());
if (unbind.getResult().equals("000000")) {
orderService.updateOrderPhone(order.getId());
}

View File

@ -334,6 +334,7 @@ public class PayNotifyController extends BaseController {
if (usersPayBefor != null) {
users = usersService.selectUsersById(usersPayBefor.getUid());
}
//各种优惠的扣除操作
int flg= BenefitPointsUtil.creatServerOrderData(usersPayBefor);
if (flg==0){
UsersPayBefor newpayBefor = usersPayBeforService.selectUsersPayBeforByOrderId(usersPayBefor.getOrderid());
@ -345,13 +346,8 @@ public class PayNotifyController extends BaseController {
usersPayBeforService.updateUsersPayBefor(newpayBefor);
}
}
//扣减消费金服务金
// BenefitPointsUtil.deductServiceAndConsumption(usersPayBefor.getOid(), users, usersPayBefor.getServicemoney(), usersPayBefor.getShopmoney());
//回调方法用来处理订单相关数据
//订单状态的回调
OrderUtil.prepayCallback(usersPayBefor, users);
// //订单回调处理拼团创建订单其他订单修改状态
// OrderUtil.prepayCallback(usersPayBefor, users);
// //最后无论如何平台流水需要添加让平台看到流水和账目
PayMoneyLog payMoneyLog = new PayMoneyLog();
if (usersPayBefor != null) {
@ -365,9 +361,25 @@ public class PayNotifyController extends BaseController {
payMoneyLog.setPrice(usersPayBefor.getWxmoney());
payMoneyLog.setMark("订单支付");
payMoneyLog.setPayTime(new Date());
payMoneyLogService.insertPayMoneyLog(payMoneyLog);
int paystatus= payMoneyLogService.insertPayMoneyLog(payMoneyLog);
//如果支付成功还要添加客户的流水让客户看到自己账户的变动
if (paystatus>0){
//第一步记录用户支付记录购买是负数
UserMemnerConsumptionLog newuserMemnerConsumptionLog = new UserMemnerConsumptionLog();
newuserMemnerConsumptionLog.setUid(Math.toIntExact(users.getId()));
newuserMemnerConsumptionLog.setConsumptiontype(3);
newuserMemnerConsumptionLog.setConsumptiontime(new Date());
newuserMemnerConsumptionLog.setConsumptionmoney(usersPayBefor.getWxmoney()); //支付就是负数
newuserMemnerConsumptionLog.setReamk("订单微信支付" +usersPayBefor.getWxmoney() + "");
newuserMemnerConsumptionLog.setBeformoney(users.getBalance());
newuserMemnerConsumptionLog.setAftermoney(users.getBalance().add(usersPayBefor.getWxmoney()));
newuserMemnerConsumptionLog.setNowmoney(users.getBalance().add(usersPayBefor.getWxmoney()));
newuserMemnerConsumptionLog.setType(2); //1收入 2支出
newuserMemnerConsumptionLog.setOrderid(usersPayBefor.getOrderid());
userMemnerConsumptionLogService.insertUserMemnerConsumptionLog(newuserMemnerConsumptionLog);
}
//sendWechatMessage(users,outTradeNo);
logger.info("商品支付回调处理成功,订单号:{}", outTradeNo);
logger.info("订单支付回调处理成功,订单号:{}", outTradeNo);
return buildSuccessResponse();
} catch (Exception e) {
@ -486,7 +498,6 @@ public class PayNotifyController extends BaseController {
String transactionId = (String) paymentInfo.get("transactionId");
String totalFee = (String) paymentInfo.get("totalFee");
UsersPayBefor usersPayBefor = usersPayBeforService.selectUsersPayBeforByOrderId(outTradeNo);
// 组合支付微信支付回调后自动扣余额
if (usersPayBefor != null && usersPayBefor.getYemoney() != null && usersPayBefor.getYemoney().compareTo(BigDecimal.ZERO) > 0) {
Users user = usersService.selectUsersById(usersPayBefor.getUid());
@ -496,44 +507,33 @@ public class PayNotifyController extends BaseController {
"订单组合支付-余额部分" + usersPayBefor.getYemoney() + "",
usersPayBefor.getOrderid()
);
if (balanceResult == null || !Boolean.TRUE.equals(balanceResult.get("success"))) {
if (balanceResult != null) {
UsersPayBefor newpayBefor = usersPayBeforService.selectUsersPayBeforByOrderId(usersPayBefor.getOrderid());
if (newpayBefor!=null){
// 创建订单
newpayBefor.setStatus(2L);
newpayBefor.setPaytime(new Date());
newpayBefor.setPaycode(transactionId);
int flgs=usersPayBeforService.updateUsersPayBefor(newpayBefor);
}
System.out.println("------------组合支付:微信支付回调后自动扣余额,微信支付:"+newpayBefor.getWxmoney()+"余额支付:"+newpayBefor.getYemoney());
//扣减消费金服务金
// BenefitPointsUtil.deductServiceAndConsumption(usersPayBefor.getOid(), user, usersPayBefor.getServicemoney(), usersPayBefor.getShopmoney());
//回调方法用来处理订单相关数据
int flg= BenefitPointsUtil.creatServerOrderData(usersPayBefor);
if (flg==0){
UsersPayBefor newpayBefor = usersPayBeforService.selectUsersPayBeforByOrderId(usersPayBefor.getOrderid());
if (newpayBefor!=null){
// 创建订单
newpayBefor.setStatus(2L);
newpayBefor.setPaytime(new Date());
newpayBefor.setPaycode(transactionId);
int flgs=usersPayBeforService.updateUsersPayBefor(newpayBefor);
if (flgs>0){
OrderUtil.prepayCallback(newpayBefor, user);
}
}
OrderUtil.prepayCallback(newpayBefor, user);
}
// OrderUtil.prepayCallback(newpayBefor, user);
String errorMsg = balanceResult != null ? (String) balanceResult.get("message") : "余额支付失败";
logger.error("组合支付余额部分扣款失败:{}", errorMsg);
return buildFailResponse("组合支付余额部分扣款失败: " + errorMsg);
// logger.error("组合支付余额部分扣款失败:{}", errorMsg);
// return buildFailResponse("组合支付余额部分扣款失败: " + errorMsg);
}
}
// if (usersPayBefor != null) {
// usersPayBefor.setStatus(2L);
// usersPayBefor.setPaytime(new Date());
// usersPayBefor.setPaycode(transactionId);
// usersPayBeforService.updateUsersPayBefor(usersPayBefor);
//
// }
Users users = null;
if (usersPayBefor != null) {
users = usersService.selectUsersById(usersPayBefor.getUid());
}
//订单回调处理拼团创建订单其他订单修改状态
OrderUtil.prepayCallback(usersPayBefor, users);
// OrderUtil.prepayCallback(usersPayBefor, users);
// //最后无论如何平台流水需要添加让平台看到流水和账目
PayMoneyLog payMoneyLog = new PayMoneyLog();
@ -548,7 +548,22 @@ public class PayNotifyController extends BaseController {
payMoneyLog.setPrice(usersPayBefor.getWxmoney());
payMoneyLog.setMark("订单支付");
payMoneyLog.setPayTime(new Date());
payMoneyLogService.insertPayMoneyLog(payMoneyLog);
int paystatus= payMoneyLogService.insertPayMoneyLog(payMoneyLog);
//用户的支付里面微信支付也要记录在用户的余额变动里面确保用户对自己的支付情况了解
if (paystatus>0){
UserMemnerConsumptionLog newuserMemnerConsumptionLog = new UserMemnerConsumptionLog();
newuserMemnerConsumptionLog.setUid(Math.toIntExact(users.getId()));
newuserMemnerConsumptionLog.setConsumptiontype(3);
newuserMemnerConsumptionLog.setConsumptiontime(new Date());
newuserMemnerConsumptionLog.setOrderid(usersPayBefor.getOrderid());
newuserMemnerConsumptionLog.setConsumptionmoney(usersPayBefor.getWxmoney()); //支付就是负数
newuserMemnerConsumptionLog.setReamk("订单组合支付-微信部分" +usersPayBefor.getWxmoney() + "");
newuserMemnerConsumptionLog.setBeformoney(users.getBalance());
newuserMemnerConsumptionLog.setAftermoney(users.getBalance());
newuserMemnerConsumptionLog.setNowmoney(users.getBalance());
newuserMemnerConsumptionLog.setType(2);
userMemnerConsumptionLogService.insertUserMemnerConsumptionLog(newuserMemnerConsumptionLog);
}
//sendWechatMessage(users,outTradeNo);
logger.info("商品支付回调处理成功,订单号:{}", outTradeNo);
return buildSuccessResponse();
@ -606,7 +621,7 @@ public class PayNotifyController extends BaseController {
newuserMemnerConsumptionLog.setConsumptiontype(3);
newuserMemnerConsumptionLog.setConsumptiontime(new Date());
newuserMemnerConsumptionLog.setConsumptionmoney(userMemberRechargeLog.getComemoney());
newuserMemnerConsumptionLog.setReamk("用户充值" + userMemberRechargeLog.getInmoney() + "实际到账" + userMemberRechargeLog.getComemoney());
newuserMemnerConsumptionLog.setReamk("用户微信支付充值" + userMemberRechargeLog.getInmoney() + "实际到账" + userMemberRechargeLog.getComemoney());
newuserMemnerConsumptionLog.setBeformoney(users.getBalance());
newuserMemnerConsumptionLog.setAftermoney(users.getBalance().add(userMemberRechargeLog.getComemoney()));
newuserMemnerConsumptionLog.setNowmoney(users.getBalance().add(userMemberRechargeLog.getComemoney()));
@ -622,7 +637,7 @@ public class PayNotifyController extends BaseController {
userMemnerConsumptionLog.setConsumptiontype(2);
userMemnerConsumptionLog.setConsumptiontime(new Date());
userMemnerConsumptionLog.setConsumptionmoney(userMemberRechargeLog.getComemoney());
userMemnerConsumptionLog.setReamk("会员包年扣减");
userMemnerConsumptionLog.setReamk("会员包年余额扣减");
userMemnerConsumptionLog.setBeformoney(users.getBalance());
userMemnerConsumptionLog.setAftermoney(users.getBalance().subtract(userMemberRechargeLog.getComemoney()));
userMemnerConsumptionLog.setNowmoney(users.getBalance().subtract(userMemberRechargeLog.getComemoney()));
@ -1674,13 +1689,39 @@ public class PayNotifyController extends BaseController {
logger.error("未找到次卡使用记录,订单号:{}", outTradeNo);
return buildFailResponse("未找到次卡使用记录");
}
// 5. 修改为可用状态假设status=1为可用
useCard.setStatus(1L);
useCard.setUpdatedAt(new Date());
useCard.setTransactionId(transactionId);
userUseSecondaryCardService.updateUserUseSecondaryCard(useCard);
int flg= userUseSecondaryCardService.updateUserUseSecondaryCard(useCard);
//添加流水任何记录都需要流水
if (flg>0) {
Users users = usersService.selectUsersById(useCard.getUid());
//第一步记录用户支付记录购买是负数
UserMemnerConsumptionLog newuserMemnerConsumptionLog = new UserMemnerConsumptionLog();
newuserMemnerConsumptionLog.setUid(Math.toIntExact(users.getId()));
newuserMemnerConsumptionLog.setConsumptiontype(3);
newuserMemnerConsumptionLog.setConsumptiontime(new Date());
newuserMemnerConsumptionLog.setConsumptionmoney(useCard.getPaymoney()); //负数
newuserMemnerConsumptionLog.setReamk("次卡购买微信支付" + useCard.getPaymoney() + "");
newuserMemnerConsumptionLog.setBeformoney(users.getBalance());
newuserMemnerConsumptionLog.setAftermoney(users.getBalance().add(useCard.getPaymoney()));
newuserMemnerConsumptionLog.setNowmoney(users.getBalance().add(useCard.getPaymoney()));
newuserMemnerConsumptionLog.setType(2); // 1收入 2 支出
int cklig= userMemnerConsumptionLogService.insertUserMemnerConsumptionLog(newuserMemnerConsumptionLog);
if (cklig>0){
//最后无论如何平台流水需要添加让平台看到流水和账目
PayMoneyLog payMoneyLog = new PayMoneyLog();
payMoneyLog.setOid(useCard.getId());
payMoneyLog.setOrderId(useCard.getOrderid());
payMoneyLog.setUid(users.getId());
payMoneyLog.setUname(users.getName());
payMoneyLog.setPrice(useCard.getPaymoney());
payMoneyLog.setMark("购买次卡支付");
payMoneyLog.setPayTime(new Date());
payMoneyLogService.insertPayMoneyLog(payMoneyLog);
}
}
logger.info("次卡支付回调处理成功,订单号:{}", outTradeNo);
return buildSuccessResponse();
} catch (Exception e) {
@ -2276,6 +2317,20 @@ public class PayNotifyController extends BaseController {
usersPayBeforData.setReturnmoney(usersPayBeforData.getReturnmoney().add(refund_amount));
usersPayBeforData.setWxmoney(usersPayBeforData.getWxmoney().subtract(refund_amount));
usersPayBeforService.updateUsersPayBefor(usersPayBeforData);
//添加流水让客户看到自己的资金变动流水
//第一步记录用户支付记录购买是负数
UserMemnerConsumptionLog newuserMemnerConsumptionLog = new UserMemnerConsumptionLog();
newuserMemnerConsumptionLog.setUid(Math.toIntExact(usersPayBeforData.getUid()));
newuserMemnerConsumptionLog.setConsumptiontype(3);
newuserMemnerConsumptionLog.setConsumptiontime(new Date());
newuserMemnerConsumptionLog.setConsumptionmoney(refund_amount);
newuserMemnerConsumptionLog.setReamk("订单微信退款" +refund_amount + "");
newuserMemnerConsumptionLog.setBeformoney(user.getBalance());
newuserMemnerConsumptionLog.setAftermoney(user.getBalance());
newuserMemnerConsumptionLog.setNowmoney(user.getBalance());
newuserMemnerConsumptionLog.setType(1); //1收入 2支出
newuserMemnerConsumptionLog.setOrderid(usersPayBeforData.getOrderid());
userMemnerConsumptionLogService.insertUserMemnerConsumptionLog(newuserMemnerConsumptionLog);
}
}
}
@ -2295,7 +2350,7 @@ public class PayNotifyController extends BaseController {
/**
* 微信提现回调接口
* 次卡退款
*/
@PostMapping("/api/worker/cika/notify")
public void apiworkercikanotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
@ -2540,7 +2595,22 @@ public class PayNotifyController extends BaseController {
payMoneyLog.setPrice(useCard.getPaymoney().negate());//退款就是负数
payMoneyLog.setMark("次卡退款");
payMoneyLog.setPayTime(new Date());
payMoneyLogService.insertPayMoneyLog(payMoneyLog);
int paystatus= payMoneyLogService.insertPayMoneyLog(payMoneyLog);
if(paystatus>0){
//第一步记录用户支付记录购买是负数
UserMemnerConsumptionLog newuserMemnerConsumptionLog = new UserMemnerConsumptionLog();
newuserMemnerConsumptionLog.setUid(Math.toIntExact(user.getId()));
newuserMemnerConsumptionLog.setConsumptiontype(3);
newuserMemnerConsumptionLog.setConsumptiontime(new Date());
newuserMemnerConsumptionLog.setConsumptionmoney(useCard.getPaymoney());
newuserMemnerConsumptionLog.setReamk("次卡退款" +useCard.getPaymoney() + "");
newuserMemnerConsumptionLog.setBeformoney(user.getBalance());
newuserMemnerConsumptionLog.setAftermoney(user.getBalance());
newuserMemnerConsumptionLog.setNowmoney(user.getBalance());
newuserMemnerConsumptionLog.setType(1); //1收入 2支出
// newuserMemnerConsumptionLog.setOrderid();
userMemnerConsumptionLogService.insertUserMemnerConsumptionLog(newuserMemnerConsumptionLog);
}
}
}
}

View File

@ -445,7 +445,6 @@ public class UsersPayBeforController extends BaseController
return error("未找到支付记录");
}
List<UsersPayBefor> payRecords = usersPayBeforService.selectPayDetailsByOrderId(orderId);
System.out.println("000%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"+payRecords.size());
if (payRecords == null || payRecords.isEmpty()) {
return error("未找到支付记录");
}
@ -453,12 +452,11 @@ public class UsersPayBeforController extends BaseController
// 计算已退款金额
BigDecimal totalRefunded = BigDecimal.ZERO;
for (UsersPayBefor record : payRecords) {
System.out.println("111%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"+record.getReturnmoney());
if (record.getReturnmoney() != null) {
totalRefunded = totalRefunded.add(record.getReturnmoney());
}
}
System.out.println("222%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"+totalRefunded);
// 计算总支付金额减去会员优惠因为会员优惠不参与退款
BigDecimal totalPaid = BigDecimal.ZERO;
BigDecimal totalMemberDiscount = BigDecimal.ZERO;
@ -524,7 +522,18 @@ public class UsersPayBeforController extends BaseController
// 记录退款日志
OrderLog orderLog = new OrderLog();
orderLog.setOrderId(orderId);
orderLog.setOid(999L);
Order order = orderService.selectOrderByOrderId(orderId);
if (order != null){
orderLog.setOid(order.getId());
}else{
GoodsOrder goodsOrder = goodsOrderService.selectGoodsOrderByMainOrderId(orderId);
if (goodsOrder != null){
orderLog.setOid(goodsOrder.getId());
}else{
orderLog.setOid(999L);
}
}
orderLog.setTitle("退款");
orderLog.setOrdertype(paymentInfo.getServicetype());
orderLog.setType(new BigDecimal(11));

View File

@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.Users;
import com.ruoyi.system.service.IUsersService;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
@ -308,7 +309,7 @@ public class AppletLoginUtil {
result.put("message", "token无效或用户不存在");
return result;
}
vaUserToken(user, usersService);
// 检查用户状态
if (user.getStatus() == null || user.getStatus() != 1) {
result.put("valid", false);
@ -332,6 +333,56 @@ public class AppletLoginUtil {
return result;
}
public static Users vaUserToken(Users users, IUsersService usersService) {
if(users.getBalance()==null){
users.setBalance(BigDecimal.ZERO);
}
if(users.getIntegral()==null){
users.setIntegral(0L);
}
if(users.getIsmember()==null){
users.setIsmember(0);
}
if(users.getTotalComm()==null){
users.setTotalComm(BigDecimal.ZERO);
}
if(users.getTotalIntegral()==null){
users.setTotalIntegral(0L);
}
if(users.getLevel()==null){
users.setLevel(1);
}
if(users.getCommission()==null){
users.setCommission(BigDecimal.ZERO);
}
if(users.getTotalComm()==null){
users.setTotalComm(BigDecimal.ZERO);
}
if(users.getMargin()==null){
users.setMargin(BigDecimal.ZERO);
}
if(users.getPropose()==null){
users.setPropose(BigDecimal.ZERO);
}
if(users.getConsumption()==null){
users.setConsumption(BigDecimal.ZERO);
}
if(users.getServicefee()==null){
users.setServicefee(BigDecimal.ZERO);
}
if(users.getPropose()==null){
users.setPropose(BigDecimal.ZERO);
}
usersService.updateUsers(users);
return users;
}
/**
* 获取并验证请求头中的token
*

View File

@ -66,13 +66,42 @@ public class WXsendMsgUtil {
//公共推送
public static String PublicPush(WxMssVo wxMssVo) throws Exception {
RestTemplate restTemplate = new RestTemplate();
// String accessToken = getAccessToken();
//这里简单起见我们每次都获取最新的access_token
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + getAccessToken();
ResponseEntity<String> responseEntity =
restTemplate.postForEntity(url, wxMssVo, String.class);
System.out.println("0001responseEntity.getBody()" + responseEntity.getBody());
return responseEntity.getBody();
// 使用WechatApiUtil的缓存机制获取access_token
Map<String, Object> tokenResult = WechatApiUtil.getCachedAccessToken();
if (!(Boolean) tokenResult.get("success")) {
throw new Exception("获取access_token失败" + tokenResult.get("errorMsg"));
}
String accessToken = (String) tokenResult.get("access_token");
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
try {
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMssVo, String.class);
System.out.println("0001responseEntity.getBody()" + responseEntity.getBody());
// 检查响应中是否有access_token相关错误
JSONObject response = JSONObject.parseObject(responseEntity.getBody());
Integer errcode = response.getInteger("errcode");
if (errcode != null && (errcode == 40001 || errcode == 42001 || errcode == 40014)) {
System.out.println("微信推送消息access_token无效错误码" + errcode + "),清除缓存并重试");
// 清除access_token缓存
WechatApiUtil.clearAccessTokenCache();
// 重新获取access_token并重试
tokenResult = WechatApiUtil.getCachedAccessToken();
if ((Boolean) tokenResult.get("success")) {
accessToken = (String) tokenResult.get("access_token");
url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
responseEntity = restTemplate.postForEntity(url, wxMssVo, String.class);
System.out.println("重试后responseEntity.getBody()" + responseEntity.getBody());
}
}
return responseEntity.getBody();
} catch (Exception e) {
System.err.println("微信推送消息异常:" + e.getMessage());
throw e;
}
}

View File

@ -751,6 +751,37 @@ public class WechatApiUtil {
return Math.max(0, (expireTime - currentTime) / 1000);
}
/**
* 测试access_token缓存机制
* 用于验证修复是否生效
*/
public static Map<String, Object> testAccessTokenCache() {
Map<String, Object> result = new HashMap<>();
try {
// 1. 获取当前缓存状态
boolean cacheValid = isAccessTokenCacheValid();
result.put("cacheValid", cacheValid);
// 2. 获取access_token
Map<String, Object> tokenResult = getCachedAccessToken();
result.put("tokenResult", tokenResult);
// 3. 缓存信息
result.put("cacheInfo", new HashMap<String, Object>() {{
put("hasCache", !ACCESS_TOKEN_CACHE.isEmpty());
put("cacheKeys", ACCESS_TOKEN_CACHE.keySet());
put("remainingTime", getRemainingExpireTime());
}});
result.put("success", true);
result.put("message", "测试完成");
} catch (Exception e) {
result.put("success", false);
result.put("errorMsg", "测试异常:" + e.getMessage());
}
return result;
}
/**
* 清除access_token缓存
*/
@ -913,7 +944,27 @@ public class WechatApiUtil {
return result;
}
// 2. 获取access_token
// 2. 获取access_token最多重试一次
return getPhoneNumberWithRetry(code, false);
} catch (Exception e) {
result.put("success", false);
result.put("errorMsg", "通过code获取手机号异常" + e.getMessage());
e.printStackTrace();
}
return result;
}
/**
* 获取手机号带重试机制
* 当遇到access_token无效时清除缓存并重试一次
*/
private static Map<String, Object> getPhoneNumberWithRetry(String code, boolean isRetry) {
Map<String, Object> result = new HashMap<>();
try {
// 1. 获取access_token
Map<String, Object> tokenResult = getCachedAccessToken();
if (!(Boolean) tokenResult.get("success")) {
result.put("success", false);
@ -923,28 +974,28 @@ public class WechatApiUtil {
String accessToken = (String) tokenResult.get("access_token");
// 3. 构建请求参数
// 2. 构建请求参数
Map<String, String> requestBody = new HashMap<>();
requestBody.put("code", code.trim());
// 4. 构建请求URL
// 3. 构建请求URL
String url = WECHAT_API_BASE_URL + "/wxa/business/getuserphonenumber?access_token=" + accessToken;
// 5. 设置请求头
// 4. 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
// 6. 创建请求实体
// 5. 创建请求实体
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(requestBody, headers);
System.out.println("请求微信手机号API: " + url);
System.out.println("请求参数: " + requestBody);
// 7. 发起POST请求
// 6. 发起POST请求
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
System.out.println("微信手机号API响应: " + response.getBody());
// 8. 处理响应结果
// 7. 处理响应结果
if (response.getStatusCode().is2xxSuccessful()) {
JSONObject jsonResponse = JSONObject.parseObject(response.getBody());
@ -953,11 +1004,21 @@ public class WechatApiUtil {
result.put("success", true);
result.put("phone_info", jsonResponse.getJSONObject("phone_info"));
} else {
// 获取失败
Integer errcode = jsonResponse.getInteger("errcode");
String errmsg = jsonResponse.getString("errmsg");
// 检查是否是access_token相关错误40001, 42001, 40014等
if (!isRetry && (errcode == 40001 || errcode == 42001 || errcode == 40014)) {
System.out.println("access_token无效错误码" + errcode + "),清除缓存并重试");
// 清除access_token缓存
clearAccessTokenCache();
// 重试一次
return getPhoneNumberWithRetry(code, true);
}
// 其他错误或已经重试过
result.put("success", false);
result.put("errorMsg", "微信API返回错误" +
jsonResponse.getString("errmsg") +
" (错误码:" + jsonResponse.getInteger("errcode") + ")");
result.put("errorMsg", "微信API返回错误" + errmsg + " (错误码:" + errcode + ")");
}
} else {
result.put("success", false);

View File

@ -81,8 +81,8 @@ public class WechatPayUtil {
private static final String WECHAT_TRANSFER_URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; // 企业付款
// public static final String PAY_FH = "https://www.huafurenjia.cn/";
public static final String PAY_FH = "https://api.huafurenjia.cn/";
// public static final String PAY_FH = "https://7c950773.r3.cpolar.top/";
/**

View File

@ -2,6 +2,8 @@ package com.ruoyi.system.ControllerUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.service.IOrderService;
import com.winnerlook.model.*;
import com.winnerlook.util.Base64;
import com.winnerlook.util.MD5Util;
@ -42,6 +44,7 @@ public class YunXinPhoneUtilAPI {
// 回调地址常量可通过set方法动态设置
private static String templateID = "404168";
private static final IOrderService orderService= SpringUtils.getBean(IOrderService.class);
/**
* 设置AXB绑定的回调URL
@ -157,7 +160,7 @@ public class YunXinPhoneUtilAPI {
* @return VoiceResponseResult 结果对象
* @throws Exception 异常
*/
public static VoiceResponseResult httpsPrivacyUnbind(String phoneA, String phoneB, String phone) throws Exception {
public static VoiceResponseResult httpsPrivacyUnbind(String phoneA, String phoneB, String phone,Long oid) throws Exception {
VoiceResponseResult resultObj = new VoiceResponseResult();
String url = UNBIND_URL;
try {
@ -175,7 +178,11 @@ public class YunXinPhoneUtilAPI {
JSONObject rjson = JSONObject.parseObject(result);
resultObj.setResult(rjson.getString("result"));
resultObj.setMessage(rjson.getString("message"));
System.out.println("[YunXinPhoneUtilAPI] 解绑执行结果: " + result);
//订单手机号码置空
if("000000".equals(resultObj.getResult())) {
orderService.updateOrderPhone(oid);
}
} catch (Exception e) {
System.out.println("[YunXinPhoneUtilAPI] 解绑异常: " + e.getMessage());
throw e;
@ -190,8 +197,15 @@ public class YunXinPhoneUtilAPI {
// 设置回调地址如有需要
// setAxbCallbackUrl("http://your-callback-url.com/axb");
// setNotifyCallbackUrl("http://your-callback-url.com/notify");
// 示例解绑操作
VoiceResponseResult res = httpsAxbTransfer("18339212639",3252L);
System.out.println("解绑结果:" + JSON.toJSONString(res));
// httpsPrivacyBindAxb("15502984047","18339212639", "15202954234");
// VoiceResponseResult resultObj= httpsPrivacyUnbind("18339212639", "15202954234","15502984047");
// if("000000".equals(resultObj.getResult())) {
//
// } else {
// System.out.println("解绑失败");
// }
// // 示例解绑操作
// VoiceResponseResult res = httpsAxbTransfer("18339212639",3252L);
// System.out.println("解绑结果:" + JSON.toJSONString(res));
}
}

View File

@ -23,6 +23,9 @@ public interface GoodsOrderMapper
public GoodsOrder selectGoodsOrderByorderId(String orderId);
public GoodsOrder selectGoodsOrderByMainOrderId(String orderId);
public int selectCountGoodsOrderByUid(@Param("uid") Long uid, @Param("status") Long status);

View File

@ -26,7 +26,7 @@ public interface IGoodsOrderService
* @return 商品订单集合
*/
public List<GoodsOrder> selectGoodsOrderList(GoodsOrder goodsOrder);
public GoodsOrder selectGoodsOrderByMainOrderId(String orderId);
public List<GoodsOrder> selectGoodsOrdergrouBymAIDList(GoodsOrder goodsOrder);

View File

@ -31,7 +31,9 @@ public class GoodsOrderServiceImpl implements IGoodsOrderService
return goodsOrderMapper.selectGoodsOrderById(id);
}
public GoodsOrder selectGoodsOrderByMainOrderId(String orderId){
return goodsOrderMapper.selectGoodsOrderByMainOrderId(orderId);
}
public GoodsOrder selectGoodsOrderByorderId(String orderId){
return goodsOrderMapper.selectGoodsOrderByorderId(orderId);
}

View File

@ -1,5 +1,6 @@
package com.ruoyi.system.service.impl;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
@ -91,6 +92,42 @@ public class UsersServiceImpl implements IUsersService
@Override
public int insertUsers(Users users)
{
if(users.getBalance()==null){
users.setBalance(BigDecimal.ZERO);
}
if(users.getIntegral()==null){
users.setIntegral(0L);
}
if(users.getTotalComm()==null){
users.setTotalComm(BigDecimal.ZERO);
}
if(users.getTotalIntegral()==null){
users.setTotalIntegral(0L);
}
if(users.getLevel()==null){
users.setLevel(1);
}
if(users.getCommission()==null){
users.setCommission(BigDecimal.ZERO);
}
if(users.getTotalComm()==null){
users.setTotalComm(BigDecimal.ZERO);
}
if(users.getMargin()==null){
users.setMargin(BigDecimal.ZERO);
}
if(users.getPropose()==null){
users.setPropose(BigDecimal.ZERO);
}
if(users.getConsumption()==null){
users.setConsumption(BigDecimal.ZERO);
}
if(users.getServicefee()==null){
users.setServicefee(BigDecimal.ZERO);
}
if(users.getPropose()==null){
users.setPropose(BigDecimal.ZERO);
}
return usersMapper.insertUsers(users);
}

View File

@ -203,6 +203,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where order_id = #{orderId} limit 1
</select>
<select id="selectGoodsOrderByMainOrderId" parameterType="String" resultMap="GoodsOrderResult">
<include refid="selectGoodsOrderVo"/>
where main_order_id = #{mainOrderId} limit 1
</select>
<select id="selectGoodsOrderById" parameterType="Long" resultMap="GoodsOrderResult">
<include refid="selectGoodsOrderVo"/>
where id = #{id}

View File

@ -176,6 +176,13 @@
updated_at DESC
</select>
<update id="updateOrderPhone" parameterType="Long">
UPDATE order_data SET user_phone=null,worker_phone=null,middle_phone=null WHERE id=#{id}
</update>
<update id="updateOrderCika" parameterType="Long">
UPDATE order_data SET cartid=null WHERE id=#{id}
</update>
<select id="selectOrderList" parameterType="Order" resultMap="OrderResult">
<include refid="selectOrderVo"/>
@ -293,7 +300,7 @@
select count(1)
from order_data
where bigtype = #{type}
and status != 4
and status not in (4,5,7)
and uid = #{uid}
</select>