From ab9cd2c82bd64de8e33510db1d1e78a5b3b4de70 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 20 四月 2026 19:37:20 +0800
Subject: [PATCH] 代码生成
---
server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java | 274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 271 insertions(+), 3 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 2602c77..0d0b4c4 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
@@ -11,12 +11,17 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.DriverInfoMapper;
+import com.doumee.dao.business.RevenueMapper;
import com.doumee.dao.business.ShopInfoMapper;
import com.doumee.dao.business.WithdrawalOrdersMapper;
import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.business.model.Revenue;
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;
import com.doumee.service.business.WithdrawalOrdersService;
@@ -24,11 +29,15 @@
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;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
+import java.util.concurrent.ThreadLocalRandom;
/**
* 鎻愮幇鐢宠璁板綍Service瀹炵幇
@@ -49,6 +58,9 @@
@Autowired
private DriverInfoMapper driverInfoMapper;
+
+ @Autowired
+ private RevenueMapper revenueMapper;
@Override
public Integer create(WithdrawalOrders withdrawalOrders) {
@@ -220,6 +232,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(), "瀹℃壒鍙傛暟涓嶅畬鏁�");
@@ -238,15 +251,159 @@
// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
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 = null;
+
+ // 浠庡徃鏈烘垨闂ㄥ簵鑾峰彇鏀粯瀹濊处鎴峰拰瀹炲悕濮撳悕
+ 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::getRegionMemberId, 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::getRegionMemberId, 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(new Date());
+ update.setApproveTime(now);
update.setApproveRemark(dto.getApproveRemark());
- update.setUpdateTime(new Date());
+ 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);
+
+ // 鏇存柊鍏宠仈鐨勬彁鐜� 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)) {
+ // 鍙告満锛氶�氳繃 memberId 鏌� DriverInfo锛岄��鍥� balance
+ DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, order.getMemberId())
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driver != null) {
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amountFen)
+ .eq(DriverInfo::getId, driver.getId()));
+ }
+ } 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::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (shop != null) {
+ shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda()
+ .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amountFen)
+ .eq(ShopInfo::getId, shop.getId()));
+ }
+ }
+ // 鍒涘缓閫�鍥� Revenue 璁板綍
+ Revenue revenue = new Revenue();
+ revenue.setMemberId(order.getMemberId());
+ revenue.setMemberType(order.getMemberType());
+ revenue.setType(Constants.TWO); // 2=鎻愮幇閫�鍥�
+ revenue.setOptType(Constants.ONE); // 1=鏀跺叆
+ revenue.setAmount(amountFen);
+ revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
+ revenue.setObjId(order.getId());
+ revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
+ revenue.setOrderNo(order.getOutBillNo());
+ revenue.setStatus(Constants.ZERO); // 0=鎴愬姛
+ revenue.setDeleted(Constants.ZERO);
+ revenue.setCreateTime(now);
+ revenueMapper.insert(revenue);
+ }
+ }
}
private Integer getCurrentUserId() {
@@ -289,4 +446,115 @@
}
}
+ @Override
+ public void applyDriverWithdrawal(WithdrawalDTO dto, Integer memberId) {
+ DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driver == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+ long amountFen = dto.getAmount().multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
+ long balance = driver.getBalance() != null ? driver.getBalance() : 0L;
+ if (amountFen <= 0) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦蹇呴』澶т簬0");
+ }
+ if (amountFen > balance) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦涓嶈兘瓒呰繃鍙敤浣欓");
+ }
+ String billNo = generateBillNo();
+ Date now = new Date();
+ // 鎵e噺鍙告満浣欓
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .setSql(" BALANCE = IFNULL(BALANCE, 0) - " + amountFen)
+ .eq(DriverInfo::getId, driver.getId()));
+ // 鍒涘缓鎻愮幇璁板綍
+ WithdrawalOrders order = new WithdrawalOrders();
+ order.setMemberId(memberId);
+ order.setMemberType(Constants.ONE);
+ order.setAmount(amountFen);
+ order.setStatus(Constants.ZERO);
+ order.setType(Constants.ZERO);
+ order.setOutBillNo(billNo);
+ order.setAliAccount(dto.getAliAccount());
+ order.setDeleted(Constants.ZERO);
+ order.setCreateTime(now);
+ order.setUpdateTime(now);
+ order.setCreateUser(memberId);
+ withdrawalOrdersMapper.insert(order);
+ // 鍒涘缓鏀嚭 Revenue 璁板綍
+ Revenue revenue = new Revenue();
+ revenue.setMemberId(memberId);
+ revenue.setMemberType(Constants.ONE);
+ revenue.setType(Constants.ONE);
+ revenue.setOptType(-Constants.ONE);
+ revenue.setAmount(amountFen);
+ revenue.setVaildStatus(Constants.ONE);
+ revenue.setObjId(order.getId());
+ revenue.setObjType(Constants.ONE);
+ revenue.setOrderNo(billNo);
+ revenue.setStatus(Constants.TWO); // 2=澶勭悊涓�
+ revenue.setDeleted(Constants.ZERO);
+ revenue.setCreateTime(now);
+ revenueMapper.insert(revenue);
+ }
+
+ @Override
+ public void applyShopWithdrawal(WithdrawalDTO dto, Integer shopId) {
+ ShopInfo shop = shopInfoMapper.selectById(shopId);
+ if (shop == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ long amountFen = dto.getAmount().multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
+ long balance = shop.getBalance() != null ? shop.getBalance() : 0L;
+ if (amountFen <= 0) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦蹇呴』澶т簬0");
+ }
+ if (amountFen > balance) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦涓嶈兘瓒呰繃鍙敤浣欓");
+ }
+ String billNo = generateBillNo();
+ Date now = new Date();
+ // 鎵e噺闂ㄥ簵浣欓
+ shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda()
+ .setSql(" BALANCE = IFNULL(BALANCE, 0) - " + amountFen)
+ .eq(ShopInfo::getId, shopId));
+ // 鍒涘缓鎻愮幇璁板綍
+ WithdrawalOrders order = new WithdrawalOrders();
+ order.setMemberId(shop.getRegionMemberId());
+ order.setMemberType(Constants.TWO);
+ order.setAmount(amountFen);
+ order.setStatus(Constants.ZERO);
+ order.setType(Constants.ZERO);
+ order.setOutBillNo(billNo);
+ order.setAliAccount(dto.getAliAccount());
+ order.setDeleted(Constants.ZERO);
+ order.setCreateTime(now);
+ order.setUpdateTime(now);
+ order.setCreateUser(shop.getRegionMemberId());
+ withdrawalOrdersMapper.insert(order);
+ // 鍒涘缓鏀嚭 Revenue 璁板綍
+ Revenue revenue = new Revenue();
+ revenue.setMemberId(shop.getRegionMemberId());
+ revenue.setMemberType(Constants.TWO);
+ revenue.setType(Constants.ONE); // 1=鎻愮幇鏀嚭
+ revenue.setOptType(-Constants.ONE); // -1=鏀嚭
+ revenue.setAmount(amountFen);
+ revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
+ revenue.setObjId(order.getId());
+ revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
+ revenue.setOrderNo(billNo);
+ revenue.setStatus(Constants.TWO); // 2=澶勭悊涓�
+ revenue.setDeleted(Constants.ZERO);
+ revenue.setCreateTime(now);
+ revenueMapper.insert(revenue);
+ }
+
+ private String generateBillNo() {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+ String random = String.valueOf(ThreadLocalRandom.current().nextInt(100000, 999999));
+ return "TX" + sdf.format(new Date()) + random;
+ }
+
}
--
Gitblit v1.9.3