|
|
|
@ -332,7 +332,7 @@ public class UserRefundServiceImpl {
|
|
|
|
|
return OutData.ERROR("该账户不允许在线退款。");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//检查是否存在未结束的订单
|
|
|
|
|
//检查是否存在未结束的订单,存在未结束的订单,则不能申请退款
|
|
|
|
|
int chargeOrderNum = userRefundMapper.countOrderFromRefund(userId);
|
|
|
|
|
if (chargeOrderNum > 0) {
|
|
|
|
|
return OutData.ERROR("存在未结束的订单,请等订单结束后申请!");
|
|
|
|
@ -342,7 +342,7 @@ public class UserRefundServiceImpl {
|
|
|
|
|
Map rechargeMap;
|
|
|
|
|
double refundFee;
|
|
|
|
|
//t_user_refund
|
|
|
|
|
//用户退款表
|
|
|
|
|
//用户申请退款表
|
|
|
|
|
String orderNO = "UT" + Tools.getDate4() + userId;//订单号
|
|
|
|
|
refundMap.put("userId", userId);
|
|
|
|
|
refundMap.put("order_no", orderNO);
|
|
|
|
@ -353,12 +353,13 @@ public class UserRefundServiceImpl {
|
|
|
|
|
refundMap.put("comm", "");//备注
|
|
|
|
|
refundMap.put("create_time", now);
|
|
|
|
|
refundMap.put("update_time", now);
|
|
|
|
|
userRefundMapper.insertUserRefund(refundMap);//插入退款表
|
|
|
|
|
userRefundMapper.insertUserRefund(refundMap);//插入用户申请退款表
|
|
|
|
|
|
|
|
|
|
//退款金额
|
|
|
|
|
if (null == cash) {
|
|
|
|
|
cash = "0.0";
|
|
|
|
|
}
|
|
|
|
|
//用户可以申请退款的金额
|
|
|
|
|
Double userAbleReal = Double.parseDouble(cash);
|
|
|
|
|
|
|
|
|
|
//进行所有充值订单的退款合法性校验
|
|
|
|
@ -370,21 +371,34 @@ public class UserRefundServiceImpl {
|
|
|
|
|
//进行退款订单是否自动退款的判断
|
|
|
|
|
boolean autoRefund = false;
|
|
|
|
|
//产品管理配置+数据字典配置+退款金额<=退款阈值 才能自动退款
|
|
|
|
|
// select value from t_biz_parameter where state = 1 and code = 'automatic_refund.enabled'
|
|
|
|
|
// 系统当前值是0,即不开启自动退款
|
|
|
|
|
String autoRefundCheck = commonMapper.getAutoRefundCheck(Const.AUTO_REFUND_CHECK);
|
|
|
|
|
//自动退款阈值
|
|
|
|
|
// select * from t_dict where code='automaticRefundAmount'
|
|
|
|
|
// select dict_key from t_dict where code = 'automaticRefundAmount' and parent_id != 0 and is_deleted = 0 and is_sealed = 0 order by id desc limit 1
|
|
|
|
|
// 在数据库中就没有找到这个自动退款的阀值,原因不明
|
|
|
|
|
String autoRefundAmount = commonMapper.getAutoRefundAmount(Const.AUTOMATIC_REFUND_AMOUNT);
|
|
|
|
|
if (StringUtils.isNotEmpty(autoRefundCheck) && Const.AUTOMATIC_REFUND_OPEN.equals(autoRefundCheck) && StringUtils.isNotEmpty(autoRefundAmount)
|
|
|
|
|
if (StringUtils.isNotEmpty(autoRefundCheck) //自动退款标识存在
|
|
|
|
|
&& Const.AUTOMATIC_REFUND_OPEN.equals(autoRefundCheck)//而且自动退款标识为1(目前数据库中是0)
|
|
|
|
|
&& StringUtils.isNotEmpty(autoRefundAmount)//自动退款阀值不为空
|
|
|
|
|
//申请退款的金额小于自动退款阀值
|
|
|
|
|
&& BigDecimal.valueOf(userAbleReal).doubleValue() <= (new BigDecimal(autoRefundAmount)).doubleValue()) {
|
|
|
|
|
autoRefund = true;
|
|
|
|
|
autoRefund = true;//可以自动退款
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UserAccount uaInfo = userAccountMapper.selectAccount(userId);
|
|
|
|
|
//如果退款金额大于用户充值金额
|
|
|
|
|
//Q:为什么会出现这样的情况?
|
|
|
|
|
//t_user_account表中有一个字段ua_real_balance,表示用户可用退款金额
|
|
|
|
|
// 这里这样判断应该是怕因为程序BUG导致退款金额大于用户充值金额,对系统的一种保护策略
|
|
|
|
|
if (userAbleReal > uaInfo.getUa_real_balance()) {//用户充值金额
|
|
|
|
|
userAbleReal = uaInfo.getUa_real_balance();//退款金额不能大于用户充值金额
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//遍历每个退款申请
|
|
|
|
|
for (int i = 0; i < ids.length; i++) {
|
|
|
|
|
String idParam = ids[i];
|
|
|
|
|
if (userAbleReal <= 0) {
|
|
|
|
|
if (userAbleReal <= 0) {//userAbleReal在循环内应该是逐渐变小,当不再需要继续退款的时候,跳出循环
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
PayConfig payBean = payRepository.findByPridAndUserId(idParam, userId);
|
|
|
|
@ -398,11 +412,13 @@ public class UserRefundServiceImpl {
|
|
|
|
|
return OutData.ERROR("退款失败");
|
|
|
|
|
}
|
|
|
|
|
Double payMoney = payBean.getPayMoney();
|
|
|
|
|
|
|
|
|
|
//本笔充值金额大于用户可以退款的金额
|
|
|
|
|
if (payMoney > userAbleReal) {
|
|
|
|
|
//本次充值金额部分退掉就够了
|
|
|
|
|
refundFee = userAbleReal;
|
|
|
|
|
// payBean.setRefundMoney(String.valueOf(uaInfo.getUa_real_balance()));
|
|
|
|
|
} else {
|
|
|
|
|
//本次充值金额全部退掉
|
|
|
|
|
refundFee = payBean.getPayMoney();
|
|
|
|
|
//payBean.setRefundMoney(String.valueOf(payBean.getPayMoney()));
|
|
|
|
|
}
|
|
|
|
|