From 92480c7fd17a6bf89205ffcf4b78eef17988f0d5 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期五, 01 八月 2025 19:22:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TInvoiceController.java                      |    8 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java                   |    8 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITInvoiceService.java                                   |    3 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tDriverPromotionActivity/tDriverPromotionActivity1.js                     |   17 +
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TInvoiceMapper.xml                                  |    1 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverPromotionActivity/tPromotionOrder.html                               |  122 ++++++++++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TPromotionOrderCarController.java       |   12 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TInvoiceMapper.java                                         |    3 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tDriverPromotionActivity/tPromotionOrder.js                               |  271 ++++++++++++++++++++++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TInvoiceServiceImpl.java                           |    4 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml                          |   24 +
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TDriverPromotionActivityController.java |   17 +
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java                           |    4 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java                                 |    4 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java                                  |  159 ++++++++----
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java                                                     |   14 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invoice.java                                                    |   11 
 17 files changed, 593 insertions(+), 89 deletions(-)

diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TInvoiceController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TInvoiceController.java
index 3d6c786..70dba3c 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TInvoiceController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TInvoiceController.java
@@ -7,6 +7,7 @@
 import com.stylefeng.guns.core.log.LogObjectHolder;
 import com.stylefeng.guns.core.util.SinataUtil;
 import com.stylefeng.guns.modular.system.model.TInvoice;
+import com.stylefeng.guns.modular.system.service.ITCompanyService;
 import com.stylefeng.guns.modular.system.service.ITInvoiceService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -36,6 +37,9 @@
     
     @Autowired
     private ShiroExtUtil shiroExtUtil;
+
+    @Autowired
+    private ITCompanyService tCompanyService;
     
     /**
      * 跳转到开发票列表首页
@@ -88,6 +92,8 @@
                        String name,
                        Integer type,
                        Integer state) {
+        //获取当前用户的公司id
+        Integer companyId = tCompanyService.selectById(shiroExtUtil.getUser().getObjectId()).getId();
         String beginTime = null;
         String endTime = null;
         if (SinataUtil.isNotEmpty(insertTime)) {
@@ -99,7 +105,7 @@
         if (shiroExtUtil.getUser().getRoleType() != 1) {
             page.setRecords(null);
         } else {
-            page.setRecords(tInvoiceService.getInvoiceList(page, beginTime, endTime, email, name, type, state));
+            page.setRecords(tInvoiceService.getInvoiceList(page, beginTime, endTime, email, name, type, state,companyId));
         }
         return super.packForBT(page);
     }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TDriverPromotionActivityController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TDriverPromotionActivityController.java
index cc921d3..008dfda 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TDriverPromotionActivityController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TDriverPromotionActivityController.java
@@ -8,8 +8,11 @@
 import com.stylefeng.guns.core.util.SinataUtil;
 import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.system.model.DriverRankVo;
+import com.stylefeng.guns.modular.system.model.TOrderPrivateCar;
 import com.stylefeng.guns.modular.system.model.TRegion;
+import com.stylefeng.guns.modular.system.service.ITOrderPrivateCarService;
 import com.stylefeng.guns.modular.system.service.ITRegionService;
+import com.stylefeng.guns.modular.system.service.TAbnormalPayOrderService;
 import com.stylefeng.guns.modular.system.util.ExcelExportUtil;
 import lombok.SneakyThrows;
 import org.springframework.stereotype.Controller;
@@ -49,6 +52,9 @@
     @Autowired
     private ShiroExtUtil shiroExtUtil;
 
+
+    @Autowired
+    private ITOrderPrivateCarService tOrderPrivateCarService;
     /**
      * 跳转到首页
      */
@@ -108,6 +114,17 @@
         model.addAttribute("driverId",id);
         return PREFIX + "tDriverPromotionActivityUser.html";
     }
