diff --git a/src/main/java/cn/com/tenlion/operator/controller/api/accountrecharge/AccountRechargeController.java b/src/main/java/cn/com/tenlion/operator/controller/api/accountrecharge/AccountRechargeController.java index 0c7eb76..6035aa3 100644 --- a/src/main/java/cn/com/tenlion/operator/controller/api/accountrecharge/AccountRechargeController.java +++ b/src/main/java/cn/com/tenlion/operator/controller/api/accountrecharge/AccountRechargeController.java @@ -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(); } diff --git a/src/main/java/cn/com/tenlion/operator/pojo/vos/accountitem/AccountItemVO.java b/src/main/java/cn/com/tenlion/operator/pojo/vos/accountitem/AccountItemVO.java index 7e45c1e..4eb3b97 100644 --- a/src/main/java/cn/com/tenlion/operator/pojo/vos/accountitem/AccountItemVO.java +++ b/src/main/java/cn/com/tenlion/operator/pojo/vos/accountitem/AccountItemVO.java @@ -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(); diff --git a/src/main/java/cn/com/tenlion/operator/service/packageorder/IPackageOrderService.java b/src/main/java/cn/com/tenlion/operator/service/packageorder/IPackageOrderService.java index 4c79d26..297c19d 100644 --- a/src/main/java/cn/com/tenlion/operator/service/packageorder/IPackageOrderService.java +++ b/src/main/java/cn/com/tenlion/operator/service/packageorder/IPackageOrderService.java @@ -197,5 +197,7 @@ public interface IPackageOrderService { void updateOrder(PackageOrderAppVO packageOrderVO); + Boolean updateOrder2(PackageOrderAppVO packageOrderVO); + void updateClose(String packageNo); } \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/operator/service/packageorder/impl/PackageOrderServiceImpl.java b/src/main/java/cn/com/tenlion/operator/service/packageorder/impl/PackageOrderServiceImpl.java index 4e88d5c..705112c 100644 --- a/src/main/java/cn/com/tenlion/operator/service/packageorder/impl/PackageOrderServiceImpl.java +++ b/src/main/java/cn/com/tenlion/operator/service/packageorder/impl/PackageOrderServiceImpl.java @@ -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 list = list(packageOrderVO.getPackageInfoId(), orderDTO.getCreator()); + if(infoAppDTO.getPackageMode().equals("single")) { + List list = list(orderDTO.getPackageInfoId(), orderDTO.getCreator()); Boolean exists = false; for(PackageOrderDTO dto : list) { if(dto.getPackagePayStatus().equals("1")) { exists = true; } } - if (!exists) { - Map 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 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 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 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 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 diff --git a/src/main/java/cn/com/tenlion/operator/serviceother/operator/accountitem/impl/AccountItemServiceImpl.java b/src/main/java/cn/com/tenlion/operator/serviceother/operator/accountitem/impl/AccountItemServiceImpl.java index 420da63..65e4100 100644 --- a/src/main/java/cn/com/tenlion/operator/serviceother/operator/accountitem/impl/AccountItemServiceImpl.java +++ b/src/main/java/cn/com/tenlion/operator/serviceother/operator/accountitem/impl/AccountItemServiceImpl.java @@ -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(); /** * 找出账户 */ diff --git a/src/main/java/cn/com/tenlion/operator/serviceother/operator/accountrecharge/impl/AccountRechargeServiceImpl.java b/src/main/java/cn/com/tenlion/operator/serviceother/operator/accountrecharge/impl/AccountRechargeServiceImpl.java index 4758fcf..296ea2e 100644 --- a/src/main/java/cn/com/tenlion/operator/serviceother/operator/accountrecharge/impl/AccountRechargeServiceImpl.java +++ b/src/main/java/cn/com/tenlion/operator/serviceother/operator/accountrecharge/impl/AccountRechargeServiceImpl.java @@ -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")) { diff --git a/src/main/resources/mybatis/mapper/packageinfo/package-info-mapper.xml b/src/main/resources/mybatis/mapper/packageinfo/package-info-mapper.xml index 374b909..d31a698 100644 --- a/src/main/resources/mybatis/mapper/packageinfo/package-info-mapper.xml +++ b/src/main/resources/mybatis/mapper/packageinfo/package-info-mapper.xml @@ -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