Pu Zhibing
2025-02-14 de3858253f29abe18c76dd7dcdaa7db4c1fd372e
开发新增加功能
17个文件已修改
3543 ■■■■ 已修改文件
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/TReportLossController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/TSubsidyController.java 3124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TCompanyMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTaxiMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TReportLossMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCouponRecordMapper.xml 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TSystemPrice.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/resources/application.yml 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSystemPrice/tSmallPrice_add.html 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSystemPrice/tSmallPrice_edit.html 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSystemPrice/tSystemPrice_add.html 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSystemPrice/tSystemPrice_edit.html 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/report/operationalData.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/tReportLoss/tReportLoss.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/tSystemPrice/tSmallPrice_info.js 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/tSystemPrice/tSystemPrice_info.js 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/TReportLossController.java
@@ -155,7 +155,7 @@
        tReportLoss.setDisposeInfo(info);
        tReportLoss.setStatus(2);
        tReportLoss.setHandleTime(new Date());
        tReportLoss.setHandleUserId(ShiroKit.getUser().getObjectId());
        tReportLoss.setHandleUserId(ShiroKit.getUser().getId());
        boolean b = tReportLossService.updateById(tReportLoss);
        if(b){
            try {
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/TSubsidyController.java
@@ -41,1574 +41,1584 @@
@Controller
@RequestMapping("/subsidy")
public class TSubsidyController extends BaseController {
    private String PREFIX = "/system/subsidy/";
    @RequestMapping("/grant")
    public String index( Model model) {
        return PREFIX + "grant.html";
    }
    @RequestMapping("/use")
    public String watter( Model model) {
        return PREFIX + "use.html";
    }
    @Autowired
    private IIncomeService tIncomeService;
    @Autowired
    private ITOrderPrivateCarService orderPrivateCarService;
    @Autowired
    private ITOrderLogisticsService orderLogisticsService;
    @Autowired
    private IIncomeService incomeService;
    @Autowired
    private ISettlementRecordService settlementRecordService;
    @Autowired
    private IBalanceUsageRecordService balanceUsageRecordService;
    @Autowired
    private ISettlementDetailService settlementDetailService;
    @Autowired
    private ITDriverService driverService;
    @Autowired
    private ITPubTransactionDetailsService pubTransactionDetailsService;
    @Autowired
    private ITPubWithdrawalService pubWithdrawalService;
    @Autowired
    private IPaymentRecordService paymentRecordService;
    @Autowired
    private ITUserService appUserService;
    @Autowired
    private IUserCouponRecordService userCouponRecordService;
    @Autowired
    private IUserRedPacketRecordService userRedPacketRecordService;
    @Autowired
    private IDriverActivityHistoryService driverActivityHistoryService;
    @Autowired
    private IUserActivityRedenvelopeService userActivityRedenvelopeService;
    @Autowired
    private IUserActivityService userActivityService;
    @Autowired
    private ISysCouponActivityService sysCouponActivityService;
    @Autowired
    private ISysCouponRecordService sysCouponRecordService;
    @Autowired
    private IUserActivityDiscount1Service userActivityDiscount1Service;
    public static void main(String[] args) {
        String temp = "[{\"money\":14.46,\"id\":91},{\"money\":1,\"id\":90}]";
        JSONArray objects = JSONArray.parseArray(temp);
        BigDecimal temp1 = new BigDecimal(BigInteger.ZERO);
        for (int i = 0; i < objects.size(); i++) {
            String string = objects.getJSONObject(i).getString("money");
            temp1 = temp1.add(new BigDecimal(string));
        }
        System.err.println(temp1);
    }
    /**
     * 使用补贴统计
     */
    @RequestMapping(value = "/use/list")
    @ResponseBody
    public Object list1(Integer time,String insertTime,Integer type) {
        if (time == null){
            time = 1;
        }
        String beginTime = null;
        String endTime = null;
        LocalDateTime start =null;
        LocalDateTime end =null;
        // 获取当前日期
        LocalDate today = LocalDate.now();
        if (ToolUtil.isNotEmpty(insertTime)){
            beginTime = insertTime.split(" - ")[0];
            endTime = insertTime.split(" - ")[1];
            LocalDate s = LocalDate.parse(beginTime);
            LocalDate e = LocalDate.parse(endTime);
            start = s.atStartOfDay();
            end = e.atTime(LocalTime.MAX);
        }else if (time!=null) {
            switch (time) {
                case 1:
                    // 获取当天的 00:00:00 和 23:59:59
                    LocalDateTime startOfDay = today.atStartOfDay();
                    LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
                    start = startOfDay;
                    end = endOfDay;
                    break;
                case 2:
                    // 获取本周第一天的日期和时间
                    LocalDate firstDayOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
                    LocalDateTime startOfWeek = firstDayOfWeek.atStartOfDay();
                    // 获取本周最后一天的日期和时间
                    LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
                    LocalDateTime endOfWeek = lastDayOfWeek.atTime(LocalTime.MAX);
                    start = startOfWeek;
                    end = endOfWeek;
                    break;
                case 3:
                    LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
                    LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay();
                    // 获取本月最后一天的日期和时间
                    LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
                    LocalDateTime endOfMonth = lastDayOfMonth.atTime(LocalTime.MAX);
                    start = startOfMonth;
                    end = endOfMonth;
                    break;
                case 4:
                    // 获取本年第一天的日期和时间
                    LocalDate firstDayOfYear = LocalDate.of(today.getYear(), Month.JANUARY, 1);
                    LocalDateTime startOfYear = firstDayOfYear.atStartOfDay();
                    // 获取本年最后一天的日期和时间
                    LocalDate lastDayOfYear = LocalDate.of(today.getYear(), Month.DECEMBER, 31);
                    LocalDateTime endOfYear = lastDayOfYear.atTime(LocalTime.MAX);
                    start = startOfYear;
                    end = endOfYear;
                    break;
            }
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 列表res
        List<GrantVO> res = new ArrayList<>();
        // 专车订单
        List<TOrderPrivateCar> tOrderPrivateCars = new ArrayList<>();
        // 小件物流
        List<TOrderLogistics> tOrderLogistics = new ArrayList<>();
        // 优惠券领取记录
        List<TOrderPrivateCar> userCouponRecords = new ArrayList<>();
        List<TOrderLogistics> userCouponRecords1 = new ArrayList<>();
        // 红包领取记录
        List<TOrderPrivateCar> userRedPacketRecords = new ArrayList<>();
        List<TOrderLogistics> userRedPacketRecords1 = new ArrayList<>();
        // 司机消费
        List<BalanceUsageRecord> balanceUsageRecords = new ArrayList<>();
        // 司机提现
        List<TPubWithdrawal> driverWithdrawal = new ArrayList<>();
        Wrapper<TPubWithdrawal> driverWrapper = new EntityWrapper<TPubWithdrawal>()
                ;
        // 专车wrapper
        Wrapper<TOrderPrivateCar> between = new EntityWrapper<TOrderPrivateCar>()
                ;
        // 小件物流wrapper
        Wrapper<TOrderLogistics> between1 = new EntityWrapper<TOrderLogistics>()
                ;
        // 已使用优惠券记录wrapper
        Wrapper<TOrderPrivateCar> between2 = new EntityWrapper<TOrderPrivateCar>()
                ;
        Wrapper<TOrderLogistics> between22 = new EntityWrapper<TOrderLogistics>()
                ;
        // 已使用红包记录wrapper
        Wrapper<TOrderPrivateCar> between3 = new EntityWrapper<TOrderPrivateCar>()
                ;
        Wrapper<TOrderLogistics> between33 = new EntityWrapper<TOrderLogistics>()
                ;
        // 司机已消费金额
        Wrapper<BalanceUsageRecord> between4 = new EntityWrapper<BalanceUsageRecord>()
                ;
        if (time == 5 && !StringUtils.hasLength(insertTime)){
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
                    ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
                    ;
            // 已使用优惠券记录wrapper
           between2 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
                 ;
            between22 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
                 ;
            // 已使用红包记录wrapper
            between3 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
              ;
            between33 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
                 ;
            // 司机已消费金额
            between4 = new EntityWrapper<BalanceUsageRecord>()
                    .eq("type",1)
                    .ne("purpose", 6)
          ;
            // 司机提现
            driverWrapper = new EntityWrapper<TPubWithdrawal>()
                    .eq("state", 2)
                    .eq("type",1)
                    .eq("userType", 2)
                    ;
            ;
        }else{
            driverWrapper = new EntityWrapper<TPubWithdrawal>()
                    .eq("state", 2)
                    .eq("type",1)
                    .eq("userType", 2)
                    .between("insertTime", start, end);
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end);
            // 小件物流wrapper
             between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end);
            // 已使用优惠券记录wrapper
            between2 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
                    .between("insertTime", start, end);
            between22 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
                    .between("insertTime", start, end);
            // 已使用红包记录wrapper
            between3 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
                    .between("insertTime", start, end);
            between33 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
                    .between("insertTime", start, end);
            // 司机已消费金额
            between4 = new EntityWrapper<BalanceUsageRecord>()
                    .ne("purpose", 6)
                    .eq("type",1)
                    .between("createTime", start, end);
        }
        // 司机提现wrapper
        if (type!=null){
            switch (type){
                case 1:
                    // 红包
                    userRedPacketRecords = orderPrivateCarService.selectList(between3);
                    userRedPacketRecords1 = orderLogisticsService.selectList(between33);
                    break;
                case 2:
                    userCouponRecords = orderPrivateCarService.selectList(between2);
                    userCouponRecords1 = orderLogisticsService.selectList(between22);
                    // 优惠券
                    break;
                case 3:
                    // 司机消费记录
                    balanceUsageRecords = balanceUsageRecordService.selectList(between4);
                    driverWithdrawal = pubWithdrawalService.selectList(driverWrapper);
                    break;
                case 4:
                    // 专车订单
                    tOrderPrivateCars = orderPrivateCarService.selectList(between);
                    // 小件物流订单
                    tOrderLogistics = orderLogisticsService.selectList(between1);
                    break;
            }
        }else{
            // 红包
            userRedPacketRecords = orderPrivateCarService.selectList(between3);
            userRedPacketRecords1 = orderLogisticsService.selectList(between33);
            // 优惠券
            userCouponRecords = orderPrivateCarService.selectList(between2);
            userCouponRecords1 = orderLogisticsService.selectList(between22);
            // 专车订单
            tOrderPrivateCars = orderPrivateCarService.selectList(between);
            // 小件物流订单
            tOrderLogistics = orderLogisticsService.selectList(between1);
            // 消费
            balanceUsageRecords = balanceUsageRecordService.selectList(between4);
            // 提现
            driverWithdrawal = pubWithdrawalService.selectList(driverWrapper);
        }
        // 已发放补贴总额
        BigDecimal total = new BigDecimal("0");
        // 已使用折扣总额(用户端)
        BigDecimal discount = new BigDecimal("0");
        // 已使用红包总额(用户端)
        BigDecimal redPackage = new BigDecimal("0");
        // 已使用优惠券总额(用户端)
        BigDecimal coupon = new BigDecimal("0");
        // 已使用司机奖励总额(司机端)
        BigDecimal driver = new BigDecimal("0");
        // 司机已消费
        BigDecimal driverConsume = new BigDecimal("0");
        // 司机已提现
        BigDecimal driverWithdrawal1 = new BigDecimal("0");
        // 一次性查询所有用户信息
        Map<Integer, TUser> userMap = appUserService.selectList(new EntityWrapper<TUser>())
                .stream()
                .collect(Collectors.toMap(TUser::getId, user -> user));
        Map<Integer, TDriver> driverMap = driverService.selectList(new EntityWrapper<TDriver>())
                .stream()
                .collect(Collectors.toMap(TDriver::getId, user -> user));
        // 查询已使用折扣总额
        for (TOrderPrivateCar tOrderPrivateCar : tOrderPrivateCars) {
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+tOrderPrivateCar.getOrderNum());
            res.add(grantVO);
        }
        for (TOrderLogistics tOrderPrivateCar : tOrderLogistics) {
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+tOrderPrivateCar.getOrderNum());
            res.add(grantVO);
        }
        // 查询已使用红包总额
        for (TOrderPrivateCar userRedPacketRecord : userRedPacketRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            if (userRedPacketRecord.getRedPacketMoney()==null){
                continue;
            }
            if (userRedPacketRecord.getRedPacketMoney().compareTo(new BigDecimal("0"))==0){
                continue;
            }
            grantVO.setAmount(userRedPacketRecord.getRedPacketMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+userRedPacketRecord.getOrderNum());
            res.add(grantVO);
            redPackage = redPackage.add(new BigDecimal(userRedPacketRecord.getRedPacketMoney().toString()));
        }
        for (TOrderLogistics userRedPacketRecord : userRedPacketRecords1) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            if (userRedPacketRecord.getRedPacketMoney()==null){
                continue;
            }
            if (userRedPacketRecord.getRedPacketMoney().compareTo(new BigDecimal("0"))==0){
                continue;
            }
            grantVO.setAmount(userRedPacketRecord.getRedPacketMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+userRedPacketRecord.getOrderNum());
            res.add(grantVO);
            redPackage = redPackage.add(new BigDecimal(userRedPacketRecord.getRedPacketMoney().toString()));
        }
        // 查询已领取优惠券总额
        for (TOrderPrivateCar userCouponRecord : userCouponRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            grantVO.setType("优惠券");
            grantVO.setAmount(userCouponRecord.getCouponMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+userCouponRecord.getOrderNum());
            coupon = coupon.add(new BigDecimal(userCouponRecord.getCouponMoney().toString()));
            res.add(grantVO);
        }
        for (TOrderLogistics userCouponRecord : userCouponRecords1) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            grantVO.setType("优惠券");
            grantVO.setAmount(userCouponRecord.getCouponMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+userCouponRecord.getOrderNum());
            coupon = coupon.add(new BigDecimal(userCouponRecord.getCouponMoney().toString()));
            res.add(grantVO);
        }
        // 司机消费奖励
        for (BalanceUsageRecord balanceUsageRecord : balanceUsageRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(balanceUsageRecord.getCreateTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(balanceUsageRecord.getMoney().toString());
            TDriver tUser = driverMap.get(balanceUsageRecord.getDriverId());
            if (tUser!=null){
                grantVO.setName(tUser.getFirstName()+tUser.getLastName());
            }
            switch (balanceUsageRecord.getPurpose()){
                case 1:
                    //打车支付
                    grantVO.setRemark("余额支付"+"【打车支付】");
                    break;
                case 2:
                    grantVO.setRemark("余额支付"+"【包裹支付】");
                    // 包裹支付
                    break;
                case 3:
                    grantVO.setRemark("余额支付"+"【日结算】");
                    // 日结算
                    break;
                case 4:
                    grantVO.setRemark("余额支付"+"【周结算】");
                    // 周结算
                    break;
                case 5:
                    grantVO.setRemark("余额支付"+"【月结算】");
                    // 月结算
                    break;
            }
            driverConsume = driverConsume.add(new BigDecimal(balanceUsageRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 司机提现
        for (TPubWithdrawal balanceUsageRecord : driverWithdrawal) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(balanceUsageRecord.getInsertTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(balanceUsageRecord.getMoney().toString());
            TDriver tUser = driverMap.get(balanceUsageRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getFirstName()+tUser.getLastName());
            }
            grantVO.setRemark("司机提现");
            driverWithdrawal1 = driverWithdrawal1.add(new BigDecimal(balanceUsageRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 总额
        total = total.add(redPackage).add(coupon).add(discount).add(driverConsume).add(driverWithdrawal1);
        // 已使用司机奖励合计
        driver = driverConsume.add(driverWithdrawal1);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 对集合进行排序
        res.sort((a, b) -> {
            LocalDateTime timeA = LocalDateTime.parse(a.getInsertTime(), formatter);
            LocalDateTime timeB = LocalDateTime.parse(b.getInsertTime(), formatter);
            return timeA.compareTo(timeB);
        });
        return res;
    }
    @RequestMapping(value = "/use/getCount")
    @ResponseBody
    public Object getCount1(Integer time,String insertTime,Integer type) {
        if (time == null){
            time = 1;
        }
        String beginTime = null;
        String endTime = null;
        LocalDateTime start =null;
        LocalDateTime end =null;
        // 获取当前日期
        LocalDate today = LocalDate.now();
        if (ToolUtil.isNotEmpty(insertTime)){
            beginTime = insertTime.split(" - ")[0];
            endTime = insertTime.split(" - ")[1];
            LocalDate s = LocalDate.parse(beginTime);
            LocalDate e = LocalDate.parse(endTime);
            start = s.atStartOfDay();
            end = e.atTime(LocalTime.MAX);
        }else if (time!=null) {
            switch (time) {
                case 1:
                    // 获取当天的 00:00:00 和 23:59:59
                    LocalDateTime startOfDay = today.atStartOfDay();
                    LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
                    start = startOfDay;
                    end = endOfDay;
                    break;
                case 2:
                    // 获取本周第一天的日期和时间
                    LocalDate firstDayOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
                    LocalDateTime startOfWeek = firstDayOfWeek.atStartOfDay();
                    // 获取本周最后一天的日期和时间
                    LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
                    LocalDateTime endOfWeek = lastDayOfWeek.atTime(LocalTime.MAX);
                    start = startOfWeek;
                    end = endOfWeek;
                    break;
                case 3:
                    LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
                    LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay();
                    // 获取本月最后一天的日期和时间
                    LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
                    LocalDateTime endOfMonth = lastDayOfMonth.atTime(LocalTime.MAX);
                    start = startOfMonth;
                    end = endOfMonth;
                    break;
                case 4:
                    // 获取本年第一天的日期和时间
                    LocalDate firstDayOfYear = LocalDate.of(today.getYear(), Month.JANUARY, 1);
                    LocalDateTime startOfYear = firstDayOfYear.atStartOfDay();
                    // 获取本年最后一天的日期和时间
                    LocalDate lastDayOfYear = LocalDate.of(today.getYear(), Month.DECEMBER, 31);
                    LocalDateTime endOfYear = lastDayOfYear.atTime(LocalTime.MAX);
                    start = startOfYear;
                    end = endOfYear;
                    break;
            }
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 列表res
        List<GrantVO> res = new ArrayList<>();
        // 专车订单
        List<TOrderPrivateCar> tOrderPrivateCars = new ArrayList<>();
        // 小件物流
        List<TOrderLogistics> tOrderLogistics = new ArrayList<>();
        // 优惠券领取记录
        List<TOrderPrivateCar> userCouponRecords = new ArrayList<>();
        List<TOrderLogistics> userCouponRecords1 = new ArrayList<>();
        // 红包领取记录
        List<TOrderPrivateCar> userRedPacketRecords = new ArrayList<>();
        List<TOrderLogistics> userRedPacketRecords1 = new ArrayList<>();
        // 司机消费
        List<BalanceUsageRecord> balanceUsageRecords = new ArrayList<>();
        // 司机提现
        List<TPubWithdrawal> driverWithdrawal = new ArrayList<>();
        Wrapper<TPubWithdrawal> driverWrapper = new EntityWrapper<TPubWithdrawal>()
                ;
        // 专车wrapper
        Wrapper<TOrderPrivateCar> between = new EntityWrapper<TOrderPrivateCar>()
                ;
        // 小件物流wrapper
        Wrapper<TOrderLogistics> between1 = new EntityWrapper<TOrderLogistics>()
                ;
        // 已使用优惠券记录wrapper
        Wrapper<TOrderPrivateCar> between2 = new EntityWrapper<TOrderPrivateCar>()
                ;
        Wrapper<TOrderLogistics> between22 = new EntityWrapper<TOrderLogistics>()
                ;
        // 已使用红包记录wrapper
        Wrapper<TOrderPrivateCar> between3 = new EntityWrapper<TOrderPrivateCar>()
                ;
        Wrapper<TOrderLogistics> between33 = new EntityWrapper<TOrderLogistics>()
                ;
        // 司机已消费金额
        Wrapper<BalanceUsageRecord> between4 = new EntityWrapper<BalanceUsageRecord>()
                ;
        if (time == 5 && !StringUtils.hasLength(insertTime)){
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
    private String PREFIX = "/system/subsidy/";
    @RequestMapping("/grant")
    public String index(Model model) {
        return PREFIX + "grant.html";
    }
    @RequestMapping("/use")
    public String watter(Model model) {
        return PREFIX + "use.html";
    }
    @Autowired
    private IIncomeService tIncomeService;
    @Autowired
    private ITOrderPrivateCarService orderPrivateCarService;
    @Autowired
    private ITOrderLogisticsService orderLogisticsService;
    @Autowired
    private IIncomeService incomeService;
    @Autowired
    private ISettlementRecordService settlementRecordService;
    @Autowired
    private IBalanceUsageRecordService balanceUsageRecordService;
    @Autowired
    private ISettlementDetailService settlementDetailService;
    @Autowired
    private ITDriverService driverService;
    @Autowired
    private ITPubTransactionDetailsService pubTransactionDetailsService;
    @Autowired
    private ITPubWithdrawalService pubWithdrawalService;
    @Autowired
    private IPaymentRecordService paymentRecordService;
    @Autowired
    private ITUserService appUserService;
    @Autowired
    private IUserCouponRecordService userCouponRecordService;
    @Autowired
    private IUserRedPacketRecordService userRedPacketRecordService;
    @Autowired
    private IDriverActivityHistoryService driverActivityHistoryService;
    @Autowired
    private IUserActivityRedenvelopeService userActivityRedenvelopeService;
    @Autowired
    private IUserActivityService userActivityService;
    @Autowired
    private ISysCouponActivityService sysCouponActivityService;
    @Autowired
    private ISysCouponRecordService sysCouponRecordService;
    @Autowired
    private IUserActivityDiscount1Service userActivityDiscount1Service;
    public static void main(String[] args) {
        String temp = "[{\"money\":14.46,\"id\":91},{\"money\":1,\"id\":90}]";
        JSONArray objects = JSONArray.parseArray(temp);
        BigDecimal temp1 = new BigDecimal(BigInteger.ZERO);
        for (int i = 0; i < objects.size(); i++) {
            String string = objects.getJSONObject(i).getString("money");
            temp1 = temp1.add(new BigDecimal(string));
        }
        System.err.println(temp1);
    }
    /**
     * 使用补贴统计
     */
    @RequestMapping(value = "/use/list")
    @ResponseBody
    public Object list1(Integer time, String insertTime, Integer type) {
        if (time == null) {
            time = 1;
        }
        String beginTime = null;
        String endTime = null;
        LocalDateTime start = null;
        LocalDateTime end = null;
        // 获取当前日期
        LocalDate today = LocalDate.now();
        if (ToolUtil.isNotEmpty(insertTime)) {
            beginTime = insertTime.split(" - ")[0];
            endTime = insertTime.split(" - ")[1];
            LocalDate s = LocalDate.parse(beginTime);
            LocalDate e = LocalDate.parse(endTime);
            start = s.atStartOfDay();
            end = e.atTime(LocalTime.MAX);
        } else if (time != null) {
            switch (time) {
                case 1:
                    // 获取当天的 00:00:00 和 23:59:59
                    LocalDateTime startOfDay = today.atStartOfDay();
                    LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
                    start = startOfDay;
                    end = endOfDay;
                    break;
                case 2:
                    // 获取本周第一天的日期和时间
                    LocalDate firstDayOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
                    LocalDateTime startOfWeek = firstDayOfWeek.atStartOfDay();
                    // 获取本周最后一天的日期和时间
                    LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
                    LocalDateTime endOfWeek = lastDayOfWeek.atTime(LocalTime.MAX);
                    start = startOfWeek;
                    end = endOfWeek;
                    break;
                case 3:
                    LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
                    LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay();
                    // 获取本月最后一天的日期和时间
                    LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
                    LocalDateTime endOfMonth = lastDayOfMonth.atTime(LocalTime.MAX);
                    start = startOfMonth;
                    end = endOfMonth;
                    break;
                case 4:
                    // 获取本年第一天的日期和时间
                    LocalDate firstDayOfYear = LocalDate.of(today.getYear(), Month.JANUARY, 1);
                    LocalDateTime startOfYear = firstDayOfYear.atStartOfDay();
                    // 获取本年最后一天的日期和时间
                    LocalDate lastDayOfYear = LocalDate.of(today.getYear(), Month.DECEMBER, 31);
                    LocalDateTime endOfYear = lastDayOfYear.atTime(LocalTime.MAX);
                    start = startOfYear;
                    end = endOfYear;
                    break;
            }
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 列表res
        List<GrantVO> res = new ArrayList<>();
        // 专车订单
        List<TOrderPrivateCar> tOrderPrivateCars = new ArrayList<>();
        // 小件物流
        List<TOrderLogistics> tOrderLogistics = new ArrayList<>();
        // 优惠券领取记录
        List<TOrderPrivateCar> userCouponRecords = new ArrayList<>();
        List<TOrderLogistics> userCouponRecords1 = new ArrayList<>();
        // 红包领取记录
        List<TOrderPrivateCar> userRedPacketRecords = new ArrayList<>();
        List<TOrderLogistics> userRedPacketRecords1 = new ArrayList<>();
        // 司机消费
        List<BalanceUsageRecord> balanceUsageRecords = new ArrayList<>();
        // 司机提现
        List<TPubWithdrawal> driverWithdrawal = new ArrayList<>();
        Wrapper<TPubWithdrawal> driverWrapper = new EntityWrapper<TPubWithdrawal>();
        // 专车wrapper
        Wrapper<TOrderPrivateCar> between = new EntityWrapper<TOrderPrivateCar>();
        // 小件物流wrapper
        Wrapper<TOrderLogistics> between1 = new EntityWrapper<TOrderLogistics>();
        // 已使用优惠券记录wrapper
        Wrapper<TOrderPrivateCar> between2 = new EntityWrapper<TOrderPrivateCar>();
        Wrapper<TOrderLogistics> between22 = new EntityWrapper<TOrderLogistics>();
        // 已使用红包记录wrapper
        Wrapper<TOrderPrivateCar> between3 = new EntityWrapper<TOrderPrivateCar>();
        Wrapper<TOrderLogistics> between33 = new EntityWrapper<TOrderLogistics>();
        // 司机已消费金额
        Wrapper<BalanceUsageRecord> between4 = new EntityWrapper<BalanceUsageRecord>();
        if (time == 5 && !StringUtils.hasLength(insertTime)) {
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
            ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
            ;
            // 已使用优惠券记录wrapper
            between2 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
            ;
            between22 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
            ;
            // 已使用红包记录wrapper
            between3 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
            ;
            between33 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
            ;
            // 司机已消费金额
            between4 = new EntityWrapper<BalanceUsageRecord>()
                    .eq("type", 1)
                    .ne("purpose", 6)
            ;
            // 司机提现
            driverWrapper = new EntityWrapper<TPubWithdrawal>()
                    .eq("state", 2)
                    .eq("type", 1)
                    .eq("userType", 2)
            ;
            ;
        } else {
            driverWrapper = new EntityWrapper<TPubWithdrawal>()
                    .eq("state", 2)
                    .eq("type", 1)
                    .eq("userType", 2)
                    .between("insertTime", start, end);
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end);
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end);
            // 已使用优惠券记录wrapper
            between2 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
                    .between("insertTime", start, end);
            between22 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
                    .between("insertTime", start, end);
            // 已使用红包记录wrapper
            between3 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
                    .between("insertTime", start, end);
            between33 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
                    .between("insertTime", start, end);
            // 司机已消费金额
            between4 = new EntityWrapper<BalanceUsageRecord>()
                    .ne("purpose", 6)
                    .eq("type", 1)
                    .between("createTime", start, end);
        }
        // 司机提现wrapper
        if (type != null) {
            switch (type) {
                case 1:
                    // 红包
                    userRedPacketRecords = orderPrivateCarService.selectList(between3);
                    userRedPacketRecords1 = orderLogisticsService.selectList(between33);
                    break;
                case 2:
                    userCouponRecords = orderPrivateCarService.selectList(between2);
                    userCouponRecords1 = orderLogisticsService.selectList(between22);
                    // 优惠券
                    break;
                case 3:
                    // 司机消费记录
                    balanceUsageRecords = balanceUsageRecordService.selectList(between4);
                    driverWithdrawal = pubWithdrawalService.selectList(driverWrapper);
                    break;
                case 4:
                    // 专车订单
                    tOrderPrivateCars = orderPrivateCarService.selectList(between);
                    // 小件物流订单
                    tOrderLogistics = orderLogisticsService.selectList(between1);
                    break;
            }
        } else {
            // 红包
            userRedPacketRecords = orderPrivateCarService.selectList(between3);
            userRedPacketRecords1 = orderLogisticsService.selectList(between33);
            // 优惠券
            userCouponRecords = orderPrivateCarService.selectList(between2);
            userCouponRecords1 = orderLogisticsService.selectList(between22);
            // 专车订单
            tOrderPrivateCars = orderPrivateCarService.selectList(between);
            // 小件物流订单
            tOrderLogistics = orderLogisticsService.selectList(between1);
            // 消费
            balanceUsageRecords = balanceUsageRecordService.selectList(between4);
            // 提现
            driverWithdrawal = pubWithdrawalService.selectList(driverWrapper);
        }
        // 已发放补贴总额
        BigDecimal total = new BigDecimal("0");
        // 已使用折扣总额(用户端)
        BigDecimal discount = new BigDecimal("0");
        // 已使用红包总额(用户端)
        BigDecimal redPackage = new BigDecimal("0");
        // 已使用优惠券总额(用户端)
        BigDecimal coupon = new BigDecimal("0");
        // 已使用司机奖励总额(司机端)
        BigDecimal driver = new BigDecimal("0");
        // 司机已消费
        BigDecimal driverConsume = new BigDecimal("0");
        // 司机已提现
        BigDecimal driverWithdrawal1 = new BigDecimal("0");
        // 一次性查询所有用户信息
        Map<Integer, TUser> userMap = appUserService.selectList(new EntityWrapper<TUser>())
                .stream()
                .collect(Collectors.toMap(TUser::getId, user -> user));
        Map<Integer, TDriver> driverMap = driverService.selectList(new EntityWrapper<TDriver>())
                .stream()
                .collect(Collectors.toMap(TDriver::getId, user -> user));
        // 查询已使用折扣总额
        for (TOrderPrivateCar tOrderPrivateCar : tOrderPrivateCars) {
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + tOrderPrivateCar.getOrderNum());
            res.add(grantVO);
        }
        for (TOrderLogistics tOrderPrivateCar : tOrderLogistics) {
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + tOrderPrivateCar.getOrderNum());
            res.add(grantVO);
        }
        // 查询已使用红包总额
        for (TOrderPrivateCar userRedPacketRecord : userRedPacketRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            if (userRedPacketRecord.getRedPacketMoney() == null) {
                continue;
            }
            if (userRedPacketRecord.getRedPacketMoney().compareTo(new BigDecimal("0")) == 0) {
                continue;
            }
            grantVO.setAmount(userRedPacketRecord.getRedPacketMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + userRedPacketRecord.getOrderNum());
            res.add(grantVO);
            redPackage = redPackage.add(new BigDecimal(userRedPacketRecord.getRedPacketMoney().toString()));
        }
        for (TOrderLogistics userRedPacketRecord : userRedPacketRecords1) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            if (userRedPacketRecord.getRedPacketMoney() == null) {
                continue;
            }
            if (userRedPacketRecord.getRedPacketMoney().compareTo(new BigDecimal("0")) == 0) {
                continue;
            }
            grantVO.setAmount(userRedPacketRecord.getRedPacketMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + userRedPacketRecord.getOrderNum());
            res.add(grantVO);
            redPackage = redPackage.add(new BigDecimal(userRedPacketRecord.getRedPacketMoney().toString()));
        }
        // 查询已领取优惠券总额
        for (TOrderPrivateCar userCouponRecord : userCouponRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            UserCouponRecord userCouponRecord1 = userCouponRecordService.selectById(userCouponRecord.getCouponId());
            switch (userCouponRecord1.getCouponUseType()){
                case 0:
                    grantVO.setType(userCouponRecord1.getCouponType() == 1 ? "通用 抵扣券" : "通用 满减券");
                    break;
                case 1:
                    grantVO.setType(userCouponRecord1.getCouponType() == 1 ? "打车 抵扣券" : "打车 满减券");
                    break;
                case 4:
                    grantVO.setType(userCouponRecord1.getCouponType() == 1 ? "包裹 抵扣券" : "包裹 满减券");
                    break;
            }
            grantVO.setAmount(userCouponRecord.getCouponMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + userCouponRecord.getOrderNum());
            coupon = coupon.add(new BigDecimal(userCouponRecord.getCouponMoney().toString()));
            res.add(grantVO);
        }
        for (TOrderLogistics userCouponRecord : userCouponRecords1) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            UserCouponRecord userCouponRecord1 = userCouponRecordService.selectById(userCouponRecord.getCouponId());
            switch (userCouponRecord1.getCouponUseType()){
                case 0:
                    grantVO.setType(userCouponRecord1.getCouponType() == 1 ? "通用 抵扣券" : "通用 满减券");
                    break;
                case 1:
                    grantVO.setType(userCouponRecord1.getCouponType() == 1 ? "打车 抵扣券" : "打车 满减券");
                    break;
                case 4:
                    grantVO.setType(userCouponRecord1.getCouponType() == 1 ? "包裹 抵扣券" : "包裹 满减券");
                    break;
            }
            grantVO.setAmount(userCouponRecord.getCouponMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + userCouponRecord.getOrderNum());
            coupon = coupon.add(new BigDecimal(userCouponRecord.getCouponMoney().toString()));
            res.add(grantVO);
        }
        // 司机消费奖励
        for (BalanceUsageRecord balanceUsageRecord : balanceUsageRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(balanceUsageRecord.getCreateTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(balanceUsageRecord.getMoney().toString());
            TDriver tUser = driverMap.get(balanceUsageRecord.getDriverId());
            if (tUser != null) {
                grantVO.setName(tUser.getFirstName() + tUser.getLastName());
            }
            switch (balanceUsageRecord.getPurpose()) {
                case 1:
                    //打车支付
                    grantVO.setRemark("余额支付" + "【打车支付】");
                    break;
                case 2:
                    grantVO.setRemark("余额支付" + "【包裹支付】");
                    // 包裹支付
                    break;
                case 3:
                    grantVO.setRemark("余额支付" + "【日结算】");
                    // 日结算
                    break;
                case 4:
                    grantVO.setRemark("余额支付" + "【周结算】");
                    // 周结算
                    break;
                case 5:
                    grantVO.setRemark("余额支付" + "【月结算】");
                    // 月结算
                    break;
            }
            driverConsume = driverConsume.add(new BigDecimal(balanceUsageRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 司机提现
        for (TPubWithdrawal balanceUsageRecord : driverWithdrawal) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(balanceUsageRecord.getInsertTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(balanceUsageRecord.getMoney().toString());
            TDriver tUser = driverMap.get(balanceUsageRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getFirstName() + tUser.getLastName());
            }
            grantVO.setRemark("司机提现");
            driverWithdrawal1 = driverWithdrawal1.add(new BigDecimal(balanceUsageRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 总额
        total = total.add(redPackage).add(coupon).add(discount).add(driverConsume).add(driverWithdrawal1);
        // 已使用司机奖励合计
        driver = driverConsume.add(driverWithdrawal1);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 对集合进行排序
        res.sort((a, b) -> {
            LocalDateTime timeA = LocalDateTime.parse(a.getInsertTime(), formatter);
            LocalDateTime timeB = LocalDateTime.parse(b.getInsertTime(), formatter);
            return timeA.compareTo(timeB);
        });
        return res;
    }
    @RequestMapping(value = "/use/getCount")
    @ResponseBody
    public Object getCount1(Integer time, String insertTime, Integer type) {
        if (time == null) {
            time = 1;
        }
        String beginTime = null;
        String endTime = null;
        LocalDateTime start = null;
        LocalDateTime end = null;
        // 获取当前日期
        LocalDate today = LocalDate.now();
        if (ToolUtil.isNotEmpty(insertTime)) {
            beginTime = insertTime.split(" - ")[0];
            endTime = insertTime.split(" - ")[1];
            LocalDate s = LocalDate.parse(beginTime);
            LocalDate e = LocalDate.parse(endTime);
            start = s.atStartOfDay();
            end = e.atTime(LocalTime.MAX);
        } else if (time != null) {
            switch (time) {
                case 1:
                    // 获取当天的 00:00:00 和 23:59:59
                    LocalDateTime startOfDay = today.atStartOfDay();
                    LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
                    start = startOfDay;
                    end = endOfDay;
                    break;
                case 2:
                    // 获取本周第一天的日期和时间
                    LocalDate firstDayOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
                    LocalDateTime startOfWeek = firstDayOfWeek.atStartOfDay();
                    // 获取本周最后一天的日期和时间
                    LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
                    LocalDateTime endOfWeek = lastDayOfWeek.atTime(LocalTime.MAX);
                    start = startOfWeek;
                    end = endOfWeek;
                    break;
                case 3:
                    LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
                    LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay();
                    // 获取本月最后一天的日期和时间
                    LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
                    LocalDateTime endOfMonth = lastDayOfMonth.atTime(LocalTime.MAX);
                    start = startOfMonth;
                    end = endOfMonth;
                    break;
                case 4:
                    // 获取本年第一天的日期和时间
                    LocalDate firstDayOfYear = LocalDate.of(today.getYear(), Month.JANUARY, 1);
                    LocalDateTime startOfYear = firstDayOfYear.atStartOfDay();
                    // 获取本年最后一天的日期和时间
                    LocalDate lastDayOfYear = LocalDate.of(today.getYear(), Month.DECEMBER, 31);
                    LocalDateTime endOfYear = lastDayOfYear.atTime(LocalTime.MAX);
                    start = startOfYear;
                    end = endOfYear;
                    break;
            }
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 列表res
        List<GrantVO> res = new ArrayList<>();
        // 专车订单
        List<TOrderPrivateCar> tOrderPrivateCars = new ArrayList<>();
        // 小件物流
        List<TOrderLogistics> tOrderLogistics = new ArrayList<>();
        // 优惠券领取记录
        List<TOrderPrivateCar> userCouponRecords = new ArrayList<>();
        List<TOrderLogistics> userCouponRecords1 = new ArrayList<>();
        // 红包领取记录
        List<TOrderPrivateCar> userRedPacketRecords = new ArrayList<>();
        List<TOrderLogistics> userRedPacketRecords1 = new ArrayList<>();
        // 司机消费
        List<BalanceUsageRecord> balanceUsageRecords = new ArrayList<>();
        // 司机提现
        List<TPubWithdrawal> driverWithdrawal = new ArrayList<>();
        Wrapper<TPubWithdrawal> driverWrapper = new EntityWrapper<TPubWithdrawal>();
        // 专车wrapper
        Wrapper<TOrderPrivateCar> between = new EntityWrapper<TOrderPrivateCar>();
        // 小件物流wrapper
        Wrapper<TOrderLogistics> between1 = new EntityWrapper<TOrderLogistics>();
        // 已使用优惠券记录wrapper
        Wrapper<TOrderPrivateCar> between2 = new EntityWrapper<TOrderPrivateCar>();
        Wrapper<TOrderLogistics> between22 = new EntityWrapper<TOrderLogistics>();
        // 已使用红包记录wrapper
        Wrapper<TOrderPrivateCar> between3 = new EntityWrapper<TOrderPrivateCar>();
        Wrapper<TOrderLogistics> between33 = new EntityWrapper<TOrderLogistics>();
        // 司机已消费金额
        Wrapper<BalanceUsageRecord> between4 = new EntityWrapper<BalanceUsageRecord>();
        if (time == 5 && !StringUtils.hasLength(insertTime)) {
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
//                    .between("insertTime", start, end)
            ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
            ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
//                    .between("insertTime", start, end)
            ;
            // 已使用优惠券记录wrapper
            between2 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
            ;
            // 已使用优惠券记录wrapper
            between2 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
//                    .between("insertTime", start, end)
            ;
            between22 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
            ;
            between22 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
//                    .between("insertTime", start, end)
            ;
            // 已使用红包记录wrapper
            between3 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
            ;
            // 已使用红包记录wrapper
            between3 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
//                    .between("insertTime", start, end)
            ;
            between33 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
            ;
            between33 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
//                    .between("insertTime", start, end)
            ;
            // 司机已消费金额
            between4 = new EntityWrapper<BalanceUsageRecord>()
                    .eq("type",1)
                    .ne("purpose", 6)
            ;
            // 司机已消费金额
            between4 = new EntityWrapper<BalanceUsageRecord>()
                    .eq("type", 1)
                    .ne("purpose", 6)
//                    .between("createTime", start, end)
            ;
            // 司机提现
            driverWrapper = new EntityWrapper<TPubWithdrawal>()
                    .eq("state", 2)
                    .eq("type",1)
                    .eq("userType", 2)
            ;
            // 司机提现
            driverWrapper = new EntityWrapper<TPubWithdrawal>()
                    .eq("state", 2)
                    .eq("type", 1)
                    .eq("userType", 2)
//                    .between("insertTime", start, end)
            ;
        }else{
            driverWrapper = new EntityWrapper<TPubWithdrawal>()
                    .eq("state", 2)
                    .eq("type",1)
                    .eq("userType", 2)
                    .between("insertTime", start, end);
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end);
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end);
            // 已使用优惠券记录wrapper
            between2 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
                    .between("insertTime", start, end);
            between22 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
                    .between("insertTime", start, end);
            // 已使用红包记录wrapper
            between3 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
                    .between("insertTime", start, end);
            between33 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
                    .between("insertTime", start, end);
            // 司机已消费金额
            between4 = new EntityWrapper<BalanceUsageRecord>()
                    .ne("purpose", 6)
                    .eq("type",1)
                    .between("createTime", start, end);
        }
        // 司机提现wrapper
        if (type!=null){
            switch (type){
            ;
        } else {
            driverWrapper = new EntityWrapper<TPubWithdrawal>()
                    .eq("state", 2)
                    .eq("type", 1)
                    .eq("userType", 2)
                    .between("insertTime", start, end);
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end);
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("activityId")
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end);
            // 已使用优惠券记录wrapper
            between2 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
                    .between("insertTime", start, end);
            between22 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("couponId")
                    .isNotNull("couponMoney")
                    .between("insertTime", start, end);
            // 已使用红包记录wrapper
            between3 = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
                    .between("insertTime", start, end);
            between33 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("redPacketId")
                    .isNotNull("redPacketMoney")
                    .between("insertTime", start, end);
            // 司机已消费金额
            between4 = new EntityWrapper<BalanceUsageRecord>()
                    .ne("purpose", 6)
                    .eq("type", 1)
                    .between("createTime", start, end);
        }
        // 司机提现wrapper
        if (type != null) {
            switch (type) {
                case 1:
                    // 红包
                    userRedPacketRecords = orderPrivateCarService.selectList(between3);
                    userRedPacketRecords1 = orderLogisticsService.selectList(between33);
                    break;
                case 2:
                    userCouponRecords = orderPrivateCarService.selectList(between2);
                    userCouponRecords1 = orderLogisticsService.selectList(between22);
                    // 优惠券
                    break;
                case 3:
                    // 司机消费记录
                    balanceUsageRecords = balanceUsageRecordService.selectList(between4);
                    driverWithdrawal = pubWithdrawalService.selectList(driverWrapper);
                    break;
                case 4:
                    // 专车订单
                    tOrderPrivateCars = orderPrivateCarService.selectList(between);
                    // 小件物流订单
                    tOrderLogistics = orderLogisticsService.selectList(between1);
                    break;
            }
        } else {
            // 红包
            userRedPacketRecords = orderPrivateCarService.selectList(between3);
            userRedPacketRecords1 = orderLogisticsService.selectList(between33);
            // 优惠券
            userCouponRecords = orderPrivateCarService.selectList(between2);
            userCouponRecords1 = orderLogisticsService.selectList(between22);
            // 专车订单
            tOrderPrivateCars = orderPrivateCarService.selectList(between);
            // 小件物流订单
            tOrderLogistics = orderLogisticsService.selectList(between1);
            // 消费
            balanceUsageRecords = balanceUsageRecordService.selectList(between4);
            // 提现
            driverWithdrawal = pubWithdrawalService.selectList(driverWrapper);
        }
        // 已发放补贴总额
        BigDecimal total = new BigDecimal("0");
        // 已使用折扣总额(用户端)
        BigDecimal discount = new BigDecimal("0");
        // 已使用红包总额(用户端)
        BigDecimal redPackage = new BigDecimal("0");
        // 已使用优惠券总额(用户端)
        BigDecimal coupon = new BigDecimal("0");
        // 已使用司机奖励总额(司机端)
        BigDecimal driver = new BigDecimal("0");
        // 司机已消费
        BigDecimal driverConsume = new BigDecimal("0");
        // 司机已提现
        BigDecimal driverWithdrawal1 = new BigDecimal("0");
        // 一次性查询所有用户信息
        Map<Integer, TUser> userMap = appUserService.selectList(new EntityWrapper<TUser>())
                .stream()
                .collect(Collectors.toMap(TUser::getId, user -> user));
        Map<Integer, TDriver> driverMap = driverService.selectList(new EntityWrapper<TDriver>())
                .stream()
                .collect(Collectors.toMap(TDriver::getId, user -> user));
        // 查询已使用折扣总额
        for (TOrderPrivateCar tOrderPrivateCar : tOrderPrivateCars) {
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + tOrderPrivateCar.getOrderNum());
            res.add(grantVO);
        }
        for (TOrderLogistics tOrderPrivateCar : tOrderLogistics) {
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + tOrderPrivateCar.getOrderNum());
            res.add(grantVO);
        }
        // 查询已使用红包总额
        for (TOrderPrivateCar userRedPacketRecord : userRedPacketRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            if (userRedPacketRecord.getRedPacketMoney() == null) {
                continue;
            }
            if (userRedPacketRecord.getRedPacketMoney().compareTo(new BigDecimal("0")) == 0) {
                continue;
            }
            grantVO.setAmount(userRedPacketRecord.getRedPacketMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + userRedPacketRecord.getOrderNum());
            res.add(grantVO);
            redPackage = redPackage.add(userRedPacketRecord.getRedPacketMoney());
        }
        for (TOrderLogistics userRedPacketRecord : userRedPacketRecords1) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            if (userRedPacketRecord.getRedPacketMoney() == null) {
                continue;
            }
            if (userRedPacketRecord.getRedPacketMoney().compareTo(new BigDecimal("0")) == 0) {
                continue;
            }
            grantVO.setAmount(userRedPacketRecord.getRedPacketMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + userRedPacketRecord.getOrderNum());
            res.add(grantVO);
            redPackage = redPackage.add(new BigDecimal(userRedPacketRecord.getRedPacketMoney().toString()));
        }
        // 查询已领取优惠券总额
        for (TOrderPrivateCar userCouponRecord : userCouponRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            grantVO.setType("优惠券");
            grantVO.setAmount(userCouponRecord.getCouponMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + userCouponRecord.getOrderNum());
            coupon = coupon.add(new BigDecimal(userCouponRecord.getCouponMoney().toString()));
            res.add(grantVO);
        }
        for (TOrderLogistics userCouponRecord : userCouponRecords1) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            grantVO.setType("优惠券");
            grantVO.setAmount(userCouponRecord.getCouponMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:" + userCouponRecord.getOrderNum());
            coupon = coupon.add(new BigDecimal(userCouponRecord.getCouponMoney().toString()));
            res.add(grantVO);
        }
        // 司机消费奖励
        for (BalanceUsageRecord balanceUsageRecord : balanceUsageRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(balanceUsageRecord.getCreateTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(balanceUsageRecord.getMoney().toString());
            TDriver tUser = driverMap.get(balanceUsageRecord.getDriverId());
            if (tUser != null) {
                grantVO.setName(tUser.getFirstName() + tUser.getLastName());
            }
            switch (balanceUsageRecord.getPurpose()) {
                case 1:
                    //打车支付
                    grantVO.setRemark("余额支付" + "【打车支付】");
                    break;
                case 2:
                    grantVO.setRemark("余额支付" + "【包裹支付】");
                    // 包裹支付
                    break;
                case 3:
                    grantVO.setRemark("余额支付" + "【日结算】");
                    // 日结算
                    break;
                case 4:
                    grantVO.setRemark("余额支付" + "【周结算】");
                    // 周结算
                    break;
                case 5:
                    grantVO.setRemark("余额支付" + "【月结算】");
                    // 月结算
                    break;
            }
            driverConsume = driverConsume.add(new BigDecimal(balanceUsageRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 司机提现
        for (TPubWithdrawal balanceUsageRecord : driverWithdrawal) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(balanceUsageRecord.getInsertTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(balanceUsageRecord.getMoney().toString());
            TDriver tUser = driverMap.get(balanceUsageRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getFirstName() + tUser.getLastName());
            }
            grantVO.setRemark("司机提现");
            driverWithdrawal1 = driverWithdrawal1.add(new BigDecimal(balanceUsageRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 总额
        total = total.add(redPackage).add(coupon).add(discount).add(driverConsume).add(driverWithdrawal1);
        // 已使用司机奖励合计
        driver = driverConsume.add(driverWithdrawal1);
        UseMoneyVO useMoneyVO = new UseMoneyVO();
        useMoneyVO.setTotal(total);
        useMoneyVO.setDiscount(discount);
        useMoneyVO.setRedPackage(redPackage);
        useMoneyVO.setCoupon(coupon);
        useMoneyVO.setDriver(driver);
        useMoneyVO.setDriverWithdrawal(driverWithdrawal1);
        useMoneyVO.setDriverConsume(driverConsume);
        return useMoneyVO;
    }
    @Autowired
    private ISysRedPacketRecordService sysRedPacketRecordService;
    /**
     * 发放补贴统计
     */
    @RequestMapping(value = "/grant/list")
    @ResponseBody
    public Object list(Integer time, String insertTime, Integer type) {
        if (time == null) {
            time = 1;
        }
        String beginTime = null;
        String endTime = null;
        LocalDateTime start = null;
        LocalDateTime end = null;
        // 获取当前日期
        LocalDate today = LocalDate.now();
        if (ToolUtil.isNotEmpty(insertTime)) {
            beginTime = insertTime.split(" - ")[0];
            endTime = insertTime.split(" - ")[1];
            LocalDate s = LocalDate.parse(beginTime);
            LocalDate e = LocalDate.parse(endTime);
            start = s.atStartOfDay();
            end = e.atTime(LocalTime.MAX);
        } else if (time != null) {
            switch (time) {
                case 1:
                    // 获取当天的 00:00:00 和 23:59:59
                    LocalDateTime startOfDay = today.atStartOfDay();
                    LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
                    start = startOfDay;
                    end = endOfDay;
                    break;
                case 2:
                    // 获取本周第一天的日期和时间
                    LocalDate firstDayOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
                    LocalDateTime startOfWeek = firstDayOfWeek.atStartOfDay();
                    // 获取本周最后一天的日期和时间
                    LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
                    LocalDateTime endOfWeek = lastDayOfWeek.atTime(LocalTime.MAX);
                    start = startOfWeek;
                    end = endOfWeek;
                    break;
                case 3:
                    LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
                    LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay();
                    // 获取本月最后一天的日期和时间
                    LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
                    LocalDateTime endOfMonth = lastDayOfMonth.atTime(LocalTime.MAX);
                    start = startOfMonth;
                    end = endOfMonth;
                    break;
                case 4:
                    // 获取本年第一天的日期和时间
                    LocalDate firstDayOfYear = LocalDate.of(today.getYear(), Month.JANUARY, 1);
                    LocalDateTime startOfYear = firstDayOfYear.atStartOfDay();
                    // 获取本年最后一天的日期和时间
                    LocalDate lastDayOfYear = LocalDate.of(today.getYear(), Month.DECEMBER, 31);
                    LocalDateTime endOfYear = lastDayOfYear.atTime(LocalTime.MAX);
                    start = startOfYear;
                    end = endOfYear;
                    break;
            }
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 列表res
        List<GrantVO> res = new ArrayList<>();
        // 专车订单
        List<TOrderPrivateCar> tOrderPrivateCars = new ArrayList<>();
        // 小件物流
        List<TOrderLogistics> tOrderLogistics = new ArrayList<>();
        // 优惠券领取记录
        List<UserCouponRecord> userCouponRecords = new ArrayList<>();
        // 红包领取记录
        List<UserRedPacketRecord> userRedPacketRecords = new ArrayList<>();
        // 司机奖励
        List<DriverActivityHistory> driverActivityHistories = new ArrayList<>();
        // 专车wrapper
        Wrapper<TOrderPrivateCar> between = new EntityWrapper<TOrderPrivateCar>();
        // 小件物流wrapper
        Wrapper<TOrderLogistics> between1 = new EntityWrapper<TOrderLogistics>();
        // 优惠券领取记录wrapper
        Wrapper<UserCouponRecord> between2 = new EntityWrapper<UserCouponRecord>();
        // 红包领取记录wrapper
        Wrapper<UserRedPacketRecord> between3 = new EntityWrapper<UserRedPacketRecord>();
        // 司机奖励
        Wrapper<DriverActivityHistory> between4 = new EntityWrapper<DriverActivityHistory>();
        if (time == 5 && !StringUtils.hasLength(insertTime)) {
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("discountMoney")
            ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("discountMoney")
            ;
            // 优惠券领取记录wrapper
            between2 = new EntityWrapper<UserCouponRecord>()
                    .ne("couponUseType", 2)
                    .ne("couponUseType", 3)
            ;
            // 红包领取记录wrapper
            between3 = new EntityWrapper<UserRedPacketRecord>()
                    .ne("state", 0)
            ;
            // 司机奖励
            between4 = new EntityWrapper<DriverActivityHistory>()
                    .eq("carryOut", 2)
            ;
        } else {
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end)
            ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .between("insertTime", start, end)
                    .isNotNull("discountMoney")
            ;
            // 优惠券领取记录wrapper
            between2 = new EntityWrapper<UserCouponRecord>()
                    .ne("couponUseType", 2)
                    .ne("couponUseType", 3)
                    .between("insertTime", start, end);
            // 红包领取记录wrapper
            between3 = new EntityWrapper<UserRedPacketRecord>()
                    .ne("state", 0)
                    .between("insertTime", start, end);
            // 司机奖励
            between4 = new EntityWrapper<DriverActivityHistory>()
                    .eq("carryOut", 2)
                    .between("insertTime", start, end);
        }
        if (type != null) {
            switch (type) {
                case 1:
                    // 红包
                    userRedPacketRecords = userRedPacketRecordService.selectList(between3);
                    break;
                case 2:
                    userCouponRecords = userCouponRecordService.selectList(between2);
                    // 优惠券
                    break;
                case 3:
                    // 司机奖励
                    driverActivityHistories = driverActivityHistoryService.selectList(between4);
                    break;
                case 4:
                    // 专车订单
                    tOrderPrivateCars = orderPrivateCarService.selectList(between);
                    // 小件物流订单
                    tOrderLogistics = orderLogisticsService.selectList(between1);
                    break;
            }
        } else {
            // 专车订单
            tOrderPrivateCars = orderPrivateCarService.selectList(between);
            // 小件物流订单
            tOrderLogistics = orderLogisticsService.selectList(between1);
            // 司机奖励
            driverActivityHistories = driverActivityHistoryService.selectList(between4);
            userCouponRecords = userCouponRecordService.selectList(between2);
            userRedPacketRecords = userRedPacketRecordService.selectList(between3);
        }
        // 已发放补贴总额
        BigDecimal total = new BigDecimal("0");
        // 已使用折扣总额(用户端)
        BigDecimal discount = new BigDecimal("0");
        // 已领取红包总额(用户端)
        BigDecimal redPackage = new BigDecimal("0");
        // 已领取优惠券总额(用户端)
        BigDecimal coupon = new BigDecimal("0");
        // 已领取司机奖励总额(司机端)
        BigDecimal driver = new BigDecimal("0");
        Map<Integer, TUser> userMap = appUserService.selectList(new EntityWrapper<TUser>())
                .stream()
                .collect(Collectors.toMap(TUser::getId, user -> user));
        Map<Integer, TDriver> driverMap = driverService.selectList(new EntityWrapper<TDriver>())
                .stream()
                .collect(Collectors.toMap(TDriver::getId, user -> user));
        Map<Integer, UserActivity> userActivityMap = userActivityService.selectList(new EntityWrapper<UserActivity>())
                .stream()
                .collect(Collectors.toMap(UserActivity::getId, user -> user));
        Map<Integer, UserActivityDiscount1> userActivityDiscountMap = userActivityDiscount1Service.selectList(new EntityWrapper<UserActivityDiscount1>())
                .stream()
                .collect(Collectors.toMap(UserActivityDiscount1::getId, user -> user));
        Map<Integer, UserActivityRedenvelope> userActivityRedenvelopeMap = userActivityRedenvelopeService.selectList(new EntityWrapper<UserActivityRedenvelope>())
                .stream()
                .collect(Collectors.toMap(UserActivityRedenvelope::getId, user -> user));
        Map<Integer, SysCouponActivity> sysCouponActivityMap = sysCouponActivityService.selectList(new EntityWrapper<SysCouponActivity>())
                .stream()
                .collect(Collectors.toMap(SysCouponActivity::getId, user -> user));
        // 查询已使用折扣总额
        for (TOrderPrivateCar tOrderPrivateCar : tOrderPrivateCars) {
            if (tOrderPrivateCar.getDiscountMoney() == null || tOrderPrivateCar.getDiscountMoney() == 0) {
                continue;
            }
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            UserActivityDiscount1 userActivityDiscount1 = userActivityDiscountMap.get(tOrderPrivateCar.getActivityId());
            if (userActivityDiscount1 != null) {
                UserActivity userActivity = userActivityMap.get(userActivityDiscount1.getUserActivityId());
                if (userActivity != null) {
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
        }
        for (TOrderLogistics tOrderPrivateCar : tOrderLogistics) {
            if (tOrderPrivateCar.getDiscountMoney() == null || tOrderPrivateCar.getDiscountMoney() == 0) {
                continue;
            }
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            UserActivityDiscount1 userActivityDiscount1 = userActivityDiscountMap.get(tOrderPrivateCar.getActivityId());
            if (userActivityDiscount1 != null) {
                UserActivity userActivity = userActivityMap.get(userActivityDiscount1.getUserActivityId());
                if (userActivity != null) {
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
        }
        // 查询已领取红包总额
        for (UserRedPacketRecord userRedPacketRecord : userRedPacketRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            grantVO.setAmount(userRedPacketRecord.getMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            if (userRedPacketRecord.getIsGrant() == 1) {
                // 后台发放的红包
                grantVO.setRemark("指定发放");
            }
            UserActivityRedenvelope userActivityRedenvelope = userActivityRedenvelopeMap.get(userRedPacketRecord.getRedPacketActivityId());
            if (userActivityRedenvelope != null) {
                UserActivity userActivity = userActivityMap.get(userActivityRedenvelope.getUserActivityId());
                if (userActivity != null) {
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
            redPackage = redPackage.add(new BigDecimal(userRedPacketRecord.getMoney().toString()));
        }
        // 查询已领取优惠券总额
        for (UserCouponRecord userCouponRecord : userCouponRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            switch (userCouponRecord.getCouponUseType()){
                case 0:
                    grantVO.setType(userCouponRecord.getCouponType() == 1 ? "通用 抵扣券" : "通用 满减券");
                    break;
                case 1:
                    // 红包
                    userRedPacketRecords = orderPrivateCarService.selectList(between3);
                    userRedPacketRecords1 = orderLogisticsService.selectList(between33);
                    break;
                case 2:
                    userCouponRecords = orderPrivateCarService.selectList(between2);
                    userCouponRecords1 = orderLogisticsService.selectList(between22);
                    // 优惠券
                    break;
                case 3:
                    // 司机消费记录
                    balanceUsageRecords = balanceUsageRecordService.selectList(between4);
                    driverWithdrawal = pubWithdrawalService.selectList(driverWrapper);
                    grantVO.setType(userCouponRecord.getCouponType() == 1 ? "打车 抵扣券" : "打车 满减券");
                    break;
                case 4:
                    // 专车订单
                    tOrderPrivateCars = orderPrivateCarService.selectList(between);
                    // 小件物流订单
                    tOrderLogistics = orderLogisticsService.selectList(between1);
                    grantVO.setType(userCouponRecord.getCouponType() == 1 ? "包裹 抵扣券" : "包裹 满减券");
                    break;
            }
        }else{
            // 红包
            userRedPacketRecords = orderPrivateCarService.selectList(between3);
            userRedPacketRecords1 = orderLogisticsService.selectList(between33);
            // 优惠券
            userCouponRecords = orderPrivateCarService.selectList(between2);
            userCouponRecords1 = orderLogisticsService.selectList(between22);
            // 专车订单
            tOrderPrivateCars = orderPrivateCarService.selectList(between);
            // 小件物流订单
            tOrderLogistics = orderLogisticsService.selectList(between1);
            // 消费
            balanceUsageRecords = balanceUsageRecordService.selectList(between4);
            // 提现
            driverWithdrawal = pubWithdrawalService.selectList(driverWrapper);
        }
        // 已发放补贴总额
        BigDecimal total = new BigDecimal("0");
        // 已使用折扣总额(用户端)
        BigDecimal discount = new BigDecimal("0");
        // 已使用红包总额(用户端)
        BigDecimal redPackage = new BigDecimal("0");
        // 已使用优惠券总额(用户端)
        BigDecimal coupon = new BigDecimal("0");
        // 已使用司机奖励总额(司机端)
        BigDecimal driver = new BigDecimal("0");
        // 司机已消费
        BigDecimal driverConsume = new BigDecimal("0");
        // 司机已提现
        BigDecimal driverWithdrawal1 = new BigDecimal("0");
        // 一次性查询所有用户信息
        Map<Integer, TUser> userMap = appUserService.selectList(new EntityWrapper<TUser>())
                .stream()
                .collect(Collectors.toMap(TUser::getId, user -> user));
        Map<Integer, TDriver> driverMap = driverService.selectList(new EntityWrapper<TDriver>())
                .stream()
                .collect(Collectors.toMap(TDriver::getId, user -> user));
        // 查询已使用折扣总额
        for (TOrderPrivateCar tOrderPrivateCar : tOrderPrivateCars) {
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+tOrderPrivateCar.getOrderNum());
            res.add(grantVO);
        }
        for (TOrderLogistics tOrderPrivateCar : tOrderLogistics) {
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+tOrderPrivateCar.getOrderNum());
            res.add(grantVO);
        }
        // 查询已使用红包总额
        for (TOrderPrivateCar userRedPacketRecord : userRedPacketRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            if (userRedPacketRecord.getRedPacketMoney()==null){
                continue;
            }
            if (userRedPacketRecord.getRedPacketMoney().compareTo(new BigDecimal("0"))==0){
                continue;
            }
            grantVO.setAmount(userRedPacketRecord.getRedPacketMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+userRedPacketRecord.getOrderNum());
            res.add(grantVO);
            redPackage = redPackage.add(userRedPacketRecord.getRedPacketMoney());
        }
        for (TOrderLogistics userRedPacketRecord : userRedPacketRecords1) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            if (userRedPacketRecord.getRedPacketMoney()==null){
                continue;
            }
            if (userRedPacketRecord.getRedPacketMoney().compareTo(new BigDecimal("0"))==0){
                continue;
            }
            grantVO.setAmount(userRedPacketRecord.getRedPacketMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+userRedPacketRecord.getOrderNum());
            res.add(grantVO);
            redPackage = redPackage.add(new BigDecimal(userRedPacketRecord.getRedPacketMoney().toString()));
        }
        // 查询已领取优惠券总额
        for (TOrderPrivateCar userCouponRecord : userCouponRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            grantVO.setType("优惠券");
            grantVO.setAmount(userCouponRecord.getCouponMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+userCouponRecord.getOrderNum());
            coupon = coupon.add(new BigDecimal(userCouponRecord.getCouponMoney().toString()));
            res.add(grantVO);
        }
        for (TOrderLogistics userCouponRecord : userCouponRecords1) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            grantVO.setType("优惠券");
            grantVO.setAmount(userCouponRecord.getCouponMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            grantVO.setRemark("订单号:"+userCouponRecord.getOrderNum());
            coupon = coupon.add(new BigDecimal(userCouponRecord.getCouponMoney().toString()));
            res.add(grantVO);
        }
        // 司机消费奖励
        for (BalanceUsageRecord balanceUsageRecord : balanceUsageRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(balanceUsageRecord.getCreateTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(balanceUsageRecord.getMoney().toString());
            TDriver tUser = driverMap.get(balanceUsageRecord.getDriverId());
            if (tUser!=null){
                grantVO.setName(tUser.getFirstName()+tUser.getLastName());
            }
            switch (balanceUsageRecord.getPurpose()){
                case 1:
                    //打车支付
                    grantVO.setRemark("余额支付"+"【打车支付】");
                    break;
                case 2:
                    grantVO.setRemark("余额支付"+"【包裹支付】");
                    // 包裹支付
                    break;
                case 3:
                    grantVO.setRemark("余额支付"+"【日结算】");
                    // 日结算
                    break;
                case 4:
                    grantVO.setRemark("余额支付"+"【周结算】");
                    // 周结算
                    break;
                case 5:
                    grantVO.setRemark("余额支付"+"【月结算】");
                    // 月结算
                    break;
            }
            driverConsume = driverConsume.add(new BigDecimal(balanceUsageRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 司机提现
        for (TPubWithdrawal balanceUsageRecord : driverWithdrawal) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(balanceUsageRecord.getInsertTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(balanceUsageRecord.getMoney().toString());
            TDriver tUser = driverMap.get(balanceUsageRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getFirstName()+tUser.getLastName());
            }
            grantVO.setRemark("司机提现");
            driverWithdrawal1 = driverWithdrawal1.add(new BigDecimal(balanceUsageRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 总额
        total = total.add(redPackage).add(coupon).add(discount).add(driverConsume).add(driverWithdrawal1);
        // 已使用司机奖励合计
        driver = driverConsume.add(driverWithdrawal1);
        UseMoneyVO useMoneyVO = new UseMoneyVO();
        useMoneyVO.setTotal(total);
        useMoneyVO.setDiscount(discount);
        useMoneyVO.setRedPackage(redPackage);
        useMoneyVO.setCoupon(coupon);
        useMoneyVO.setDriver(driver);
        useMoneyVO.setDriverWithdrawal(driverWithdrawal1);
        useMoneyVO.setDriverConsume(driverConsume);
        return useMoneyVO;
    }
    @Autowired
    private ISysRedPacketRecordService sysRedPacketRecordService;
    /**
     * 发放补贴统计
     */
    @RequestMapping(value = "/grant/list")
    @ResponseBody
    public Object list(Integer time,String insertTime,Integer type) {
        if (time == null){
            time = 1;
        }
        String beginTime = null;
        String endTime = null;
        LocalDateTime start =null;
        LocalDateTime end =null;
        // 获取当前日期
        LocalDate today = LocalDate.now();
        if (ToolUtil.isNotEmpty(insertTime)){
            beginTime = insertTime.split(" - ")[0];
            endTime = insertTime.split(" - ")[1];
            LocalDate s = LocalDate.parse(beginTime);
            LocalDate e = LocalDate.parse(endTime);
            start = s.atStartOfDay();
            end = e.atTime(LocalTime.MAX);
        }else if (time!=null) {
            switch (time) {
                case 1:
                    // 获取当天的 00:00:00 和 23:59:59
                    LocalDateTime startOfDay = today.atStartOfDay();
                    LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
                    start = startOfDay;
                    end = endOfDay;
                    break;
                case 2:
                    // 获取本周第一天的日期和时间
                    LocalDate firstDayOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
                    LocalDateTime startOfWeek = firstDayOfWeek.atStartOfDay();
                    // 获取本周最后一天的日期和时间
                    LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
                    LocalDateTime endOfWeek = lastDayOfWeek.atTime(LocalTime.MAX);
                    start = startOfWeek;
                    end = endOfWeek;
                    break;
                case 3:
                    LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
                    LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay();
                    // 获取本月最后一天的日期和时间
                    LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
                    LocalDateTime endOfMonth = lastDayOfMonth.atTime(LocalTime.MAX);
                    start = startOfMonth;
                    end = endOfMonth;
                    break;
                case 4:
                    // 获取本年第一天的日期和时间
                    LocalDate firstDayOfYear = LocalDate.of(today.getYear(), Month.JANUARY, 1);
                    LocalDateTime startOfYear = firstDayOfYear.atStartOfDay();
                    // 获取本年最后一天的日期和时间
                    LocalDate lastDayOfYear = LocalDate.of(today.getYear(), Month.DECEMBER, 31);
                    LocalDateTime endOfYear = lastDayOfYear.atTime(LocalTime.MAX);
                    start = startOfYear;
                    end = endOfYear;
                    break;
            }
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 列表res
        List<GrantVO> res = new ArrayList<>();
        // 专车订单
        List<TOrderPrivateCar> tOrderPrivateCars = new ArrayList<>();
        // 小件物流
        List<TOrderLogistics> tOrderLogistics = new ArrayList<>();
        // 优惠券领取记录
        List<UserCouponRecord> userCouponRecords = new ArrayList<>();
        // 红包领取记录
        List<UserRedPacketRecord> userRedPacketRecords = new ArrayList<>();
        // 司机奖励
        List<DriverActivityHistory> driverActivityHistories = new ArrayList<>();
        // 专车wrapper
        Wrapper<TOrderPrivateCar> between = new EntityWrapper<TOrderPrivateCar>()
                ;
        // 小件物流wrapper
        Wrapper<TOrderLogistics> between1 = new EntityWrapper<TOrderLogistics>()
                ;
        // 优惠券领取记录wrapper
        Wrapper<UserCouponRecord> between2 = new EntityWrapper<UserCouponRecord>()
                ;
        // 红包领取记录wrapper
        Wrapper<UserRedPacketRecord> between3 = new EntityWrapper<UserRedPacketRecord>()
                ;
        // 司机奖励
        Wrapper<DriverActivityHistory> between4 = new EntityWrapper<DriverActivityHistory>()
                ;
        if (time == 5 && !StringUtils.hasLength(insertTime)){
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("discountMoney")
                    ;
            // 小件物流wrapper
           between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("discountMoney")
                    ;
            // 优惠券领取记录wrapper
            between2 = new EntityWrapper<UserCouponRecord>()
                    .ne("couponUseType", 2)
                    .ne("couponUseType", 3)
                    ;
            // 红包领取记录wrapper
            between3 = new EntityWrapper<UserRedPacketRecord>()
                    .ne("state",0)
                    ;
            // 司机奖励
            between4 = new EntityWrapper<DriverActivityHistory>()
                    .eq("carryOut", 2)
                    ;
        }else{
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end)
            ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .between("insertTime", start, end)
                    .isNotNull("discountMoney")
            ;
            // 优惠券领取记录wrapper
            between2 = new EntityWrapper<UserCouponRecord>()
                    .ne("couponUseType", 2)
                    .ne("couponUseType", 3)
                    .between("insertTime", start, end);
            // 红包领取记录wrapper
            between3 = new EntityWrapper<UserRedPacketRecord>()
                    .ne("state",0)
                    .between("insertTime", start, end);
            // 司机奖励
            between4 = new EntityWrapper<DriverActivityHistory>()
                    .eq("carryOut", 2)
                    .between("insertTime", start, end);
        }
        if (type!=null){
            switch (type){
                case 1:
                    // 红包
                    userRedPacketRecords = userRedPacketRecordService.selectList(between3);
                    break;
                case 2:
                    userCouponRecords = userCouponRecordService.selectList(between2);
                    // 优惠券
                    break;
                case 3:
                    // 司机奖励
                    driverActivityHistories = driverActivityHistoryService.selectList(between4);
                    break;
                case 4:
                    // 专车订单
                    tOrderPrivateCars = orderPrivateCarService.selectList(between);
                    // 小件物流订单
                    tOrderLogistics = orderLogisticsService.selectList(between1);
                    break;
            }
        }else{
            // 专车订单
            tOrderPrivateCars = orderPrivateCarService.selectList(between);
            // 小件物流订单
            tOrderLogistics = orderLogisticsService.selectList(between1);
            // 司机奖励
            driverActivityHistories = driverActivityHistoryService.selectList(between4);
            userCouponRecords = userCouponRecordService.selectList(between2);
            userRedPacketRecords = userRedPacketRecordService.selectList(between3);
        }
        // 已发放补贴总额
        BigDecimal total = new BigDecimal("0");
        // 已使用折扣总额(用户端)
        BigDecimal discount = new BigDecimal("0");
        // 已领取红包总额(用户端)
        BigDecimal redPackage = new BigDecimal("0");
        // 已领取优惠券总额(用户端)
        BigDecimal coupon = new BigDecimal("0");
        // 已领取司机奖励总额(司机端)
        BigDecimal driver = new BigDecimal("0");
        Map<Integer, TUser> userMap = appUserService.selectList(new EntityWrapper<TUser>())
                .stream()
                .collect(Collectors.toMap(TUser::getId, user -> user));
        Map<Integer, TDriver> driverMap = driverService.selectList(new EntityWrapper<TDriver>())
                .stream()
                .collect(Collectors.toMap(TDriver::getId, user -> user));
        Map<Integer, UserActivity> userActivityMap = userActivityService.selectList(new EntityWrapper<UserActivity>())
                .stream()
                .collect(Collectors.toMap(UserActivity::getId, user -> user));
        Map<Integer, UserActivityDiscount1> userActivityDiscountMap = userActivityDiscount1Service.selectList(new EntityWrapper<UserActivityDiscount1>())
                .stream()
                .collect(Collectors.toMap(UserActivityDiscount1::getId, user -> user));
        Map<Integer, UserActivityRedenvelope> userActivityRedenvelopeMap = userActivityRedenvelopeService.selectList(new EntityWrapper<UserActivityRedenvelope>())
                .stream()
                .collect(Collectors.toMap(UserActivityRedenvelope::getId, user -> user));
        Map<Integer, SysCouponActivity> sysCouponActivityMap = sysCouponActivityService.selectList(new EntityWrapper<SysCouponActivity>())
                .stream()
                .collect(Collectors.toMap(SysCouponActivity::getId, user -> user));
        // 查询已使用折扣总额
        for (TOrderPrivateCar tOrderPrivateCar : tOrderPrivateCars) {
            if (tOrderPrivateCar.getDiscountMoney()==null || tOrderPrivateCar.getDiscountMoney() == 0){
                continue;
            }
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            UserActivityDiscount1 userActivityDiscount1 = userActivityDiscountMap.get(tOrderPrivateCar.getActivityId());
            if (userActivityDiscount1!=null){
                UserActivity userActivity = userActivityMap.get(userActivityDiscount1.getUserActivityId());
                if (userActivity!=null){
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
        }
        for (TOrderLogistics tOrderPrivateCar : tOrderLogistics) {
            if (tOrderPrivateCar.getDiscountMoney()==null || tOrderPrivateCar.getDiscountMoney() == 0){
                continue;
            }
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            UserActivityDiscount1 userActivityDiscount1 = userActivityDiscountMap.get(tOrderPrivateCar.getActivityId());
            if (userActivityDiscount1!=null){
                UserActivity userActivity = userActivityMap.get(userActivityDiscount1.getUserActivityId());
                if (userActivity!=null){
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
        }
        // 查询已领取红包总额
        for (UserRedPacketRecord userRedPacketRecord : userRedPacketRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            grantVO.setAmount(userRedPacketRecord.getMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            if (userRedPacketRecord.getIsGrant() == 1){
                // 后台发放的红包
                grantVO.setRemark("指定发放");
            }
            UserActivityRedenvelope userActivityRedenvelope = userActivityRedenvelopeMap.get(userRedPacketRecord.getRedPacketActivityId());
            if (userActivityRedenvelope!=null){
                UserActivity userActivity = userActivityMap.get(userActivityRedenvelope.getUserActivityId());
                if (userActivity!=null){
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
            redPackage = redPackage.add(new BigDecimal(userRedPacketRecord.getMoney().toString()));
        }
        // 查询已领取优惠券总额
        for (UserCouponRecord userCouponRecord : userCouponRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            grantVO.setType("优惠券");
            grantVO.setAmount(userCouponRecord.getMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            SysCouponActivity sysCouponActivity = sysCouponActivityMap.get(userCouponRecord.getCouponActivityId());
            if (sysCouponActivity!=null){
                grantVO.setRemark(sysCouponActivity.getName());
            }
            coupon = coupon.add(new BigDecimal(userCouponRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 已领取司机奖励
        for (DriverActivityHistory driverActivityHistory : driverActivityHistories) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(driverActivityHistory.getInsertTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(driverActivityHistory.getMoney().toString());
            TDriver tDriver = driverMap.get(driverActivityHistory.getDriverId());
            if (tDriver!=null){
                grantVO.setName(tDriver.getFirstName()+tDriver.getLastName());
            }
            Integer type1 = driverActivityHistory.getType();
            switch (type1){
                case 1:
                    grantVO.setRemark("邀请司机注册");
                    break;
                case 2:
                    grantVO.setRemark("邀请用户注册");
                    break;
                case 3:
                    grantVO.setRemark("累计在线");
                    break;
                case 4:
                    grantVO.setRemark("订单量");
                    break;
            }
            driver = driver.add(new BigDecimal(driverActivityHistory.getMoney().toString()));
            res.add(grantVO);
        }
        List<GrantVO> sortedList = res.stream()
                .sorted((o1, o2) -> o2.getInsertTime().compareTo(o1.getInsertTime()))
                .collect(Collectors.toList());
        total = total.add(redPackage).add(coupon).add(discount).add(driver);
        return sortedList;
    }
    @RequestMapping(value = "/grant/getCount")
    @ResponseBody
    public Object getCount(Integer time,String insertTime,Integer type) {
        GrantMoneyVO result = new GrantMoneyVO();
        if (time == null){
            time = 1;
        }
        String beginTime = null;
        String endTime = null;
        LocalDateTime start =null;
        LocalDateTime end =null;
        // 获取当前日期
        LocalDate today = LocalDate.now();
        if (ToolUtil.isNotEmpty(insertTime)){
            beginTime = insertTime.split(" - ")[0];
            endTime = insertTime.split(" - ")[1];
            LocalDate s = LocalDate.parse(beginTime);
            LocalDate e = LocalDate.parse(endTime);
            start = s.atStartOfDay();
            end = e.atTime(LocalTime.MAX);
        }else if (time!=null) {
            switch (time) {
                case 1:
                    // 获取当天的 00:00:00 和 23:59:59
                    LocalDateTime startOfDay = today.atStartOfDay();
                    LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
                    start = startOfDay;
                    end = endOfDay;
                    break;
                case 2:
                    // 获取本周第一天的日期和时间
                    LocalDate firstDayOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
                    LocalDateTime startOfWeek = firstDayOfWeek.atStartOfDay();
                    // 获取本周最后一天的日期和时间
                    LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
                    LocalDateTime endOfWeek = lastDayOfWeek.atTime(LocalTime.MAX);
                    start = startOfWeek;
                    end = endOfWeek;
                    break;
                case 3:
                    LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
                    LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay();
                    // 获取本月最后一天的日期和时间
                    LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
                    LocalDateTime endOfMonth = lastDayOfMonth.atTime(LocalTime.MAX);
                    start = startOfMonth;
                    end = endOfMonth;
                    break;
                case 4:
                    // 获取本年第一天的日期和时间
                    LocalDate firstDayOfYear = LocalDate.of(today.getYear(), Month.JANUARY, 1);
                    LocalDateTime startOfYear = firstDayOfYear.atStartOfDay();
                    // 获取本年最后一天的日期和时间
                    LocalDate lastDayOfYear = LocalDate.of(today.getYear(), Month.DECEMBER, 31);
                    LocalDateTime endOfYear = lastDayOfYear.atTime(LocalTime.MAX);
                    start = startOfYear;
                    end = endOfYear;
                    break;
            }
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 列表res
        List<GrantVO> res = new ArrayList<>();
        // 专车订单
        List<TOrderPrivateCar> tOrderPrivateCars = new ArrayList<>();
        // 小件物流
        List<TOrderLogistics> tOrderLogistics = new ArrayList<>();
        // 优惠券领取记录
        List<UserCouponRecord> userCouponRecords = new ArrayList<>();
        // 红包领取记录
        List<UserRedPacketRecord> userRedPacketRecords = new ArrayList<>();
        // 司机奖励
        List<DriverActivityHistory> driverActivityHistories = new ArrayList<>();
        // 专车wrapper
        Wrapper<TOrderPrivateCar> between = new EntityWrapper<TOrderPrivateCar>()
                ;
        // 小件物流wrapper
        Wrapper<TOrderLogistics> between1 = new EntityWrapper<TOrderLogistics>()
                ;
        // 优惠券领取记录wrapper
        Wrapper<UserCouponRecord> between2 = new EntityWrapper<UserCouponRecord>()
                ;
        // 红包领取记录wrapper
        Wrapper<UserRedPacketRecord> between3 = new EntityWrapper<UserRedPacketRecord>()
                ;
        // 司机奖励
        Wrapper<DriverActivityHistory> between4 = new EntityWrapper<DriverActivityHistory>()
                ;
        if (time == 5 && !StringUtils.hasLength(insertTime)){
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("discountMoney")
            ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("discountMoney")
            ;
            // 优惠券领取记录wrapper
            between2 = new EntityWrapper<UserCouponRecord>()
                    .ne("couponUseType", 2)
                    .ne("couponUseType", 3)
            ;
            // 红包领取记录wrapper
            between3 = new EntityWrapper<UserRedPacketRecord>()
                    .ne("state",0)
            ;
            // 司机奖励
            between4 = new EntityWrapper<DriverActivityHistory>()
                    .eq("carryOut", 2)
            ;
        }else{
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end)
            ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .between("insertTime", start, end)
                    .isNotNull("discountMoney")
            ;
            // 优惠券领取记录wrapper
            between2 = new EntityWrapper<UserCouponRecord>()
                    .ne("couponUseType", 2)
                    .ne("couponUseType", 3)
                    .between("insertTime", start, end);
            // 红包领取记录wrapper
            between3 = new EntityWrapper<UserRedPacketRecord>()
                    .ne("state",0)
                    .between("insertTime", start, end);
            // 司机奖励
            between4 = new EntityWrapper<DriverActivityHistory>()
                    .eq("carryOut", 2)
                    .between("insertTime", start, end);
        }
        if (type!=null){
            switch (type){
                case 1:
                    // 红包
                    userRedPacketRecords = userRedPacketRecordService.selectList(between3);
                    break;
                case 2:
                    userCouponRecords = userCouponRecordService.selectList(between2);
                    // 优惠券
                    break;
                case 3:
                    // 司机奖励
                    driverActivityHistories = driverActivityHistoryService.selectList(between4);
                    break;
                case 4:
                    // 专车订单
                    tOrderPrivateCars = orderPrivateCarService.selectList(between);
                    // 小件物流订单
                    tOrderLogistics = orderLogisticsService.selectList(between1);
                    break;
            }
        }else{
            // 专车订单
            tOrderPrivateCars = orderPrivateCarService.selectList(between);
            // 小件物流订单
            tOrderLogistics = orderLogisticsService.selectList(between1);
            // 司机奖励
            driverActivityHistories = driverActivityHistoryService.selectList(between4);
            userCouponRecords = userCouponRecordService.selectList(between2);
            userRedPacketRecords = userRedPacketRecordService.selectList(between3);
        }
        // 已发放补贴总额
        BigDecimal total = new BigDecimal("0");
        // 已使用折扣总额(用户端)
        BigDecimal discount = new BigDecimal("0");
        // 已领取红包总额(用户端)
        BigDecimal redPackage = new BigDecimal("0");
        // 已领取优惠券总额(用户端)
        BigDecimal coupon = new BigDecimal("0");
        // 已领取司机奖励总额(司机端)
        BigDecimal driver = new BigDecimal("0");
        Map<Integer, TUser> userMap = appUserService.selectList(new EntityWrapper<TUser>())
                .stream()
                .collect(Collectors.toMap(TUser::getId, user -> user));
        Map<Integer, TDriver> driverMap = driverService.selectList(new EntityWrapper<TDriver>())
                .stream()
                .collect(Collectors.toMap(TDriver::getId, user -> user));
        Map<Integer, UserActivity> userActivityMap = userActivityService.selectList(new EntityWrapper<UserActivity>())
                .stream()
                .collect(Collectors.toMap(UserActivity::getId, user -> user));
        Map<Integer, UserActivityDiscount1> userActivityDiscountMap = userActivityDiscount1Service.selectList(new EntityWrapper<UserActivityDiscount1>())
                .stream()
                .collect(Collectors.toMap(UserActivityDiscount1::getId, user -> user));
        Map<Integer, UserActivityRedenvelope> userActivityRedenvelopeMap = userActivityRedenvelopeService.selectList(new EntityWrapper<UserActivityRedenvelope>())
                .stream()
                .collect(Collectors.toMap(UserActivityRedenvelope::getId, user -> user));
        Map<Integer, SysCouponActivity> sysCouponActivityMap = sysCouponActivityService.selectList(new EntityWrapper<SysCouponActivity>())
                .stream()
                .collect(Collectors.toMap(SysCouponActivity::getId, user -> user));
        // 查询已使用折扣总额
        for (TOrderPrivateCar tOrderPrivateCar : tOrderPrivateCars) {
            if (tOrderPrivateCar.getDiscountMoney()==null || tOrderPrivateCar.getDiscountMoney() == 0){
                continue;
            }
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            UserActivityDiscount1 userActivityDiscount1 = userActivityDiscountMap.get(tOrderPrivateCar.getActivityId());
            if (userActivityDiscount1!=null){
                UserActivity userActivity = userActivityMap.get(userActivityDiscount1.getUserActivityId());
                if (userActivity!=null){
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
        }
        for (TOrderLogistics tOrderPrivateCar : tOrderLogistics) {
            if (tOrderPrivateCar.getDiscountMoney()==null || tOrderPrivateCar.getDiscountMoney() == 0){
                continue;
            }
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            UserActivityDiscount1 userActivityDiscount1 = userActivityDiscountMap.get(tOrderPrivateCar.getActivityId());
            if (userActivityDiscount1!=null){
                UserActivity userActivity = userActivityMap.get(userActivityDiscount1.getUserActivityId());
                if (userActivity!=null){
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
        }
        // 查询已领取红包总额
        for (UserRedPacketRecord userRedPacketRecord : userRedPacketRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            grantVO.setAmount(userRedPacketRecord.getMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            if (userRedPacketRecord.getIsGrant() == 1){
                // 后台发放的红包
                grantVO.setRemark("指定发放");
            }
            UserActivityRedenvelope userActivityRedenvelope = userActivityRedenvelopeMap.get(userRedPacketRecord.getRedPacketActivityId());
            if (userActivityRedenvelope!=null){
                UserActivity userActivity = userActivityMap.get(userActivityRedenvelope.getUserActivityId());
                if (userActivity!=null){
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
            redPackage = redPackage.add(new BigDecimal(userRedPacketRecord.getMoney().toString()));
        }
        // 查询已领取优惠券总额
        for (UserCouponRecord userCouponRecord : userCouponRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            grantVO.setType("优惠券");
            grantVO.setAmount(userCouponRecord.getMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser!=null){
                grantVO.setName(tUser.getNickName());
            }
            SysCouponActivity sysCouponActivity = sysCouponActivityMap.get(userCouponRecord.getCouponActivityId());
            if (sysCouponActivity!=null){
                grantVO.setRemark(sysCouponActivity.getName());
            }
            coupon = coupon.add(new BigDecimal(userCouponRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 已领取司机奖励
        for (DriverActivityHistory driverActivityHistory : driverActivityHistories) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(driverActivityHistory.getInsertTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(driverActivityHistory.getMoney().toString());
            TDriver tDriver = driverMap.get(driverActivityHistory.getDriverId());
            if (tDriver!=null){
                grantVO.setName(tDriver.getFirstName()+tDriver.getLastName());
            }
            Integer type1 = driverActivityHistory.getType();
            switch (type1){
                case 1:
                    grantVO.setRemark("邀请司机注册");
                    break;
                case 2:
                    grantVO.setRemark("邀请用户注册");
                    break;
                case 3:
                    grantVO.setRemark("累计在线");
                    break;
                case 4:
                    grantVO.setRemark("订单量");
                    break;
            }
            driver = driver.add(new BigDecimal(driverActivityHistory.getMoney().toString()));
            res.add(grantVO);
        }
        total = total.add(redPackage).add(coupon).add(discount).add(driver);
        result.setTotal(total);
        result.setDiscount(discount);
        result.setCoupon(coupon);
        result.setDriver(driver);
        result.setRedPackage(redPackage);
        return result;
    }
            grantVO.setAmount(userCouponRecord.getMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            SysCouponActivity sysCouponActivity = sysCouponActivityMap.get(userCouponRecord.getCouponActivityId());
            if (sysCouponActivity != null) {
                grantVO.setRemark(sysCouponActivity.getName());
            }
            coupon = coupon.add(new BigDecimal(userCouponRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 已领取司机奖励
        for (DriverActivityHistory driverActivityHistory : driverActivityHistories) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(driverActivityHistory.getInsertTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(driverActivityHistory.getMoney().toString());
            TDriver tDriver = driverMap.get(driverActivityHistory.getDriverId());
            if (tDriver != null) {
                grantVO.setName(tDriver.getFirstName() + tDriver.getLastName());
            }
            Integer type1 = driverActivityHistory.getType();
            switch (type1) {
                case 1:
                    grantVO.setRemark("邀请司机注册");
                    break;
                case 2:
                    grantVO.setRemark("邀请用户注册");
                    break;
                case 3:
                    grantVO.setRemark("累计在线");
                    break;
                case 4:
                    grantVO.setRemark("订单量");
                    break;
            }
            driver = driver.add(new BigDecimal(driverActivityHistory.getMoney().toString()));
            res.add(grantVO);
        }
        List<GrantVO> sortedList = res.stream()
                .sorted((o1, o2) -> o2.getInsertTime().compareTo(o1.getInsertTime()))
                .collect(Collectors.toList());
        total = total.add(redPackage).add(coupon).add(discount).add(driver);
        return sortedList;
    }
    @RequestMapping(value = "/grant/getCount")
    @ResponseBody
    public Object getCount(Integer time, String insertTime, Integer type) {
        GrantMoneyVO result = new GrantMoneyVO();
        if (time == null) {
            time = 1;
        }
        String beginTime = null;
        String endTime = null;
        LocalDateTime start = null;
        LocalDateTime end = null;
        // 获取当前日期
        LocalDate today = LocalDate.now();
        if (ToolUtil.isNotEmpty(insertTime)) {
            beginTime = insertTime.split(" - ")[0];
            endTime = insertTime.split(" - ")[1];
            LocalDate s = LocalDate.parse(beginTime);
            LocalDate e = LocalDate.parse(endTime);
            start = s.atStartOfDay();
            end = e.atTime(LocalTime.MAX);
        } else if (time != null) {
            switch (time) {
                case 1:
                    // 获取当天的 00:00:00 和 23:59:59
                    LocalDateTime startOfDay = today.atStartOfDay();
                    LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
                    start = startOfDay;
                    end = endOfDay;
                    break;
                case 2:
                    // 获取本周第一天的日期和时间
                    LocalDate firstDayOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
                    LocalDateTime startOfWeek = firstDayOfWeek.atStartOfDay();
                    // 获取本周最后一天的日期和时间
                    LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
                    LocalDateTime endOfWeek = lastDayOfWeek.atTime(LocalTime.MAX);
                    start = startOfWeek;
                    end = endOfWeek;
                    break;
                case 3:
                    LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
                    LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay();
                    // 获取本月最后一天的日期和时间
                    LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
                    LocalDateTime endOfMonth = lastDayOfMonth.atTime(LocalTime.MAX);
                    start = startOfMonth;
                    end = endOfMonth;
                    break;
                case 4:
                    // 获取本年第一天的日期和时间
                    LocalDate firstDayOfYear = LocalDate.of(today.getYear(), Month.JANUARY, 1);
                    LocalDateTime startOfYear = firstDayOfYear.atStartOfDay();
                    // 获取本年最后一天的日期和时间
                    LocalDate lastDayOfYear = LocalDate.of(today.getYear(), Month.DECEMBER, 31);
                    LocalDateTime endOfYear = lastDayOfYear.atTime(LocalTime.MAX);
                    start = startOfYear;
                    end = endOfYear;
                    break;
            }
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 列表res
        List<GrantVO> res = new ArrayList<>();
        // 专车订单
        List<TOrderPrivateCar> tOrderPrivateCars = new ArrayList<>();
        // 小件物流
        List<TOrderLogistics> tOrderLogistics = new ArrayList<>();
        // 优惠券领取记录
        List<UserCouponRecord> userCouponRecords = new ArrayList<>();
        // 红包领取记录
        List<UserRedPacketRecord> userRedPacketRecords = new ArrayList<>();
        // 司机奖励
        List<DriverActivityHistory> driverActivityHistories = new ArrayList<>();
        // 专车wrapper
        Wrapper<TOrderPrivateCar> between = new EntityWrapper<TOrderPrivateCar>();
        // 小件物流wrapper
        Wrapper<TOrderLogistics> between1 = new EntityWrapper<TOrderLogistics>();
        // 优惠券领取记录wrapper
        Wrapper<UserCouponRecord> between2 = new EntityWrapper<UserCouponRecord>();
        // 红包领取记录wrapper
        Wrapper<UserRedPacketRecord> between3 = new EntityWrapper<UserRedPacketRecord>();
        // 司机奖励
        Wrapper<DriverActivityHistory> between4 = new EntityWrapper<DriverActivityHistory>();
        if (time == 5 && !StringUtils.hasLength(insertTime)) {
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("discountMoney")
            ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .isNotNull("discountMoney")
            ;
            // 优惠券领取记录wrapper
            between2 = new EntityWrapper<UserCouponRecord>()
                    .ne("couponUseType", 2)
                    .ne("couponUseType", 3)
            ;
            // 红包领取记录wrapper
            between3 = new EntityWrapper<UserRedPacketRecord>()
                    .ne("state", 0)
            ;
            // 司机奖励
            between4 = new EntityWrapper<DriverActivityHistory>()
                    .eq("carryOut", 2)
            ;
        } else {
            // 专车wrapper
            between = new EntityWrapper<TOrderPrivateCar>()
                    .isNotNull("discountMoney")
                    .between("insertTime", start, end)
            ;
            // 小件物流wrapper
            between1 = new EntityWrapper<TOrderLogistics>()
                    .between("insertTime", start, end)
                    .isNotNull("discountMoney")
            ;
            // 优惠券领取记录wrapper
            between2 = new EntityWrapper<UserCouponRecord>()
                    .ne("couponUseType", 2)
                    .ne("couponUseType", 3)
                    .between("insertTime", start, end);
            // 红包领取记录wrapper
            between3 = new EntityWrapper<UserRedPacketRecord>()
                    .ne("state", 0)
                    .between("insertTime", start, end);
            // 司机奖励
            between4 = new EntityWrapper<DriverActivityHistory>()
                    .eq("carryOut", 2)
                    .between("insertTime", start, end);
        }
        if (type != null) {
            switch (type) {
                case 1:
                    // 红包
                    userRedPacketRecords = userRedPacketRecordService.selectList(between3);
                    break;
                case 2:
                    userCouponRecords = userCouponRecordService.selectList(between2);
                    // 优惠券
                    break;
                case 3:
                    // 司机奖励
                    driverActivityHistories = driverActivityHistoryService.selectList(between4);
                    break;
                case 4:
                    // 专车订单
                    tOrderPrivateCars = orderPrivateCarService.selectList(between);
                    // 小件物流订单
                    tOrderLogistics = orderLogisticsService.selectList(between1);
                    break;
            }
        } else {
            // 专车订单
            tOrderPrivateCars = orderPrivateCarService.selectList(between);
            // 小件物流订单
            tOrderLogistics = orderLogisticsService.selectList(between1);
            // 司机奖励
            driverActivityHistories = driverActivityHistoryService.selectList(between4);
            userCouponRecords = userCouponRecordService.selectList(between2);
            userRedPacketRecords = userRedPacketRecordService.selectList(between3);
        }
        // 已发放补贴总额
        BigDecimal total = new BigDecimal("0");
        // 已使用折扣总额(用户端)
        BigDecimal discount = new BigDecimal("0");
        // 已领取红包总额(用户端)
        BigDecimal redPackage = new BigDecimal("0");
        // 已领取优惠券总额(用户端)
        BigDecimal coupon = new BigDecimal("0");
        // 已领取司机奖励总额(司机端)
        BigDecimal driver = new BigDecimal("0");
        Map<Integer, TUser> userMap = appUserService.selectList(new EntityWrapper<TUser>())
                .stream()
                .collect(Collectors.toMap(TUser::getId, user -> user));
        Map<Integer, TDriver> driverMap = driverService.selectList(new EntityWrapper<TDriver>())
                .stream()
                .collect(Collectors.toMap(TDriver::getId, user -> user));
        Map<Integer, UserActivity> userActivityMap = userActivityService.selectList(new EntityWrapper<UserActivity>())
                .stream()
                .collect(Collectors.toMap(UserActivity::getId, user -> user));
        Map<Integer, UserActivityDiscount1> userActivityDiscountMap = userActivityDiscount1Service.selectList(new EntityWrapper<UserActivityDiscount1>())
                .stream()
                .collect(Collectors.toMap(UserActivityDiscount1::getId, user -> user));
        Map<Integer, UserActivityRedenvelope> userActivityRedenvelopeMap = userActivityRedenvelopeService.selectList(new EntityWrapper<UserActivityRedenvelope>())
                .stream()
                .collect(Collectors.toMap(UserActivityRedenvelope::getId, user -> user));
        Map<Integer, SysCouponActivity> sysCouponActivityMap = sysCouponActivityService.selectList(new EntityWrapper<SysCouponActivity>())
                .stream()
                .collect(Collectors.toMap(SysCouponActivity::getId, user -> user));
        // 查询已使用折扣总额
        for (TOrderPrivateCar tOrderPrivateCar : tOrderPrivateCars) {
            if (tOrderPrivateCar.getDiscountMoney() == null || tOrderPrivateCar.getDiscountMoney() == 0) {
                continue;
            }
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            UserActivityDiscount1 userActivityDiscount1 = userActivityDiscountMap.get(tOrderPrivateCar.getActivityId());
            if (userActivityDiscount1 != null) {
                UserActivity userActivity = userActivityMap.get(userActivityDiscount1.getUserActivityId());
                if (userActivity != null) {
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
        }
        for (TOrderLogistics tOrderPrivateCar : tOrderLogistics) {
            if (tOrderPrivateCar.getDiscountMoney() == null || tOrderPrivateCar.getDiscountMoney() == 0) {
                continue;
            }
            discount = discount.add(new BigDecimal(tOrderPrivateCar.getDiscountMoney().toString()));
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(tOrderPrivateCar.getInsertTime()));
            grantVO.setType("折扣");
            grantVO.setAmount(tOrderPrivateCar.getDiscountMoney().toString());
            TUser tUser = userMap.get(tOrderPrivateCar.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            UserActivityDiscount1 userActivityDiscount1 = userActivityDiscountMap.get(tOrderPrivateCar.getActivityId());
            if (userActivityDiscount1 != null) {
                UserActivity userActivity = userActivityMap.get(userActivityDiscount1.getUserActivityId());
                if (userActivity != null) {
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
        }
        // 查询已领取红包总额
        for (UserRedPacketRecord userRedPacketRecord : userRedPacketRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userRedPacketRecord.getInsertTime()));
            grantVO.setType("红包");
            grantVO.setAmount(userRedPacketRecord.getMoney().toString());
            TUser tUser = userMap.get(userRedPacketRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            if (userRedPacketRecord.getIsGrant() == 1) {
                // 后台发放的红包
                grantVO.setRemark("指定发放");
            }
            UserActivityRedenvelope userActivityRedenvelope = userActivityRedenvelopeMap.get(userRedPacketRecord.getRedPacketActivityId());
            if (userActivityRedenvelope != null) {
                UserActivity userActivity = userActivityMap.get(userActivityRedenvelope.getUserActivityId());
                if (userActivity != null) {
                    grantVO.setRemark(userActivity.getName());
                }
            }
            res.add(grantVO);
            redPackage = redPackage.add(new BigDecimal(userRedPacketRecord.getMoney().toString()));
        }
        // 查询已领取优惠券总额
        for (UserCouponRecord userCouponRecord : userCouponRecords) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(userCouponRecord.getInsertTime()));
            grantVO.setType("优惠券");
            grantVO.setAmount(userCouponRecord.getMoney().toString());
            TUser tUser = userMap.get(userCouponRecord.getUserId());
            if (tUser != null) {
                grantVO.setName(tUser.getNickName());
            }
            SysCouponActivity sysCouponActivity = sysCouponActivityMap.get(userCouponRecord.getCouponActivityId());
            if (sysCouponActivity != null) {
                grantVO.setRemark(sysCouponActivity.getName());
            }
            coupon = coupon.add(new BigDecimal(userCouponRecord.getMoney().toString()));
            res.add(grantVO);
        }
        // 已领取司机奖励
        for (DriverActivityHistory driverActivityHistory : driverActivityHistories) {
            GrantVO grantVO = new GrantVO();
            grantVO.setInsertTime(format.format(driverActivityHistory.getInsertTime()));
            grantVO.setType("司机奖励");
            grantVO.setAmount(driverActivityHistory.getMoney().toString());
            TDriver tDriver = driverMap.get(driverActivityHistory.getDriverId());
            if (tDriver != null) {
                grantVO.setName(tDriver.getFirstName() + tDriver.getLastName());
            }
            Integer type1 = driverActivityHistory.getType();
            switch (type1) {
                case 1:
                    grantVO.setRemark("邀请司机注册");
                    break;
                case 2:
                    grantVO.setRemark("邀请用户注册");
                    break;
                case 3:
                    grantVO.setRemark("累计在线");
                    break;
                case 4:
                    grantVO.setRemark("订单量");
                    break;
            }
            driver = driver.add(new BigDecimal(driverActivityHistory.getMoney().toString()));
            res.add(grantVO);
        }
        total = total.add(redPackage).add(coupon).add(discount).add(driver);
        result.setTotal(total);
        result.setDiscount(discount);
        result.setCoupon(coupon);
        result.setDriver(driver);
        result.setRedPackage(redPackage);
        return result;
    }
}
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TCompanyMapper.xml
@@ -296,9 +296,9 @@
                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
                union all
    
                select DATE_FORMAT(insertTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(money), 0 from t_order_cancel where orderType = 1
                select DATE_FORMAT(insertTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(money), 0 from t_income where orderType = 1 and userType = 1 and type = 3
                <if test="null != companyId">
                    and orderId in (select id from t_order_private_car where isDelete = 1 and companyId = #{companyId} and state = 10)
                    and incomeId = #{companyId}
                </if>
                <if test="null != start and '' != start and null != end and '' != end">
                    and DATE_FORMAT(insertTime, '%Y-%m-%d') between #{start} and #{end}
@@ -339,9 +339,9 @@
                </if>
                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
                union all
                select DATE_FORMAT(insertTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(money), 0 from t_order_cancel where orderType = 4
                select DATE_FORMAT(insertTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(money), 0 from t_income where orderType = 4 and userType = 1 and type = 3
                <if test="null != companyId">
                    and orderId in (select id from t_order_logistics where isDelete = 1 and companyId = #{companyId} and state = 10)
                    and objectId = #{companyId}
                </if>
                <if test="null != start and '' != start and null != end and '' != end">
                    and DATE_FORMAT(insertTime, '%Y-%m-%d') between #{start} and #{end}
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTaxiMapper.xml
@@ -207,7 +207,7 @@
    <!--查询所有总交易金额-->
    <select id="getAllTradeMoney" resultType="java.lang.Double">
        SELECT IFNULL(SUM(num),0) as value FROM (
        SELECT ROUND(IFNULL(SUM(num),0), 2) as value FROM (
        (SELECT IFNULL(SUM(payMoney),0) as num FROM t_order_taxi where FIND_IN_SET(state,'8,9')
        <if test="companyId != null and companyId != ''">
            and companyId = #{companyId}
@@ -243,12 +243,34 @@
            AND (insertTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
        </if>
        )
        union all
        select IFNULL(SUM(money),0) as num from t_order_cancel where state = 2
        <if test="companyId != null and companyId != ''">
            and (
            if(orderType = 1, orderId in (select id from t_order_private_car where state = 10 and companyId = #{companyId}),
            orderId in (select id from t_order_logistics where state = 10 and companyId = #{companyId}))
            )
        </if>
        <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
            AND (insertTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
        </if>
        union all
        select IFNULL(SUM(money),0) as num from t_reassign where state in (2, 3)
        <if test="companyId != null and companyId != ''">
            and (
            if(orderType = 1, orderId in (select id from t_order_private_car where state = 10 and companyId = #{companyId}),
            orderId in (select id from t_order_logistics where state = 10 and companyId = #{companyId}))
            )
        </if>
        <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
            AND (insertTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
        </if>
        ) as o
    </select>
    <!--查询所有总收益-->
    <select id="getAllIncomeMoney" resultType="java.lang.Double">
        SELECT IFNULL(SUM(money),0) as value FROM t_income where userType = 1
        SELECT ROUND(IFNULL(SUM(money),0), 2) as value FROM t_income where userType = 1
        <if test="companyId != null and companyId != ''">
            and objectId = #{companyId}
        </if>
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TReportLossMapper.xml
@@ -24,7 +24,13 @@
    </sql>
    <select id="getReportLossList" resultType="java.util.Map">
        select t1.*,t2.nickName,t2.phone ,t3.phone as handleUser from t_report_loss t1 left join t_user t2 on t1.userId = t2.id left join sys_user t3 on t1.handleUserId =t3.id
        select t1.*,
               t2.nickName,
               t2.phone ,
               t3.phone as handleUser
        from t_report_loss t1
            left join t_user t2 on t1.userId = t2.id
            left join sys_user t3 on t1.handleUserId =t3.id
        <where>
            t1.state !=3
            <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserCouponRecordMapper.xml
@@ -383,7 +383,7 @@
                    left join t_user_activity_balance b on (a.couponActivityId = b.id and a.activityType = 4)
                    left join t_user_activity c on (b.userActivityId = c.id)
                </if>
                where activityType = #{type}
                where a.activityType = #{type}
                <if test="null != name and '' != name">
                    and c.`name` like CONCAT('%', #{name}, '%')
                </if>
@@ -408,7 +408,7 @@
            sum(aa.receiveMoney) as useMoney
            from (
                select
                DATE_FORMAT(a.insertTime, '%Y-%m-%d') as time,
                DATE_FORMAT(a.endTime, '%Y-%m-%d') as time,
                a.userId,
                count(a.id) as receive,
                sum(a.money) as receiveMoney
@@ -430,12 +430,12 @@
                    and c.`name` like CONCAT('%', #{name}, '%')
                </if>
                <if test="null != start and '' != start and null != end and '' != end">
                    and DATE_FORMAT(a.insertTime, '%Y-%m-%d') between #{start} and #{end}
                    and DATE_FORMAT(a.endTime, '%Y-%m-%d') between #{start} and #{end}
                </if>
                <if test="null != companyId">
                    and c.companyId = #{companyId}
                </if>
                GROUP BY DATE_FORMAT(insertTime, '%Y-%m-%d'),userId
                GROUP BY DATE_FORMAT(a.endTime, '%Y-%m-%d'),userId
            ) as aa GROUP BY aa.time
            <if test="2 == type">
@@ -468,6 +468,37 @@
                        and b.companyId = #{companyId}
                    </if>
                    GROUP BY DATE_FORMAT(a.insertTime, '%Y-%m-%d'),userId
                ) as aa GROUP BY aa.time
                union all
                select
                aa.time,
                0,
                0,
                0,
                count(aa.userId) as usePeople,
                sum(aa.receive) as `use`,
                sum(aa.receiveMoney) as useMoney
                from (
                    select
                    DATE_FORMAT(a.endTime, '%Y-%m-%d') as time,
                    a.userId,
                    count(a.id) as receive,
                    sum(a.money) as receiveMoney
                    from t_user_coupon_record a
                    left join t_sys_coupon_record b on (a.couponActivityId = b.id and a.activityType = 1)
                    where a.activityType = 1 and a.state = 2
                    <if test="null != name and '' != name">
                        and b.`name` like CONCAT('%', #{name}, '%')
                    </if>
                    <if test="null != start and '' != start and null != end and '' != end">
                        and DATE_FORMAT(a.endTime, '%Y-%m-%d') between #{start} and #{end}
                    </if>
                    <if test="null != companyId">
                        and b.companyId = #{companyId}
                    </if>
                    GROUP BY DATE_FORMAT(a.endTime, '%Y-%m-%d'),userId
                ) as aa GROUP BY aa.time
            </if>
          ) as da GROUP BY da.time order by da.time desc
@@ -534,7 +565,7 @@
                sum(aa.receiveMoney) as useMoney
                from (
                    select
                    DATE_FORMAT(a.insertTime, '%Y-%m-%d') as time,
                    DATE_FORMAT(a.endTime, '%Y-%m-%d') as time,
                    a.userId,
                    count(a.id) as receive,
                    sum(a.money) as receiveMoney
@@ -556,12 +587,12 @@
                        and c.`name` like CONCAT('%', #{name}, '%')
                    </if>
                    <if test="null != start and '' != start and null != end and '' != end">
                        and DATE_FORMAT(a.insertTime, '%Y-%m-%d') between #{start} and #{end}
                        and DATE_FORMAT(a.endTime, '%Y-%m-%d') between #{start} and #{end}
                    </if>
                    <if test="null != companyId">
                        and c.companyId = #{companyId}
                    </if>
                    GROUP BY DATE_FORMAT(insertTime, '%Y-%m-%d'),userId
                    GROUP BY DATE_FORMAT(endTime, '%Y-%m-%d'),userId
                ) as aa GROUP BY aa.time
                <if test="2 == type">
@@ -595,6 +626,37 @@
                        </if>
                        GROUP BY DATE_FORMAT(a.insertTime, '%Y-%m-%d'),userId
                    ) as aa GROUP BY aa.time
                    union all
                    select
                    aa.time,
                    0,
                    0,
                    0,
                    count(aa.userId) as usePeople,
                    sum(aa.receive) as `use`,
                    sum(aa.receiveMoney) as useMoney
                    from (
                        select
                        DATE_FORMAT(a.endTime, '%Y-%m-%d') as time,
                        a.userId,
                        count(a.id) as receive,
                        sum(a.money) as receiveMoney
                        from t_user_coupon_record a
                        left join t_sys_coupon_record b on (a.couponActivityId = b.id and a.activityType = 1)
                        where a.activityType = 1 and a.state = 2
                        <if test="null != name and '' != name">
                            and b.`name` like CONCAT('%', #{name}, '%')
                        </if>
                        <if test="null != start and '' != start and null != end and '' != end">
                            and DATE_FORMAT(a.endTime, '%Y-%m-%d') between #{start} and #{end}
                        </if>
                        <if test="null != companyId">
                            and b.companyId = #{companyId}
                        </if>
                        GROUP BY DATE_FORMAT(a.endTime, '%Y-%m-%d'),userId
                    ) as aa GROUP BY aa.time
                </if>
            ) as da GROUP BY da.time
        ) as w
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TSystemPrice.java
@@ -44,8 +44,18 @@
    /**
     * 运价类型说明
     */
    @TableField("fareTypeNote")
    private String fareTypeNote;
    @TableField("fareTypeNoteChinese")
    private String fareTypeNoteChinese;
    /**
     * 运价类型说明
     */
    @TableField("fareTypeNoteEnglish")
    private String fareTypeNoteEnglish;
    /**
     * 运价类型说明
     */
    @TableField("fareTypeNoteFrench")
    private String fareTypeNoteFrench;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
@@ -98,15 +108,31 @@
    public void setContent(String content) {
        this.content = content;
    }
    public String getFareTypeNote() {
        return fareTypeNote;
    public String getFareTypeNoteChinese() {
        return fareTypeNoteChinese;
    }
    public void setFareTypeNote(String fareTypeNote) {
        this.fareTypeNote = fareTypeNote;
    public void setFareTypeNoteChinese(String fareTypeNoteChinese) {
        this.fareTypeNoteChinese = fareTypeNoteChinese;
    }
    public String getFareTypeNoteEnglish() {
        return fareTypeNoteEnglish;
    }
    public void setFareTypeNoteEnglish(String fareTypeNoteEnglish) {
        this.fareTypeNoteEnglish = fareTypeNoteEnglish;
    }
    public String getFareTypeNoteFrench() {
        return fareTypeNoteFrench;
    }
    public void setFareTypeNoteFrench(String fareTypeNoteFrench) {
        this.fareTypeNoteFrench = fareTypeNoteFrench;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
@@ -120,7 +146,6 @@
                ", companyId=" + companyId +
                ", serverCarModelId=" + serverCarModelId +
                ", content='" + content + '\'' +
                ", fareTypeNote='" + fareTypeNote + '\'' +
                ", state=" + state +
                '}';
    }
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
@@ -52,7 +52,7 @@
        gmailssl(props);
    
        final String username = "i-gotech@i-go.group";// gmail 邮箱
        final String password = "rvbmuovvpocmhast";// Google应用专用密码
        final String password = "mbhyptngnvlewdxo";// Google应用专用密码
        Session session = Session.getInstance(props,
                new Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
ManagementIGOTravel/guns-admin/src/main/resources/application.yml
@@ -1,115 +1,3 @@
server:
  port: 8010
guns:
  swagger-open: false              #是否开启swagger (true/false)
  kaptcha-open: false             #是否开启登录时验证码 (true/false)
  spring-session-open: false      #是否开启spring session,如果是多机环境需要开启(true/false)
  session-invalidate-time: 1800     #session失效时间(只在单机环境下生效,多机环境在SpringSessionConfig类中配置) 单位:秒
  session-validation-interval: 900  #多久检测一次失效的session(只在单机环境下生效) 单位:秒
  #  file-upload-path: C:\Users\hi\Desktop\ #文件上传目录(不配置的话为java.io.tmpdir目录)
  #  picture-server-address: http://192.168.0.43/resources/  #图片服务器地址
  file-upload-path: C:\Users\Administrator\Desktop\apache-tomcat-8.0.33\webapps\ROOT\upload\ #文件上传目录(不配置的话为java.io.tmpdir目录)
  picture-server-address: http://139.9.249.67:8080/upload/  #图片服务器地址
  rest-url: http://139.9.249.67:8080/rest/    #前端接口调用基础路径
spring:
  mvc:
    static-path-pattern: /static/**
    view:
      prefix: /WEB-INF/view
  devtools:
    restart:
      enabled: false
      additional-paths: src/main/java
      exclude: static/**,WEB-INF/view/**
  servlet:
    multipart:
      max-request-size: 100MB
      max-file-size: 100MB
  profiles:
    active: dev
mybatis-plus:
  type-aliases-package: com.stylefeng.guns.modular.system.model
  global-config:
    id-type: 0  #0:数据库ID自增   1:用户输入id  2:全局唯一id(IdWorker)  3:全局唯一ID(uuid)
    db-column-underline: false
  configuration:
    configuration.map-underscore-to-camel-case: true #是否开启自动驼峰命名规则(camel case)映射
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出Sql,如需打印Sql注释该配置
---
spring:
  datasource:
    url: jdbc:mysql://34.35.60.126:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B0
    username: xiwang
    password: HjKbXilb9zajmXbl
    db-name: igotravel #用来搜集数据库的所有表
    filters: wall,mergeStat
#多数据源情况的配置
guns:
  muti-datasource:
    open: false
    url: jdbc:mysql://34.35.60.126:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B0
    username: xiwang
    password: HjKbXilb9zajmXbl
    dataSourceNames:
      - dataSourceGuns
      - dataSourceBiz
---
filePath: d:/orderPostionFile/  #存储订单轨迹文件路径
#quartz配置
spring:
  quartz:
    properties:
      org:
        quartz:
          scheduler:
            instanceName: MyDefaultQuartzScheduler
            instanceId: AUTO
          jobStore:
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            tablePrefix: qrtz_
            isClustered: false
            clusterCheckinInterval: 10000
            useProperties: false
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            threadCount: 10
            threadPriority: 5
            threadsInheritContextClassLoaderOfInitializingThread: true
      job-store-type: jdbc
---
spring:
  mail:
    host: smtp.gmail.com # 配置 smtp 服务器地址
    port: 465 # smtp 服务器的端口
    username: i-gotech@i-go.group # 配置邮箱用户名(你的邮箱地址)
    password: mhizkqkhuknbitps # 配置申请到的授权码(刚让复制的授权码)
    default-encoding: UTF-8 # 配置邮件编码
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory # 配饰 SSL 加密工厂
        debug: true
    from: i-gotech@i-go.group # 发送方邮件,配在yml中可方便更改
    template-path: /home/igotechgh/nginx/html/mailbox/
---
#支付回调地址
#测试环境
callbackPath: http://182.160.16.251:8010
---
    active: "@spring.active@"
ManagementIGOTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSystemPrice/tSmallPrice_add.html
@@ -22,11 +22,23 @@
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明:</label>
                        <label class="col-sm-2 control-label">运价类型说明(中文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNote" name="fareTypeNote" style="height: 100px;"></textarea>
                            <textarea class="form-control" id="fareTypeNoteChinese" name="fareTypeNoteChinese" style="height: 100px;"></textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(英文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteEnglish" name="fareTypeNoteEnglish" style="height: 100px;"></textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(法文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteFrench" name="fareTypeNoteFrench" style="height: 100px;"></textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">起步价设置:</label>
                        <div class="col-sm-10">
ManagementIGOTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSystemPrice/tSmallPrice_edit.html
@@ -21,12 +21,24 @@
                            </select>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明:</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNote" name="fareTypeNote" style="height: 100px;">${item.fareTypeNote}</textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(中文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteChinese" name="fareTypeNoteChinese" style="height: 100px;">${item.fareTypeNoteChinese}</textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(英文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteEnglish" name="fareTypeNoteEnglish" style="height: 100px;">${item.fareTypeNoteEnglish}</textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(法文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteFrench" name="fareTypeNoteFrench" style="height: 100px;">${item.fareTypeNoteFrench}</textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">起步价设置:</label>
                        <div class="col-sm-10">
ManagementIGOTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSystemPrice/tSystemPrice_add.html
@@ -21,12 +21,24 @@
                            </select>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明:</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNote" name="fareTypeNote" style="height: 100px;"></textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(中文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteChinese" name="fareTypeNoteChinese" style="height: 100px;"></textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(英文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteEnglish" name="fareTypeNoteEnglish" style="height: 100px;"></textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(法文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteFrench" name="fareTypeNoteFrench" style="height: 100px;"></textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">起步价设置:</label>
                        <div class="col-sm-10">
ManagementIGOTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSystemPrice/tSystemPrice_edit.html
@@ -21,12 +21,24 @@
                            </select>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明:</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNote" name="fareTypeNote" style="height: 100px;">${item.fareTypeNote}</textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(中文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteChinese" name="fareTypeNoteChinese" style="height: 100px;">${item.fareTypeNoteChinese}</textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(英文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteEnglish" name="fareTypeNoteEnglish" style="height: 100px;">${item.fareTypeNoteEnglish}</textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">运价类型说明(法文):</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" id="fareTypeNoteFrench" name="fareTypeNoteFrench" style="height: 100px;">${item.fareTypeNoteFrench}</textarea>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">起步价设置:</label>
                        <div class="col-sm-10">
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/report/operationalData.js
@@ -27,7 +27,7 @@
            {title: '乘客取消数量', field: 'cancelNum', visible: true, align: 'center', valign: 'middle'},
            {title: '取消占比%', field: 'cancelProportion', visible: true, align: 'center', valign: 'middle'},
            {title: '通过平台支付(单)', field: 'onlinePay', visible: true, align: 'center', valign: 'middle'},
            {title: '通过其它支付(单)', field: 'offlinePay', visible: true, align: 'center', valign: 'middle'},
            {title: '通过现金支付(单)', field: 'offlinePay', visible: true, align: 'center', valign: 'middle'},
            {title: '合计', field: 'total', visible: true, align: 'center', valign: 'middle'},
            {title: '平台支付占比%', field: 'payProportion', visible: true, align: 'center', valign: 'middle'},
            {title: '金额', field: 'money', visible: true, align: 'center', valign: 'middle'},
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/tReportLoss/tReportLoss.js
@@ -90,14 +90,14 @@
        layer.open({
            type: 1
            , title: ''
            , area: ['30%', '30%']
            , area: ["400px", '300px']
            , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
            , id: 'layerDemo' //防止重复弹出cge
            , content: '<div class="form-horizontal">' +
                '                    <div class="col-sm-11" style="margin-top: 30px">' +
                '                    <div class="col-sm-11">' +
                '                        <div class="form-group">\n' +
                '                            <label class="col-sm-3 control-label">备注:</label>\n' +
                '                            <label class="col-sm-3 control-label">回复内容:</label>\n' +
                '                            <div class="col-sm-9">\n' +
                '                              <textarea id="info" style="height: 150px;width: 250px" placeholder="多行输入,最多500字" maxlength="500"></textarea>\n' +
                '                            </div>\n' +
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/tSystemPrice/tSmallPrice_info.js
@@ -11,10 +11,24 @@
                }
            }
        },
        fareTypeNote: {
        fareTypeNoteChinese: {
            validators: {
                notEmpty: {
                    message: '运价类型说明不能为空'
                    message: '运价类型说明(中文)不能为空'
                }
            }
        },
        fareTypeNoteEnglish: {
            validators: {
                notEmpty: {
                    message: '运价类型说明(英文)不能为空'
                }
            }
        },
        fareTypeNoteFrench: {
            validators: {
                notEmpty: {
                    message: '运价类型说明(法文)不能为空'
                }
            }
        },
@@ -392,7 +406,9 @@
    .set('type')
    .set('companyId')
    .set('serverCarModelId')
    .set('fareTypeNote')
    .set('fareTypeNoteChinese')
    .set('fareTypeNoteEnglish')
    .set('fareTypeNoteFrench')
    .set('content');
}
ManagementIGOTravel/guns-admin/src/main/webapp/static/modular/system/tSystemPrice/tSystemPrice_info.js
@@ -11,10 +11,24 @@
                }
            }
        },
        fareTypeNote: {
        fareTypeNoteChinese: {
            validators: {
                notEmpty: {
                    message: '运价类型说明不能为空'
                    message: '运价类型说明(中文)不能为空'
                }
            }
        },
        fareTypeNoteEnglish: {
            validators: {
                notEmpty: {
                    message: '运价类型说明(英文)不能为空'
                }
            }
        },
        fareTypeNoteFrench: {
            validators: {
                notEmpty: {
                    message: '运价类型说明(法文)不能为空'
                }
            }
        },
@@ -392,7 +406,9 @@
    .set('type')
    .set('companyId')
    .set('serverCarModelId')
    .set('fareTypeNote')
    .set('fareTypeNoteChinese')
    .set('fareTypeNoteEnglish')
    .set('fareTypeNoteFrench')
    .set('content');
}