package com.ruoyi.order.controller;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.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.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.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.core.web.domain.BasePojo;
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.integration.api.model.PageChargingOrderAndUploadRealTimeMonitoringDataDto;
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
import com.ruoyi.integration.api.model.ChargingOrderAndUploadRealTimeMonitoringDataDto;
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringPageData;
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.service.*;
import com.ruoyi.order.util.PreviousSixMonths;
import com.ruoyi.order.vo.EndOfChargePageInfo;
import com.ruoyi.order.vo.WatchChargingOrderVo;
import com.ruoyi.other.api.feignClient.RoleSiteClient;
import com.ruoyi.other.api.feignClient.UserSiteClient;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
import com.ruoyi.payment.api.vo.AliQueryOrder;
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.http.HttpServletResponse;
import java.io.PrintWriter;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 前端控制器
*
*
* @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 UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
@Resource
private PartnerClient partnerClient;
@Resource
private SysUserClient sysUserClient;
@Resource
private UserSiteClient userSiteClient;
@Resource
private RoleSiteClient roleSiteClient;
@Resource
private SysUserRoleClient sysUserRoleClient;
/**
* 远程调用 监管平台查询前一天用能统计
* @return
*/
@ResponseBody
@PostMapping(value = "/getChargingStatistics")
public R> getChargingStatistics(@RequestBody ChargingStatisticeDTO dto) {
List collect = chargingOrderAccountingStrategyService.lambdaQuery().between(TChargingOrderAccountingStrategy::getCreateTime, dto.getStartTime(), dto.getEndTime())
.list().stream().map(TChargingOrderAccountingStrategy::getChargingOrderId).collect(Collectors.toList());
if (!collect.isEmpty()){
List list = chargingOrderService.lambdaQuery()
.in(TChargingOrder::getId,collect).list();
return R.ok(list);
}
return R.ok(new ArrayList());
}
/**
* 远程调用 增加管理后台赠送会员记录
* @return
*/
@ResponseBody
@PostMapping(value = "/management/give/vip")
public R managementGiveVip(@RequestBody TGrantVip grantVip) {
return R.ok(tGrantVipService.save(grantVip));
}
/**
* 远程调用根据枪id 查询最新的订单id 用户后台结束充电
* @param id
* @return
*/
@ResponseBody
@PostMapping(value = "/queryOrderByGunId/{id}")
public R queryOrderByGunId(@PathVariable("id") String id) {
List integers = new ArrayList<>();
integers.add(2);
integers.add(3);
integers.add(4);
TChargingOrder one = chargingOrderService.lambdaQuery()
.eq(TChargingOrder::getChargingGunId, id)
.in(TChargingOrder::getStatus, integers)
.one();
if (one!=null){
return R.ok(one.getId().toString());
}
return R.ok();
}
@RequiresPermissions(value = {"/invoiceManagement/select_order", "/paymentOrder/order"}, logical = Logical.OR)
@ResponseBody
@PostMapping(value = "/pay/order/list")
@ApiOperation(value = "列表", tags = {"管理后台-支付订单-订单信息"})
public R> payOrderList(@RequestBody PayOrderQueryDto payOrderQueryDto) {
Integer pageCurr = payOrderQueryDto.getPageCurr();
Integer pageSize = payOrderQueryDto.getPageSize();
payOrderQueryDto.setPageCurr(1);
payOrderQueryDto.setPageSize(10000999);
PageInfo data = chargingOrderService.payOrderQuery(payOrderQueryDto).getData();
List res = new ArrayList<>();
// 查询当前登陆人按钮权限
SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
Integer roleType = sysUser.getRoleType();
Long userId = tokenService.getLoginUser().getUserid();
//如果没传siteId,获取当前登陆人所有的siteIds
List siteIds = new ArrayList<>();
if (userId != null){
List data2 = siteClient.getSiteListByUserId(userId).getData();
for (GetSiteListDTO datum : data2) {
siteIds.add(datum.getId());
}
}
if (siteIds.isEmpty()){
siteIds.add(-1);
}
List list = chargingOrderService.list();
List parkingRecord = parkingLotClient.getSiteIdAll().getData();
for (PayOrderDto record : data.getRecords()) {
if (record.getType() == 1){
TChargingOrder chargingOrder = list.stream().filter(e -> e.getId().equals(Long.valueOf(record.getId()))).findFirst().orElse(null);
if (chargingOrder!=null){
record.setSiteId(chargingOrder.getSiteId());
}
}
if (record.getType()==4){
TParkingRecord tParkingRecord = parkingRecord.stream().filter(e -> e.getId().equals(Long.valueOf(record.getId()))).findFirst().orElse(null);
if (tParkingRecord!=null){
record.setSiteId(tParkingRecord.getSiteId());
}
}
if (roleType==1||(record.getType()!=1&&record.getType()!=4)){
res.add(record);
continue;
}
if (roleType==2 && (record.getType()==1||record.getType()==4) && siteIds.contains(record.getSiteId())){
res.add(record);
}
}
List res1 = testing5(res.size(), pageCurr, pageSize, res);
data.setTotal(res.size());
data.setRecords(res1);
return R.ok(data);
}
public static List testing5(long total, long current, long size, List str){
List result = new ArrayList<>();
//获取初始化分页结构
com.ruoyi.order.util.Page page = new com.ruoyi.order.util.Page().getPage(total, size, current - 1);
//获取集合下标初始值
long startIndex = page.getStartIndex();
//获取集合下标结束值
long endInddex = 0;
if(startIndex + page.getCurrent() >= total || size > total){
endInddex = total;
}else {
endInddex = Math.min(startIndex + page.getSize(), total);
}
//如果输入的开始查询下标大于集合大小,则查询为空值
if(startIndex > total){
result = Collections.emptyList();
}else{
result = str.subList((int)startIndex,(int)endInddex);
}
return result;
}
@ResponseBody
@PostMapping(value = "/pay/order/refund")
@ApiOperation(value = "退款", tags = {"管理后台-支付订单-订单信息"})
public R refund(@RequestBody PayOrderRefundDto payOrderQueryDto) {
return chargingOrderService.payRefund(payOrderQueryDto);
}
@RequiresPermissions(value = {"/paymentOrder/order"}, logical = Logical.OR)
@ResponseBody
@GetMapping(value = "/pay/order/pay/detail")
@ApiOperation(value = "支付信息", tags = {"管理后台-支付订单-订单信息"})
public R payOrderList(Long orderId, Integer type) {
switch (type) {
case 1:
TChargingOrder byId = chargingOrderService.getById(orderId);
PayOrderInfoDto payOrderInfoDto = new PayOrderInfoDto();
payOrderInfoDto.setOrderId(byId.getId().toString());
payOrderInfoDto.setCode(byId.getCode());
payOrderInfoDto.setTradeNo(byId.getRechargeSerialNumber());
payOrderInfoDto.setPayType(byId.getRechargePaymentType());
payOrderInfoDto.setPayAmount(byId.getPaymentAmount());
payOrderInfoDto.setPayTime(byId.getCreateTime());
payOrderInfoDto.setRefundAmount(byId.getRefundAmount());
payOrderInfoDto.setRechargeAmount(byId.getRechargeAmount());
payOrderInfoDto.setFinalAmount(byId.getRechargeAmount().subtract(byId.getRefundAmount()));
return R.ok(payOrderInfoDto);
case 2:
TShoppingOrder byId1 = shoppingOrderService.getById(orderId);
PayOrderInfoDto payOrderInfoDto1 = new PayOrderInfoDto();
payOrderInfoDto1.setOrderId(byId1.getId().toString());
payOrderInfoDto1.setCode(byId1.getCode());
payOrderInfoDto1.setTradeNo(byId1.getSerialNumber());
payOrderInfoDto1.setPayType(byId1.getPaymentType());
payOrderInfoDto1.setPayAmount(byId1.getPaymentAmount());
payOrderInfoDto1.setPayTime(byId1.getCreateTime());
payOrderInfoDto1.setRefundAmount(byId1.getRefundAmount());
payOrderInfoDto1.setRechargeAmount(byId1.getPaymentAmount());
payOrderInfoDto1.setFinalAmount(byId1.getPaymentAmount().subtract(byId1.getRefundAmount()));
return R.ok(payOrderInfoDto1);
case 3:
TVipOrder byId2 = vipOrderService.getById(orderId);
PayOrderInfoDto payOrderInfoDto2 = new PayOrderInfoDto();
payOrderInfoDto2.setOrderId(byId2.getId().toString());
payOrderInfoDto2.setCode(byId2.getCode());
payOrderInfoDto2.setTradeNo(byId2.getSerialNumber());
payOrderInfoDto2.setPayType(byId2.getPaymentType());
payOrderInfoDto2.setPayAmount(byId2.getPaymentAmount());
payOrderInfoDto2.setPayTime(byId2.getCreateTime());
payOrderInfoDto2.setRefundAmount(byId2.getRefundAmount());
payOrderInfoDto2.setRechargeAmount(byId2.getPaymentAmount());
payOrderInfoDto2.setFinalAmount(byId2.getPaymentAmount().subtract(byId2.getRefundAmount()));
return R.ok(payOrderInfoDto2);
//todo luo 停车场订单
case 4:
R recordById = parkingLotClient.getRecordById(orderId);
TParkingRecord byId3 =recordById.getData();
PayOrderInfoDto payOrderInfoDto3 = new PayOrderInfoDto();
payOrderInfoDto3.setOrderId(byId3.getId().toString());
payOrderInfoDto3.setCode(byId3.getCode());
payOrderInfoDto3.setPayTime(byId3.getCreateTime());
payOrderInfoDto3.setRechargeAmount(byId3.getPayment());
return R.ok(payOrderInfoDto3);
}
return R.ok();
}
@ResponseBody
@GetMapping(value = "/pay/order/refund/detail")
@ApiOperation(value = "退款信息", tags = {"管理后台-支付订单-订单信息"})
public R refundDetail(Long orderId, Integer type) {
switch (type) {
case 1:
List byId = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getChargingOrderId, orderId).orderByDesc(TChargingOrderRefund::getRefundTime).list();
return R.ok(byId);
case 2:
List list = shoppingOrderRefundService.lambdaQuery().eq(TShoppingOrderRefund::getShoppingOrderId, orderId).orderByDesc(TShoppingOrderRefund::getRefundTime).list();
return R.ok(list);
case 3:
List list1 = vipOrderRefundService.lambdaQuery().eq(TVipOrderRefund::getVipOrderId, orderId).orderByDesc(TVipOrderRefund::getRefundTime).list();
return R.ok(list1);
}
return R.ok();
}
@ResponseBody
@GetMapping(value = "/pay/order/charging")
@ApiOperation(value = "充电信息", tags = {"管理后台-支付订单-订单信息"})
public R refundDetail(Long orderId) {
PayOrderChargingInfo payOrderChargingInfo = new PayOrderChargingInfo();
TChargingOrder byId = chargingOrderService.getById(orderId);
List data = siteClient.getSiteByIds(Collections.singletonList(byId.getSiteId())).getData();
payOrderChargingInfo.setSiteName(data.get(0).getName());
TChargingPile data1 = chargingPileClient.getChargingPileById(byId.getChargingPileId()).getData();
payOrderChargingInfo.setChargingName(data1.getName());
TChargingGun data2 = chargingGunClient.getChargingGunById(byId.getChargingGunId()).getData();
payOrderChargingInfo.setGunName(data2.getName());
if (byId.getAppUserCarId()!=null) {
List data3 = appUserCarClient.getCarByIds(Collections.singletonList(byId.getAppUserCarId())).getData();
payOrderChargingInfo.setCarNum(data3.get(0).getLicensePlate());
}else{
payOrderChargingInfo.setCarNum(byId.getPlateNum());
}
payOrderChargingInfo.setTChargingOrder(byId);
Long count = chargingOrderAccountingStrategyService.lambdaQuery().eq(TChargingOrderAccountingStrategy::getChargingOrderId, orderId).count();
payOrderChargingInfo.setPeriodCount(count);
if (byId.getAppUserCarId()!=null) {
List carid = new ArrayList<>();
carid.add(byId.getAppUserCarId());
R> carByIds = appUserCarClient.getCarByIds(carid);
payOrderChargingInfo.setCarNum(carByIds.getData().get(0).getLicensePlate());
}else{
payOrderChargingInfo.setCarNum(byId.getPlateNum());
}
payOrderChargingInfo.setStartTime(byId.getStartTime());
payOrderChargingInfo.setEndTime(byId.getEndTime());
payOrderChargingInfo.setTimeCount(payOrderChargingInfo.calculateDuration());
return R.ok(payOrderChargingInfo);
}
@ResponseBody
@GetMapping(value = "/pay/order/charging/details")
@ApiOperation(value = "充电明细", tags = {"管理后台-支付订单-订单信息"})
public R> chargingDetail(Long orderId) {
TChargingOrder chargingOrder = chargingOrderService.getById(orderId);
List list = chargingOrderAccountingStrategyService.lambdaQuery().eq(TChargingOrderAccountingStrategy::getChargingOrderId, orderId)
.orderByDesc(TChargingOrderAccountingStrategy::getStartTime).list();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
for (TChargingOrderAccountingStrategy tChargingOrderAccountingStrategy : list) {
LocalDateTime createTime = chargingOrder.getStartTime();
String format = createTime.format(formatter);
String startTime = tChargingOrderAccountingStrategy.getStartTime();
if("00:00".equals(startTime)){
createTime = createTime.plusDays(1);
format = createTime.format(formatter);
}
tChargingOrderAccountingStrategy.setStartTime(format+" "+tChargingOrderAccountingStrategy.getStartTime());
tChargingOrderAccountingStrategy.setEndTime(format+" "+tChargingOrderAccountingStrategy.getEndTime());
}
//从新排序
list.sort(new Comparator() {
@Override
public int compare(TChargingOrderAccountingStrategy o1, TChargingOrderAccountingStrategy o2) {
String startTime = o1.getStartTime();
String startTime1 = o2.getStartTime();
LocalDateTime localDateTime = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
LocalDateTime localDateTime1 = LocalDateTime.parse(startTime1, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
if(localDateTime.isBefore(localDateTime1)){
return -1;
}
if(localDateTime.isAfter(localDateTime1)){
return 1;
}
return 0;
}
});
return R.ok(list);
}
@RequiresPermissions(value = {"/paymentOrder/refund"}, logical = Logical.OR)
@ResponseBody
@PostMapping(value = "/pay/order/refund/list")
@ApiOperation(value = "列表", tags = {"管理后台-支付订单-退款订单"})
public R> refundList(@RequestBody ChargingRefundDto chargingRefundDto) {
Integer pageCurr = chargingRefundDto.getPageCurr();
Integer pageSize = chargingRefundDto.getPageSize();
// R> refundList = chargingOrderService.getRefundList(chargingRefundDto);
chargingRefundDto.setPageCurr(1);
chargingRefundDto.setPageSize(199999999);
R> refundList1 = chargingOrderService.getRefundList(chargingRefundDto);
Long userId = tokenService.getLoginUser().getUserid();
//如果没传siteId,获取当前登陆人所有的siteIds
List siteIds = new ArrayList<>();
if (userId != null){
List data = siteClient.getSiteListByUserId(userId).getData();
for (GetSiteListDTO datum : data) {
siteIds.add(datum.getId());
}
}
if (siteIds.isEmpty()){
siteIds.add(-1);
}
// 查询当前登陆人按钮权限
SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
Integer roleType = sysUser.getRoleType();
List tChargingOrderRefunds = new ArrayList<>();
for (TChargingOrderRefund record : refundList1.getData().getRecords()) {
if (roleType==1){
tChargingOrderRefunds.add(record);
continue;
}
if (record.getType()!=1){
tChargingOrderRefunds.add(record);
}
TChargingOrder byId = chargingOrderService.getById(record.getOrderId());
record.setUid(record.getId().toString());
if (byId==null){
continue;
}
if (roleType==2&&siteIds.contains(byId.getSiteId())){
tChargingOrderRefunds.add(record);
}
}
PageInfo data = refundList1.getData();
List res1 = testing4(tChargingOrderRefunds.size(), pageCurr, pageSize, tChargingOrderRefunds);
data.setTotal(tChargingOrderRefunds.size());
data.setRecords(res1);
return refundList1;
}
public static List testing4(long total, long current, long size, List str){
List result = new ArrayList<>();
//获取初始化分页结构
com.ruoyi.order.util.Page page = new com.ruoyi.order.util.Page().getPage(total, size, current - 1);
//获取集合下标初始值
long startIndex = page.getStartIndex();
//获取集合下标结束值
long endInddex = 0;
if(startIndex + page.getCurrent() >= total || size > total){
endInddex = total;
}else {
endInddex = Math.min(startIndex + page.getSize(), total);
}
//如果输入的开始查询下标大于集合大小,则查询为空值
if(startIndex > total){
result = Collections.emptyList();
}else{
result = str.subList((int)startIndex,(int)endInddex);
}
return result;
}
@ResponseBody
@PostMapping(value = "/pay/order/refund/list1")
@ApiOperation(value = "列表1", tags = {"管理后台-支付订单-退款订单"})
public R> refundList1(@RequestBody ChargingRefundDto chargingRefundDto) {
return chargingOrderService.getRefundList(chargingRefundDto);
}
@RequiresPermissions(value = {"/chargingPileOrder"}, logical = Logical.OR)
@ResponseBody
@PostMapping(value = "/chargingOrder")
@ApiOperation(value = "充电桩订单列表", tags = {"管理后台-订单管理"})
public AjaxResult chargingOrder(@RequestBody ChargingOrderQuery dto) {
List data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
dto.setUserIds(data);
TCharingOrderVO res = chargingOrderService.chargingOrder(dto);
return AjaxResult.success(res);
}
@RequiresPermissions(value = {"/chargingPileOrder/monitoring_record"}, logical = Logical.OR)
@ResponseBody
@GetMapping(value = "/chargingOrderInfo")
@ApiOperation(value = "充电桩订单列表查看详情", tags = {"管理后台-订单管理"})
public AjaxResult chargingOrderInfo(String strategyId) {
TChargingOrder byId = chargingOrderService.getById(strategyId);
ChargingOrderInfoVO chargingOrderInfoVO = new ChargingOrderInfoVO();
chargingOrderInfoVO.setCdElectronic(byId.getCurrent()!=null?byId.getCurrent().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
chargingOrderInfoVO.setCdVoltage(byId.getVoltage()!=null?byId.getVoltage().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
chargingOrderInfoVO.setSurplus(byId.getTotalElectricity()!=null?byId.getTotalElectricity().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
chargingOrderInfoVO.setTotalPower(byId.getPower()!=null?byId.getPower().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
if (byId.getAppUserCarId()!=null){
TAppUserCar data = appUserCarClient.getCarById(byId.getAppUserCarId()+"").getData();
if (data!=null){
chargingOrderInfoVO.setLicensePlate(data.getLicensePlate());
chargingOrderInfoVO.setVehicleBrand(data.getVehicleBrand());
chargingOrderInfoVO.setVehicleModel(data.getVehicleModel());
chargingOrderInfoVO.setVehicleUse(data.getVehicleUse());
}
}else{
chargingOrderInfoVO.setLicensePlate(byId.getPlateNum());
}
// 时段总服务费
List list = chargingOrderAccountingStrategyService.lambdaQuery().eq(TChargingOrderAccountingStrategy::getChargingOrderId, strategyId).orderByDesc(TChargingOrderAccountingStrategy::getStartTime).list();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
for (TChargingOrderAccountingStrategy tChargingOrderAccountingStrategy : list) {
LocalDateTime createTime = byId.getStartTime();
String format = createTime.format(formatter);
String startTime = tChargingOrderAccountingStrategy.getStartTime();
if("00:00".equals(startTime)){
createTime = createTime.plusDays(1);
format = createTime.format(formatter);
}
tChargingOrderAccountingStrategy.setStartTime(format+" "+tChargingOrderAccountingStrategy.getStartTime());
tChargingOrderAccountingStrategy.setEndTime(format+" "+tChargingOrderAccountingStrategy.getEndTime());
if (byId.getVipDiscountAmount()!=null && byId.getServiceCharge().compareTo(BigDecimal.ZERO) != 0){
BigDecimal multiply = byId.getVipDiscountAmount().divide(byId.getServiceCharge(), 2)
.multiply(tChargingOrderAccountingStrategy.getPeriodOriginalServicePrice());
tChargingOrderAccountingStrategy.setVipDiscount(multiply);
}
if (byId.getCouponDiscountAmount()!=null && byId.getServiceCharge().compareTo(BigDecimal.ZERO) != 0){
BigDecimal multiply = byId.getCouponDiscountAmount().divide(byId.getServiceCharge(), 2)
.multiply(tChargingOrderAccountingStrategy.getPeriodOriginalServicePrice());
tChargingOrderAccountingStrategy.setCouponDiscount(multiply);
}
}
//从新排序
list.sort(new Comparator() {
@Override
public int compare(TChargingOrderAccountingStrategy o1, TChargingOrderAccountingStrategy o2) {
String startTime = o1.getStartTime();
String startTime1 = o2.getStartTime();
LocalDateTime localDateTime = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
LocalDateTime localDateTime1 = LocalDateTime.parse(startTime1, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
if(localDateTime.isBefore(localDateTime1)){
return -1;
}
if(localDateTime.isAfter(localDateTime1)){
return 1;
}
return 0;
}
});
chargingOrderInfoVO.setList(list);
return AjaxResult.success(chargingOrderInfoVO);
}
@Log(title = "【扫一扫】添加评价", businessType = BusinessType.INSERT,operatorType = OperatorType.MOBILE)
@ResponseBody
@PostMapping(value = "/addEvaluate")
@ApiOperation(value = "添加评价", tags = {"小程序-扫一扫"})
public AjaxResult getMyChargingOrderList(@RequestBody OrderEvaluateVo dto) {
dto.setAppUserId(tokenService.getLoginUserApplet().getUserId());
orderEvaluateService.addOrderEvaluate(dto);
return AjaxResult.success();
}
/**
* 查询用户最近一次充电记录使用的车辆
*
* @param
* @return
*/
@GetMapping(value = "/getCar/{id}")
public R getCar(@PathVariable("id")String id) {
List list = chargingOrderService.list(new LambdaQueryWrapper()
.eq(TChargingOrder::getAppUserId, id)
.isNotNull(TChargingOrder::getAppUserCarId));
if (!list.isEmpty()){
// 最近使用的车辆id
Long size = list.get(0).getAppUserCarId();
return R.ok(size);
}else{
return R.ok(-1L);
}
}
/**
* 查询会员在本月有多少次享受了充电折扣
* @param req
* @return
*/
@PostMapping(value = "/getChargingCount")
public R getChargingCount(@RequestBody TChargingCountQuery req) {
int size = chargingOrderService.list(new LambdaQueryWrapper()
.eq(TChargingOrder::getAppUserId, req.getUserId())
.eq(TChargingOrder::getRechargePaymentStatus, 2)
.between(TChargingOrder::getStartTime, req.getStartTime(), req.getEndTime())).size();
return R.ok(size);
}
//用户订单数量
@PostMapping(value = "/useOrderCount")
public R useOrderCount(@RequestParam("userId") Long userId) {
Long count = chargingOrderService.lambdaQuery().eq(TChargingOrder::getAppUserId, userId).count();
return R.ok(count);
}
//订单详情
@PostMapping(value = "/detail")
public R detail(@RequestParam("orderId") Long orderId) {
return R.ok(chargingOrderService.getById(orderId));
}
@PostMapping(value = "/getList")
public R> getList(@RequestParam("siteId") Integer siteId) {
List list = chargingOrderService.lambdaQuery().eq(TChargingOrder::getSiteId, siteId).list();
return R.ok(list);
}
@PostMapping(value = "/getBySiteIdAndTime")
public R> getBySiteIdAndTime(@RequestBody ChargingPercentProvinceDto chargingPercentProvinceDto) {
List groups = chargingOrderService.chargingOrderGroup(chargingPercentProvinceDto);
return R.ok(groups);
}
/**
* 根据站点id和时间区间查询订单数据
* @param chargingPercentProvinceDto
* @return
*/
@PostMapping(value = "/getOrderBySiteIdAndTime")
public R> getOrderBySiteIdAndTime(@RequestBody ChargingPercentProvinceDto chargingPercentProvinceDto){
LocalDate date1 = chargingPercentProvinceDto.getDate1();
LocalDate date2 = chargingPercentProvinceDto.getDate2();
String tripartitePlatformName = chargingPercentProvinceDto.getTripartitePlatformName();
List list = chargingOrderService.list(new LambdaQueryWrapper().in(TChargingOrder::getSiteId, chargingPercentProvinceDto.getSiteIds())
.between(null != date1 && null != date2, TChargingOrder::getPayTime, date1.atTime(0, 0, 0), date2.atTime(23, 59, 59))
.eq(TChargingOrder::getDelFlag, 0).eq(TChargingOrder::getStatus, 5)
.eq(StringUtils.isNotEmpty(tripartitePlatformName), TChargingOrder::getOrderSource, 2)
.eq(StringUtils.isNotEmpty(tripartitePlatformName), TChargingOrder::getTripartitePlatformName, tripartitePlatformName));
return R.ok(list);
}
/**
* 根据充电枪id获取正在进行中的订单
* @param chargingGunId 充电枪id
* @return
*/
@PostMapping(value = "/getOrderDetailByGunId")
public R getOrderDetailByGunId(@RequestParam("chargingGunId") Integer chargingGunId) {
TChargingOrder one = chargingOrderService.getOne(new LambdaQueryWrapper().eq(TChargingOrder::getChargingGunId, chargingGunId)
.eq(TChargingOrder::getDelFlag, 0).eq(TChargingOrder::getStatus, 3));
return R.ok(one);
}
@ResponseBody
@GetMapping(value = "/getMyChargingOrderList")
@ApiOperation(value = "获取充电记录列表", tags = {"小程序-充电记录"})
public AjaxResult