From 79c06273ba713f73fb08fd3698622f28e663b96a Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 04 八月 2025 16:53:44 +0800
Subject: [PATCH] update
---
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java | 159 +++++++++++++++++++++++++++++++++-------------------
1 files changed, 100 insertions(+), 59 deletions(-)
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java
index e0b0e66..4855d4b 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java
@@ -15,14 +15,13 @@
import com.stylefeng.guns.modular.system.service.IInvoiceService;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@Service
@@ -54,74 +53,116 @@
@Override
public void invoicing(Invoice invoice, String order, Integer uid) throws Exception {
JSONArray jsonArray = JSON.parseArray(order);
- BigDecimal sum = new BigDecimal(0);
- for(int i = 0; i < jsonArray.size(); i++){
+ // 1. 按companyId分组存放订单(key: companyId, value: 该公司的所有订单)
+ Map<Integer, List<JSONObject>> companyOrdersMap = new HashMap<>();
+ for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Integer orderType = jsonObject.getIntValue("type");
Integer orderId = jsonObject.getIntValue("id");
- switch (orderType){
- case 1://专车
- OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
- sum=sum.add(new BigDecimal(orderPrivateCar.getPayMoney()));
+ Integer companyId = null;
+
+ // 2. 获取每个订单的companyId
+ switch (orderType) {
+ case 1: // 专车
+ OrderPrivateCar privateCar = orderPrivateCarService.selectById(orderId);
+ companyId = privateCar.getCompanyId();
break;
- case 2://出租车
- OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
- sum=sum.add(new BigDecimal(orderTaxi.getPayMoney()));
+ case 2: // 出租车
+ OrderTaxi taxi = orderTaxiService.selectById(orderId);
+ companyId = taxi.getCompanyId();
break;
- case 3://跨城出行
- OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId);
- sum=sum.add(new BigDecimal(orderCrossCity.getPayMoney()));
+ case 3: // 跨城出行
+ OrderCrossCity crossCity = orderCrossCityService.selectById(orderId);
+ companyId = crossCity.getCompanyId();
break;
- case 4://同城小件物流
- OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
- sum=sum.add(new BigDecimal(orderLogistics.getPayMoney()));
- break;
- case 5://跨城小件物流
- OrderLogistics orderLogistics1 = orderLogisticsService.selectById(orderId);
- sum=sum.add(new BigDecimal(orderLogistics1.getPayMoney()));
+ case 4: // 同城小件物流
+ case 5: // 跨城小件物流
+ OrderLogistics logistics = orderLogisticsService.selectById(orderId);
+ companyId = logistics.getCompanyId();
break;
}
+
+ // 3. 将订单按companyId分组
+ if (companyId == null) {
+ throw new Exception("订单ID=" + orderId + "未找到关联公司");
+ }
+ companyOrdersMap.computeIfAbsent(companyId, k -> new ArrayList<>()).add(jsonObject);
}
+ // 4. 为每个公司单独创建发票
+ for (Map.Entry<Integer, List<JSONObject>> entry : companyOrdersMap.entrySet()) {
+ Integer companyId = entry.getKey();
+ List<JSONObject> companyOrders = entry.getValue();
- invoice.setOrderNum(jsonArray.size());
- invoice.setMoney(sum.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
- invoice.setUserId(uid);
- invoice.setInsertTime(new Date());
- invoice.setState(1);
- this.insert(invoice);
- // TODO: 2020/6/9 调用开发票第三方SDK
+ // 计算该公司订单的总金额
+ BigDecimal sum = new BigDecimal(0);
+ for (JSONObject orderJson : companyOrders) {
+ Integer orderType = orderJson.getIntValue("type");
+ Integer orderId = orderJson.getIntValue("id");
+ switch (orderType) {
+ case 1:
+ OrderPrivateCar privateCar = orderPrivateCarService.selectById(orderId);
+ sum = sum.add(new BigDecimal(privateCar.getPayMoney()));
+ break;
+ case 2:
+ OrderTaxi taxi = orderTaxiService.selectById(orderId);
+ sum = sum.add(new BigDecimal(taxi.getPayMoney()));
+ break;
+ case 3:
+ OrderCrossCity crossCity = orderCrossCityService.selectById(orderId);
+ sum = sum.add(new BigDecimal(crossCity.getPayMoney()));
+ break;
+ case 4:
+ case 5:
+ OrderLogistics logistics = orderLogisticsService.selectById(orderId);
+ sum = sum.add(new BigDecimal(logistics.getPayMoney()));
+ break;
+ }
+ }
- for(int i = 0; i < jsonArray.size(); i++){
- JSONObject jsonObject = jsonArray.getJSONObject(i);
- Integer orderType = jsonObject.getIntValue("type");
- Integer orderId = jsonObject.getIntValue("id");
- switch (orderType){
- case 1://专车
- OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
- orderPrivateCar.setInvoiceId(invoice.getId());
- orderPrivateCarService.updateById(orderPrivateCar);
- break;
- case 2://出租车
- OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
- orderTaxi.setInvoiceId(invoice.getId());
- orderTaxiService.updateById(orderTaxi);
- break;
- case 3://跨城出行
- OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId);
- orderCrossCity.setInvoiceId(invoice.getId());
- orderCrossCityService.updateById(orderCrossCity);
- break;
- case 4://同城小件物流
- OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
- orderLogistics.setInvoiceId(invoice.getId());
- orderLogisticsService.updateById(orderLogistics);
- break;
- case 5://跨城小件物流
- OrderLogistics orderLogistics1 = orderLogisticsService.selectById(orderId);
- orderLogistics1.setInvoiceId(invoice.getId());
- orderLogisticsService.updateById(orderLogistics1);
- break;
+ // 创建该公司的发票(复制原invoice的基础信息,覆盖companyId和金额)
+ Invoice companyInvoice = new Invoice();
+ // 复制原发票的非金额相关字段(如发票类型、抬头等)
+ BeanUtils.copyProperties(invoice, companyInvoice, "id", "money", "orderNum", "insertTime", "state", "companyId");
+ companyInvoice.setCompanyId(companyId); // 关联公司ID
+ companyInvoice.setOrderNum(companyOrders.size()); // 该公司的订单数量
+ companyInvoice.setMoney(sum.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); // 该公司的总金额
+ companyInvoice.setUserId(uid);
+ companyInvoice.setInsertTime(new Date());
+ companyInvoice.setState(1);
+ this.insert(companyInvoice); // 保存发票
+
+ // 调用第三方开票SDK(按公司发票单独开票)
+ // TODO: 调用开发票第三方SDK,传入companyInvoice参数
+
+ // 5. 将该公司的订单关联到对应的发票ID
+ for (JSONObject orderJson : companyOrders) {
+ Integer orderType = orderJson.getIntValue("type");
+ Integer orderId = orderJson.getIntValue("id");
+
+ switch (orderType) {
+ case 1:
+ OrderPrivateCar privateCar = orderPrivateCarService.selectById(orderId);
+ privateCar.setInvoiceId(companyInvoice.getId());
+ orderPrivateCarService.updateById(privateCar);
+ break;
+ case 2:
+ OrderTaxi taxi = orderTaxiService.selectById(orderId);
+ taxi.setInvoiceId(companyInvoice.getId());
+ orderTaxiService.updateById(taxi);
+ break;
+ case 3:
+ OrderCrossCity crossCity = orderCrossCityService.selectById(orderId);
+ crossCity.setInvoiceId(companyInvoice.getId());
+ orderCrossCityService.updateById(crossCity);
+ break;
+ case 4:
+ case 5:
+ OrderLogistics logistics = orderLogisticsService.selectById(orderId);
+ logistics.setInvoiceId(companyInvoice.getId());
+ orderLogisticsService.updateById(logistics);
+ break;
+ }
}
}
--
Gitblit v1.7.1