+    @RequestMapping("/tDriverPromotionActivity_viewMoney/{id}")
+    public String tDriverPromotionActivityViewMoney(@PathVariable Integer id, Model model) {
+        List<Map<String, Object>> list=new ArrayList<>();
+        list =  tOrderPrivateCarService.promotionInfoExport(null, null, null, null, null, null, null, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(),id);
+        BigDecimal reduce = list.stream().map(e -> new BigDecimal(e.get("promotionMoney").toString())).reduce(BigDecimal.ZERO, BigDecimal::add);
+        model.addAttribute("money",reduce);
+        model.addAttribute("size",list.size());
+
+        model.addAttribute("driverId",id);
+        return PREFIX + "tPromotionOrder.html";
+    }
     /**
      * 跳转到修改
      */
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TPromotionOrderCarController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TPromotionOrderCarController.java
index 67e223b..af7f7a6 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TPromotionOrderCarController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TPromotionOrderCarController.java
@@ -54,7 +54,7 @@
     @RequestMapping("")
     public String index(Model model) {
         List<Map<String, Object>> list=new ArrayList<>();
-        list =  tOrderPrivateCarService.promotionInfoExport(null, null, null, null, null, null, null, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId());
+        list =  tOrderPrivateCarService.promotionInfoExport(null, null, null, null, null, null, null, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(),null);
         BigDecimal reduce = list.stream().map(e -> new BigDecimal(e.get("promotionMoney").toString())).reduce(BigDecimal.ZERO, BigDecimal::add);
         model.addAttribute("money",reduce);
         model.addAttribute("size",list.size());
@@ -72,7 +72,7 @@
                        String orderNum,
                        String userName,
                        String name,
-                       String driverName){
+                       String driverName,Integer driverId){
         String beginTime = null;
         String endTime = null;
         if (SinataUtil.isNotEmpty(insertTime)) {
@@ -81,7 +81,7 @@
             endTime = timeArray[1];
         }
         Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
-        page.setRecords(tOrderPrivateCarService.promotionInfo(page, beginTime, endTime, orderNum, userName, name, driverName, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId()));
+        page.setRecords(tOrderPrivateCarService.promotionInfo(page, beginTime, endTime, orderNum, userName, name, driverName, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(),driverId));
         return super.packForBT(page);
     }
 
@@ -93,7 +93,7 @@
                        String orderNum,
                        String userName,
                        String name,
-                       String driverName, HttpServletRequest request, HttpServletResponse response) {
+                       String driverName,Integer driverId, HttpServletRequest request, HttpServletResponse response) {
         try {
             String beginTime = null;
             String endTime = null;
@@ -103,7 +103,7 @@
                 endTime = timeArray[1];
             }
             List<Map<String, Object>> list=new ArrayList<>();
-            list =  tOrderPrivateCarService.promotionInfoExport(null, beginTime, endTime, orderNum, userName, name, driverName, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId());
+            list =  tOrderPrivateCarService.promotionInfoExport(null, beginTime, endTime, orderNum, userName, name, driverName, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(),driverId);
 
 
             // 表格数据【封装】
@@ -196,7 +196,7 @@
                 endTime = timeArray[1];
             }
             List<Map<String, Object>> list=new ArrayList<>();
-            list =  tOrderPrivateCarService.promotionInfoExport(null, beginTime, endTime, orderNum, userName, name, driverName, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId());
+            list =  tOrderPrivateCarService.promotionInfoExport(null, beginTime, endTime, orderNum, userName, name, driverName, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(),null);
         HashMap<String, Object> map = new HashMap<>();
         BigDecimal reduce = list.stream().map(e -> new BigDecimal(e.get("promotionMoney").toString())).reduce(BigDecimal.ZERO, BigDecimal::add);
         map.put("money", reduce);
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TInvoiceMapper.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TInvoiceMapper.java
index 56d2a37..b751fc1 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TInvoiceMapper.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TInvoiceMapper.java
@@ -28,5 +28,6 @@
                                              @Param("email") String email,
                                              @Param("name") String name,
                                              @Param("type") Integer type,
-                                             @Param("state") Integer state);
+                                             @Param("state") Integer state,
+                                            @Param("companyId") Integer companyId);
 }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java
index ef8edfb..de96020 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java
@@ -71,7 +71,7 @@
 
     List<Map<String,Object>> getSurcharge(@Param("id") Object id,@Param("orderType") Integer orderType);
 
