package com.ruoyi.order.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.time.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.account.api.feignClient.AppUserCarClient;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserCar;
import com.ruoyi.chargingPile.api.domain.SiteMenu;
import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
import com.ruoyi.chargingPile.api.feignClient.*;
import com.ruoyi.chargingPile.api.model.Partner;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.chargingPile.api.model.TParkingRecord;
import com.ruoyi.chargingPile.api.model.TPartnerAppUser;
import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.dto.ChargingOrderGroup;
import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.log.enums.OperatorType;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.order.api.dto.ChargingStatisticeDTO;
import com.ruoyi.order.api.model.*;
import com.ruoyi.order.api.query.ChargingOrderQuery;
import com.ruoyi.common.core.dto.MongoChargingOrderQuery;
import com.ruoyi.order.api.query.TChargingCountQuery;
import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
import com.ruoyi.order.api.vo.*;
import com.ruoyi.order.api.vo.ChargingOrderInfoVO;
import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate;
import com.ruoyi.order.api.vo.TCharingOrderVO;
import com.ruoyi.order.dto.GetMyChargingOrderList;
import com.ruoyi.order.dto.GetNoInvoicedOrder;
import com.ruoyi.order.dto.MyChargingOrderInfo;
import com.ruoyi.order.dto.MyChargingOrderList;
import com.ruoyi.order.dto.OrderEvaluateVo;
import com.ruoyi.order.dto.*;
import com.ruoyi.order.export.PayOrderExport;
import com.ruoyi.order.export.EnterpriseChargingDetailExport;
import com.ruoyi.order.service.*;
import com.ruoyi.order.support.FranchiseeUserStatistics;
import com.ruoyi.order.util.PreviousSixMonths;
import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService;
import com.ruoyi.order.vo.EndOfChargePageInfo;
import com.ruoyi.order.vo.ChargingSimulationVO;
import com.ruoyi.order.vo.IcbcAdminSubOrderVO;
import com.ruoyi.order.vo.StatisticsOfBatteryVO;
import com.ruoyi.order.vo.ReservationRecommendationVO;
import com.ruoyi.order.vo.UpdateOrderPaymentAmountDto;
import com.ruoyi.order.vo.WatchChargingOrderVo;
import com.ruoyi.other.api.feignClient.RoleSiteClient;
import com.ruoyi.other.api.feignClient.UserSiteClient;
import com.ruoyi.other.api.feignClient.VipClient;
import com.ruoyi.other.api.feignClient.OtherClient;
import com.ruoyi.other.api.domain.TCompany;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
import com.ruoyi.payment.api.vo.IcbcPaymentResp;
import com.ruoyi.payment.api.vo.IcbcRefundResp;
import com.ruoyi.payment.api.vo.IcbcSubOrderRefundResp;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
import com.ruoyi.system.api.feignClient.SysUserRoleClient;
import com.ruoyi.system.api.model.SysUserRoleVo;
import io.swagger.annotations.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.List;
import java.util.stream.Collectors;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.WebUtils;
import org.apache.poi.ss.usermodel.Workbook;
/**
*
* 前端控制器
*
*
* @author xiaochen
* @since 2024-08-07
*/
@Api(tags = "充电订单")
@RestController
@RequestMapping("/t-charging-order")
public class TChargingOrderController {
private Logger log = LoggerFactory.getLogger(TChargingOrderController.class);
@Resource
private TChargingOrderService chargingOrderService;
@Autowired
private TokenService tokenService;
@Autowired
private TOrderEvaluateService orderEvaluateService;
@Autowired
private TGrantVipService tGrantVipService;
@Resource
private WxPaymentClient wxPaymentClient;
@Resource
private RedisService redisService;
@Resource
private AliPaymentClient aliPaymentClient;
@Resource
private TShoppingOrderService shoppingOrderService;
@Resource
private AppUserClient appUserClient;
@Resource
private TVipOrderService vipOrderService;
@Resource
private ParkingLotClient parkingLotClient;
@Resource
private TChargingOrderRefundService chargingOrderRefundService;
@Resource
private TShoppingOrderRefundService shoppingOrderRefundService;
@Resource
private TVipOrderRefundService vipOrderRefundService;
@Resource
private SiteClient siteClient;
@Resource
private ChargingPileClient chargingPileClient;
@Resource
private ChargingGunClient chargingGunClient;
@Resource
private AppUserCarClient appUserCarClient;
@Resource
private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
@Resource
private TOrderInvoiceService invoiceService;
@Resource
private TOrderInvoiceDetailService orderInvoiceDetailService;
@Resource
private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
@Resource
private PartnerClient partnerClient;
@Resource
private SysUserClient sysUserClient;
@Resource
private UserSiteClient userSiteClient;
@Resource
private RoleSiteClient roleSiteClient;
@Resource
private VipClient vipClient;
@Resource
private OtherClient otherClient;
@Resource
private SysUserRoleClient sysUserRoleClient;
@GetMapping("/reservationRecommendation")
@ApiOperation(value = "获取站点预约充电推荐时段", tags = {"管理后台-充电桩信息"})
public R getReservationRecommendation(@RequestParam Integer siteId) {
return R.ok(chargingOrderService.getReservationRecommendation(siteId));
}
/** 小程序加盟商看板:站点范围始终从登录账号绑定关系解析。 */
@PostMapping("/app/franchisee/charge-data")
public R