From 59b1f0e9967902aa10f5e017d5a0bdfd1b60c9ea Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期三, 29 四月 2026 09:42:45 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 150 insertions(+), 16 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 83e7959..c6e4822 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
@@ -19,6 +19,8 @@
import com.doumee.dao.business.model.ShopInfo;
import com.doumee.dao.business.model.WithdrawalOrders;
import com.doumee.dao.dto.WithdrawalApproveDTO;
+import com.doumee.config.alipay.AlipayFundTransUniTransfer;
+import com.doumee.dao.dto.AlipayTransferDTO;
import com.doumee.dao.dto.WithdrawalDTO;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.SystemUser;
@@ -27,6 +29,7 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
@@ -179,13 +182,17 @@
if (pageWrap.getModel().getCreateEndTime() != null) {
queryWrapper.le(WithdrawalOrders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime()));
}
- for (PageWrap.SortData sortData : pageWrap.getSorts()) {
- if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
- queryWrapper.orderByDesc(sortData.getProperty());
- } else {
- queryWrapper.orderByAsc(sortData.getProperty());
- }
+ // 闂ㄥ簵绔細鎸夐棬搴楀悕绉版垨鑱旂郴浜烘ā绯婃悳绱�
+ if (StringUtils.isNotBlank(pageWrap.getModel().getShopName())) {
+ queryWrapper.and(i -> i.like(ShopInfo::getName, pageWrap.getModel().getShopName())
+ .or().like(ShopInfo::getLinkName, pageWrap.getModel().getShopName()));
}
+ // 鍙告満绔細鎸夊徃鏈哄鍚嶆ā绯婃悳绱�
+ if (StringUtils.isNotBlank(pageWrap.getModel().getMemberName())) {
+ queryWrapper.like(DriverInfo::getName, pageWrap.getModel().getMemberName());
+ }
+
+ queryWrapper.orderByDesc(WithdrawalOrders::getId);
return PageData.from(withdrawalOrdersMapper.selectJoinPage(page, WithdrawalOrders.class, queryWrapper));
}
@@ -205,7 +212,10 @@
queryWrapper.select("IFNULL(SUM(amount), 0) as amount");
Utils.MP.blankToNull(pageWrap.getModel());
queryWrapper.lambda().eq(WithdrawalOrders::getDeleted, Constants.ZERO);
- queryWrapper.lambda().in(WithdrawalOrders::getStatus, Arrays.asList(Constants.ZERO, Constants.ONE));
+ queryWrapper.lambda().eq(WithdrawalOrders::getStatus, Constants.ONE);
+ if (pageWrap.getModel().getMemberType() != null) {
+ queryWrapper.lambda().eq(WithdrawalOrders::getMemberType, pageWrap.getModel().getMemberType());
+ }
if (pageWrap.getModel().getOutBillNo() != null) {
queryWrapper.lambda().like(WithdrawalOrders::getOutBillNo, pageWrap.getModel().getOutBillNo());
}
@@ -229,6 +239,7 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public void approve(WithdrawalApproveDTO dto) {
if (dto == null || dto.getId() == null || dto.getStatus() == null) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀹℃壒鍙傛暟涓嶅畬鏁�");
@@ -249,17 +260,115 @@
Integer currentUserId = getCurrentUserId();
Date now = new Date();
+ // 瀹℃壒閫氳繃鏃讹紝璋冪敤鏀粯瀹濇墦娆�
+ Integer finalStatus = dto.getStatus();
+ String doneInfo = null;
+ if (Constants.ONE.equals(dto.getStatus())) {
+ String aliAccount = order.getAliAccount();
+ String aliName = order.getAliName();
+
+ // 浠庡徃鏈烘垨闂ㄥ簵鑾峰彇鏀粯瀹濊处鎴峰拰瀹炲悕濮撳悕
+ if (StringUtils.isBlank(aliAccount)) {
+ if (Constants.equalsInteger(order.getMemberType(), Constants.ONE)) {
+ DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, order.getMemberId())
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driver != null) {
+ aliAccount = driver.getAliAccount();
+ aliName = driver.getAliName();
+ }
+ } else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
+ ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+ .eq(ShopInfo::getId, order.getMemberId())
+ .eq(ShopInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (shop != null) {
+ aliAccount = shop.getAliAccount();
+ aliName = shop.getAliName();
+ }
+ }
+ } else {
+ // 浠� WithdrawalOrders 鐨� aliAccount 鏌ュ搴斿鍚�
+ if (Constants.equalsInteger(order.getMemberType(), Constants.ONE)) {
+ DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, order.getMemberId())
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driver != null) {
+ aliName = driver.getAliName();
+ }
+ } else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
+ ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+ .eq(ShopInfo::getId, order.getMemberId())
+ .eq(ShopInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (shop != null) {
+ aliName = shop.getAliName();
+ }
+ }
+ }
+
+ if (StringUtils.isBlank(aliAccount)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏀粯瀹濇彁鐜拌处鎴锋湭閰嶇疆锛屾棤娉曟墦娆�");
+ }
+
+ // 閲戦杞崲锛氬垎 鈫� 鍏�
+ Long amountFen = order.getAmount() != null ? order.getAmount() : 0L;
+ BigDecimal transAmount = new BigDecimal(amountFen).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+
+ AlipayTransferDTO transferDTO = new AlipayTransferDTO();
+ transferDTO.setOutBizNo(order.getOutBillNo());
+ transferDTO.setTransAmount(transAmount);
+ transferDTO.setPayeeAccount(aliAccount);
+ transferDTO.setPayeeName(aliName);
+ transferDTO.setRemark("鎻愮幇鎵撴");
+
+ String alipayOrderId;
+ try {
+ alipayOrderId = AlipayFundTransUniTransfer.transfer(transferDTO);
+ } catch (BusinessException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏀粯瀹濇墦娆惧け璐ワ細" + e.getMessage());
+ }
+ doneInfo = "鏀粯瀹濊浆璐﹀崟鍙凤細" + alipayOrderId;
+ }
+
WithdrawalOrders update = new WithdrawalOrders();
update.setId(dto.getId());
- update.setStatus(dto.getStatus());
+ update.setStatus(finalStatus);
update.setUserId(currentUserId);
update.setApproveTime(now);
update.setApproveRemark(dto.getApproveRemark());
update.setUpdateTime(now);
+ if (Constants.ONE.equals(finalStatus)) {
+ update.setDoneTime(now);
+ update.setDoneInfo(doneInfo);
+ } else if (doneInfo != null) {
+ update.setDoneTime(now);
+ update.setDoneInfo(doneInfo);
+ }
withdrawalOrdersMapper.updateById(update);
- // 椹冲洖鏃堕��鍥炰綑棰�
- if (Constants.TWO.equals(dto.getStatus())) {
+ // 鏇存柊鍏宠仈鐨勬彁鐜� Revenue 璁板綍鐘舵��
+ // 閫氳繃 objId + objType=1(鎻愮幇涓氬姟) + type=1(鎻愮幇鏀嚭) 鎵惧埌鍘熷鎻愮幇鏀嚭璁板綍
+ Revenue withdrawalRevenue = revenueMapper.selectOne(new QueryWrapper<Revenue>().lambda()
+ .eq(Revenue::getObjId, order.getId())
+ .eq(Revenue::getObjType, Constants.ONE)
+ .eq(Revenue::getType, Constants.ONE)
+ .eq(Revenue::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (withdrawalRevenue != null) {
+ Integer revenueStatus = Constants.ONE.equals(finalStatus) ? Constants.ZERO : Constants.ONE; // 閫氳繃=0鎴愬姛, 椹冲洖=1澶辫触
+ revenueMapper.update(new UpdateWrapper<Revenue>().lambda()
+ .set(Revenue::getStatus, revenueStatus)
+ .set(Revenue::getUpdateTime, now)
+ .eq(Revenue::getId, withdrawalRevenue.getId()));
+ }
+
+ // 椹冲洖鎴栨墦娆惧け璐ユ椂閫�鍥炰綑棰�
+ if (Constants.TWO.equals(finalStatus)) {
Long amountFen = order.getAmount() != null ? order.getAmount() : 0L;
if (amountFen > 0 && order.getMemberId() != null) {
if (Constants.equalsInteger(order.getMemberType(), Constants.ONE)) {
@@ -276,7 +385,7 @@
} else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
// 闂ㄥ簵锛氶�氳繃 memberId 鏌� ShopInfo锛岄��鍥� balance
ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
- .eq(ShopInfo::getRegionMemberId, order.getMemberId())
+ .eq(ShopInfo::getId, order.getMemberId())
.eq(ShopInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (shop != null) {
@@ -295,7 +404,8 @@
revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
revenue.setObjId(order.getId());
revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
- revenue.setStatus(Constants.ZERO);
+ revenue.setOrderNo(order.getOutBillNo());
+ revenue.setStatus(Constants.ZERO); // 0=鎴愬姛
revenue.setDeleted(Constants.ZERO);
revenue.setCreateTime(now);
revenueMapper.insert(revenue);
@@ -375,11 +485,22 @@
order.setType(Constants.ZERO);
order.setOutBillNo(billNo);
order.setAliAccount(dto.getAliAccount());
+ order.setAliName(dto.getAliName());
order.setDeleted(Constants.ZERO);
order.setCreateTime(now);
order.setUpdateTime(now);
order.setCreateUser(memberId);
withdrawalOrdersMapper.insert(order);
+ // 鏀粯瀹濊处鎴锋垨濮撳悕鏈夊彉鍖栨椂鏇存柊鍙告満淇℃伅
+ boolean aliChanged = !dto.getAliAccount().equals(driver.getAliAccount())
+ || (dto.getAliName() != null && !dto.getAliName().equals(driver.getAliName()));
+ if (aliChanged) {
+ DriverInfo update = new DriverInfo();
+ update.setId(driver.getId());
+ update.setAliAccount(dto.getAliAccount());
+ update.setAliName(dto.getAliName());
+ driverInfoMapper.updateById(update);
+ }
// 鍒涘缓鏀嚭 Revenue 璁板綍
Revenue revenue = new Revenue();
revenue.setMemberId(memberId);
@@ -390,7 +511,8 @@
revenue.setVaildStatus(Constants.ONE);
revenue.setObjId(order.getId());
revenue.setObjType(Constants.ONE);
- revenue.setStatus(Constants.ZERO);
+ revenue.setOrderNo(billNo);
+ revenue.setStatus(Constants.TWO); // 2=澶勭悊涓�
revenue.setDeleted(Constants.ZERO);
revenue.setCreateTime(now);
revenueMapper.insert(revenue);
@@ -418,21 +540,32 @@
.eq(ShopInfo::getId, shopId));
// 鍒涘缓鎻愮幇璁板綍
WithdrawalOrders order = new WithdrawalOrders();
- order.setMemberId(shop.getRegionMemberId());
+ order.setMemberId(shop.getId());
order.setMemberType(Constants.TWO);
order.setAmount(amountFen);
order.setStatus(Constants.ZERO);
order.setType(Constants.ZERO);
order.setOutBillNo(billNo);
order.setAliAccount(dto.getAliAccount());
+ order.setAliName(dto.getAliName());
order.setDeleted(Constants.ZERO);
order.setCreateTime(now);
order.setUpdateTime(now);
order.setCreateUser(shop.getRegionMemberId());
withdrawalOrdersMapper.insert(order);
+ // 鏀粯瀹濊处鎴锋垨濮撳悕鏈夊彉鍖栨椂鏇存柊闂ㄥ簵淇℃伅
+ boolean aliChanged = !dto.getAliAccount().equals(shop.getAliAccount())
+ || (dto.getAliName() != null && !dto.getAliName().equals(shop.getAliName()));
+ if (aliChanged) {
+ ShopInfo update = new ShopInfo();
+ update.setId(shopId);
+ update.setAliAccount(dto.getAliAccount());
+ update.setAliName(dto.getAliName());
+ shopInfoMapper.updateById(update);
+ }
// 鍒涘缓鏀嚭 Revenue 璁板綍
Revenue revenue = new Revenue();
- revenue.setMemberId(shop.getRegionMemberId());
+ revenue.setMemberId(shop.getId());
revenue.setMemberType(Constants.TWO);
revenue.setType(Constants.ONE); // 1=鎻愮幇鏀嚭
revenue.setOptType(-Constants.ONE); // -1=鏀嚭
@@ -440,7 +573,8 @@
revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
revenue.setObjId(order.getId());
revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
- revenue.setStatus(Constants.ZERO);
+ revenue.setOrderNo(billNo);
+ revenue.setStatus(Constants.TWO); // 2=澶勭悊涓�
revenue.setDeleted(Constants.ZERO);
revenue.setCreateTime(now);
revenueMapper.insert(revenue);
--
Gitblit v1.9.3