-    List<Map<String, Object>> promotionInfo(@Param("page") Page<Map<String, Object>> page, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("orderNum") String orderNum, @Param("userName") String userName, @Param("name") String name, @Param("driverName") String driverName, @Param("roleType") Integer roleType, @Param("objectId") Integer objectId);
+    List<Map<String, Object>> promotionInfo(@Param("page") Page<Map<String, Object>> page, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("orderNum") String orderNum, @Param("userName") String userName, @Param("name") String name, @Param("driverName") String driverName, @Param("roleType") Integer roleType, @Param("objectId") Integer objectId, @Param("driverId") Integer driverId);
 
-    List<Map<String, Object>> promotionInfoExport(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("orderNum") String orderNum, @Param("userName") String userName, @Param("name") String name, @Param("driverName") String driverName, @Param("roleType") Integer roleType, @Param("objectId") Integer objectId);
+    List<Map<String, Object>> promotionInfoExport(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("orderNum") String orderNum, @Param("userName") String userName, @Param("name") String name, @Param("driverName") String driverName, @Param("roleType") Integer roleType, @Param("objectId") Integer objectId, @Param("driverId") Integer driverId);
 }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TInvoiceMapper.xml b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TInvoiceMapper.xml
index dbf4efd..a2ffc1c 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TInvoiceMapper.xml
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TInvoiceMapper.xml
@@ -45,6 +45,7 @@
             <if test="state != null and state != ''">
                 and o.state = #{state}
             </if>
+                 and o.companyId = #{companyId}
         </where>
         order by o.id desc
     </select>
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml
index 27d4230..c593fd3 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml
@@ -264,7 +264,7 @@
 
     <select id="promotionInfo" resultType="java.util.Map">
 select  * from (
-        select t1.orderNum,t1.promotionMoney,t1.successTime,t1.payMoney money,t2.activityTitle name,t3.name driverName,t4.nickName userName
+        select 1 as type,t1.id orderId,t1.orderNum,t1.promotionMoney,t1.successTime,t1.payMoney money,t2.activityTitle name,t3.name driverName,t4.nickName userName
         from t_order_private_car t1
         LEFT JOIN t_driver_promotion_activity t2 ON t1.promotionActivityId = t2.id
         LEFT JOIN t_driver t3 ON t1.promotionDriverId = t3.id
@@ -288,9 +288,12 @@
         <if test="roleType != null and roleType != '' and roleType != 1">
             and t1.companyId = #{objectId}
         </if>
+        <if test="driverId != null ">
+            and t1.promotionDriverId =#{driverId}
+        </if>
 
         union all
-        select t1.orderNum,t1.promotionMoney,t1.successTime,t1.payMoney money,t2.activityTitle name,t3.name driverName,t4.nickName userName
+        select 2 as type,t1.id orderId,t1.orderNum,t1.promotionMoney,t1.successTime,t1.payMoney money,t2.activityTitle name,t3.name driverName,t4.nickName userName
         from t_order_taxi t1
         LEFT JOIN t_driver_promotion_activity t2 ON t1.promotionActivityId = t2.id
         LEFT JOIN t_driver t3 ON t1.promotionDriverId = t3.id
@@ -314,10 +317,13 @@
         <if test="roleType != null and roleType != '' and roleType != 1">
             and t1.companyId = #{objectId}
         </if>
+        <if test="driverId != null ">
+            and t1.promotionDriverId =#{driverId}
+        </if>
 
         union all
 
-        select t1.orderNum,t1.promotionMoney,t1.successTime,t1.payMoney money,t2.activityTitle name,t3.name driverName,t4.nickName userName
+        select 3 as type,t1.id orderId,t1.orderNum,t1.promotionMoney,t1.successTime,t1.payMoney money,t2.activityTitle name,t3.name driverName,t4.nickName userName
         from t_order_cross_city t1
         LEFT JOIN t_driver_promotion_activity t2 ON t1.promotionActivityId = t2.id
         LEFT JOIN t_driver t3 ON t1.promotionDriverId = t3.id
@@ -340,6 +346,9 @@
         </if>
         <if test="roleType != null and roleType != '' and roleType != 1">
             and t1.companyId = #{objectId}
+        </if>
+        <if test="driverId != null ">
+            and t1.promotionDriverId =#{driverId}
         </if>
         ) as t5 order by t5.successTime desc
 
