xuhy
2025-08-08 6408a348e14193b0f625673d4e4b22b9fbd1e369
ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/ReportController.java
@@ -9,7 +9,9 @@
import com.stylefeng.guns.core.util.ExcelExportUtil;
import com.stylefeng.guns.core.util.SinataUtil;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.model.Income;
import com.stylefeng.guns.modular.system.model.TCompany;
import com.stylefeng.guns.modular.system.model.TOrderPrivateCar;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -23,11 +25,13 @@
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * 报表控制器
@@ -52,6 +56,10 @@
    @Autowired
    private ITDriverService driverService;
    @Autowired
    private IIncomeService incomeService;
    @Autowired
    private ITOrderPrivateCarService orderPrivateCarService;
@@ -459,7 +467,7 @@
     */
    @ResponseBody
    @RequestMapping(value = "/queryDriverIncomeData", method = RequestMethod.POST)
    public Object queryDriverIncomeData(Integer type, String time, Integer companyId){
    public Object queryDriverIncomeData(String driverName, String time, Integer companyId){
        try {
            String start = null;
            String end = null;
@@ -468,7 +476,53 @@
                end = time.split(" - ")[1];
            }
            Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
            page.setRecords(driverService.queryDriverIncomeData(page,type,start,end,companyId));
            List<Map<String, Object>> maps = driverService.queryDriverIncomeData(page, driverName, start, end, companyId);
            EntityWrapper<Income> incomeEntityWrapper = new EntityWrapper<>();
            incomeEntityWrapper.eq("type",2);
            incomeEntityWrapper.isNotNull("money");
            if (start!=null){
                incomeEntityWrapper.ge("insertTime", start);
                incomeEntityWrapper.le("insertTime", end);
            }
            List<Income> incomes = incomeService.selectList(
                    incomeEntityWrapper
            );
            EntityWrapper<TOrderPrivateCar> driverEntityWrapper = new EntityWrapper<>();
            driverEntityWrapper.isNotNull("driverId");
            if (start!=null){
                driverEntityWrapper.ge("insertTime", start);
                driverEntityWrapper.le("insertTime", end);
            }
            List<TOrderPrivateCar> tOrderPrivateCars = orderPrivateCarService.selectList(driverEntityWrapper);
            for (Map<String, Object> map : maps) {
                Double driverMoney   = 0.0;
                Double platformMoney = 0.0;
                // 司机跑单收入
                List<Income> driver = incomes.stream().filter(e -> e.getUserType().equals(2)
                &&map.get("id").toString().equals(e.getObjectId().toString())).collect(Collectors.toList());
                for (Income income : driver) {
                    driverMoney+=income.getMoney();
                }
                String driverId = map.get("id").toString();
                // 查询司机订单
                List<Integer> orderIds = tOrderPrivateCars.stream().filter(e -> e.getDriverId().equals(Integer.parseInt(driverId)))
                        .map(TOrderPrivateCar::getId).collect(Collectors.toList());
                // 平台收入
                List<Income> platform = incomes.stream().filter(e -> e.getUserType().equals(1)
                        && orderIds.contains(e.getObjectId())).collect(Collectors.toList());
                for (Income income : platform) {
                    platformMoney+=income.getMoney();
                }
                // driverMoney保留两位小数
                driverMoney = new BigDecimal(driverMoney).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
                platformMoney = new BigDecimal(platformMoney).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
                map.put("driverMoney", driverMoney);
                map.put("platformMoney", platformMoney);
            }
            page.setRecords(maps);
            return super.packForBT(page);
        }catch (Exception e){
            e.printStackTrace();
@@ -480,20 +534,66 @@
     * 导出司机收益排行
     * @author yxh
     * @date 2021/4/7 9:32
     * @param type
     * @param driverName
     * @param time
     * @param companyId
     * @param response
     */
    @RequestMapping(value = "/downloadDriverIncomeData", method = RequestMethod.GET)
    public void downloadDriverIncomeData(Integer type, String time, Integer companyId, HttpServletRequest request, HttpServletResponse response){
    public void downloadDriverIncomeData(String driverName, String time, Integer companyId, HttpServletRequest request, HttpServletResponse response){
        String start = null;
        String end = null;
        if(ToolUtil.isNotEmpty(time)){
            start = time.split(" - ")[0];
            end = time.split(" - ")[1];
        }
        List<Map<String, Object>> list = driverService.queryDriverIncomeDataNoPage(type,start,end,companyId);
        List<Map<String, Object>> list = driverService.queryDriverIncomeDataNoPage(driverName,start,end,companyId);
        EntityWrapper<Income> incomeEntityWrapper = new EntityWrapper<>();
        incomeEntityWrapper.eq("type",2);
        incomeEntityWrapper.isNotNull("money");
        if (start!=null){
            incomeEntityWrapper.ge("insertTime", start);
            incomeEntityWrapper.le("insertTime", end);
        }
        List<Income> incomes = incomeService.selectList(
                incomeEntityWrapper
        );
        EntityWrapper<TOrderPrivateCar> driverEntityWrapper = new EntityWrapper<>();
        driverEntityWrapper.isNotNull("driverId");
        if (start!=null){
            driverEntityWrapper.ge("insertTime", start);
            driverEntityWrapper.le("insertTime", end);
        }
        List<TOrderPrivateCar> tOrderPrivateCars = orderPrivateCarService.selectList(driverEntityWrapper);
        for (Map<String, Object> map : list) {
            Double driverMoney   = 0.0;
            Double platformMoney = 0.0;
            // 司机跑单收入
            List<Income> driver = incomes.stream().filter(e -> e.getUserType().equals(2)
                    &&map.get("id").toString().equals(e.getObjectId().toString())).collect(Collectors.toList());
            for (Income income : driver) {
                driverMoney+=income.getMoney();
            }
            String driverId = map.get("id").toString();
            // 查询司机订单
            List<Integer> orderIds = tOrderPrivateCars.stream().filter(e -> e.getDriverId().equals(Integer.parseInt(driverId)))
                    .map(TOrderPrivateCar::getId).collect(Collectors.toList());
            // 平台收入
            List<Income> platform = incomes.stream().filter(e -> e.getUserType().equals(1)
                    && orderIds.contains(e.getObjectId())).collect(Collectors.toList());
            for (Income income : platform) {
                platformMoney+=income.getMoney();
            }
            // driverMoney保留两位小数
            driverMoney = new BigDecimal(driverMoney).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            platformMoney = new BigDecimal(platformMoney).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            map.put("driverMoney", driverMoney);
            map.put("platformMoney", platformMoney);
        }
        // 表格数据
        List<List<String>> dataList = new ArrayList<>();
        // 表头行
@@ -501,11 +601,11 @@
        shellList.add("姓名");
        shellList.add("账号/手机号");
        shellList.add("所属分公司");
        shellList.add("订单总数");
        shellList.add("未支付订单数");
        shellList.add("取消订单数");
        shellList.add("已完成订单数");
        shellList.add("订单总金额");
        shellList.add("未支付订金额");
        shellList.add("实付金额");
        shellList.add("司机收入");
        shellList.add("平台手续费");
        dataList.add(shellList);
        for (Map<String, Object> map : list) {
@@ -531,23 +631,23 @@
            }else{
                shellList.add("0");
            }
            if(SinataUtil.isNotEmpty(map.get("privateCarNotPayNum"))){
                shellList.add(map.get("privateCarNotPayNum").toString());
            }else{
                shellList.add("0");
            }
            if(SinataUtil.isNotEmpty(map.get("privateCarcancelNum"))){
                shellList.add(map.get("privateCarcancelNum").toString());
            }else{
                shellList.add("0");
            }
            if(SinataUtil.isNotEmpty(map.get("privateCarTotalMoney"))){
                shellList.add(map.get("privateCarTotalMoney").toString());
            }else{
                shellList.add("0");
            }
            if(SinataUtil.isNotEmpty(map.get("privateCarNotPayMoney"))){
                shellList.add(map.get("privateCarNotPayMoney").toString());
            if(SinataUtil.isNotEmpty(map.get("payMoney"))){
                shellList.add(map.get("payMoney").toString());
            }else{
                shellList.add("0");
            }
            if(SinataUtil.isNotEmpty(map.get("driverMoney"))){
                shellList.add(map.get("driverMoney").toString());
            }else{
                shellList.add("0");
            }
            if(SinataUtil.isNotEmpty(map.get("platformMoney"))){
                shellList.add(map.get("platformMoney").toString());
            }else{
                shellList.add("0");
            }