diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAccountDetail.java b/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAccountDetail.java index e611f79..57447b8 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAccountDetail.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAccountDetail.java @@ -35,6 +35,10 @@ public class ClientAccountDetail { @TableField("client_id") private String clientId; + @ApiModelProperty("订单编号") + @TableField("order_number") + private String orderNumber; + @ApiModelProperty("变更类型") @TableField("change_type") private BalanceChangeTypeEnum changeType; diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IClientService.java b/nxhs-service/src/main/java/cc/yunxi/service/IClientService.java index 41f5771..a248eae 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IClientService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IClientService.java @@ -2,6 +2,7 @@ package cc.yunxi.service; import cc.yunxi.domain.po.Client; import cc.yunxi.domain.po.ClientAccountDetail; +import cc.yunxi.domain.po.RecycleOrder; import cc.yunxi.domain.po.Recycler; import cc.yunxi.domain.query.ClientAccountQuery; import cc.yunxi.domain.query.ClientQuery; @@ -71,13 +72,12 @@ public interface IClientService extends IService { /** - * 通过id|openId更新散户余额 - * @param id - * @param openId + * 散户收入 + * @param clientId * @param amount - * @param changeTypeEnum + * @param orderNo */ - void changeBalanceById(String id, String openId, BigDecimal amount, BalanceChangeTypeEnum changeTypeEnum); + void addBalance(String clientId, BigDecimal amount, String orderNo); /** diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientServiceImpl.java index b6a9111..e315fd6 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientServiceImpl.java @@ -124,42 +124,6 @@ public class ClientServiceImpl extends ServiceImpl impleme this.updateById(client); } - @Override // 金额交易! - public void changeBalanceById(String id, String openId, BigDecimal amount, BalanceChangeTypeEnum changeTypeEnum) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(Client::getId, id).or().eq(Client::getWxOpenid, openId); - wrapper.last("for update"); - Client client = this.getOne(wrapper); - BigDecimal balance = client.getBanlance(); - String remark; - LocalDateTime now = LocalDateTime.now(); - if (changeTypeEnum.equals(BalanceChangeTypeEnum.INCOME)) { // 收入 - balance = balance.add(amount); - remark = "废品回收结算,收入" + amount + "元"; - } else { // 支出/提现 - if (balance.compareTo(amount) < 0) { - throw new BizIllegalException("余额不足"); - } - balance = balance.subtract(amount); - remark = "微信提现" + amount + "元"; - } - // 更新余额 - client.setBanlance(balance); - client.setUpdateTime(now); - this.updateById(client); - - // 添加流水记录 - ClientAccountDetail accountDetail = new ClientAccountDetail(); - accountDetail.setClientId(client.getId()); - accountDetail.setAmount(amount); - accountDetail.setChangeType(changeTypeEnum); - accountDetail.setBanlance(balance); - accountDetail.setRemark(remark); - accountDetail.setCreatorTime(now); - accountDetailMapper.insert(accountDetail); - } - - @Override public Page queryAccountStatementByPage(ClientAccountQuery clientAccountQuery) { LambdaQueryWrapperX wrapperX = new LambdaQueryWrapperX<>(); @@ -172,11 +136,17 @@ public class ClientServiceImpl extends ServiceImpl impleme } + @Override + public void addBalance(String clientId, BigDecimal amount, String orderNo) { + this.changeBalance(clientId, amount, orderNo, BalanceChangeTypeEnum.INCOME); + } + + @Override @Transactional(rollbackFor = Exception.class) public void cashBalance(String openId, Integer amount) throws Exception { // 模拟提现成功 - this.changeBalanceById(null, openId, new BigDecimal(amount), BalanceChangeTypeEnum.CASH_OUT); + this.changeBalance(openId, new BigDecimal(amount), null, BalanceChangeTypeEnum.CASH_OUT); /* BatchTransferModel batchTransferModel = new BatchTransferModel() .setAppid(wxPayV3Properties.getAppId()) .setOut_batch_no(PayKit.generateStr()) @@ -246,7 +216,44 @@ public class ClientServiceImpl extends ServiceImpl impleme // System.out.println("签名算法:" + certificate.getSigAlgName()); // System.out.println("签名:" + certificate.getSignature().toString()); } - System.out.println("serialNo:" + serialNo); +// System.out.println("serialNo:" + serialNo); return serialNo; } + + + // 统一金额交易 + private void changeBalance(String keyId, BigDecimal amount, String orderNo, BalanceChangeTypeEnum changeTypeEnum) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Client::getId, keyId).or().eq(Client::getWxOpenid, keyId); + wrapper.last("for update"); + Client client = this.getOne(wrapper); + BigDecimal balance = client.getBanlance(); + String remark; + LocalDateTime now = LocalDateTime.now(); + if (changeTypeEnum.equals(BalanceChangeTypeEnum.INCOME)) { // 收入 + balance = balance.add(amount); + remark = "废品回收结算,收入" + amount + "元"; + } else { // 支出/提现 + if (balance.compareTo(amount) < 0) { + throw new BizIllegalException("余额不足"); + } + balance = balance.subtract(amount); + remark = "微信提现" + amount + "元"; + } + // 更新余额 + client.setBanlance(balance); + client.setUpdateTime(now); + this.updateById(client); + + // 添加流水记录 + ClientAccountDetail accountDetail = new ClientAccountDetail(); + accountDetail.setClientId(client.getId()); + accountDetail.setAmount(amount); + accountDetail.setChangeType(changeTypeEnum); + accountDetail.setBanlance(balance); + accountDetail.setRemark(remark); + accountDetail.setOrderNumber(orderNo); + accountDetail.setCreatorTime(now); + accountDetailMapper.insert(accountDetail); + } } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/FileServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/FileServiceImpl.java index 2501998..0692985 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/FileServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/FileServiceImpl.java @@ -144,7 +144,7 @@ public class FileServiceImpl extends ServiceImpl implements IF // uploadRespVO.setUrl(getUrl(URI)); uploadRespVO.setUrl(URI); // 判断文件来源 - String userId = UserContext.getUser().getId(); + String userId = ObjectUtil.isNotEmpty(UserContext.getUser()) ? UserContext.getUser().getId() : ""; Integer source = StrUtil.isNotEmpty(userId) ? 1 : 2; // 入库操作 fileInfo = new File().setUrl(URI) diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java index 79418e4..0a4c3e4 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java @@ -213,12 +213,6 @@ public class RecycleOrderServiceImpl extends ServiceImpl recycleOrderProductVOList = orderFinishVO.getOrderDetails(); @@ -232,15 +226,26 @@ public class RecycleOrderServiceImpl extends ServiceImpl recycleOrderProducts = BeanUtils.copyList(recycleOrderProductVOList, RecycleOrderProduct.class); this.recycleOrderProductService.updateOrderProducts(recycleOrderProducts); - // 订单结算 异步? todo + String clientId = recycleOrder.getClientId(); + String orderNumber = recycleOrder.getOrderNumber(); + recycleOrder = BeanUtils.copyBean(orderFinishVO, RecycleOrder.class); + recycleOrder.setOrderStatus(OrderStatusEnum.FINISHED); + recycleOrder.setCompleteTime(LocalDateTime.now()); + log.info("recycleOrder orderFinishVO: {}", recycleOrder); + + // 订单总金额计算 BigDecimal totalAmount = new BigDecimal("0.00"); for (RecycleOrderProduct recycleOrderProduct : recycleOrderProducts) { BigDecimal weight = BigDecimal.valueOf(recycleOrderProduct.getProductActualWeight()); BigDecimal price = recycleOrderProduct.getActualRecoveryPrice(); totalAmount = totalAmount.add(weight.multiply(price)); } - // 增加收入余额 - clientService.changeBalanceById(clientId, null, totalAmount, BalanceChangeTypeEnum.INCOME); + + recycleOrder.setOrderAmount(totalAmount); + this.updateById(recycleOrder); + + // 增加收入余额 异步? todo + clientService.addBalance(clientId, totalAmount, orderNumber); }