@@ -367,6 +376,9 @@
         <if test="driverName != null and driverName != ''">
             and t3.name  like CONCAT('%',#{driverName},'%')
         </if>
+        <if test="driverId != null ">
+            and t1.promotionDriverId =#{driverId}
+        </if>
         <if test="roleType != null and roleType != '' and roleType != 1">
             and t1.companyId = #{objectId}
         </if>
@@ -392,6 +404,9 @@
         </if>
         <if test="driverName != null and driverName != ''">
             and t3.name  like CONCAT('%',#{driverName},'%')
+        </if>
+        <if test="driverId != null ">
+            and t1.promotionDriverId =#{driverId}
         </if>
         <if test="roleType != null and roleType != '' and roleType != 1">
             and t1.companyId = #{objectId}
@@ -420,6 +435,9 @@
         <if test="driverName != null and driverName != ''">
             and t3.name  like CONCAT('%',#{driverName},'%')
         </if>
+        <if test="driverId != null ">
+            and t1.promotionDriverId =#{driverId}
+        </if>
         <if test="roleType != null and roleType != '' and roleType != 1">
             and t1.companyId = #{objectId}
         </if>
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITInvoiceService.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITInvoiceService.java
index 34df7a0..b5cf603 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITInvoiceService.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITInvoiceService.java
@@ -28,5 +28,6 @@
                                             @Param("email") String email,
                                             @Param("name") String name,
                                             @Param("type") Integer type,
-                                            @Param("state") Integer state);
+                                            @Param("state") Integer state,
+                                            @Param("companyId") Integer companyId);
 }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java
index 7b1da0c..afaab8d 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java
@@ -71,8 +71,8 @@
 
     List<Map<String,Object>> getSurcharge(Object id,Integer orderType);
 
-    List<Map<String, Object>> promotionInfo(Page<Map<String, Object>> page, String beginTime, String endTime, String orderNum, String userName, String name, String driverName, Integer roleType, Integer objectId);
+    List<Map<String, Object>> promotionInfo(Page<Map<String, Object>> page, String beginTime, String endTime, String orderNum, String userName, String name, String driverName, Integer roleType, Integer objectId,Integer driverId);
 
 
-    List<Map<String, Object>> promotionInfoExport(Object o, String beginTime, String endTime, String orderNum, String userName, String name, String driverName, Integer roleType, Integer objectId);
+    List<Map<String, Object>> promotionInfoExport(Object o, String beginTime, String endTime, String orderNum, String userName, String name, String driverName, Integer roleType, Integer objectId,Integer driverId);
 }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TInvoiceServiceImpl.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TInvoiceServiceImpl.java
index d3aca8e..4d58fff 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TInvoiceServiceImpl.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TInvoiceServiceImpl.java
@@ -22,7 +22,7 @@
 public class TInvoiceServiceImpl extends ServiceImpl<TInvoiceMapper, TInvoice> implements ITInvoiceService {
 
     @Override
-    public List<Map<String, Object>> getInvoiceList(Page<Map<String, Object>> page, String beginTime, String endTime, String email, String name, Integer type, Integer state) {
-        return this.baseMapper.getInvoiceList(page, beginTime, endTime, email, name, type, state);
+    public List<Map<String, Object>> getInvoiceList(Page<Map<String, Object>> page, String beginTime, String endTime, String email, String name, Integer type, Integer state,Integer companyId) {
+        return this.baseMapper.getInvoiceList(page, beginTime, endTime, email, name, type, state, companyId);
     }
 }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java
index 6373e9d..cb73f5a 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java
@@ -115,12 +115,12 @@
     }
 
     @Override
