yanghb
2023-04-21 0481353111afb43a2322e18530dde26f1d841ead
ManagementTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java
@@ -1,47 +1,16 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.shiro.ShiroKit;
import com.stylefeng.guns.core.util.ExcelUtil;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.IncomeMapper;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import com.stylefeng.guns.modular.system.model.Income;
import com.stylefeng.guns.modular.system.service.IIncomeService;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.Date;
@Service
public class IncomeServiceImpl extends ServiceImpl<IncomeMapper, Income> implements IIncomeService {
    @Autowired
    private ITOrderPrivateCarService orderPrivateCarService;
    @Autowired
    private ITOrderTaxiService orderTaxiService;
    @Autowired
    private ITOrderCrossCityService orderCrossCityService;
    @Autowired
    private ITOrderLogisticsService orderLogisticsService;
    @Autowired
    private ITOrderCallService orderCallService;
    @Autowired
    private ITUserService userService;
    @Autowired
    private ITOrderCharteredCarService orderCharteredCarService;
    @Autowired
    private ITDriverService driverService;
    /**
@@ -64,428 +33,5 @@
        income.setMoney(money);
        income.setInsertTime(new Date());
        this.insert(income);
    }
    @Override
    public Map<String, Object> summaryOfIncomeDetailsList(String insertTime, Integer offset, Integer limit) throws Exception {
        String startTime = "";
        String endTime = "";
        if(ToolUtil.isNotEmpty(insertTime)){
            String[] split = insertTime.split(" - ");
            startTime = split[0];
            endTime = split[1];
        }
        Map<String, Object> maps = new HashMap<>();
        List<Map<String, Object>> list = this.baseMapper.summaryOfIncomeDetailsList(ShiroKit.getUser().getObjectId(), startTime, endTime, offset, limit);
        List<Map<String, Object>> datas = new ArrayList<>();
        for (Map<String, Object> map : list) {
            String insertTime1 = map.get("insertTime").toString();
            List<Map<String, Object>> list2 = this.baseMapper.summaryOfIncomeDetailsListGroupSum(1, ShiroKit.getUser().getObjectId(), insertTime1);
            List<Map<String, Object>> list1 = new ArrayList<>();
            for (Map<String, Object> income : list2) {
                Double money = Double.valueOf(income.get("money").toString());
                Double overtimeDeduction = Double.valueOf(income.get("overtimeDeduction").toString());
                Double complaint = Double.valueOf(income.get("complaint").toString());
                Double payMoney = Double.valueOf(income.get("payMoney").toString());
                Map<String, Object> row = new HashMap<>();
                row.put("orderType", "");//订单类型
                row.put("type", "");//收益类型
                row.put("userName", null == income.get("nickName") ? "" : income.get("nickName").toString());//用户姓名
                row.put("userPhone", null == income.get("phone") ? "" : income.get("phone").toString());//用户电话
                row.put("orderPayMoney", payMoney);//订单支付金额
                row.put("orderRevenue", money);//订单收益
                row.put("taxiCardRevenue", 0);//打车卡收益
                row.put("overtimeDeduction", overtimeDeduction);//超时扣款收益
                row.put("complaintDeductionProceeds", complaint);//投诉扣款收益
                row.put("other", 0);//其他
                if(null != income.get("orderType")){
                    Integer orderType = Integer.valueOf(income.get("orderType").toString());
                    if(orderType != null){
                        switch (orderType){
                            case 1:
                                row.put("orderType", "快车");
                                break;
                            case 2:
                                row.put("orderType", "出租车");
                                break;
                            case 3:
                                row.put("orderType", "跨城出行");
                                break;
                            case 4:
                                row.put("orderType", "同城小件物流");
                                break;
                            case 5:
                                row.put("orderType", "跨城小件物流");
                                break;
                            case 6:
                                row.put("orderType", "包车");
                                break;
                            case 7:
                                row.put("orderType", "95128");
                                break;
                        }
                    }
                }
                Integer type = Integer.valueOf(income.get("type").toString());
                switch (type){
                    case 1:
                        row.put("type", "活动收入");
                        break;
                    case 2:
                        row.put("type", "跑单收入");
                        break;
                    case 3:
                        row.put("type", "取消订单收入");
                        break;
                    case 4:
                        row.put("type", "改派订单收入");
                        break;
                    case 5:
                        row.put("type", "购买出行卡");
                        break;
                    case 6:
                        row.put("type", "感谢费");
                        break;
                    case 7:
                        row.put("type", "超时扣款");
                        break;
                    case 8:
                        row.put("type", "投诉扣款");
                        break;
                    case 9:
                        row.put("type", "小件物流超时退款");
                        break;
                }
                list1.add(row);
            }
            Double sumData = this.baseMapper.getSumData(1, ShiroKit.getUser().getObjectId(), insertTime1, Arrays.asList(5));
            Map<String, Object> row = new HashMap<>();
            row.put("orderType", "");//订单类型
            row.put("type", "购买出行卡");//收益类型
            row.put("userName", "");//用户姓名
            row.put("userPhone", "");//用户电话
            row.put("orderPayMoney", 0);//订单支付金额
            row.put("orderRevenue", 0);//订单收益
            row.put("taxiCardRevenue", null == sumData ? 0 : sumData);//打车卡收益
            row.put("overtimeDeduction", 0);//超时扣款收益
            row.put("complaintDeductionProceeds", 0);//投诉扣款收益
            row.put("other", 0);//其他
            list1.add(row);
            sumData = this.baseMapper.getSumData(1, ShiroKit.getUser().getObjectId(), insertTime1, Arrays.asList(1, 3, 4, 6, 9));
            row = new HashMap<>();
            row.put("orderType", "");//订单类型
            row.put("type", "其他");//收益类型
            row.put("userName", "");//用户姓名
            row.put("userPhone", "");//用户电话
            row.put("orderPayMoney", 0);//订单支付金额
            row.put("orderRevenue", 0);//订单收益
            row.put("taxiCardRevenue", 0);//打车卡收益
            row.put("overtimeDeduction", 0);//超时扣款收益
            row.put("complaintDeductionProceeds", 0);//投诉扣款收益
            row.put("other", sumData);//其他
            list1.add(row);
            if(list1.size() > 0){
                Map<String, Object> data = new HashMap<>();
                data.put("insertTime", insertTime1);
                data.put("list", list1);
                datas.add(data);
            }
        }
        int count = this.baseMapper.summaryOfIncomeDetailsListCount(ShiroKit.getUser().getObjectId(), startTime, endTime);
        Map<String, Object> map = this.baseMapper.summaryOfIncomeDetailsListSum(ShiroKit.getUser().getObjectId(), startTime, endTime);
        Map<String, Object> data = new HashMap<>();
        data.put("insertTime", "合计");
        List<Map<String, Object>> list1 = new ArrayList<>();
        list1.add(map);
        data.put("list", list1);
        datas.add(data);
        maps.put("rows", datas);
        maps.put("total", count);
        return maps;
    }
    @Override
    public HSSFWorkbook exportSummaryOfIncomeDetails(String insertTime) throws Exception {
        String startTime = "";
        String endTime = "";
        if(ToolUtil.isNotEmpty(insertTime)){
            String[] split = insertTime.split(" - ");
            startTime = split[0];
            endTime = split[1];
        }
        List<Map<String, Object>> list = this.baseMapper.summaryOfIncomeDetailsList(ShiroKit.getUser().getObjectId(), startTime, endTime, null, null);
        List<Map<String, Object>> datas = new ArrayList<>();
        Integer num = 0;
        for (Map<String, Object> map : list) {
            String insertTime1 = map.get("insertTime").toString();
            List<Map<String, Object>> list2 = this.baseMapper.summaryOfIncomeDetailsListGroupSum(1, ShiroKit.getUser().getObjectId(), insertTime1);
            List<Map<String, Object>> list1 = new ArrayList<>();
            for (Map<String, Object> income : list2) {
                Double money = Double.valueOf(income.get("money").toString());
                Double overtimeDeduction = Double.valueOf(income.get("overtimeDeduction").toString());
                Double complaint = Double.valueOf(income.get("complaint").toString());
                Double payMoney = Double.valueOf(income.get("payMoney").toString());
                Map<String, Object> row = new HashMap<>();
                row.put("orderType", "");//订单类型
                row.put("type", "");//收益类型
                row.put("userName", null == income.get("nickName") ? "" : income.get("nickName").toString());//用户姓名
                row.put("userPhone", null == income.get("phone") ? "" : income.get("phone").toString());//用户电话
                row.put("orderPayMoney", payMoney);//订单支付金额
                row.put("orderRevenue", money);//订单收益
                row.put("taxiCardRevenue", 0);//打车卡收益
                row.put("overtimeDeduction", overtimeDeduction);//超时扣款收益
                row.put("complaintDeductionProceeds", complaint);//投诉扣款收益
                row.put("other", 0);//其他
                if(null != income.get("orderType")){
                    Integer orderType = Integer.valueOf(income.get("orderType").toString());
                    if(orderType != null){
                        switch (orderType){
                            case 1:
                                row.put("orderType", "快车");
                                break;
                            case 2:
                                row.put("orderType", "出租车");
                                break;
                            case 3:
                                row.put("orderType", "跨城出行");
                                break;
                            case 4:
                                row.put("orderType", "同城小件物流");
                                break;
                            case 5:
                                row.put("orderType", "跨城小件物流");
                                break;
                            case 6:
                                row.put("orderType", "包车");
                                break;
                            case 7:
                                row.put("orderType", "95128");
                                break;
                        }
                    }
                }
                Integer type = Integer.valueOf(income.get("type").toString());
                switch (type){
                    case 1:
                        row.put("type", "活动收入");
                        break;
                    case 2:
                        row.put("type", "跑单收入");
                        break;
                    case 3:
                        row.put("type", "取消订单收入");
                        break;
                    case 4:
                        row.put("type", "改派订单收入");
                        break;
                    case 5:
                        row.put("type", "购买出行卡");
                        break;
                    case 6:
                        row.put("type", "感谢费");
                        break;
                    case 7:
                        row.put("type", "超时扣款");
                        break;
                    case 8:
                        row.put("type", "投诉扣款");
                        break;
                    case 9:
                        row.put("type", "小件物流超时退款");
                        break;
                }
                list1.add(row);
            }
            Double sumData = this.baseMapper.getSumData(1, ShiroKit.getUser().getObjectId(), insertTime1, Arrays.asList(5));
            Map<String, Object> row = new HashMap<>();
            row.put("orderType", "");//订单类型
            row.put("type", "购买出行卡");//收益类型
            row.put("userName", "");//用户姓名
            row.put("userPhone", "");//用户电话
            row.put("orderPayMoney", 0);//订单支付金额
            row.put("orderRevenue", 0);//订单收益
            row.put("taxiCardRevenue", sumData);//打车卡收益
            row.put("overtimeDeduction", 0);//超时扣款收益
            row.put("complaintDeductionProceeds", 0);//投诉扣款收益
            row.put("other", 0);//其他
            list1.add(row);
            sumData = this.baseMapper.getSumData(1, ShiroKit.getUser().getObjectId(), insertTime1, Arrays.asList(1, 3, 4, 6, 9));
            row = new HashMap<>();
            row.put("orderType", "");//订单类型
            row.put("type", "其他");//收益类型
            row.put("userName", "");//用户姓名
            row.put("userPhone", "");//用户电话
            row.put("orderPayMoney", 0);//订单支付金额
            row.put("orderRevenue", 0);//订单收益
            row.put("taxiCardRevenue", 0);//打车卡收益
            row.put("overtimeDeduction", 0);//超时扣款收益
            row.put("complaintDeductionProceeds", 0);//投诉扣款收益
            row.put("other", sumData);//其他
            list1.add(row);
            if(list1.size() > 0){
                Map<String, Object> data = new HashMap<>();
                data.put("insertTime", insertTime1);
                data.put("list", list1);
                datas.add(data);
            }
            num += list1.size();
        }
        String[] title = new String[]{"时间", "订单", "收益类型", "用户名称", "用户手机号", "订单支付金额", "平台订单收益", "打车卡收益", "超时扣款收益", "司机投诉扣款平台收益", "其他收入", "收入合计"};
        String[][] values = new String[num][12];
        int n = 0;
        for (int i = 0; i < datas.size(); i++) {
            Map<String, Object> map = datas.get(i);
            Object insertTime1 = map.get("insertTime");
            List<Map<String, Object>> list1 = (List<Map<String, Object>>)map.get("list");
            for (int j = 0; j < list1.size(); j++) {
                Map<String, Object> map1 = list1.get(j);
                values[n][0] = insertTime1.toString();
                values[n][1] = null != map1.get("orderType") ? map1.get("orderType").toString() : "";
                values[n][2] = null != map1.get("type") ? map1.get("type").toString() : "";
                values[n][3] = null != map1.get("userName") ? map1.get("userName").toString() : "";
                values[n][4] = null != map1.get("userPhone") ? map1.get("userPhone").toString() : "";
                values[n][5] = null != map1.get("orderPayMoney") ? map1.get("orderPayMoney").toString() : "";
                values[n][6] = null != map1.get("orderRevenue") ? map1.get("orderRevenue").toString() : "";
                values[n][7] = null != map1.get("taxiCardRevenue") ? map1.get("taxiCardRevenue").toString() : "";
                values[n][8] = null != map1.get("overtimeDeduction") ? map1.get("overtimeDeduction").toString() : "";
                values[n][9] = null != map1.get("complaintDeductionProceeds") ? map1.get("complaintDeductionProceeds").toString() : "";
                values[n][10] = null != map1.get("other") ? map1.get("other").toString() : "";
                BigDecimal all = new BigDecimal(ToolUtil.isNotEmpty(map1.get("orderRevenue")) ? map1.get("orderRevenue").toString() : "0")
                        .add(new BigDecimal(ToolUtil.isNotEmpty(map1.get("taxiCardRevenue")) ? map1.get("taxiCardRevenue").toString() : "0"))
                        .add(new BigDecimal(ToolUtil.isNotEmpty(map1.get("overtimeDeduction")) ? map1.get("overtimeDeduction").toString() : "0"))
                        .add(new BigDecimal(ToolUtil.isNotEmpty(map1.get("complaintDeductionProceeds")) ? map1.get("complaintDeductionProceeds").toString() : "0"))
                        .add(new BigDecimal(ToolUtil.isNotEmpty(map1.get("other")) ? map1.get("other").toString() : "0"));
                values[n][11] = all.toPlainString();
                n++;
            }
        }
        return ExcelUtil.getHSSFWorkbookTime("收入明细汇总", title, values, null,insertTime);
    }
    @Override
    public Map<String, Object> summaryOfSpendingDetailsList(String insertTime, Integer offset, Integer limit) throws Exception {
        String startTime = "";
        String endTime = "";
        if(ToolUtil.isNotEmpty(insertTime)){
            String[] split = insertTime.split(" - ");
            startTime = split[0];
            endTime = split[1];
        }
        Map<String, Object> maps = new HashMap<>();
        List<Map<String, Object>> list = this.baseMapper.summaryOfSpendingDetailsList(ShiroKit.getUser().getObjectId(), startTime, endTime, offset, limit);
        List<Map<String, Object>> datas = new ArrayList<>();
        for (Map<String, Object> map : list) {
            String insertTime1 = map.get("insertTime").toString();
            List<Map<String, Object>> list1 = this.baseMapper.summaryOfSpendingDetailsList1(insertTime1);
            Map<String, Object> data = new HashMap<>();
            data.put("insertTime", insertTime1);
            data.put("list", list1);
            datas.add(data);
        }
        int count = this.baseMapper.summaryOfSpendingDetailsListCount(ShiroKit.getUser().getObjectId(), startTime, endTime);
        Map<String, Object> map = this.baseMapper.summaryOfSpendingDetailsListSum(ShiroKit.getUser().getObjectId(), startTime, endTime);
        Map<String, Object> data = new HashMap<>();
        data.put("insertTime", "合计");
        List<Map<String, Object>> list1 = new ArrayList<>();
        list1.add(map);
        data.put("list", list1);
        datas.add(data);
        maps.put("rows", datas);
        maps.put("total", count);
        return maps;
    }
    @Override
    public HSSFWorkbook exportSummaryOfSpendingDetails(String insertTime) throws Exception {
        String startTime = "";
        String endTime = "";
        if(ToolUtil.isNotEmpty(insertTime)){
            String[] split = insertTime.split(" - ");
            startTime = split[0];
            endTime = split[1];
        }
        int num = 0;
        List<Map<String, Object>> list = this.baseMapper.summaryOfSpendingDetailsList(ShiroKit.getUser().getObjectId(), startTime, endTime, null, null);
        List<Map<String, Object>> datas = new ArrayList<>();
        for (Map<String, Object> map : list) {
            String insertTime1 = map.get("insertTime").toString();
            List<Map<String, Object>> list1 = this.baseMapper.summaryOfSpendingDetailsList1(insertTime1);
            Map<String, Object> data = new HashMap<>();
            data.put("insertTime", insertTime1);
            data.put("list", list1);
            datas.add(data);
            num += list1.size();
        }
        String[] title = new String[]{"时间", "订单类型", "收益类型", "司机名称", "司机手机号", "应支付金额", "平台奖励", "其他支出", "支出合计"};
        String[][] values = new String[num][12];
        int n = 0;
        for (int i = 0; i < datas.size(); i++) {
            Map<String, Object> map = datas.get(i);
            Object insertTime1 = map.get("insertTime");
            List<Map<String, Object>> list1 = (List<Map<String, Object>>)map.get("list");
            for (int j = 0; j < list1.size(); j++) {
                Map<String, Object> map1 = list1.get(j);
                values[n][0] = insertTime1.toString();
                values[n][1] = "";
                if(null != map1.get("orderType")){
                    switch (Integer.valueOf(map1.get("orderType").toString())){
                        case 1:
                            values[n][1] = "快车";
                            break;
                        case 2:
                            values[n][1] = "出租车";
                            break;
                        case 3:
                            values[n][1] = "跨城跨城出行小件物流";
                            break;
                        case 4:
                            values[n][1] = "同城小件物流";
                            break;
                        case 5:
                            values[n][1] = "跨城小件物流";
                            break;
                        case 6:
                            values[n][1] = "包车";
                            break;
                        case 7:
                            values[n][1] = "95128";
                            break;
                    }
                }
                values[n][2] = null != map1.get("type") ? map1.get("type").toString() : "";
                values[n][3] = null != map1.get("name") ? map1.get("name").toString() : "";
                values[n][4] = null != map1.get("phone") ? map1.get("phone").toString() : "";
                values[n][6] = null != map1.get("orderRevenue") ? map1.get("orderRevenue").toString() : "";
                values[n][7] = null != map1.get("activityAward") ? map1.get("activityAward").toString() : "";
                values[n][10] = null != map1.get("other") ? map1.get("other").toString() : "";
                values[n][11] = null != map1.get("all") ? map1.get("all").toString() : "";
                n++;
            }
        }
        return ExcelUtil.getHSSFWorkbookTime("支出明细汇总", title, values, null,insertTime);
    }
}