From 0b33a3dcc3a7592c476d992e1b79a3bc837afb25 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期四, 21 八月 2025 13:42:56 +0800
Subject: [PATCH] 优化
---
server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java | 102 ++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 96 insertions(+), 6 deletions(-)
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
index 6c9445e..ef8c562 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -1,5 +1,9 @@
package com.doumee.service.business.impl;
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.config.wx.TransferToUser;
+import com.doumee.config.wx.WXPayUtility;
+import com.doumee.config.wx.WxMiniConfig;
import com.doumee.core.constants.Constants;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -22,10 +26,12 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
+import java.util.UUID;
/**
* 鎻愮幇鐢宠璁板綍Service瀹炵幇
@@ -171,10 +177,9 @@
* 鎻愮幇鐢宠
* @param withdrawalDTO
*/
-
@Override
@Transactional(rollbackFor = {BusinessException.class,Exception.class})
- public void applyWithdrawal(WithdrawalDTO withdrawalDTO){
+ public TransferToUser.TransferToUserResponse applyWithdrawal(WithdrawalDTO withdrawalDTO){
if(Objects.isNull(withdrawalDTO)
|| Objects.isNull(withdrawalDTO.getAmount())){
throw new BusinessException(ResponseStatus.BAD_REQUEST);
@@ -186,23 +191,108 @@
if(member.getAmount() < withdrawalDTO.getAmount()){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鍙彁鐜颁綑棰濅笉瓒炽��");
}
+ if(StringUtils.isEmpty(member.getName())){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇峰厛鍘荤淮鎶ょ湡瀹炲鍚嶅悗杩涜鎻愮幇鐢宠");
+ }
WithdrawalOrders withdrawalOrders = new WithdrawalOrders();
withdrawalOrders.setCreateTime(new Date());
withdrawalOrders.setMemberId(member.getId());
+ withdrawalOrders.setOutBillNo(UUID.randomUUID().toString().replace("-",""));
withdrawalOrders.setAmount(withdrawalDTO.getAmount());
withdrawalOrders.setStatus(Constants.ZERO);
withdrawalOrders.setType(Constants.ZERO);
+ withdrawalOrders.setDeleted(Constants.ZERO);
- //TODO 鍙戣捣鎻愮幇鐢宠
+ //鍙戣捣鎻愮幇鐢宠
+ TransferToUser.TransferToUserRequest transferToUserRequest = new TransferToUser.TransferToUserRequest();
+ transferToUserRequest.openid = member.getOpenid();
+ transferToUserRequest.outBillNo = withdrawalOrders.getOutBillNo();
+ transferToUserRequest.transferAmount = withdrawalDTO.getAmount();
+ transferToUserRequest.transferRemark = "鎻愮幇鐢宠";
+ try {
+ TransferToUser.TransferToUserResponse response = WxMiniConfig.transferToUser.run(transferToUserRequest,member.getName());
+ withdrawalOrders.setRemark(JSONObject.toJSONString(response));
+ if(response.state.name().equals("WAIT_USER_CONFIRM") || response.state.name().equals("ACCEPTED")){
+ withdrawalOrders.setWxExternalNo(response.transferBillNo);
+ }
+ withdrawalOrdersMapper.insert(withdrawalOrders);
+ //鏇存柊鐢ㄦ埛浣欓
+ memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT - " + withdrawalDTO.getAmount() ).eq(Member::getId,member.getId()));
+
+ //瀛樺偍娴佹按璁板綍
+ MemberRevenue memberRevenue = new MemberRevenue();
+ memberRevenue.setCreateTime(new Date());
+ memberRevenue.setMemberId(member.getId());
+ memberRevenue.setType(Constants.THREE);
+ memberRevenue.setOptType(-Constants.ONE);
+ memberRevenue.setBeforeAmount(member.getAmount());
+ memberRevenue.setAmount(withdrawalOrders.getAmount());
+ memberRevenue.setAfterAmount(member.getAmount() - withdrawalOrders.getAmount());
+ memberRevenue.setObjId(withdrawalOrders.getId());
+ memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()));
+ memberRevenue.setObjType(Constants.ONE);
+ memberRevenue.setDeleted(Constants.ZERO);
+ memberRevenue.setStatus(Constants.TWO);
+ memberRevenueMapper.insert(memberRevenue);
+ return response;
+ } catch (WXPayUtility.ApiException e) {
+ String message = JSONObject.parseObject(e.getBody()).getString("message");
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),message);
+ }
+ }
+ @Override
+ public void cancelTransfer(TransferToUser.CancelTransferRequest request){
+ if(Objects.isNull(request)
+ || StringUtils.isEmpty(request.outBillNo)){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ WithdrawalOrders withdrawalOrders = withdrawalOrdersMapper.selectOne(new QueryWrapper<WithdrawalOrders>().lambda().eq(WithdrawalOrders::getOutBillNo,request.outBillNo).last("limit 1"));
+ if(Objects.isNull(withdrawalOrders)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ Member member = memberMapper.selectById(withdrawalOrders.getMemberId());
+ if(Objects.isNull(member)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ try {
+ TransferToUser.CancelTransferResponse response = WxMiniConfig.transferToUser.cancelRun(request);
+ if(response.state.equals("CANCELING")){
+ //鏍囪鎻愮幇澶辫触 鍔犲洖瀵瑰簲鐨勬彁鐜伴噾棰�
+ withdrawalOrdersMapper.update(new UpdateWrapper<WithdrawalOrders>()
+ .lambda().set(WithdrawalOrders::getStatus,Constants.TWO)
+ .eq(WithdrawalOrders::getId,withdrawalOrders.getId()));
- //鏇存柊鐢ㄦ埛浣欓
+ memberRevenueMapper.update(new UpdateWrapper<MemberRevenue>().lambda().set(MemberRevenue::getStatus,Constants.ONE)
+ .set(MemberRevenue::getUpdateTime,new Date())
+ .eq(MemberRevenue::getObjId,withdrawalOrders.getId()))
+ ;
+ //鏇存柊鐢ㄦ埛浣欓
+ memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT + " + withdrawalOrders.getAmount() ).eq(Member::getId,withdrawalOrders.getMemberId()));
- //瀛樺偍娴佹按璁板綍
+ //瀛樺偍娴佹按璁板綍
+ MemberRevenue memberRevenue = new MemberRevenue();
+ memberRevenue.setCreateTime(new Date());
+ memberRevenue.setMemberId(withdrawalOrders.getMemberId());
+ memberRevenue.setType(Constants.FOUR);
+ memberRevenue.setOptType(Constants.ONE);
+ memberRevenue.setBeforeAmount(member.getAmount());
+ memberRevenue.setAmount(withdrawalOrders.getAmount());
+ memberRevenue.setAfterAmount(member.getAmount() + withdrawalOrders.getAmount());
+ memberRevenue.setObjId(withdrawalOrders.getId());
+ memberRevenue.setObjType(Constants.ONE);
+ memberRevenue.setDeleted(Constants.ZERO);
+ memberRevenue.setStatus(Constants.ZERO);
+ memberRevenueMapper.insert(memberRevenue);
-
+ }
+ System.out.println(JSONObject.toJSONString(response));
+ } catch (WXPayUtility.ApiException e) {
+ String message = JSONObject.parseObject(e.getBody()).getString("message");
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),message);
+ }
}
--
Gitblit v1.9.3