update 订单详情完成后,待结算金额,未扣除,已支付金额未增加问题修复
This commit is contained in:
@@ -419,7 +419,7 @@ public class MessageReceiver {
|
|||||||
.id(leasePayWithdrawMessage.getId())
|
.id(leasePayWithdrawMessage.getId())
|
||||||
.amount(payWithdrawReturnMessage.getAmount().add(payWithdrawReturnMessage.getFee()))
|
.amount(payWithdrawReturnMessage.getAmount().add(payWithdrawReturnMessage.getFee()))
|
||||||
.status(payWithdrawReturnMessage.getStatus())
|
.status(payWithdrawReturnMessage.getStatus())
|
||||||
.blockHeight(payWithdrawReturnMessage.getBlock_height())
|
.blockHeight(payWithdrawReturnMessage.getBlock_height() != null ? payWithdrawReturnMessage.getBlock_height() : 0)
|
||||||
.txHash(payWithdrawReturnMessage.getTx_hash())
|
.txHash(payWithdrawReturnMessage.getTx_hash())
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ public class ServerChannelHandler extends SimpleChannelInboundHandler<ClientMess
|
|||||||
@Resource
|
@Resource
|
||||||
private LeaseOrderItemMapper leaseOrderItemMapper;
|
private LeaseOrderItemMapper leaseOrderItemMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private LeaseOrderInfoMapper leaseOrderInfoMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private LeaseOrderMiningMapper leaseOrderMiningMapper;
|
private LeaseOrderMiningMapper leaseOrderMiningMapper;
|
||||||
|
|
||||||
@@ -76,6 +79,7 @@ public class ServerChannelHandler extends SimpleChannelInboundHandler<ClientMess
|
|||||||
System.out.println("Netty tcp 服务端收到客户端开始挖矿信息");
|
System.out.println("Netty tcp 服务端收到客户端开始挖矿信息");
|
||||||
handlerClientMiningMessage(ctx,msg);
|
handlerClientMiningMessage(ctx,msg);
|
||||||
}else{
|
}else{
|
||||||
|
//客户端心跳pong 或其它未知消息
|
||||||
System.out.println("未知消息方法");
|
System.out.println("未知消息方法");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -201,7 +205,7 @@ public class ServerChannelHandler extends SimpleChannelInboundHandler<ClientMess
|
|||||||
LocalDateTime effectTime = leaseOrderItem.getCreateTime().plusDays(leaseOrderItem.getLeaseTime());
|
LocalDateTime effectTime = leaseOrderItem.getCreateTime().plusDays(leaseOrderItem.getLeaseTime());
|
||||||
needUpdateInfo.forEach(item-> item.setEffectTime(effectTime));
|
needUpdateInfo.forEach(item-> item.setEffectTime(effectTime));
|
||||||
List<MachineConfigDto> realMachineList = needCheckInfo.get(false);
|
List<MachineConfigDto> realMachineList = needCheckInfo.get(false);
|
||||||
List<MachineConfigDto> tempMachineList = needCheckInfo.get(true);
|
List<MachineConfigDto> tempMachineList = needCheckInfo.get(true) != null ? needCheckInfo.get(true) : new ArrayList<>();
|
||||||
boolean realCheck = compare(needUpdateInfo, realMachineList);
|
boolean realCheck = compare(needUpdateInfo, realMachineList);
|
||||||
//主表信息和本次客户端发送消息不相同 + 并且临时表没有信息
|
//主表信息和本次客户端发送消息不相同 + 并且临时表没有信息
|
||||||
if(!realCheck && tempMachineList.isEmpty()){
|
if(!realCheck && tempMachineList.isEmpty()){
|
||||||
@@ -209,20 +213,24 @@ public class ServerChannelHandler extends SimpleChannelInboundHandler<ClientMess
|
|||||||
leaseMachineTempConfigMapper.insertBatch(needUpdateInfo);
|
leaseMachineTempConfigMapper.insertBatch(needUpdateInfo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boolean tempCheck = compare(needUpdateInfo, tempMachineList);
|
|
||||||
if (!realCheck && !tempCheck){
|
if (!tempMachineList.isEmpty()){
|
||||||
//删除临时表数据 + 新增临时表数据
|
boolean tempCheck = compare(needUpdateInfo, tempMachineList);
|
||||||
leaseMachineTempConfigMapper.delete(new LambdaQueryWrapper<LeaseMachineTempConfig>()
|
if (!realCheck && !tempCheck){
|
||||||
.eq(LeaseMachineTempConfig::getMachineId, machineId));
|
//删除临时表数据 + 新增临时表数据
|
||||||
leaseMachineTempConfigMapper.insertBatch(needUpdateInfo);
|
leaseMachineTempConfigMapper.delete(new LambdaQueryWrapper<LeaseMachineTempConfig>()
|
||||||
return;
|
.eq(LeaseMachineTempConfig::getMachineId, machineId));
|
||||||
}
|
leaseMachineTempConfigMapper.insertBatch(needUpdateInfo);
|
||||||
//ABA
|
return;
|
||||||
if (realCheck && !tempCheck){
|
}
|
||||||
//删除临时表数据
|
//ABA
|
||||||
leaseMachineTempConfigMapper.delete(new LambdaQueryWrapper<LeaseMachineTempConfig>()
|
if (realCheck && !tempCheck){
|
||||||
.eq(LeaseMachineTempConfig::getMachineId, machineId));
|
//删除临时表数据
|
||||||
|
leaseMachineTempConfigMapper.delete(new LambdaQueryWrapper<LeaseMachineTempConfig>()
|
||||||
|
.eq(LeaseMachineTempConfig::getMachineId, machineId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
//删除主表信息 + 新增主表数据
|
//删除主表信息 + 新增主表数据
|
||||||
leaseMachineConfigService.remove(new LambdaUpdateWrapper<LeaseMachineConfig>()
|
leaseMachineConfigService.remove(new LambdaUpdateWrapper<LeaseMachineConfig>()
|
||||||
@@ -283,9 +291,34 @@ public class ServerChannelHandler extends SimpleChannelInboundHandler<ClientMess
|
|||||||
if (checkMessage(ctx,msg.getId())){
|
if (checkMessage(ctx,msg.getId())){
|
||||||
String[] split = msg.getId().split("::");
|
String[] split = msg.getId().split("::");
|
||||||
Object params = msg.getParams();
|
Object params = msg.getParams();
|
||||||
ClientConfigurationMining clientConfigurationMining = JSONUtil.toBean(params.toString(), ClientConfigurationMining.class);
|
ClientConfigurationMining clientConfigurationMining = null;
|
||||||
//修改 当前邮箱账户 对应的该矿池的 一些基本信息 TODO 这里可以设置真实开始时间 和 状态改为1
|
try {
|
||||||
leaseOrderMiningMapper.updateOrderMining(split[0],clientConfigurationMining);
|
clientConfigurationMining = JSONUtil.toBean(params.toString(), ClientConfigurationMining.class);
|
||||||
|
//修改 当前邮箱账户 对应的该矿池的 一些基本信息 TODO 这里可以设置真实开始时间 和 状态改为1
|
||||||
|
leaseOrderMiningMapper.updateOrderMining(split[0],clientConfigurationMining);
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("错误信息"+e.getMessage());
|
||||||
|
System.err.println("params 内容: " + params);
|
||||||
|
//订单失败
|
||||||
|
|
||||||
|
//1.获取到订单id 和订单详情id
|
||||||
|
LeaseOrderMining leaseOrderMining = leaseOrderMiningMapper.selectOne(new LambdaQueryWrapper<LeaseOrderMining>()
|
||||||
|
.select(LeaseOrderMining::getOrderId,LeaseOrderMining::getOrderItemId)
|
||||||
|
.eq(LeaseOrderMining::getWalletAddress, clientConfigurationMining.getWallet_address())
|
||||||
|
.eq(LeaseOrderMining::getWorkerId, clientConfigurationMining.getWorker_id())
|
||||||
|
);
|
||||||
|
//1.1订单主表状态改为11矿池连接失败,订单已取消 和详情表 状态改为0 租约过期
|
||||||
|
leaseOrderItemMapper.updateById(LeaseOrderItem.builder()
|
||||||
|
.id(leaseOrderMining.getOrderId())
|
||||||
|
.status(0)
|
||||||
|
.build());
|
||||||
|
leaseOrderInfoMapper.updateById(LeaseOrderInfo.builder()
|
||||||
|
.id(leaseOrderMining.getOrderId())
|
||||||
|
.status(11)
|
||||||
|
.build());
|
||||||
|
//TODO 1.2修改买家和卖家钱包余额
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -140,8 +140,8 @@ public class OrderAndPayTask {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Scheduled(cron = "0 0/30 * * * ? ")
|
@Scheduled(cron = "0 0/1 * * * ? ")
|
||||||
//@Scheduled(cron = "0 40 2 * * ? ")
|
//@Scheduled(cron = "0 0/30 * * * ? ")
|
||||||
@Async("scheduledTaskExecutor")
|
@Async("scheduledTaskExecutor")
|
||||||
@DSTransactional
|
@DSTransactional
|
||||||
public void paymentTaskV2(){
|
public void paymentTaskV2(){
|
||||||
@@ -252,6 +252,7 @@ public class OrderAndPayTask {
|
|||||||
//已支付金额 和实际待支付金额
|
//已支付金额 和实际待支付金额
|
||||||
item.setAlreadyPayAmount(item.getAlreadyPayAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers()))));
|
item.setAlreadyPayAmount(item.getAlreadyPayAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers()))));
|
||||||
item.setSettlePayRealAmount(item.getSettlePayRealAmount().add(realPayAmount));
|
item.setSettlePayRealAmount(item.getSettlePayRealAmount().add(realPayAmount));
|
||||||
|
item.setAlreadyPayRealAmount(item.getAlreadyPayRealAmount().add(realPayAmount));
|
||||||
//设置理论支付金额 和 冻结金额 额 (冻结金额 = 理论支付金额)
|
//设置理论支付金额 和 冻结金额 额 (冻结金额 = 理论支付金额)
|
||||||
build.setBlockAmount(build.getBlockAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers()))));
|
build.setBlockAmount(build.getBlockAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers()))));
|
||||||
build.setAmount(build.getAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers()))));
|
build.setAmount(build.getAmount().add(item.getPrice().multiply(BigDecimal.valueOf(item.getNumbers()))));
|
||||||
@@ -302,10 +303,10 @@ public class OrderAndPayTask {
|
|||||||
for (LeaseOrderItem orderTimeInfoDto : oneDayApartOrder) {
|
for (LeaseOrderItem orderTimeInfoDto : oneDayApartOrder) {
|
||||||
orderCompleteMap.putIfAbsent(orderTimeInfoDto.getOrderId(), true);
|
orderCompleteMap.putIfAbsent(orderTimeInfoDto.getOrderId(), true);
|
||||||
// 计算订单结束时间(startTime + leaseTime天)
|
// 计算订单结束时间(startTime + leaseTime天)
|
||||||
LocalDateTime endTime = orderTimeInfoDto.getCreateTime().plusDays(orderTimeInfoDto.getLeaseTime());
|
//LocalDateTime endTime = orderTimeInfoDto.getCreateTime().plusDays(orderTimeInfoDto.getLeaseTime());
|
||||||
|
|
||||||
// 开发环境 测试用1分钟当一天 差值改为差1分钟
|
// 开发环境 测试用1分钟当一天 差值改为差1分钟
|
||||||
//LocalDateTime endTime = orderTimeInfoDto.getCreateTime().plusMinutes(orderTimeInfoDto.getLeaseTime());
|
LocalDateTime endTime = orderTimeInfoDto.getCreateTime().plusMinutes(orderTimeInfoDto.getLeaseTime() * 30);
|
||||||
// 获取订单完成的订单详情:比较 now 和 endTime 的年月日时分秒差值是否小于30分
|
// 获取订单完成的订单详情:比较 now 和 endTime 的年月日时分秒差值是否小于30分
|
||||||
long minuteTime = Duration.between(now, endTime).toMinutes();
|
long minuteTime = Duration.between(now, endTime).toMinutes();
|
||||||
if (minuteTime <= 0) {
|
if (minuteTime <= 0) {
|
||||||
@@ -326,14 +327,16 @@ public class OrderAndPayTask {
|
|||||||
LocalDate nowDate = now.toLocalDate();
|
LocalDate nowDate = now.toLocalDate();
|
||||||
LocalDate startDate = orderTimeInfoDto.getCreateTime().toLocalDate();
|
LocalDate startDate = orderTimeInfoDto.getCreateTime().toLocalDate();
|
||||||
long minuteDate = Duration.between(startTime, nowTime).toMinutes();
|
long minuteDate = Duration.between(startTime, nowTime).toMinutes();
|
||||||
if (!nowDate.equals(startDate) && minuteDate <= 30 && minuteDate >= 0) {
|
//if (!nowDate.equals(startDate) && minuteDate <= 30 && minuteDate >= 0) {
|
||||||
|
// needPayIds.add(orderTimeInfoDto.getId());
|
||||||
|
// needPayInfos.add(orderTimeInfoDto);
|
||||||
|
//}
|
||||||
|
//开发环境
|
||||||
|
if ( minuteDate >= 30) {
|
||||||
needPayIds.add(orderTimeInfoDto.getId());
|
needPayIds.add(orderTimeInfoDto.getId());
|
||||||
needPayInfos.add(orderTimeInfoDto);
|
needPayInfos.add(orderTimeInfoDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
//开发环境
|
|
||||||
// needPayIds.add(orderTimeInfoDto.getId());
|
|
||||||
// needPayInfos.add(orderTimeInfoDto);
|
|
||||||
//记录某个订单下所有子项目是否都完成
|
//记录某个订单下所有子项目是否都完成
|
||||||
orderCompleteMap.put(orderTimeInfoDto.getOrderId(), false);
|
orderCompleteMap.put(orderTimeInfoDto.getOrderId(), false);
|
||||||
}
|
}
|
||||||
@@ -346,6 +349,7 @@ public class OrderAndPayTask {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Integer dataPoints = 6;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取各orderItemId 所需支付的金额
|
* 获取各orderItemId 所需支付的金额
|
||||||
@@ -369,19 +373,19 @@ public class OrderAndPayTask {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
// 补零到48个数据点
|
// 补零到48个数据点
|
||||||
while (ratios.size() < 48) {
|
while (ratios.size() < dataPoints) {
|
||||||
ratios.add(BigDecimal.ZERO);
|
ratios.add(BigDecimal.ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算总和并除以48
|
// 计算总和并除以48
|
||||||
BigDecimal finalValue = ratios.stream()
|
BigDecimal finalValue = ratios.stream()
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add)
|
.reduce(BigDecimal.ZERO, BigDecimal::add)
|
||||||
.divide(BigDecimal.valueOf(48), 2, RoundingMode.HALF_UP);
|
.divide(BigDecimal.valueOf(dataPoints), 2, RoundingMode.HALF_UP);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BigDecimal payAmount = itemInfo.getPrice()
|
BigDecimal payAmount = itemInfo.getPrice()
|
||||||
.multiply(BigDecimal.valueOf(itemInfo.getNumbers()));
|
.multiply(BigDecimal.valueOf(itemInfo.getNumbers()));
|
||||||
|
|
||||||
if (finalValue.compareTo(BigDecimal.valueOf(0.95)) <= 0){
|
if (finalValue.compareTo(BigDecimal.valueOf(0.95)) <= 0){
|
||||||
payAmount = payAmount.multiply(finalValue);
|
payAmount = payAmount.multiply(finalValue);
|
||||||
}
|
}
|
||||||
@@ -888,9 +892,10 @@ public class OrderAndPayTask {
|
|||||||
|
|
||||||
// 合并相同查询条件的记录,避免 SQL CASE WHEN 只执行第一条的问题
|
// 合并相同查询条件的记录,避免 SQL CASE WHEN 只执行第一条的问题
|
||||||
List<LeasePayRecordMessage> mergedRecordList = mergePayRecordMessages(reocrdList);
|
List<LeasePayRecordMessage> mergedRecordList = mergePayRecordMessages(reocrdList);
|
||||||
|
//订单详情结算待结算金额
|
||||||
|
leaseOrderItemMapper.updateSettleAmount(mergedRecordList);
|
||||||
int buyerUpdate = leaseUserWalletDataMapper.updateBalanceAndBlockBalance(mergedRecordList);
|
int buyerUpdate = leaseUserWalletDataMapper.updateBalanceAndBlockBalance(mergedRecordList);
|
||||||
int sellerUpdate = leaseShopConfigMapper.updateBalance(mergedRecordList);
|
int sellerUpdate = leaseShopConfigMapper.updateBalance(mergedRecordList);
|
||||||
|
|
||||||
if (buyerUpdate > 0 || sellerUpdate > 0){
|
if (buyerUpdate > 0 || sellerUpdate > 0){
|
||||||
for (LeasePayRecordMessage item : reocrdList) {
|
for (LeasePayRecordMessage item : reocrdList) {
|
||||||
recordLog(item);
|
recordLog(item);
|
||||||
|
|||||||
Reference in New Issue
Block a user