mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 11:05:18 +08:00
计算余额扣除金额
This commit is contained in:
@@ -43,6 +43,7 @@ import com.jsowell.pile.mapper.PileBillingTemplateMapper;
|
||||
import com.jsowell.pile.service.*;
|
||||
import com.jsowell.pile.vo.base.PileInfoVO;
|
||||
import com.jsowell.pile.vo.uniapp.MemberVO;
|
||||
import com.jsowell.pile.vo.web.BalanceDeductionAmountVO;
|
||||
import com.jsowell.pile.vo.web.BillingTemplateVO;
|
||||
import com.jsowell.pile.vo.web.OrderListVO;
|
||||
import com.jsowell.pile.vo.web.PileDetailVO;
|
||||
@@ -192,6 +193,14 @@ public class SpringBootTestController {
|
||||
@Autowired
|
||||
private OrderPileOccupyService orderPileOccupyService;
|
||||
|
||||
@Test
|
||||
public void testCalculateTheBalanceDeductionAmount() {
|
||||
String memberId = "123456";
|
||||
BigDecimal amount = new BigDecimal("99.9");
|
||||
List<BalanceDeductionAmountVO> list = orderBasicInfoService.calculateTheBalanceDeductionAmount(memberId, amount);
|
||||
System.out.println(JSON.toJSONString(list));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateOccupyPileOrder() {
|
||||
String memberId = "67569684";
|
||||
|
||||
@@ -41,4 +41,6 @@ public interface MemberAdapayRecordMapper {
|
||||
List<MemberAdapayRecord> selectAdapayRecordList(@Param("memberId") String memberId, @Param("scenarioType") String scenarioType);
|
||||
|
||||
MemberAdapayRecord selectByPaymentId(@Param("paymentId") String paymentId);
|
||||
|
||||
List<MemberAdapayRecord> selectAvailableBalance(@Param("memberId") String memberId);
|
||||
}
|
||||
@@ -16,11 +16,13 @@ import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO;
|
||||
import com.jsowell.pile.vo.uniapp.OrderVO;
|
||||
import com.jsowell.pile.vo.uniapp.PersonPileConnectorSumInfoVO;
|
||||
import com.jsowell.pile.vo.uniapp.SendMessageVO;
|
||||
import com.jsowell.pile.vo.web.BalanceDeductionAmountVO;
|
||||
import com.jsowell.pile.vo.web.IndexOrderInfoVO;
|
||||
import com.jsowell.pile.vo.web.OrderListVO;
|
||||
import com.jsowell.pile.vo.web.OrderTotalDataVO;
|
||||
import com.jsowell.wxpay.response.WechatPayRefundResponse;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.text.ParseException;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
@@ -150,7 +152,9 @@ public interface IOrderBasicInfoService {
|
||||
|
||||
void tempOrderSplittingOperations(String merchantId, String tradeDate);
|
||||
|
||||
/**
|
||||
List<BalanceDeductionAmountVO> calculateTheBalanceDeductionAmount(String memberId, BigDecimal amount);
|
||||
|
||||
/**
|
||||
* 执行订单分账
|
||||
* @param orderBasicInfo
|
||||
* @param adapayMemberAccount
|
||||
|
||||
@@ -22,4 +22,10 @@ public interface MemberAdapayRecordService{
|
||||
List<MemberAdapayRecord> selectAdapayRecordList(String memberId, String scenarioType);
|
||||
|
||||
MemberAdapayRecord selectByPaymentId(String paymentId);
|
||||
|
||||
/**
|
||||
* 查询会员可用余额充值记录
|
||||
* @param memberId 会员id
|
||||
*/
|
||||
List<MemberAdapayRecord> selectAvailableBalance(String memberId);
|
||||
}
|
||||
|
||||
@@ -64,4 +64,14 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService{
|
||||
return memberAdapayRecordMapper.selectByPaymentId(paymentId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询会员可用余额充值记录
|
||||
* @param memberId 会员id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<MemberAdapayRecord> selectAvailableBalance(String memberId) {
|
||||
return memberAdapayRecordMapper.selectAvailableBalance(memberId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -187,6 +187,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
/**
|
||||
* 查询订单列表
|
||||
* 带权限过滤
|
||||
*
|
||||
* @param dto 订单
|
||||
* @return 订单
|
||||
*/
|
||||
@@ -206,6 +207,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
/**
|
||||
* 查询订单列表
|
||||
* 无权限过滤
|
||||
*
|
||||
* @param dto 订单
|
||||
* @return 订单
|
||||
*/
|
||||
@@ -430,6 +432,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 关闭启动失败订单
|
||||
*
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
*/
|
||||
@@ -572,6 +575,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 通过交易流水号查询订单信息
|
||||
*
|
||||
* @param transactionCode 交易流水号
|
||||
* @return 订单信息
|
||||
*/
|
||||
@@ -801,6 +805,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 解锁vin状态
|
||||
*
|
||||
* @param vinCode
|
||||
*/
|
||||
private void vinStatusUnlocked(String vinCode) {
|
||||
@@ -817,8 +822,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 订单退款逻辑
|
||||
*
|
||||
* @param orderBasicInfo 订单信息
|
||||
* @param residue 需退款金额
|
||||
* @param residue 需退款金额
|
||||
*/
|
||||
private void refundOrder(OrderBasicInfo orderBasicInfo, BigDecimal residue) {
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
@@ -1086,6 +1092,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 余额支付订单,使用余额支付转账
|
||||
*
|
||||
* @param orderBasicInfo
|
||||
* @param adapayMemberAccount
|
||||
* @return
|
||||
@@ -1118,6 +1125,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 余额支付订单,使用余额支付转账
|
||||
*
|
||||
* @param orderBasicInfo
|
||||
* @param adapayMemberAccount
|
||||
* @return
|
||||
@@ -1144,11 +1152,13 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
status = paymentConfirmResponse.getStatus();
|
||||
description = paymentConfirmResponse.getDescription();
|
||||
}
|
||||
|
||||
// 更新这笔交易的剩余金额
|
||||
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
|
||||
// 更新此笔交易单的消费金额 = 历史消费金额 + 本次消费金额
|
||||
record.setSpendAmt(record.getSpendAmt().add(deductionAmount));
|
||||
// 更新此笔交易单的剩余金额 = 历史剩余金额 - 本次消费金额
|
||||
record.setBalanceAmt(record.getBalanceAmt().subtract(deductionAmount));
|
||||
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额
|
||||
record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()));
|
||||
memberAdapayRecordService.updateByPrimaryKeySelective(record);
|
||||
}
|
||||
|
||||
@@ -1163,25 +1173,54 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 计算余额扣除金额
|
||||
*
|
||||
* @param memberId 会员id
|
||||
* @param amount 消费金额
|
||||
* @param amount 消费金额
|
||||
*/
|
||||
private List<BalanceDeductionAmountVO> calculateTheBalanceDeductionAmount(String memberId, BigDecimal amount) {
|
||||
@Override
|
||||
public List<BalanceDeductionAmountVO> calculateTheBalanceDeductionAmount(String memberId, BigDecimal amount) {
|
||||
List<BalanceDeductionAmountVO> resultList = Lists.newArrayList();
|
||||
// 查询会员的余额充值记录 按照充值时间正序
|
||||
List<MemberAdapayRecord> memberAdapayRecords = memberAdapayRecordService.selectAdapayRecordList(memberId, ScenarioEnum.BALANCE.getValue());
|
||||
List<MemberAdapayRecord> memberAdapayRecords = memberAdapayRecordService.selectAvailableBalance(memberId);
|
||||
|
||||
// 定义一个临时金额等于消费金额
|
||||
BigDecimal tempAmount = new BigDecimal(amount.toString());
|
||||
for (MemberAdapayRecord memberAdapayRecord : memberAdapayRecords) {
|
||||
// 取出一笔判断是否剩余金额够支付订单消费吗
|
||||
|
||||
}
|
||||
// 该笔支付剩余金额 取出一笔判断是否剩余金额够支付订单消费吗
|
||||
BigDecimal balanceAmt = memberAdapayRecord.getBalanceAmt();
|
||||
// 该笔支付扣除金额
|
||||
BigDecimal deductionAmount;
|
||||
|
||||
// 消费金额 - 剩余金额
|
||||
tempAmount = tempAmount.subtract(balanceAmt);
|
||||
if (tempAmount.compareTo(BigDecimal.ZERO) >= 0) {
|
||||
// 计算以后,大于等于0,说明这笔支付剩余金额需要扣完
|
||||
deductionAmount = balanceAmt;
|
||||
BalanceDeductionAmountVO build = BalanceDeductionAmountVO.builder()
|
||||
.memberId(memberId)
|
||||
.paymentId(memberAdapayRecord.getPaymentId())
|
||||
.deductionAmount(deductionAmount)
|
||||
.build();
|
||||
resultList.add(build);
|
||||
} else {
|
||||
// 如果小于0,则说明剩余的钱用不完,扣除金额等于消费金额,并结束循环
|
||||
deductionAmount = balanceAmt.add(tempAmount);
|
||||
BalanceDeductionAmountVO build = BalanceDeductionAmountVO.builder()
|
||||
.memberId(memberId)
|
||||
.paymentId(memberAdapayRecord.getPaymentId())
|
||||
.deductionAmount(deductionAmount)
|
||||
.build();
|
||||
resultList.add(build);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 延迟交易订单 交易确认
|
||||
* @param orderBasicInfo 订单
|
||||
*
|
||||
* @param orderBasicInfo 订单
|
||||
* @param adapayMemberAccount 结算账户
|
||||
* @throws BaseAdaPayException
|
||||
*/
|
||||
@@ -1243,6 +1282,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 批量查询订单
|
||||
*
|
||||
* @param orderCodeList
|
||||
* @return
|
||||
*/
|
||||
@@ -1418,6 +1458,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 生成订单编号
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private String generateNewOrderCode() {
|
||||
@@ -1433,6 +1474,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 保存异常订单到订单主表
|
||||
*
|
||||
* @param data 交易记录数据
|
||||
*/
|
||||
@Override
|
||||
@@ -2019,12 +2061,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(dto.getPileSn());
|
||||
PileStationWhitelist pileStationWhitelist = pileStationWhitelistService.queryWhitelistByMemberId(String.valueOf(pileBasicInfo.getStationId()), dto.getMemberId());
|
||||
|
||||
if(platformTesterVO != null && StringUtils.equals(Constants.ONE, platformTesterVO.getStatus())) {
|
||||
if (platformTesterVO != null && StringUtils.equals(Constants.ONE, platformTesterVO.getStatus())) {
|
||||
// 是平台测试员
|
||||
accountBalance = new BigDecimal("500");
|
||||
payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue();
|
||||
|
||||
}else if(pileStationWhitelist != null) {
|
||||
} else if (pileStationWhitelist != null) {
|
||||
// 站点白名单
|
||||
accountBalance = new BigDecimal("500");
|
||||
payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue();
|
||||
@@ -2268,6 +2310,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 汇付支付-订单退款处理逻辑
|
||||
*
|
||||
* @param dto
|
||||
*/
|
||||
@Override
|
||||
@@ -2345,6 +2388,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 计算站点订单报表
|
||||
*
|
||||
* @param stationId 站点id
|
||||
* @param tradeDate 交易日期
|
||||
*/
|
||||
@@ -2463,6 +2507,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
/**
|
||||
* 通过结算金额,计算客户到账金额和手续费
|
||||
*
|
||||
* @param settleAmount 需要拆分的结算金额
|
||||
* @return
|
||||
*/
|
||||
@@ -2709,7 +2754,8 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
if (response != null && !response.isEmpty()) {
|
||||
JSONObject expend = JSONObject.parseObject(response.get("expend").toString());
|
||||
JSONObject pay_info = expend.getJSONObject("pay_info");
|
||||
Map<String, Object> resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference<Map<String, Object>>() {});
|
||||
Map<String, Object> resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference<Map<String, Object>>() {
|
||||
});
|
||||
if (resultMap != null) {
|
||||
// 表示已经获取到支付参数了,后续再有支付请求就拒绝
|
||||
redisCache.setCacheObject(redisKey, resultMap, 15, TimeUnit.MINUTES);
|
||||
@@ -2836,7 +2882,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
// 如果是鉴权卡或者vin启动,不判断枪口状态
|
||||
if (!(StringUtils.equals(dto.getStartMode(), StartModeEnum.AUTH_CARD.getValue())
|
||||
|| StringUtils.equals(dto.getStartMode(), StartModeEnum.VIN_CODE.getValue()))) {
|
||||
|| StringUtils.equals(dto.getStartMode(), StartModeEnum.VIN_CODE.getValue()))) {
|
||||
|
||||
// 判断枪口状态
|
||||
if (!(StringUtils.equals(pileConnector.getConnectorStatus(), PileConnectorDataBaseStatusEnum.FREE.getValue())
|
||||
|
||||
@@ -470,4 +470,14 @@
|
||||
where del_flag = '0'
|
||||
and payment_id = #{paymentId,jdbcType=VARCHAR}
|
||||
</select>
|
||||
|
||||
<select id="selectAvailableBalance" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from member_adapay_record
|
||||
where del_flag = '0'
|
||||
and scenario_type = 'balance'
|
||||
and balance_amt > '0.00'
|
||||
and member_id = #{memberId,jdbcType=VARCHAR}
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user