-    public List<Map<String, Object>> promotionInfo(Page<Map<String, Object>> page, String beginTime, String endTime, String orderNum, String userName, String name, String driverName, Integer roleType, Integer objectId) {
-        return this.baseMapper.promotionInfo(page, beginTime, endTime, orderNum, userName, name, driverName, roleType, objectId);
+    public List<Map<String, Object>> promotionInfo(Page<Map<String, Object>> page, String beginTime, String endTime, String orderNum, String userName, String name, String driverName, Integer roleType, Integer objectId,Integer driverId) {
+        return this.baseMapper.promotionInfo(page, beginTime, endTime, orderNum, userName, name, driverName, roleType, objectId,driverId);
     }
 
     @Override
-    public List<Map<String, Object>> promotionInfoExport(Object o, String beginTime, String endTime, String orderNum, String userName, String name, String driverName, Integer roleType, Integer objectId) {
-        return this.baseMapper.promotionInfoExport(beginTime, endTime, orderNum, userName, name, driverName, roleType, objectId);
+    public List<Map<String, Object>> promotionInfoExport(Object o, String beginTime, String endTime, String orderNum, String userName, String name, String driverName, Integer roleType, Integer objectId,Integer driverId) {
+        return this.baseMapper.promotionInfoExport(beginTime, endTime, orderNum, userName, name, driverName, roleType, objectId,driverId);
     }
 }
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverPromotionActivity/tPromotionOrder.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverPromotionActivity/tPromotionOrder.html
new file mode 100644
index 0000000..43bad65
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriverPromotionActivity/tPromotionOrder.html
@@ -0,0 +1,122 @@
+@layout("/common/_container.html"){
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <div class="ibox-title">
+                <h5>推广收益明细</h5>
+            </div>
+            <div class="ibox-content">
+                <input type="hidden" id="driverId" value="${driverId}">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+                            <div class="col-sm-3">
+                                <#TimeCon id="insertTime" name="收益时间" isTime="false"/>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="name" name="活动名称" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="driverName" name="司机名称" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="userName" name="用户名称" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="orderNum" name="订单编号" />
+                            </div>
+
+                            <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="resetSearch()" space="true"/>
+                            </div>
+                        </div>
+
+                        <div class="form-group">
+                            <div class="row">
+                                <div class="col-sm-6">
+                                    <div class="stat-card" style=" border: none; padding: 20px; border-radius: 10px;  margin-bottom: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);">
+                                        <div class="stat-content">
+                                            <div class="stat-number" style="font-size: 28px; font-weight: bold; margin-bottom: 5px;" id="money">
+                                                ${money}
+                                            </div>
+                                            <div class="stat-label" style="font-size: 14px; opacity: 0.9;">
+                                                合计推广收益金额
+                                            </div>
+                                        </div>
+                                        <div style="clear: both;"></div>
+                                    </div>
+                                </div>
+                                <div class="col-sm-6">
+                                    <div class="stat-card" style=" border: none; padding: 20px; border-radius: 10px;  margin-bottom: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.1);">
+                                        <div class="stat-content">
+                                            <div class="stat-number" style="font-size: 28px; font-weight: bold; margin-bottom: 5px;" id="size">
+                                                ${size}
+                                            </div>
+                                            <div class="stat-label" style="font-size: 14px; opacity: 0.9;">
+                                                合计推广收益笔数
+                                            </div>
+                                        </div>
+                                        <div style="clear: both;"></div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="hidden-xs" id="TOrderPrivateCarTableToolbar" role="group">
+                            <#button name="导出Excel" icon="" clickFun="TAbnormalOrder.exportExcel()" space="true"/>
+                        </div>
+                        <#table id="TOrderPrivateCarTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tDriverPromotionActivity/tPromotionOrder.js"></script>
+<script>
+    laydate.render({
+        elem: '#insertTime'
+        ,range: true
+    });
+
+    function search() {
+
+        let insertTime = $('#insertTime').val();
+        let name = $('#name').val();
+        let driverName = $('#driverName').val();
+        let userName = $('#userName').val();
+        let orderNum = $('#orderNum').val();
+
+
+        //提交信息
+        var ajax = new $ax(Feng.ctxPath + "/promotionInfo/list1", function(data){
+            console.log(data)
+            $("#money").text(data.money)
+            $("#size").text(data.size)
+        },function(data){
+        });
+        ajax.set("insertTime",insertTime);
+        ajax.set("name",name);
+        ajax.set("driverName",driverName);
+        ajax.set("userName",userName);
+        ajax.set("orderNum",orderNum);
+        ajax.start();
+        TAbnormalOrder.search()
+    }
+
+
+    function resetSearch() {
+
+        //提交信息
+        var ajax = new $ax(Feng.ctxPath + "/promotionInfo/list1", function(data){
+            console.log(data)
+            $("#money").text(data.money)
+            $("#size").text(data.size)
+        },function(data){
+        });
+        ajax.start();
+        TAbnormalOrder.resetSearch()
+    }
+</script>
+@}
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tDriverPromotionActivity/tDriverPromotionActivity1.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tDriverPromotionActivity/tDriverPromotionActivity1.js
index d8dd13b..6879c44 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tDriverPromotionActivity/tDriverPromotionActivity1.js
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tDriverPromotionActivity/tDriverPromotionActivity1.js
@@ -30,7 +30,7 @@
             formatter: function (value, row) {
                     var btn = [];
                     btn += '<a href="javascript:void(0);" onclick="TDriverPromotionActivity.viewUser(' + row.driverId + ')" style="color: #0e9aef">查看下级用户</a>&nbsp;&nbsp;';
-                    btn += '<a href="javascript:void(0);" onclick="TDriverPromotionActivity.info(' + row.id + ')" style="color: #0e9aef">查看收益明细</a>&nbsp;&nbsp;';
+                    btn += '<a href="javascript:void(0);" onclick="TDriverPromotionActivity.viewMoney(' + row.driverId + ')" style="color: #0e9aef">查看收益明细</a>&nbsp;&nbsp;';
                     return btn;
                 }
 
@@ -80,6 +80,20 @@
         fix: false, //不固定
         maxmin: true,
         content: Feng.ctxPath + '/tDriverPromotionActivity/tDriverPromotionActivity_viewUser/' + e
+    });
+    this.layerIndex = index;
+};
+/**
+ * 打开查看详情
+ */
+TDriverPromotionActivity.viewMoney = function (e) {
+    var index = layer.open({
+        type: 2,
+        title: '推广收益明细',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tDriverPromotionActivity/tDriverPromotionActivity_viewMoney/' + e
     });
     this.layerIndex = index;
 };
