更改购买套餐包扣款

This commit is contained in:
1215525055@qq.com 2025-03-05 04:30:06 +08:00
parent d8f87d7806
commit 6ca0ab65a6
7 changed files with 94 additions and 44 deletions

View File

@ -94,7 +94,7 @@ public class AccountRechargeController extends DefaultBaseController {
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@PutMapping("update/{accountRechargeId}/{result}")
@CheckRequestBodyAnnotation
public SuccessResult update(@PathVariable("accountRechargeId") String accountRechargeId, @PathVariable("result") String result, @RequestBody AccountRechargeVO accountRechargeVO) {
public synchronized SuccessResult update(@PathVariable("accountRechargeId") String accountRechargeId, @PathVariable("result") String result, @RequestBody AccountRechargeVO accountRechargeVO) {
accountRechargeService.updateRecharge(accountRechargeId, result, accountRechargeVO);
return new SuccessResult();
}

View File

@ -17,6 +17,8 @@ public class AccountItemVO {
@ApiModelProperty(name = "accountId", value = "关联账户ID")
private String accountId;
@ApiModelProperty(name = "accountItemId", value = "关联账户流水ID")
private String accountItemId;
@ApiModelProperty(name = "accountBeforeMoney", value = "动账前余额")
@CheckNumberAnnotation(name = "动账前余额")
private Integer accountBeforeMoney;
@ -42,6 +44,13 @@ public class AccountItemVO {
private String checkStatus;
private Integer isPostpaid;
public String getAccountItemId() {
return accountItemId == null ? "" : accountItemId.trim();
}
public void setAccountItemId(String accountItemId) {
this.accountItemId = accountItemId;
}
public String getOrderType() {
return orderType == null ? "" : orderType.trim();

View File

@ -197,5 +197,7 @@ public interface IPackageOrderService {
void updateOrder(PackageOrderAppVO packageOrderVO);
Boolean updateOrder2(PackageOrderAppVO packageOrderVO);
void updateClose(String packageNo);
}

View File

@ -191,40 +191,66 @@ public class PackageOrderServiceImpl extends DefaultBaseService implements IPack
private IAccountItemService iAccountItemService;
@Override
public void updateOrder(PackageOrderAppVO packageOrderVO) {
public Boolean updateOrder2(PackageOrderAppVO packageOrderVO) {
PackageOrderDTO orderDTO = getByPackageNo(packageOrderVO.getAccountRechargeId());
if(orderDTO.getPackagePayStatus().equals("1")) { // 当前状态已经是已支付的不做操作
return;
return false;
}
PackageInfoAppDTO infoAppDTO = orderDTO.getPackageInfoAppDTO();
// 仅限购买1次的
if(infoAppDTO.equals("single")) {
List<PackageOrderDTO> list = list(packageOrderVO.getPackageInfoId(), orderDTO.getCreator());
if(infoAppDTO.getPackageMode().equals("single")) {
List<PackageOrderDTO> list = list(orderDTO.getPackageInfoId(), orderDTO.getCreator());
Boolean exists = false;
for(PackageOrderDTO dto : list) {
if(dto.getPackagePayStatus().equals("1")) {
exists = true;
}
}
if (!exists) {
Map<String, Object> params = super.getHashMap(2);
params.put("packageNo", packageOrderVO.getAccountRechargeId());// 关联支付
params.put("packageAccountItem", packageOrderVO.getPackageAccountItem()); // 关联扣款流水
params.put("packagePayStatus", "1"); // 已支付
params.put("packagePay", DateUtil.getTime()); // 支付时间
packageOrderDao.updatePay(params);
if (exists) {
return false;
}
}else{
/**
* 1. 更改到账时间 , 状态
*/
Map<String, Object> params = super.getHashMap(2);
params.put("packageNo", packageOrderVO.getAccountRechargeId());// 关联支付
params.put("packageAccountItem", packageOrderVO.getPackageAccountItem()); // 关联扣款流水
params.put("packagePayStatus", "1"); // 已支付
params.put("packagePay", DateUtil.getTime()); // 支付时间
packageOrderDao.updatePay(params);
}
/**
* 1. 更改到账时间 , 状态
*/
Map<String, Object> params = super.getHashMap(2);
params.put("packageNo", packageOrderVO.getAccountRechargeId());// 关联支付
params.put("packageAccountItem", packageOrderVO.getPackageAccountItem()); // 关联扣款流水
params.put("packagePayStatus", "1"); // 已支付
params.put("packagePay", DateUtil.getTime()); // 支付时间
packageOrderDao.updatePay(params);
return true;
}
@Override
public void updateOrder(PackageOrderAppVO packageOrderVO) {
PackageOrderDTO orderDTO = getByPackageNo(packageOrderVO.getAccountRechargeId());
if(orderDTO.getPackagePayStatus().equals("1")) { // 当前状态已经是已支付的不做操作
throw new SaveException("该套餐订单已购买");
}
PackageInfoAppDTO infoAppDTO = orderDTO.getPackageInfoAppDTO();
// 仅限购买1次的
if(infoAppDTO.getPackageMode().equals("single")) {
List<PackageOrderDTO> list = list(orderDTO.getPackageInfoId(), orderDTO.getCreator());
Boolean exists = false;
for(PackageOrderDTO dto : list) {
if(dto.getPackagePayStatus().equals("1")) {
exists = true;
}
}
if (exists) {
throw new SaveException("该套餐只允许购买一次");
}
}
/**
* 1. 更改到账时间 , 状态
*/
Map<String, Object> params = super.getHashMap(2);
params.put("packageNo", packageOrderVO.getAccountRechargeId());// 关联支付
params.put("packageAccountItem", packageOrderVO.getPackageAccountItem()); // 关联扣款流水
params.put("packagePayStatus", "1"); // 已支付
params.put("packagePay", DateUtil.getTime()); // 支付时间
packageOrderDao.updatePay(params);
}
@Autowired

View File

@ -56,7 +56,7 @@ public class AccountItemServiceImpl extends DefaultBaseService implements IAccou
@Override
public synchronized String saveReturnId(String token, AccountItemVO accountItemVO) {
String accountItemId = UUIDUtil.getUUID();
String accountItemId = StringUtils.isEmpty(accountItemVO.getAccountItemId()) ? UUIDUtil.getUUID() : accountItemVO.getAccountItemId();
/**
* 找出账户
*/

View File

@ -8,6 +8,7 @@ import cn.com.tenlion.operator.enums.RechargeTypeEnum;
import cn.com.tenlion.operator.enums.ReconciliationStatusEnum;
import cn.com.tenlion.operator.enums.ThirdPartyEnum;
import cn.com.tenlion.operator.pojo.bos.accountrecharge.AccountRechargeBO;
import cn.com.tenlion.operator.pojo.dtos.account.AccountDTO;
import cn.com.tenlion.operator.pojo.dtos.accountrecharge.AccountRechargeDTO;
import cn.com.tenlion.operator.pojo.dtos.accountrecharge.AccountRechargePayDTO;
import cn.com.tenlion.operator.pojo.dtos.accountrecharge.AccountRechargePayResultDTO;
@ -21,6 +22,7 @@ import cn.com.tenlion.operator.pojo.vos.packageorder.PackageOrderAppVO;
import cn.com.tenlion.operator.properties.SystemApiPathProperties;
import cn.com.tenlion.operator.service.packageinfo.IPackageInfoService;
import cn.com.tenlion.operator.service.packageorder.IPackageOrderService;
import cn.com.tenlion.operator.serviceother.operator.account.IAccountService;
import cn.com.tenlion.operator.serviceother.operator.accountitem.IAccountItemService;
import cn.com.tenlion.operator.serviceother.operator.accountrecharge.IAccountRechargeService;
import cn.com.tenlion.operator.service.user.info.IUserInfoService;
@ -397,6 +399,8 @@ public class AccountRechargeServiceImpl extends DefaultBaseService implements IA
private IPackageOrderService iPackageOrderService;
@Autowired
private IPackageInfoService iPackageInfoService;
@Autowired
private IAccountService iAccountService;
@Override
public synchronized void updateCheck(String accountRechargeId, RechargeCheckEnum check, String checkRemark, String accountItemId, String orderId, String successTime) {
@ -427,24 +431,33 @@ public class AccountRechargeServiceImpl extends DefaultBaseService implements IA
if(!StringUtils.isEmpty(dto.getPackageInfoId()) && dto.getReconciliationStatus().equals("1") && dto.getRechargeCheck().equals("2")) {
PackageInfoDTO packageInfoDTO = iPackageInfoService.get(dto.getPackageInfoId());
PackageOrderDTO orderDTO = iPackageOrderService.getByPackageNo(accountRechargeId);
/**
* 1. 创建流水
*/
AccountItemVO vo = new AccountItemVO();
vo.setType(2);
vo.setMode(2);
vo.setAccountId(orderDTO.getCreator());
vo.setOrderId(orderDTO.getPackageOrderId());
vo.setAccountMoney(packageInfoDTO.getPackageMoney());
vo.setDescription("购买" + (packageInfoDTO.getPackageType().equals("ALL") ? "全托管" : "写材料" ) + "套餐包 " + packageInfoDTO.getPackageCount() + " 件:" + packageInfoDTO.getPackageName());
String accountItemId1 = iAccountItemService.saveReturnId(vo);
PackageOrderAppVO appVO = new PackageOrderAppVO();
appVO.setPackageInfoId(dto.getPackageInfoId());
appVO.setUserId(dto.getCreator());
appVO.setAccountRechargeId(dto.getAccountRechargeId());
appVO.setPackageAccountItem(accountItemId1);
iPackageOrderService.updateOrder(appVO);
// 远程更改套餐包的付款到账状态
String accountItemId1 = UUIDUtil.getUUID();
// 获取用户余额 , 如果不够 , 则不购买
AccountDTO accountDTO = iAccountService.get(dto.getAccountId());
if(accountDTO.getAccountMoney() >= packageInfoDTO.getPackageMoney()) {
PackageOrderAppVO appVO = new PackageOrderAppVO();
appVO.setAccountRechargeId(dto.getAccountRechargeId());
appVO.setPackageAccountItem(accountItemId1);
Boolean result = iPackageOrderService.updateOrder2(appVO);
if(result) {
AccountDTO accountDTO2 = iAccountService.get(dto.getAccountId());
if(accountDTO2.getAccountMoney() >= packageInfoDTO.getPackageMoney()) {
/**
* 1. 创建流水
*/
AccountItemVO vo = new AccountItemVO();
vo.setAccountItemId(accountItemId1);
vo.setType(2);
vo.setMode(2);
vo.setAccountId(orderDTO.getCreator());
vo.setOrderId(orderDTO.getPackageOrderId());
vo.setAccountMoney(packageInfoDTO.getPackageMoney());
vo.setDescription("购买" + (packageInfoDTO.getPackageType().equals("ALL") ? "全托管" : "写材料" ) + "套餐包 " + packageInfoDTO.getPackageCount() + " 件:" + packageInfoDTO.getPackageName());
iAccountItemService.saveReturnId(vo);
}
}
}
}
// 绑定了套餐包 & 已对账 & 已关闭
if(!StringUtils.isEmpty(dto.getPackageInfoId()) && dto.getReconciliationStatus().equals("1") && dto.getRechargeCheck().equals("-1")) {

View File

@ -392,12 +392,12 @@
)
OR
(
t1.package_mode = 'single' AND t1.package_limit_users != '' AND t1.package_limit_users LIKE CONCAT('%', #{userId} ,'%') AND 1 > (SELECT COUNT(1) FROM operator_package_order t2 WHERE t1.package_info_id = t2.package_info_id AND t2.package_pay_status = '1' AND t2.creator = #{userId})
t1.package_mode = 'single' AND t1.package_limit_users != '' AND t1.package_limit_users LIKE CONCAT('%', #{userId} ,'%') AND 1 > (SELECT COUNT(1) FROM operator_package_order t2 WHERE t1.package_info_id = t2.package_info_id AND t2.package_pay_status = '1' AND t2.creator = #{userId})
)
OR
(
t1.package_mode = 'single' AND t1.package_limit_users = '' AND 1 > (SELECT COUNT(1) FROM operator_package_order t2 WHERE t1.package_info_id = t2.package_info_id AND t2.package_pay_status = '1' AND t2.creator = #{userId})
)
t1.package_mode = 'single' AND t1.package_limit_users = '' AND 1 > (SELECT COUNT(1) FROM operator_package_order t2 WHERE t1.package_info_id = t2.package_info_id AND t2.package_pay_status = '1' AND t2.creator = #{userId})
)
)
ORDER BY t1.package_order , t1.package_onlien_time DESC
</select>