From 4485600cb2549dae5e18901aa3ac8ed34fc68ca3 Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期二, 05 八月 2025 18:40:24 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/QianYunTong --- 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