散户结算余额明细新增订单编号 & 文件上传Bug修复

wxpay
LI-CCONG\李聪聪 7 months ago
parent aa3baba1e5
commit aa309d80bf

@ -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;

@ -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<Client> {
/**
* 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);
/**

@ -124,42 +124,6 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
this.updateById(client);
}
@Override // 金额交易!
public void changeBalanceById(String id, String openId, BigDecimal amount, BalanceChangeTypeEnum changeTypeEnum) {
LambdaQueryWrapper<Client> 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<ClientAccountDetail> queryAccountStatementByPage(ClientAccountQuery clientAccountQuery) {
LambdaQueryWrapperX<ClientAccountDetail> wrapperX = new LambdaQueryWrapperX<>();
@ -172,11 +136,17 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> 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<ClientMapper, Client> 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<Client> 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);
}
}

@ -144,7 +144,7 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, File> 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)

@ -213,12 +213,6 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
if (recycleOrder.getOrderStatus().equals(OrderStatusEnum.FINISHED)) {
throw new BizIllegalException("订单已完成结算!");
}
String clientId = recycleOrder.getClientId();
recycleOrder = BeanUtils.copyBean(orderFinishVO, RecycleOrder.class);;
recycleOrder.setOrderStatus(OrderStatusEnum.FINISHED);
recycleOrder.setCompleteTime(LocalDateTime.now());
log.info("recycleOrder orderFinishVO: {}", recycleOrder);
this.updateById(recycleOrder);
// 更新订单明细信息
List<RecycleOrderDetailUpdateVO> recycleOrderProductVOList = orderFinishVO.getOrderDetails();
@ -232,15 +226,26 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
List<RecycleOrderProduct> 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);
}

Loading…
Cancel
Save