@@ -193,4 +207,5 @@
     var table = new BSTable(TDriverPromotionActivity.id, "/tDriverPromotionActivity/list1", defaultColunms);
     table.setPaginationType("client");
     TDriverPromotionActivity.table = table.init();
+    TDriverPromotionActivity.search()
 });
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tDriverPromotionActivity/tPromotionOrder.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tDriverPromotionActivity/tPromotionOrder.js
new file mode 100644
index 0000000..d777a1b
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tDriverPromotionActivity/tPromotionOrder.js
@@ -0,0 +1,271 @@
+/**
+ * 快车订单管理初始化
+ */
+var TAbnormalOrder = {
+    id: "TOrderPrivateCarTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TAbnormalOrder.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+        {title: '主键id', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '活动名称', field: 'name', visible: true, align: 'center', valign: 'middle',width:'8%',
+        },
+        {title: '司机名称', field: 'driverName', visible: true, align: 'center', valign: 'middle',
+        },
+        {title: '下级用户', field: 'userName', visible: true, align: 'center', valign: 'middle',
+        },
+        {title: '订单编号', field: 'orderNum', visible: true, align: 'center', valign: 'middle',
+        },
+        {title: '订单金额', field: 'money', visible: false, align: 'center', valign: 'middle'},
+        {title: '司机推广收益', field: 'promotionMoney', visible: true, align: 'center', valign: 'middle',
+        },
+        {title: '收益时间', field: 'successTime', visible: true, align: 'center', valign: 'middle',
+        },
+        {
+            title: '操作', field: 'opt', visible: true, align: 'left', valign: 'middle', width: "10%",
+            formatter: function (value, row) {
+                var btn = [];
+                btn += '<a href="javascript:void(0);" onclick="TAbnormalOrder.info(' + row.orderId +","+row.type+ ')" style="color: #0e9aef">详情</a>&nbsp;&nbsp;';
+                return btn;
+            }
+
+        }
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TAbnormalOrder.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TAbnormalOrder.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 添加快车订单
+ */
+TAbnormalOrder.addOrder =function(){
+    var index = layer.open({
+        type: 2,
+        title: '添加快车订单',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_addOrder'
+    });
+    this.layerIndex = index;
+
+};
+TAbnormalOrder.info =function(orderId,type){
+    console.log(orderId,type)
+    if(type==1){
+        var index = layer.open({
+            type: 2,
+            title: '快车订单详情',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_orderDetail/' +orderId
+        });
+        this.layerIndex = index;
+    }
+    if(type==3){
+        var index = layer.open({
+            type: 2,
+            title: '跨城出行订单详情',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderCrossCity/tOrderCrossCity_detail/' + orderId
+        });
+        this.layerIndex = index;
+    }
+    if(type==2){
+        var index = layer.open({
+            type: 2,
+            title: '出租车订单详情',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderTaxi/tOrderTaxi_update/' + orderId
+        });
+        this.layerIndex = index;
+    }
+
+
+};
+
+/**
+ * 打开查看快车订单详情
+ */
+TAbnormalOrder.orderDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '异常订单详情',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/abnormal/tOrderPrivateCar_orderDetail?tOrderPrivateCarId=' + TAbnormalOrder.seItem.id+'&type='+$("#type").val()
+        });
+        this.layerIndex = index;
+    }
+};
+TAbnormalOrder.orderDetail1 = function () {
+    if (this.check()) {
+        let abnormalStatus = TAbnormalOrder.seItem.abnormalStatus
+        if(abnormalStatus==2){
+            Feng.info("此异常订单已处理")
+            return;
+        }
+        console.log(abnormalStatus)
+        var index = layer.open({
+            type: 2,
+            title: '异常订单详情',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/abnormal/tOrderPrivateCar_orderDetail1?tOrderPrivateCarId=' + TAbnormalOrder.seItem.id+'&type='+$("#type").val()
+        });
+        this.layerIndex = index;
+    }
+};
+
+
+/**
+ * 订单轨迹
+ */
+TAbnormalOrder.trajectory = function(){
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '快车订单轨迹',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tOrderPrivateCar/tOrderPrivateCar_trajectory/' + TAbnormalOrder.seItem.id
+        });
+        this.layerIndex = index;
+    }
+}
+
+
+/**
+ * 删除快车订单
+ */
+TAbnormalOrder.deleteOrder = function () {
+    if (this.check()) {
+        var orderNum = TAbnormalOrder.seItem.orderNum;
+        if (orderNum == "" || orderNum == null || orderNum == undefined) {
+            orderNum = "该订单";
+        } else {
+            orderNum = "【" + orderNum + "】";
+        }
+        if (TAbnormalOrder.seItem.state != 10) {
+            swal("删除失败", "【已取消】状态下才能执行此操作", "warning");
+            return;
+        }
+        swal({
+            title: "您是否确认删除" + orderNum + "?",
+            text: "请谨慎操作,删除后数据无法恢复!",
+            type: "warning",
+            showCancelButton: true,
+            confirmButtonColor: "#DD6B55",
+            confirmButtonText: "删除",
+            closeOnConfirm: false
+        }, function () {
+            var ajax = new $ax(Feng.ctxPath + "/tOrderPrivateCar/delete", function (data) {
+                swal("删除成功", "您已经删除了" + orderNum + "。", "success");
+                TAbnormalOrder.table.refresh();
+            }, function (data) {
+                swal("删除失败", data.responseJSON.message + "!", "warning");
+            });
+            ajax.set("tOrderPrivateCarId", TAbnormalOrder.seItem.id);
+            ajax.start();
+        });
+    }
+};
+
+
+
+
+
+/**
+ * 查询快车订单列表
+ */
+TAbnormalOrder.search = function () {
+    var queryData = {};
+    queryData['insertTime'] = $("#insertTime").val();
+    queryData['name'] = $("#name").val();
+    queryData['driverName'] = $("#driverName").val();
+    queryData['userName'] = $("#userName").val();
+    queryData['orderNum'] = $("#orderNum").val();
+    queryData['driverId'] = $("#driverId").val();
+    TAbnormalOrder.table.refresh({query: queryData});
+};
+
+TAbnormalOrder.exportExcel=function (){
+    let p = "";
+    let insertTime = $('#insertTime').val();
+    let name = $('#name').val();
+    let driverName = $('#driverName').val();
+    let userName = $('#userName').val();
+    let orderNum = $('#orderNum').val();
+    let driverId = $('#driverId').val();
+    if(null != insertTime && '' != insertTime){
+        p += "insertTime=" + insertTime + "&";
+    }
+    if(null != name && '' != name){
+        p += "name=" + name + "&";
+    }
+    if(null != driverName && '' != driverName){
+        p += "driverName=" + driverName + "&";
+    }
+    if(null != userName && '' != userName){
+        p += "userName=" + userName + "&" ;
+    }
+    if(null != orderNum && '' != orderNum){
+        p += "orderNum=" + orderNum + "&" ;
+    }
+    if(null != driverId && '' != driverId){
+        p += "driverId=" + driverId + "&" ;
+    }
+    if('' != p){
+        p = "?" + p.substring(0, p.length - 1);
+    }
+    console.log('p['+p+']')
+    window.location.href = Feng.ctxPath + '/promotionInfo/export' + p;
+}
+
+
+
+TAbnormalOrder.resetSearch = function () {
+    $("#insertTime").val("");
+    $("#name").val("");
+    $("#driverName").val("");
+    $("#userName").val("");
+    $("#orderNum").val("");
+    TAbnormalOrder.search();
+};
+
+
+
+$(function () {
+    var defaultColunms = TAbnormalOrder.initColumn();
+    var table = new BSTable(TAbnormalOrder.id, "/promotionInfo/list?driverId="+$('#driverId').val(), defaultColunms);
+    table.setPaginationType("server");
+    TAbnormalOrder.table = table.init();
+});
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index 9d43a39..f52a9fe 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -1416,7 +1416,11 @@
 				case 2:
 					return orderTaxiService.payTaxiOrder1(payType, orderId, objectId, objectType, type, path, ip);
 				case 3:
