package com.ishop.merchant.service;
|
|
import com.iplatform.model.po.S_pay_notify;
|
import com.iplatform.pay.service.PlatformOrderServiceImpl;
|
import com.ishop.merchant.BalanceRecordConstants;
|
import com.ishop.merchant.Constants;
|
import com.ishop.merchant.OrderConstants;
|
import com.ishop.merchant.util.PayUtils;
|
import com.ishop.model.po.EbOrder;
|
import com.ishop.model.po.EbRechargeOrder;
|
import com.ishop.model.po.EbUser;
|
import com.ishop.model.po.EbUserBalanceRecord;
|
import com.walker.infrastructure.utils.DateUtils;
|
import com.walker.infrastructure.utils.MD5;
|
import com.walker.infrastructure.utils.NumberFormatUtils;
|
import com.walker.infrastructure.utils.NumberGenerator;
|
import com.walker.infrastructure.utils.NumberUtils;
|
import com.walker.infrastructure.utils.StringUtils;
|
import com.walker.jdbc.service.BaseServiceImpl;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
@Service
|
public class PayServiceImpl extends BaseServiceImpl {
|
|
private UserRegisterServiceImpl userRegisterService;
|
private PlatformOrderServiceImpl platformOrderService;
|
|
@Autowired
|
public PayServiceImpl(UserRegisterServiceImpl userRegisterService, PlatformOrderServiceImpl platformOrderService){
|
this.userRegisterService = userRegisterService;
|
this.platformOrderService = platformOrderService;
|
}
|
|
/**
|
* 微信充值,支付通知确认更新数据。
|
* @param rechargeOrder
|
* @param balanceRecord
|
* @param payPrice
|
* @param s_pay_notify
|
* @param existNotify
|
* @date 2023-09-12
|
*/
|
public void execRechargeWechatNotify(EbRechargeOrder rechargeOrder
|
, EbUserBalanceRecord balanceRecord, double payPrice, S_pay_notify s_pay_notify, boolean existNotify){
|
// 更新充值订单状态
|
this.update(rechargeOrder);
|
// 写入余额变动流水
|
this.insert(balanceRecord);
|
// 更新用户账户金额
|
userRegisterService.execUpdateMoney(rechargeOrder.getUid(), payPrice, Constants.OPERATION_TYPE_ADD);
|
if(existNotify){
|
// 更新通知,更新订单状态
|
this.platformOrderService.execInsertOrderNotify(s_pay_notify, false);
|
} else {
|
// 写入通知,更新订单状态
|
this.platformOrderService.execInsertOrderNotify(s_pay_notify, true);
|
}
|
}
|
|
/**
|
* 微信支付,接收通知成功,更新订单状态。H5支付方式。
|
* @param order
|
* @param s_pay_notify
|
* @param existNotify
|
* @date 2023-08-11
|
*/
|
public void execPayWechatPublic(EbOrder order, S_pay_notify s_pay_notify, boolean existNotify){
|
// 订单修改
|
order.setPaid(1);
|
order.setPayTime(DateUtils.getDateTimeNumber());
|
order.setStatus(OrderConstants.ORDER_STATUS_WAIT_SHIPPING);
|
this.save(order);
|
this.doProcessMerchantOrder(order);
|
|
if(existNotify){
|
// 更新通知,更新订单状态
|
this.platformOrderService.execInsertOrderNotify(s_pay_notify, false);
|
} else {
|
// 写入通知,更新订单状态
|
this.platformOrderService.execInsertOrderNotify(s_pay_notify, true);
|
}
|
}
|
|
/**
|
* 余额支付订单操作。
|
* @param order
|
* @param payPrice
|
* @param userId
|
* @param md5Key 系统配置的md5密钥
|
* @date 2023-07-12
|
*/
|
public void execPayYue(EbOrder order, double payPrice, long userId, String md5Key, EbUser user){
|
// 订单修改
|
order.setPaid(1);
|
order.setPayTime(DateUtils.getDateTimeNumber());
|
this.update(order);
|
this.doProcessMerchantOrder(order);
|
|
// 这里只扣除金额,账单记录在task中处理
|
if(payPrice > 0){
|
userRegisterService.execUpdateMoney(userId, payPrice, Constants.OPERATION_TYPE_SUBTRACT);
|
// 更新缓存中用户余额,为外面更新准备
|
user.setNowMoney(user.getNowMoney() - payPrice);
|
|
// 用户余额记录
|
EbUserBalanceRecord userBalanceRecord = new EbUserBalanceRecord();
|
userBalanceRecord.setId(NumberGenerator.getLongSequenceNumber());
|
userBalanceRecord.setCreateTime(DateUtils.getDateTimeNumber());
|
userBalanceRecord.setUid(userId);
|
userBalanceRecord.setLinkId(order.getOrderNo());
|
userBalanceRecord.setLinkType(BalanceRecordConstants.BALANCE_RECORD_LINK_TYPE_ORDER);
|
userBalanceRecord.setType(BalanceRecordConstants.BALANCE_RECORD_TYPE_SUB);
|
userBalanceRecord.setAmount(payPrice);
|
userBalanceRecord.setBalance(user.getNowMoney());
|
userBalanceRecord.setRemark(BalanceRecordConstants.BALANCE_RECORD_REMARK_ORDER + payPrice);
|
userBalanceRecord.setMonth(Integer.parseInt(DateUtils.getYearMonthCurrentValue()));
|
// 余额签名字段,金额保留2位小数,2023-08-30
|
// StringBuilder sb = new StringBuilder(String.valueOf(userId));
|
// sb.append(NumberFormatUtils.scaleAccuracy2(payPrice)).append(NumberFormatUtils.scaleAccuracy2(userBalanceRecord.getBalance()));
|
// userBalanceRecord.setSign(MD5.sign(sb.toString(), md5Key, StringUtils.DEFAULT_CHARSET_UTF8));
|
userBalanceRecord.setSign(PayUtils.acquireUserBalanceSign(userId, payPrice, userBalanceRecord.getBalance(), md5Key));
|
this.insert(userBalanceRecord);
|
}
|
}
|
|
private void doProcessMerchantOrder(EbOrder order){
|
this.execute("update eb_merchant_order set pay_type=?, pay_channel=?, update_time=? where order_no=?"
|
, new Object[]{order.getPayType(), order.getPayChannel(), DateUtils.getDateTimeNumber(), order.getOrderNo()});
|
}
|
|
|
}
|