From a764dc672aaf0b7d87512ad1a75ef96672976228 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 27 十一月 2025 10:14:12 +0800
Subject: [PATCH] 修改bug
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java | 119 ++++++++++++++++++++++++++++++++++-------------------------
1 files changed, 68 insertions(+), 51 deletions(-)
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
index 09b19fc..3247f43 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
@@ -30,6 +30,9 @@
import com.ruoyi.other.api.feignClient.GoodsClient;
import com.ruoyi.other.api.feignClient.InvoiceTypeClient;
import io.seata.spring.annotation.GlobalTransactional;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -40,6 +43,7 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -85,6 +89,9 @@
@Resource
private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
+ @Autowired
+ private RedissonClient redissonClient;
+
@@ -97,57 +104,67 @@
@Override
public AjaxResult addOrderInvoice(AddOrderInvoice addOrderInvoice) {
Long userId = tokenService.getLoginUserApplet().getUserId();
- String orders = addOrderInvoice.getOrders();
- if(StringUtils.isEmpty(orders)){
- return AjaxResult.error("请选择有效的订单");
- }
- JSONArray parse = JSONArray.parse(orders);
- List<Long> orderIds = new ArrayList<>();
- Map<Long, BigDecimal> map = new HashMap<>();
- for (int i = 0; i < parse.size(); i++) {
- JSONObject jsonObject = parse.getJSONObject(i);
- Long id = jsonObject.getLong("id");
- BigDecimal amount = jsonObject.getBigDecimal("amount");
- orderIds.add(id);
- map.put(id, amount);
- }
- long count = orderInvoiceDetailService.count(new LambdaQueryWrapper<TOrderInvoiceDetail>().eq(TOrderInvoiceDetail::getOrderType, addOrderInvoice.getOrderType())
- .in(TOrderInvoiceDetail::getOrderId, orderIds));
- if(count > 0){
- return AjaxResult.error("不能重复申请开票,请刷新数据后重试");
- }
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- String code = Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date());
- //获取开票类型
- TInvoiceType invoiceType = invoiceTypeClient.getInvoiceType(addOrderInvoice.getInvoiceTypeId()).getData();
- addOrderInvoice.setInvoicingCompany(invoiceType.getInvoicingCompany());
- addOrderInvoice.setInvoiceType(invoiceType.getName());
- addOrderInvoice.setInvoiceMaterial(2);
- addOrderInvoice.setInvoicingMethod(invoiceType.getInvoicingMethod());
- addOrderInvoice.setAppUserId(userId);
- addOrderInvoice.setCode(code);
- addOrderInvoice.setStatus(1);
- addOrderInvoice.setCreateTime(LocalDateTime.now());
- this.save(addOrderInvoice);
- for (Long orderId : orderIds) {
- List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
- .eq(TChargingOrderAccountingStrategy::getChargingOrderId, orderId));
- BigDecimal electrovalence = list.stream().map(TChargingOrderAccountingStrategy::getElectrovalence).reduce(BigDecimal.ZERO, BigDecimal::add);
- BigDecimal serviceCharge = list.stream().map(TChargingOrderAccountingStrategy::getServiceCharge).reduce(BigDecimal.ZERO, BigDecimal::add);
-
- TOrderInvoiceDetail orderInvoiceDetail = new TOrderInvoiceDetail();
- orderInvoiceDetail.setOrderInvoiceId(addOrderInvoice.getId());
- orderInvoiceDetail.setInvoiceAmount(map.get(orderId));
- orderInvoiceDetail.setOrderType(addOrderInvoice.getOrderType());
- orderInvoiceDetail.setOrderId(orderId);
- orderInvoiceDetail.setElectricityTariff(invoiceType.getElectricityTariff());
- orderInvoiceDetail.setServiceTariff(invoiceType.getServiceTariff());
- orderInvoiceDetail.setAddedServiceTariff(invoiceType.getAddedServiceTariff());
- orderInvoiceDetail.setElectrovalence(electrovalence);
- orderInvoiceDetail.setServiceCharge(serviceCharge);
- orderInvoiceDetail.setAddedService(serviceCharge.multiply(null == invoiceType.getAddedServiceTariff()
- ? new BigDecimal(1) : invoiceType.getAddedServiceTariff().divide(new BigDecimal(100))));
- orderInvoiceDetailService.save(orderInvoiceDetail);
+ RLock lock = redissonClient.getLock("ADD_ORDER_INVOICE:" + userId);
+ try {
+ boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
+ if(tryLock){
+ String orders = addOrderInvoice.getOrders();
+ if(StringUtils.isEmpty(orders)){
+ return AjaxResult.error("请选择有效的订单");
+ }
+ JSONArray parse = JSONArray.parse(orders);
+ List<Long> orderIds = new ArrayList<>();
+ Map<Long, BigDecimal> map = new HashMap<>();
+ for (int i = 0; i < parse.size(); i++) {
+ JSONObject jsonObject = parse.getJSONObject(i);
+ Long id = jsonObject.getLong("id");
+ BigDecimal amount = jsonObject.getBigDecimal("amount");
+ orderIds.add(id);
+ map.put(id, amount);
+ }
+ long count = orderInvoiceDetailService.count(new LambdaQueryWrapper<TOrderInvoiceDetail>().eq(TOrderInvoiceDetail::getOrderType, addOrderInvoice.getOrderType())
+ .in(TOrderInvoiceDetail::getOrderId, orderIds));
+ if(count > 0){
+ return AjaxResult.error("不能重复申请开票,请刷新数据后重试");
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+ String code = Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date());
+ //获取开票类型
+ TInvoiceType invoiceType = invoiceTypeClient.getInvoiceType(addOrderInvoice.getInvoiceTypeId()).getData();
+ addOrderInvoice.setInvoicingCompany(invoiceType.getInvoicingCompany());
+ addOrderInvoice.setInvoiceType(invoiceType.getName());
+ addOrderInvoice.setInvoiceMaterial(2);
+ addOrderInvoice.setInvoicingMethod(invoiceType.getInvoicingMethod());
+ addOrderInvoice.setAppUserId(userId);
+ addOrderInvoice.setCode(code);
+ addOrderInvoice.setStatus(1);
+ addOrderInvoice.setCreateTime(LocalDateTime.now());
+ this.save(addOrderInvoice);
+ for (Long orderId : orderIds) {
+ List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
+ .eq(TChargingOrderAccountingStrategy::getChargingOrderId, orderId));
+ BigDecimal electrovalence = list.stream().map(TChargingOrderAccountingStrategy::getElectrovalence).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal serviceCharge = list.stream().map(TChargingOrderAccountingStrategy::getServiceCharge).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ TOrderInvoiceDetail orderInvoiceDetail = new TOrderInvoiceDetail();
+ orderInvoiceDetail.setOrderInvoiceId(addOrderInvoice.getId());
+ orderInvoiceDetail.setInvoiceAmount(map.get(orderId));
+ orderInvoiceDetail.setOrderType(addOrderInvoice.getOrderType());
+ orderInvoiceDetail.setOrderId(orderId);
+ orderInvoiceDetail.setElectricityTariff(invoiceType.getElectricityTariff());
+ orderInvoiceDetail.setServiceTariff(invoiceType.getServiceTariff());
+ orderInvoiceDetail.setAddedServiceTariff(invoiceType.getAddedServiceTariff());
+ orderInvoiceDetail.setElectrovalence(electrovalence);
+ orderInvoiceDetail.setServiceCharge(serviceCharge);
+ orderInvoiceDetail.setAddedService(serviceCharge.multiply(null == invoiceType.getAddedServiceTariff()
+ ? new BigDecimal(1) : invoiceType.getAddedServiceTariff().divide(new BigDecimal(100))));
+ orderInvoiceDetailService.save(orderInvoiceDetail);
+ }
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }finally {
+ lock.unlock();
}
return AjaxResult.success();
}
--
Gitblit v1.7.1