-					return orderCrossCityService.payCrossCityOrder1(payType, orderId, objectId, objectType, type);
+					ResultUtil resultUtil = orderCrossCityService.payCrossCityOrder1(payType, orderId, objectId, objectType, type);
+
+					orderCrossCityService.promotion(orderId);
+
+					return resultUtil;
 				case 4:
 					return orderLogisticsService.payLogisticsOrder1(payType, orderId, objectId, objectType, type);
 				case 5:
@@ -2158,11 +2162,13 @@
 			if(orderNo.contains("PR")){
 				orderNo = orderNo.substring(2);
 				orderPrivateCarService.payOrderPrivateCarCallback(Integer.valueOf(orderNo), payId, 1);
+				orderPrivateCarService.promotion(Integer.valueOf(orderNo));
 			}
 			//出租车
 			if(orderNo.contains("TA")){
 				orderNo = orderNo.substring(2);
 				orderTaxiService.payOrderTaxiCallback(Integer.valueOf(orderNo), payId, 1, 0);
+				orderTaxiService.promotion(Integer.valueOf(orderNo));
 			}
 		}catch (Exception e){
 			e.printStackTrace();
@@ -2180,12 +2186,6 @@
 	 */
 	private void promotion(Integer orderType, Integer orderId) {
 		switch (orderType) {
-			case 1:
-				orderPrivateCarService.promotion(orderId);
-				break;
-			case 2:
-				orderTaxiService.promotion(orderId);
-				break;
 			case 3:
 				orderCrossCityService.promotion(orderId);
 				break;
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invoice.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invoice.java
index e1a689b..7dca049 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invoice.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Invoice.java
@@ -84,6 +84,9 @@
     @TableField("insertTime")
     private Date insertTime;
 
+    @TableField("companyId")
+    private Integer companyId;
+
     public Integer getId() {
         return id;
     }
@@ -196,6 +199,13 @@
         this.insertTime = insertTime;
     }
 
+    public Integer getCompanyId() {
+        return companyId;
+    }
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
     @Override
     public String toString() {
         return "Invoice{" +
@@ -213,6 +223,7 @@
                 ", userId=" + userId +
                 ", state=" + state +
                 ", insertTime=" + insertTime +
+                ", companyId=" + companyId +
                 '}';
     }
 }
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