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.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.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;
|
|
/**
|
* <p>
|
* 前端控制器
|
* </p>
|
*
|
* @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 = "/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<String> queryOrderByGunId(@PathVariable("id") String id) {
|
List<Integer> 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<PageInfo<PayOrderDto>> payOrderList(@RequestBody PayOrderQueryDto payOrderQueryDto) {
|
Integer pageCurr = payOrderQueryDto.getPageCurr();
|
Integer pageSize = payOrderQueryDto.getPageSize();
|
payOrderQueryDto.setPageCurr(1);
|
payOrderQueryDto.setPageSize(10000999);
|
PageInfo<PayOrderDto> data = chargingOrderService.payOrderQuery(payOrderQueryDto).getData();
|
List<PayOrderDto> res = new ArrayList<>();
|
// 查询当前登陆人按钮权限
|
SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
|
Integer roleType = sysUser.getRoleType();
|
Long userId = tokenService.getLoginUser().getUserid();
|
//如果没传siteId,获取当前登陆人所有的siteIds
|
List<Integer> siteIds = new ArrayList<>();
|
if (userId != null){
|
List<GetSiteListDTO> data2 = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data2) {
|
siteIds.add(datum.getId());
|
}
|
}
|
if (siteIds.isEmpty()){
|
siteIds.add(-1);
|
}
|
List<TChargingOrder> list = chargingOrderService.list();
|
List<TParkingRecord> 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<PayOrderDto> res1 = testing5(res.size(), pageCurr, pageSize, res);
|
data.setTotal(res.size());
|
data.setRecords(res1);
|
return R.ok(data);
|
}
|
|
|
|
public static List<PayOrderDto> testing5(long total, long current, long size, List<PayOrderDto> str){
|
List<PayOrderDto> result = new ArrayList<>();
|
//获取初始化分页结构
|
com.ruoyi.order.util.Page<PayOrderDto> 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<PayOrderInfoDto> 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<TParkingRecord> 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<TChargingOrderRefund> byId = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getChargingOrderId, orderId).orderByDesc(TChargingOrderRefund::getRefundTime).list();
|
return R.ok(byId);
|
case 2:
|
List<TShoppingOrderRefund> list = shoppingOrderRefundService.lambdaQuery().eq(TShoppingOrderRefund::getShoppingOrderId, orderId).orderByDesc(TShoppingOrderRefund::getRefundTime).list();
|
return R.ok(list);
|
case 3:
|
List<TVipOrderRefund> 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<PayOrderChargingInfo> refundDetail(Long orderId) {
|
PayOrderChargingInfo payOrderChargingInfo = new PayOrderChargingInfo();
|
TChargingOrder byId = chargingOrderService.getById(orderId);
|
List<Site> 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<TAppUserCar> 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<Long> carid = new ArrayList<>();
|
carid.add(byId.getAppUserCarId());
|
R<List<TAppUserCar>> 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<List<TChargingOrderAccountingStrategy>> chargingDetail(Long orderId) {
|
TChargingOrder chargingOrder = chargingOrderService.getById(orderId);
|
List<TChargingOrderAccountingStrategy> 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<TChargingOrderAccountingStrategy>() {
|
@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<PageInfo<TChargingOrderRefund>> refundList(@RequestBody ChargingRefundDto chargingRefundDto) {
|
Integer pageCurr = chargingRefundDto.getPageCurr();
|
Integer pageSize = chargingRefundDto.getPageSize();
|
// R<PageInfo<TChargingOrderRefund>> refundList = chargingOrderService.getRefundList(chargingRefundDto);
|
chargingRefundDto.setPageCurr(1);
|
chargingRefundDto.setPageSize(199999999);
|
R<PageInfo<TChargingOrderRefund>> refundList1 = chargingOrderService.getRefundList(chargingRefundDto);
|
Long userId = tokenService.getLoginUser().getUserid();
|
//如果没传siteId,获取当前登陆人所有的siteIds
|
List<Integer> siteIds = new ArrayList<>();
|
if (userId != null){
|
List<GetSiteListDTO> 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<TChargingOrderRefund> 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<TChargingOrderRefund> data = refundList1.getData();
|
|
List<TChargingOrderRefund> res1 = testing4(tChargingOrderRefunds.size(), pageCurr, pageSize, tChargingOrderRefunds);
|
data.setTotal(tChargingOrderRefunds.size());
|
data.setRecords(res1);
|
return refundList1;
|
|
}
|
|
|
|
|
public static List<TChargingOrderRefund> testing4(long total, long current, long size, List<TChargingOrderRefund> str){
|
List<TChargingOrderRefund> result = new ArrayList<>();
|
//获取初始化分页结构
|
com.ruoyi.order.util.Page<TChargingOrderRefund> 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<PageInfo<TChargingOrderRefund>> refundList1(@RequestBody ChargingRefundDto chargingRefundDto) {
|
return chargingOrderService.getRefundList(chargingRefundDto);
|
|
}
|
|
|
|
|
|
|
@RequiresPermissions(value = {"/chargingPileOrder"}, logical = Logical.OR)
|
@ResponseBody
|
@PostMapping(value = "/chargingOrder")
|
@ApiOperation(value = "充电桩订单列表", tags = {"管理后台-订单管理"})
|
public AjaxResult<TCharingOrderVO> chargingOrder(@RequestBody ChargingOrderQuery dto) {
|
List<Long> 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<ChargingOrderInfoVO> 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<TChargingOrderAccountingStrategy> 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<TChargingOrderAccountingStrategy>() {
|
@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);
|
}
|
|
|
|
|
@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<Long> getCar(@PathVariable("id")String id) {
|
List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>()
|
.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<Integer> getChargingCount(@RequestBody TChargingCountQuery req) {
|
int size = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>()
|
.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<Long> useOrderCount(@RequestParam("userId") Long userId) {
|
Long count = chargingOrderService.lambdaQuery().eq(TChargingOrder::getAppUserId, userId).count();
|
|
return R.ok(count);
|
}
|
|
|
|
//订单详情
|
@PostMapping(value = "/detail")
|
public R<TChargingOrder> detail(@RequestParam("orderId") Long orderId) {
|
return R.ok(chargingOrderService.getById(orderId));
|
}
|
|
|
|
@PostMapping(value = "/getList")
|
public R<List<TChargingOrder>> getList(@RequestParam("siteId") Integer siteId) {
|
|
List<TChargingOrder> list = chargingOrderService.lambdaQuery().eq(TChargingOrder::getSiteId, siteId).list();
|
return R.ok(list);
|
}
|
|
|
|
@PostMapping(value = "/getBySiteIdAndTime")
|
public R<List<ChargingOrderGroup>> getBySiteIdAndTime(@RequestBody ChargingPercentProvinceDto chargingPercentProvinceDto) {
|
|
List<ChargingOrderGroup> groups = chargingOrderService.chargingOrderGroup(chargingPercentProvinceDto);
|
return R.ok(groups);
|
}
|
|
|
/**
|
* 根据站点id和时间区间查询订单数据
|
* @param chargingPercentProvinceDto
|
* @return
|
*/
|
@PostMapping(value = "/getOrderBySiteIdAndTime")
|
public R<List<TChargingOrder>> getOrderBySiteIdAndTime(@RequestBody ChargingPercentProvinceDto chargingPercentProvinceDto){
|
LocalDate date1 = chargingPercentProvinceDto.getDate1();
|
LocalDate date2 = chargingPercentProvinceDto.getDate2();
|
String tripartitePlatformName = chargingPercentProvinceDto.getTripartitePlatformName();
|
List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>().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<TChargingOrder> getOrderDetailByGunId(@RequestParam("chargingGunId") Integer chargingGunId) {
|
TChargingOrder one = chargingOrderService.getOne(new LambdaQueryWrapper<TChargingOrder>().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<Map<String, Object>> getMyChargingOrderList(GetMyChargingOrderList query) {
|
Map<String, Object> orderList = chargingOrderService.getMyChargingOrderList(query);
|
return AjaxResult.success(orderList);
|
}
|
|
|
@ResponseBody
|
@GetMapping(value = "/getMyChargingOrderInfo")
|
@ApiOperation(value = "获取充电记订单明细", tags = {"小程序-充电记录"})
|
public AjaxResult<MyChargingOrderInfo> getMyChargingOrderInfo(String id) {
|
TChargingOrder tChargingOrder = chargingOrderService.getById(id);
|
Long userId = tokenService.getLoginUserApplet().getUserId();
|
if(!tChargingOrder.getAppUserId().equals(userId)){
|
return AjaxResult.error("权限不足");
|
}
|
MyChargingOrderInfo myChargingOrderInfo = chargingOrderService.getMyChargingOrderInfo(id);
|
return AjaxResult.success(myChargingOrderInfo);
|
}
|
|
|
|
@ResponseBody
|
@GetMapping(value = "/getNoInvoicedOrder")
|
@ApiOperation(value = "获取未开票的订单数据", tags = {"小程序-充电发票"})
|
public AjaxResult<List<MyChargingOrderList>> getNoInvoicedOrder(GetNoInvoicedOrder query) {
|
List<MyChargingOrderList> list = chargingOrderService.getNoInvoicedOrder(query);
|
return AjaxResult.success(list);
|
}
|
|
|
|
@ResponseBody
|
@PostMapping(value = "/paymentChargingOrder")
|
@ApiOperation(value = "支付充电充值费用", tags = {"小程序-扫一扫"})
|
public AjaxResult paymentChargingOrder(@RequestBody AddChargingOrder addChargingOrder) {
|
return chargingOrderService.paymentChargingOrder(addChargingOrder);
|
}
|
|
/**
|
* 充电充值支付回调
|
*/
|
@ResponseBody
|
@PostMapping(value = "/chargingOrderWXCallback")
|
public void chargingOrderWXCallback(@RequestParam("out_trade_no") String out_trade_no, @RequestParam("transaction_id") String transaction_id,
|
@RequestParam("attach") String attach) {
|
chargingOrderService.chargingOrderCallback(1, out_trade_no, transaction_id, attach);
|
}
|
|
|
/**
|
* 修改安全检测数据
|
* @param securityDetection
|
*/
|
@ResponseBody
|
@PostMapping(value = "/securityDetection")
|
public void securityDetection(@RequestBody SecurityDetectionVO securityDetection){
|
log.info("-------------------安全检测数据-------------------:" + securityDetection);
|
chargingOrderService.securityDetection(securityDetection);
|
}
|
|
/**
|
* 远程启动充电应答
|
* @param message
|
*/
|
@ResponseBody
|
@PostMapping(value = "/startChargeSuccessfully")
|
public void startChargeSuccessfully(@RequestBody PlatformStartChargingReplyMessageVO message){
|
log.info("-------------------远程启动充电请求应答-------------------:" + message);
|
chargingOrderService.startChargeSuccessfully(message);
|
}
|
|
|
|
/**
|
* 支付宝支付成功后的回调
|
*/
|
@ResponseBody
|
@PostMapping(value = "/chargingOrderALICallback")
|
public void chargingOrderALICallback(@RequestParam("out_trade_no") String out_trade_no,
|
@RequestParam("transaction_id") String transaction_id,
|
@RequestParam("attach") String attach) {
|
chargingOrderService.chargingOrderCallback(2, out_trade_no, transaction_id, attach);
|
}
|
|
|
/**
|
*
|
* @param code
|
*/
|
@ResponseBody
|
@PostMapping(value = "/refund")
|
public R refund(@RequestParam(value = "code") String code){
|
chargingOrderService.refund(code);
|
return R.ok();
|
}
|
|
|
/**
|
* 远程启动失败后退款回调
|
*/
|
@ResponseBody
|
@PostMapping(value = "/chargingOrderStartupFailureWxRefund")
|
public void chargingOrderStartupFailureWxRefund(@RequestParam("out_refund_no") String out_refund_no,
|
@RequestParam("refund_id") String refund_id,
|
@RequestParam("tradeState") String tradeState,
|
@RequestParam("success_time") String success_time){
|
chargingOrderService.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time);
|
}
|
|
|
|
|
|
@ResponseBody
|
@GetMapping(value = "/preChargeCheck/{id}")
|
@ApiOperation(value = "获取安全检测数据", tags = {"小程序-扫一扫"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "id", value = "充电枪id", required = true)
|
})
|
public AjaxResult<PreChargeCheck> preChargeCheck(@PathVariable Integer id) {
|
String key = "AQJC_" + id;
|
Object cacheObject = redisService.getCacheObject(key);
|
return AjaxResult.success(cacheObject);
|
}
|
|
|
|
@ResponseBody
|
@GetMapping(value = "/getChargingDetails/{id}")
|
@ApiOperation(value = "获取充电中页面数据", tags = {"小程序-扫一扫"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "id", value = "充电枪id", required = true)
|
})
|
public AjaxResult<ChargingDetails> getChargingDetails(@PathVariable Integer id) {
|
ChargingDetails chargingDetails = chargingOrderService.getChargingDetails(id);
|
return AjaxResult.success(chargingDetails);
|
}
|
|
|
@ResponseBody
|
@PutMapping(value = "/stopCharging/{id}")
|
@ApiOperation(value = "手动停止充电", tags = {"小程序-扫一扫"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "id", value = "订单id", required = true)
|
})
|
public AjaxResult stopCharging(@PathVariable String id) {
|
return chargingOrderService.stopCharging(id);
|
}
|
|
|
/**
|
* 停止充电应答处理逻辑
|
* @param platformStopChargingReply
|
*/
|
@PostMapping("/terminateSuccessfulResponse")
|
public void terminateSuccessfulResponse(@RequestBody PlatformStopChargingReplyVO platformStopChargingReply){
|
log.info("-------------------远程停止充电请求应答-------------------:" + platformStopChargingReply);
|
chargingOrderService.terminateSuccessfulResponse(platformStopChargingReply);
|
}
|
|
|
/**
|
* 停止充电返回账单后计算费用
|
* @param vo
|
*/
|
@PostMapping("/endChargeBillingCharge")
|
public R endChargeBillingCharge(@RequestBody TransactionRecordMessageVO vo){
|
log.info("-------------------停止充电返回账单后计算费用及修改业务状态-------------------:" + vo);
|
return chargingOrderService.endChargeBillingCharge(vo);
|
}
|
|
|
|
|
|
@RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
|
@ResponseBody
|
@GetMapping(value = "/six/charge")
|
@ApiOperation(value = "电站收入分析", tags = {"后台-数据分析-平台收入分析"})
|
public R<List<SixChargingDto>> charge(Integer siteId) {
|
Long userId = tokenService.getLoginUser().getUserid();
|
//如果没传siteId,获取当前登陆人所有的siteIds
|
List<Integer> siteIds = new ArrayList<>();
|
if (siteId==null){
|
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data) {
|
siteIds.add(datum.getId());
|
}
|
}else {
|
siteIds.add(siteId);
|
}
|
if (siteIds.isEmpty()){
|
siteIds.add(-1);
|
}
|
LocalDate sixBefore = PreviousSixMonths.get();
|
//通过siteIds进行sql查询统计
|
List<SixChargingDto> sixChargingDtos = generateLastSixMonths();
|
List<SixChargingDto> chargingDtos = chargingOrderService.charge(sixBefore, siteIds);
|
for (SixChargingDto sixChargingDto : sixChargingDtos) {
|
for (SixChargingDto chargingDto : chargingDtos) {
|
if (sixChargingDto.getMonth().equals(chargingDto.getMonth())){
|
BeanUtils.copyProperties(chargingDto,sixChargingDto);
|
}
|
}
|
|
}
|
|
return R.ok(sixChargingDtos);
|
|
}
|
|
|
public static List<SixChargingDto> generateLastSixMonths() {
|
LocalDate today = LocalDate.now();
|
List<SixChargingDto> months = new ArrayList<>();
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM");
|
|
for (int i = 5; i >= 0; i--) {
|
LocalDate date = today.minusMonths(i);
|
String month = date.format(formatter);
|
SixChargingDto sixChargingDto = new SixChargingDto();
|
sixChargingDto.setMonth(month);
|
months.add(sixChargingDto);
|
}
|
|
return months;
|
}
|
|
@RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
|
@ResponseBody
|
@GetMapping(value = "/six/circle")
|
@ApiOperation(value = "电站收入占比", tags = {"后台-数据分析-平台收入分析"})
|
public R<List<SixCircleDto>> circle() {
|
Long userId = tokenService.getLoginUser().getUserid();
|
//获取当前登录的siteIds
|
List<Integer> siteIds = new ArrayList<>();
|
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data) {
|
siteIds.add(datum.getId());
|
}
|
//进行统计groupBySiteId
|
LocalDate sixBefore = PreviousSixMonths.get();
|
if (siteIds.isEmpty()){
|
siteIds.add(-1);
|
}
|
List<SixCircleDto> sixCircleDtos = chargingOrderService.circle(siteIds,sixBefore);
|
for (SixCircleDto sixCircleDto : sixCircleDtos) {
|
Site site = siteClient.getSiteByIds(Arrays.asList(sixCircleDto.getSiteId())).getData().get(0);
|
sixCircleDto.setSiteName(site.getName());
|
}
|
return R.ok(sixCircleDtos);
|
|
}
|
|
|
@RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
|
@ResponseBody
|
@GetMapping(value = "/six/shop")
|
@ApiOperation(value = "购物收入", tags = {"后台-数据分析-平台收入分析"})
|
public R<List<SixShopDto>> shop(Integer status) {
|
//count近6个月的数据
|
LocalDate sixBefore = PreviousSixMonths.get();
|
List<SixShopDto> sixShopDtos = shoppingOrderService.sixBefore(sixBefore,status);
|
List<SixShopDto> sixChargingDtos = generateLastSixMonths1();
|
for (SixShopDto sixChargingDto : sixChargingDtos) {
|
for (SixShopDto chargingDto : sixShopDtos) {
|
if (sixChargingDto.getMonth().equals(chargingDto.getMonth())){
|
BeanUtils.copyProperties(chargingDto,sixChargingDto);
|
}
|
}
|
|
}
|
|
return R.ok(sixChargingDtos);
|
}
|
|
public static List<SixShopDto> generateLastSixMonths1() {
|
LocalDate today = LocalDate.now();
|
List<SixShopDto> months = new ArrayList<>();
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM");
|
|
for (int i = 5; i >= 0; i--) {
|
LocalDate date = today.minusMonths(i);
|
String month = date.format(formatter);
|
SixShopDto sixChargingDto = new SixShopDto();
|
sixChargingDto.setMonth(month);
|
months.add(sixChargingDto);
|
}
|
|
return months;
|
}
|
|
|
@RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
|
@ResponseBody
|
@PostMapping(value = "/work/shop")
|
@ApiOperation(value = "购物收入", tags = {"后台-工作台"})
|
public R workShop(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
|
//count近6个月的数据
|
LocalDate sixBefore = PreviousSixMonths.get();
|
List<Map<String,Object >> shopData = shoppingOrderService.getData(statisticsQueryDto);
|
return R.ok(shopData);
|
}
|
|
@RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
|
@ResponseBody
|
@GetMapping(value = "/six/vip")
|
@ApiOperation(value = "vip收入", tags = {"后台-数据分析-平台收入分析"})
|
public R<List<SixVipDto>> vip() {
|
//count近6个月的数据
|
LocalDate sixBefore = PreviousSixMonths.get();
|
List<SixVipDto> vipDtos = vipOrderService.sixBefore(sixBefore);
|
return R.ok(vipDtos);
|
}
|
|
|
|
|
|
|
@RequiresPermissions(value = {"/platformRevenueAnalysis"}, logical = Logical.OR)
|
@ResponseBody
|
@GetMapping(value = "/six/total")
|
@ApiOperation(value = "底部数据分类", tags = {"后台-数据分析-平台收入分析"})
|
public R<Map<String,Object>> total() {
|
//count近6个月的数据
|
Long userId = tokenService.getLoginUser().getUserid();
|
//获取当前登录的siteIds
|
List<Integer> siteIds = new ArrayList<>();
|
List<GetSiteListDTO> data9 = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data9) {
|
siteIds.add(datum.getId());
|
}
|
//进行统计groupBySiteId
|
if (siteIds.isEmpty()){
|
siteIds.add(-1);
|
}
|
Map<String,Object> map = chargingOrderService.countAll(siteIds);
|
BigDecimal data = parkingLotClient.getRecordAmount().getData();
|
if (map ==null){
|
map = new HashMap<String,Object>();
|
}
|
map.put("parkingAmount",data);
|
BigDecimal data1 = shoppingOrderService.getSumAmount();
|
map.put("shopAmount",data1);
|
BigDecimal data2 = vipOrderService.getSumAmout();
|
map.put("vipAmount",data2);
|
List<TChargingOrder> list = chargingOrderService.lambdaQuery().eq(TChargingOrder::getStatus, 5).eq(TChargingOrder::getDelFlag, 0)
|
.eq(TChargingOrder::getRechargePaymentStatus, 2).list();
|
BigDecimal sharingAmount = BigDecimal.ZERO;
|
BigDecimal commissionAmount = BigDecimal.ZERO;
|
//计算list中electrovalence的总和
|
BigDecimal totalElectrovalence = BigDecimal.ZERO;
|
//计算list中serviceCharge的总和
|
BigDecimal totalServiceCharge = BigDecimal.ZERO;
|
List<TChargingOrderAccountingStrategy> accountingStrategyList = chargingOrderAccountingStrategyService.list();
|
for (TChargingOrder order : list) {
|
List<TChargingOrderAccountingStrategy> collect = accountingStrategyList.stream().filter(s -> s.getChargingOrderId().equals(order.getId())).collect(Collectors.toList());
|
BigDecimal periodElectricPrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal periodServicePrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
totalElectrovalence = totalElectrovalence.add(periodElectricPrice);
|
if(2 != order.getOrderSource()){
|
totalServiceCharge = totalServiceCharge.add(periodServicePrice);
|
commissionAmount = commissionAmount.add((periodElectricPrice.add(periodServicePrice)).multiply(new BigDecimal("0.006")));
|
}else{
|
totalServiceCharge = totalServiceCharge.add(periodServicePrice.multiply(new BigDecimal("0.8")));
|
sharingAmount = sharingAmount.add(periodServicePrice.multiply(new BigDecimal("0.2")));
|
}
|
}
|
map.put("service_charge",totalServiceCharge.setScale(2, BigDecimal.ROUND_HALF_EVEN));
|
map.put("electrovalence",totalElectrovalence.setScale(2, BigDecimal.ROUND_HALF_EVEN));
|
map.put("commission_amount",commissionAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN));
|
map.put("sharing_amount",sharingAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN));
|
return R.ok(map);
|
}
|
|
|
@RequiresPermissions(value = {"/chargeOrderMonitoring"}, logical = Logical.OR)
|
@ResponseBody
|
@PostMapping(value = "/watch/chargingOrder")
|
@ApiOperation(value = "监控订单", tags = {"管理后台-订单管理"})
|
public R watchChargingOrder(@RequestBody MongoChargingOrderQuery query) {
|
Set<Integer> ids = null;
|
//校验合作商权限
|
SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
|
Integer roleType = sysUser.getRoleType();
|
Integer objectId = sysUser.getObjectId();
|
R<Integer> admin = sysUserClient.isAdmin(tokenService.getLoginUser().getUserid());
|
//合作商
|
if(roleType == 2){
|
ids = partnerClient.authSite(objectId, SiteMenu.SITE_LIST.getValue()).getData();
|
}else{
|
//非管理员需要根据角色和用户配置查询允许的站点数据
|
//改用roleId=1来判断
|
if(admin.getData()!=1){
|
List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
|
List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData();
|
if(data2.size() > 0){
|
List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
|
data.addAll(data1);
|
}
|
ids = new HashSet<>(data);
|
}
|
}
|
|
LambdaQueryWrapper<TChargingOrder> queryWrapper = new LambdaQueryWrapper<TChargingOrder>().like(StringUtils.isNotEmpty(query.getCode()), TChargingOrder::getCode, query.getCode())
|
.eq(null != query.getOrderType(), TChargingOrder::getOrderType, query.getOrderType())
|
.eq(null != query.getSiteId(), TChargingOrder::getSiteId, query.getSiteId())
|
.eq(null != query.getPileId(), TChargingOrder::getChargingPileId, query.getPileId())
|
.eq(null != query.getGunId(), TChargingOrder::getChargingGunId, query.getGunId())
|
.eq(null != query.getStatus(), TChargingOrder::getStatus, query.getStatus())
|
.eq(TChargingOrder::getDelFlag, 0).eq(TChargingOrder::getRechargePaymentStatus, 2)
|
.in(null != ids && ids.size() > 0, TChargingOrder::getSiteId, ids);
|
if(StringUtils.isNotEmpty(query.getCreateTime())){
|
String[] split = query.getCreateTime().split(" - ");
|
queryWrapper.between(TChargingOrder::getStartTime, split[0], split[1]);
|
}
|
if(StringUtils.isNotEmpty(query.getLastTime())){
|
String[] split = query.getLastTime().split(" - ");
|
queryWrapper.between(TChargingOrder::getEndTime, split[0], split[1]);
|
}
|
PageInfo<TChargingOrder> pageInfo = new PageInfo<>(query.getPageCurr(), query.getPageSize());
|
PageInfo<TChargingOrder> orderPageInfo = chargingOrderService.page(pageInfo, queryWrapper.orderByDesc(TChargingOrder::getCreateTime));
|
List<Site> siteList = siteClient.getSiteAll().getData();
|
|
List<WatchChargingOrderVo> list = new ArrayList<>();
|
for (TChargingOrder record : orderPageInfo.getRecords()) {
|
WatchChargingOrderVo vo = new WatchChargingOrderVo();
|
BeanUtils.copyProperties(record, vo);
|
vo.setIdStr(record.getId().toString());
|
Site site = siteList.stream().filter(s->s.getId().equals(record.getSiteId())).findFirst().get();
|
vo.setSiteName(site.getName());
|
TChargingPile chargingPile = chargingPileClient.getChargingPileById(record.getChargingPileId()).getData();
|
vo.setTerminalName(chargingPile.getName());
|
TChargingGun chargingGun = chargingGunClient.getChargingGunById(record.getChargingGunId()).getData();
|
vo.setTerminalCode(chargingGun.getName());
|
|
if(null != record.getStartTime() && null != record.getEndTime()){
|
long time = record.getEndTime().toEpochSecond(ZoneOffset.UTC) - record.getStartTime().toEpochSecond(ZoneOffset.UTC);
|
vo.setChargingTime(time + "");
|
}
|
long count = chargingOrderAccountingStrategyService.count(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, record.getId()));
|
vo.setTimeFrame(count);
|
|
vo.setAuthInfo(roleType == 1 ? true : partnerClient.authMenu(objectId, record.getSiteId(), SiteMenu.CHARGING_PILE_ORDER_MONITORING_RECORD_INFO.getValue()));
|
vo.setAuthDelete(roleType == 1 ? true : partnerClient.authMenu(objectId, record.getSiteId(), SiteMenu.CHARGING_PILE_ORDER_MONITORING_RECORD_DEL.getValue()));
|
list.add(vo);
|
}
|
PageInfo<WatchChargingOrderVo> pageInfos = new PageInfo<>(query.getPageCurr(), query.getPageSize());
|
pageInfos.setRecords(list);
|
pageInfos.setCurrent(pageInfo.getCurrent());
|
pageInfos.setPages(pageInfo.getPages());
|
pageInfos.setSize(pageInfo.getSize());
|
pageInfos.setStartIndex(pageInfo.getStartIndex());
|
pageInfos.setTotal(pageInfo.getTotal());
|
return R.ok(pageInfos);
|
}
|
|
|
@RequiresPermissions(value = {"/chargeOrderMonitoring/del"}, logical = Logical.OR)
|
@ResponseBody
|
@GetMapping(value = "/watch/deletes")
|
@ApiOperation(value = "监控订单-删除", tags = {"管理后台-订单管理"})
|
public R watchChargingOrder(@RequestParam String id) {
|
uploadRealTimeMonitoringDataClient.delete(id);
|
return R.ok();
|
}
|
|
/**
|
* 处理充电订单实时监控数据相关的业务逻辑
|
* @param query
|
*/
|
@PostMapping("/chargeMonitoring")
|
public void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query){
|
chargingOrderService.chargeMonitoring(query);
|
}
|
/**
|
* 通过流水号查询订单
|
* @param code
|
* @return
|
*/
|
@PostMapping(value = "/getOrderByCode/{code}")
|
public R<TChargingOrder> getOrderByCode(@PathVariable("code") String code){
|
return R.ok(chargingOrderService.getOne(Wrappers.lambdaQuery(TChargingOrder.class)
|
.eq(TChargingOrder::getCode,code)));
|
}
|
|
|
|
|
@RequiresPermissions(value = {"/chargingOperationAnalysis"}, logical = Logical.OR)
|
@ResponseBody
|
@PostMapping(value = "/charging/statistics")
|
@ApiOperation(value = "统计,充电订单分析", tags = {"管理后台-数据分析-充电运营分析"})
|
public R<TCharingOrderMapVO> watchChargingOrder(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){
|
List<Integer> siteIds =new ArrayList<>();
|
if (statisticsQueryDto.getSiteId()==null) {
|
Long userId = tokenService.getLoginUser().getUserid();
|
//获取当前登录的siteIds
|
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data) {
|
siteIds.add(datum.getId());
|
}
|
}else {
|
siteIds.add(statisticsQueryDto.getSiteId());
|
}
|
if (siteIds.isEmpty())siteIds.add(-1);
|
TCharingOrderMapVO tCharingOrderMapVO = new TCharingOrderMapVO();
|
|
LocalDate start = null;
|
LocalDate end = null;
|
if (statisticsQueryDto.getDayType()==1){
|
start = LocalDate.now();
|
end = LocalDate.now().plusDays(1);
|
}else if (statisticsQueryDto.getDayType()==2){
|
LocalDate today = LocalDate.now();
|
// 获取本周一的日期
|
start = statisticsQueryDto.getStartTime();
|
end = statisticsQueryDto.getEndTime();
|
} else if (statisticsQueryDto.getDayType()==3){
|
// 获取当前日期
|
start = statisticsQueryDto.getStartTime();
|
end = statisticsQueryDto.getEndTime();
|
}else if (statisticsQueryDto.getDayType()==4){
|
// 获取今年1月1日的日期
|
start = statisticsQueryDto.getStartTime();
|
end = statisticsQueryDto.getEndTime();
|
}else if (statisticsQueryDto.getDayType()==5){
|
start = statisticsQueryDto.getStartTime();
|
end = statisticsQueryDto.getEndTime();
|
if (start.equals(end)){
|
end = end.plusDays(1);
|
}
|
}
|
//上方饼图
|
List<Map<String,Object>> maps = chargingOrderService.getSumByType(start,end, siteIds);
|
|
if (statisticsQueryDto.getDayType()==1){
|
List<Map<String,Object>> maps1 = chargingOrderService.getDateData(start,end, siteIds);
|
|
List<Map<String, Object>> charMap = new ArrayList<>();
|
// 生成从 "00:00" 到 "23:00" 的时间数据
|
for (int hour = 0; hour < 24; hour++) {
|
String time = String.format("%02d:00", hour);
|
Map<String, Object> mapWithTimeValue = findMapWithTimeValue(maps1, time);
|
if (mapWithTimeValue!=null){
|
charMap.add(mapWithTimeValue);
|
}else {
|
Map<String, Object> timeMap = new HashMap<>();
|
timeMap.put("time", time); // 初始化值为 null
|
timeMap.put("electrovalence", 0);
|
timeMap.put("orderCount", 0);
|
timeMap.put("paymentAmount", 0);
|
timeMap.put("paymoney", 0);
|
timeMap.put("servicecharge", 0);
|
|
charMap.add(timeMap);
|
}
|
}
|
|
tCharingOrderMapVO.setMaps1(charMap);
|
}else if (statisticsQueryDto.getDayType()==2){
|
List<Map<String,Object>> maps1 = chargingOrderService.getWeekData(start,end, siteIds);
|
|
LocalDate startDate = statisticsQueryDto.getStartTime();
|
LocalDate endDate = statisticsQueryDto.getEndTime();
|
|
List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
|
|
// 遍历日期范围
|
while (!startDate.isAfter(endDate)) {
|
String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
Map<String, Object> dailyStats = findMapWithDateValue(maps1, formattedDate);
|
|
if (dailyStats != null) {
|
dateRangeStatistics.add(dailyStats);
|
} else {
|
Map<String, Object> dateMap = new HashMap<>();
|
dateMap.put("time", formattedDate);
|
dateMap.put("electrovalence", 0);
|
dateMap.put("orderCount", 0);
|
dateMap.put("paymentAmount", 0);
|
dateMap.put("paymoney", 0);
|
dateMap.put("servicecharge", 0);
|
dateRangeStatistics.add(dateMap);
|
}
|
|
// 移动到下一天
|
startDate = startDate.plusDays(1);
|
}
|
tCharingOrderMapVO.setMaps1(dateRangeStatistics);
|
}else if (statisticsQueryDto.getDayType()==3){
|
List<Map<String,Object>> maps1 = chargingOrderService.getMonthData(start,end, siteIds);
|
|
LocalDate startDate = statisticsQueryDto.getStartTime();
|
LocalDate endDate = statisticsQueryDto.getEndTime();
|
|
List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
|
|
// 遍历日期范围
|
while (!startDate.isAfter(endDate)) {
|
String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
Map<String, Object> dailyStats = findMapWithDateValue(maps1, formattedDate);
|
|
if (dailyStats != null) {
|
dateRangeStatistics.add(dailyStats);
|
} else {
|
Map<String, Object> dateMap = new HashMap<>();
|
dateMap.put("time", formattedDate);
|
dateMap.put("electrovalence", 0);
|
dateMap.put("orderCount", 0);
|
dateMap.put("paymentAmount", 0);
|
dateMap.put("paymoney", 0);
|
dateMap.put("servicecharge", 0);
|
dateRangeStatistics.add(dateMap);
|
}
|
|
// 移动到下一天
|
startDate = startDate.plusDays(1);
|
}
|
tCharingOrderMapVO.setMaps1(dateRangeStatistics);
|
}else if (statisticsQueryDto.getDayType()==4){
|
List<Map<String,Object>> maps1 = chargingOrderService.getYearData(start,end, siteIds);
|
|
LocalDate startDate = statisticsQueryDto.getStartTime();
|
LocalDate endDate = statisticsQueryDto.getEndTime();
|
|
|
List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
|
|
// 遍历日期范围
|
while (!startDate.isAfter(endDate)) {
|
String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
Map<String, Object> dailyStats = findMapWithDateValue(maps1, formattedDate);
|
|
if (dailyStats != null) {
|
dateRangeStatistics.add(dailyStats);
|
} else {
|
Map<String, Object> dateMap = new HashMap<>();
|
dateMap.put("time", formattedDate);
|
dateMap.put("electrovalence", 0);
|
dateMap.put("orderCount", 0);
|
dateMap.put("paymentAmount", 0);
|
dateMap.put("paymoney", 0);
|
dateMap.put("servicecharge", 0);
|
dateRangeStatistics.add(dateMap);
|
}
|
|
// 移动到下一天
|
startDate = startDate.plusDays(1);
|
}
|
tCharingOrderMapVO.setMaps1(dateRangeStatistics);
|
}else if (statisticsQueryDto.getDayType()==5){
|
List<Map<String,Object>> maps1 = chargingOrderService.getByDate(start,end, siteIds);
|
|
LocalDate startDate = statisticsQueryDto.getStartTime();
|
LocalDate endDate = statisticsQueryDto.getEndTime();
|
|
|
|
List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
|
|
// 遍历日期范围
|
while (!startDate.isAfter(endDate)) {
|
String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
Map<String, Object> dailyStats = findMapWithDateValue(maps1, formattedDate);
|
|
if (dailyStats != null) {
|
dateRangeStatistics.add(dailyStats);
|
} else {
|
Map<String, Object> dateMap = new HashMap<>();
|
dateMap.put("time", formattedDate);
|
dateMap.put("electrovalence", 0);
|
dateMap.put("orderCount", 0);
|
dateMap.put("paymentAmount", 0);
|
dateMap.put("paymoney", 0);
|
dateMap.put("servicecharge", 0);
|
dateRangeStatistics.add(dateMap);
|
}
|
|
// 移动到下一天
|
startDate = startDate.plusDays(1);
|
}
|
tCharingOrderMapVO.setMaps1(dateRangeStatistics);
|
}
|
|
|
tCharingOrderMapVO.setMaps(maps);
|
BigDecimal allMoney = new BigDecimal(0);
|
BigDecimal commissionAmount = BigDecimal.ZERO;
|
for (Map<String, Object> map : maps) {
|
BigDecimal periodElectricPrice = (BigDecimal) map.get("period_electric_price");
|
Long order_source = (Long)map.get("order_source");
|
if(2 != order_source){
|
allMoney = allMoney.add(periodElectricPrice);
|
}
|
BigDecimal total_amount = (BigDecimal) map.get("total_amount");
|
allMoney = allMoney.add(total_amount);
|
commissionAmount = commissionAmount.add((BigDecimal) map.get("commissionAmount"));
|
}
|
allMoney = allMoney.multiply(new BigDecimal("0.006"));
|
tCharingOrderMapVO.setAllMoney(allMoney);
|
tCharingOrderMapVO.setCommissionAmount(commissionAmount);
|
return R.ok(tCharingOrderMapVO);
|
|
}
|
|
|
@ResponseBody
|
@PostMapping(value = "/charging/power")
|
@ApiOperation(value = "功率", tags = {"管理后台-数据分析-充电运营分析"})
|
public R<TCharingOrderPowerMapVO> power(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
|
List<Integer> siteIds = new ArrayList<>();
|
if (statisticsQueryDto.getSiteId() == null) {
|
Long userId = tokenService.getLoginUser().getUserid();
|
//获取当前登录的siteIds
|
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data) {
|
siteIds.add(datum.getId());
|
}
|
} else {
|
siteIds.add(statisticsQueryDto.getSiteId());
|
}
|
|
|
List<Map<String,Object>> maps1 = chargingOrderService.queryPower(siteIds);
|
|
|
Map<String,Object> map = chargingOrderService.qureryPowerLevel(siteIds,statisticsQueryDto);
|
|
TCharingOrderPowerMapVO tCharingOrderPowerMapVO = new TCharingOrderPowerMapVO();
|
tCharingOrderPowerMapVO.setMaps1(map);
|
tCharingOrderPowerMapVO.setMaps(maps1);
|
return R.ok(tCharingOrderPowerMapVO);
|
|
}
|
|
|
@RequiresPermissions(value = {"/chargingUserAnalysis"}, logical = Logical.OR)
|
@ResponseBody
|
@PostMapping(value = "/charging/users")
|
@ApiOperation(value = "除电站流量外", tags = {"管理后台-数据分析-充电用户分析"})
|
public R<TCharingUserMapVO> users(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){
|
Long userId = tokenService.getLoginUser().getUserid();
|
|
List<Integer> siteIds = new ArrayList<>();
|
if (statisticsQueryDto.getSiteId()==null){
|
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data) {
|
siteIds.add(datum.getId());
|
}
|
}else {
|
siteIds.add(statisticsQueryDto.getSiteId());
|
}
|
if (siteIds.isEmpty())siteIds.add(-1);
|
statisticsQueryDto.setSiteIds(siteIds);
|
|
|
TCharingUserMapVO tCharingUserMapVO = new TCharingUserMapVO();
|
//上方折现
|
if (statisticsQueryDto.getDayType()==1){
|
List<Map<String,Object>> map = chargingOrderService.usersDay(statisticsQueryDto);
|
|
List<Map<String, Object>> charMap = new ArrayList<>();
|
// 生成从 "00:00" 到 "23:00" 的时间数据
|
for (int hour = 0; hour < 24; hour++) {
|
String time = String.format("%02d:00", hour);
|
Map<String, Object> mapWithTimeValue = findMapWithTimeValue(map, time);
|
if (mapWithTimeValue!=null){
|
charMap.add(mapWithTimeValue);
|
}else {
|
Map<String, Object> timeMap = new HashMap<>();
|
timeMap.put("time", time); // 初始化值为 null
|
timeMap.put("counts", 0);
|
|
charMap.add(timeMap);
|
}
|
}
|
|
List<Map<String,Object>> map1 = chargingOrderService.usersDay1();
|
|
List<Map<String, Object>> charMap1 = new ArrayList<>();
|
// 生成从 "00:00" 到 "23:00" 的时间数据
|
for (int hour = 0; hour < 24; hour++) {
|
String time = String.format("%02d:00", hour);
|
Map<String, Object> mapWithTimeValue = findMapWithTimeValue(map1, time);
|
if (mapWithTimeValue!=null){
|
charMap1.add(mapWithTimeValue);
|
}else {
|
Map<String, Object> timeMap = new HashMap<>();
|
timeMap.put("time", time); // 初始化值为 null
|
timeMap.put("counts", 0);
|
|
charMap1.add(timeMap);
|
}
|
}
|
|
|
tCharingUserMapVO.setMap(charMap);
|
tCharingUserMapVO.setMap1(charMap1);
|
}else {
|
|
|
List<Map<String,Object>> map = chargingOrderService.usersByQuery(statisticsQueryDto);
|
|
|
//按日
|
// 解析 startTime 和 endTime 为 LocalDate
|
LocalDate startDate = statisticsQueryDto.getStartTime();
|
LocalDate endDate = statisticsQueryDto.getEndTime();
|
|
List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
|
|
// 遍历日期范围
|
while (!startDate.isAfter(endDate)) {
|
String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
Map<String, Object> dailyStats = findMapWithDateValue(map, formattedDate);
|
|
if (dailyStats != null) {
|
dateRangeStatistics.add(dailyStats);
|
} else {
|
Map<String, Object> dateMap = new HashMap<>();
|
dateMap.put("time", formattedDate);
|
dateMap.put("counts", 0);
|
dateRangeStatistics.add(dateMap);
|
}
|
|
// 移动到下一天
|
startDate = startDate.plusDays(1);
|
}
|
|
tCharingUserMapVO.setMap(dateRangeStatistics);
|
|
|
List<Map<String,Object>> map1 = chargingOrderService.usersByQuery1(statisticsQueryDto);
|
|
|
|
LocalDate startDate1 = statisticsQueryDto.getStartTime();
|
LocalDate endDate1 = statisticsQueryDto.getEndTime();
|
|
List<Map<String, Object>> dateRangeStatistics1 = new ArrayList<>();
|
|
// 遍历日期范围
|
while (!startDate1.isAfter(endDate1)) {
|
String formattedDate = startDate1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
Map<String, Object> dailyStats = findMapWithDateValue(map1, formattedDate);
|
|
if (dailyStats != null) {
|
dateRangeStatistics1.add(dailyStats);
|
} else {
|
Map<String, Object> dateMap = new HashMap<>();
|
dateMap.put("time", formattedDate);
|
dateMap.put("counts", 0);
|
dateRangeStatistics1.add(dateMap);
|
}
|
|
// 移动到下一天
|
startDate1 = startDate1.plusDays(1);
|
}
|
|
tCharingUserMapVO.setMap1(dateRangeStatistics1);
|
|
|
|
|
}
|
|
//用户标签
|
List<Map<String,Object>> maps = chargingOrderService.getUserTagCount();
|
Map<String,Object> stringObjectMap = new HashMap<>();
|
Long noTagCount = chargingOrderService.countNoTag();
|
stringObjectMap.put("count",noTagCount);
|
maps.add(stringObjectMap);
|
|
//会员标签
|
List<Map<String,Object>> maps1 = chargingOrderService.getVipCount();
|
|
//单位消费
|
List<Map<String, Object>> untiMap = chargingOrderService.unitConsumption(statisticsQueryDto);
|
|
//车辆用途
|
List<Map<String, Object>> carMap = chargingOrderService.carUserMethod();
|
|
//车辆品牌
|
List<Map<String, Object>> carBrandMap = chargingOrderService.carUserBrand();
|
List<String> brands = new ArrayList<>();
|
for (Map<String, Object> objectMap : carBrandMap) {
|
brands.add(objectMap.get("vehicle_brand").toString());
|
}
|
|
if (carBrandMap.size()>=5) {
|
Long count = chargingOrderService.countCar(brands);
|
Map<String, Object> others = new HashMap<>();
|
others.put("vehicle_brand", "其他");
|
others.put("counts", count);
|
carBrandMap.add(others);
|
}
|
//本地车数量
|
Map<String,Object> localCarMap = chargingOrderService.countLocalCar();
|
|
|
tCharingUserMapVO.setUserMaps(maps);
|
tCharingUserMapVO.setVipMaps(maps1);
|
tCharingUserMapVO.setUntiMap(untiMap);
|
tCharingUserMapVO.setCarMap(carMap);
|
tCharingUserMapVO.setCarBrandMap(carBrandMap);
|
tCharingUserMapVO.setLocalCarMap(localCarMap);
|
return R.ok(tCharingUserMapVO);
|
|
}
|
|
|
@RequiresPermissions(value = {"/chargingUserAnalysis"}, logical = Logical.OR)
|
@ResponseBody
|
@PostMapping(value = "/charging/sites")
|
@ApiOperation(value = "电站评价", tags = {"管理后台-数据分析-充电用户分析"})
|
public R<TCharingUserEvaluateVO> sites(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){
|
List<Integer> siteIds =new ArrayList<>();
|
if (statisticsQueryDto.getSiteId()==null) {
|
Long userId = tokenService.getLoginUser().getUserid();
|
//获取当前登录的siteIds
|
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data) {
|
siteIds.add(datum.getId());
|
}
|
}else {
|
siteIds.add(statisticsQueryDto.getSiteId());
|
}
|
//查询评价分
|
Double aver = chargingOrderService.getAver(siteIds);
|
//查询各个分数
|
List<Map<String,Object>> evaluate = chargingOrderService.getLevelEvaluate(siteIds);
|
//查询差评回复数
|
List<Integer> mark = new ArrayList<>();
|
mark.add(1);
|
mark.add(2);
|
Long count = orderEvaluateService.lambdaQuery().in(TOrderEvaluate::getMark, mark).isNotNull(TOrderEvaluate::getResponseTime).count();
|
TCharingUserEvaluateVO tCharingUserEvaluateVO = new TCharingUserEvaluateVO();
|
tCharingUserEvaluateVO.setAver(aver);
|
tCharingUserEvaluateVO.setEvaluate(evaluate);
|
tCharingUserEvaluateVO.setBlackCount(count);
|
|
|
//好评标签
|
List<Map<String,Object>> goodTop = orderEvaluateService.goodTop(siteIds);
|
//差评标签
|
List<Map<String,Object>> badTop = orderEvaluateService.badTop(siteIds);
|
|
//流量分析
|
List<Map<String,Object>> sourceMap = chargingOrderService.countBySource(siteIds,statisticsQueryDto);
|
tCharingUserEvaluateVO.setGoodTop(goodTop);
|
tCharingUserEvaluateVO.setBadTop(badTop);
|
tCharingUserEvaluateVO.setFlow(sourceMap);
|
//流量
|
return R.ok(tCharingUserEvaluateVO);
|
}
|
|
|
@RequiresPermissions(value = {"/operationMaintenanceAnalysis"}, logical = Logical.OR)
|
@ResponseBody
|
@PostMapping(value = "/charging/equipment")
|
@ApiOperation(value = "电站评价", tags = {"管理后台-数据分析-设备运维分析"})
|
public R<TCharingUserEquimentVO> equipment(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){
|
List<Integer> siteIds =new ArrayList<>();
|
if (statisticsQueryDto.getSiteId()==null||statisticsQueryDto.getSiteId()==0) {
|
Long userId = tokenService.getLoginUser().getUserid();
|
//获取当前登录的siteIds
|
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data) {
|
siteIds.add(datum.getId());
|
}
|
}else {
|
siteIds.add(statisticsQueryDto.getSiteId());
|
}
|
//直流可用率
|
List<Map<String,Object>> equipmentMap1 = chargingOrderService.equipmentUserType1(siteIds,statisticsQueryDto);
|
for (Map<String, Object> result : equipmentMap1) {
|
Object percentObj = result.get("percent");
|
if (percentObj instanceof String) {
|
try {
|
BigDecimal percent = new BigDecimal((String) percentObj);
|
if (percent.compareTo(BigDecimal.ZERO) < 0) {
|
result.put("percent", percent.negate().toString());
|
}
|
} catch (NumberFormatException e) {
|
// 处理转换异常
|
result.put("percent", BigDecimal.ZERO); // 或者其他默认值
|
}
|
} else if (percentObj instanceof BigDecimal) {
|
BigDecimal percent = (BigDecimal) percentObj;
|
if (percent.compareTo(BigDecimal.ZERO) < 0) {
|
result.put("percent", percent.negate().toString());
|
}
|
}
|
}
|
|
//交流可用率
|
List<Map<String,Object>> equipmentMap2= chargingOrderService.equipmentUserType2(siteIds,statisticsQueryDto);
|
|
for (Map<String, Object> result : equipmentMap2) {
|
Object percentObj = result.get("percent");
|
if (percentObj instanceof String) {
|
try {
|
BigDecimal percent = new BigDecimal((String) percentObj);
|
if (percent.compareTo(BigDecimal.ZERO) < 0) {
|
result.put("percent", percent.negate().toString());
|
}
|
} catch (NumberFormatException e) {
|
// 处理转换异常
|
result.put("percent", BigDecimal.ZERO); // 或者其他默认值
|
}
|
} else if (percentObj instanceof BigDecimal) {
|
BigDecimal percent = (BigDecimal) percentObj;
|
if (percent.compareTo(BigDecimal.ZERO) < 0) {
|
result.put("percent", percent.negate().toString());
|
}
|
}
|
}
|
|
//取出直流可用率和交流可用率的percent的平均值保留两位小数
|
|
double average1 = calculateAveragePercent(equipmentMap1, equipmentMap2);
|
System.out.printf("The average percent is: %.2f\n", average1);
|
|
|
//直流故障率
|
List<Map<String,Object>> equipmentMapbroke1 = chargingOrderService.equipmentMapbroke1(siteIds,statisticsQueryDto);
|
//交流故障率
|
List<Map<String,Object>> equipmentMapbroke2 = chargingOrderService.equipmentMapbroke2(siteIds,statisticsQueryDto);
|
|
|
double average2 = calculateAveragePercent(equipmentMapbroke1, equipmentMapbroke2);
|
System.out.printf("The average percent is: %.2f\n", average2);
|
//直流离网率
|
List<Map<String,Object>> equipmentMapOut1 = chargingOrderService.equipmentMapOut1(siteIds,statisticsQueryDto);
|
//交流离网率
|
List<Map<String,Object>> equipmentMapOut2 = chargingOrderService.equipmentMapOut2(siteIds,statisticsQueryDto);
|
|
double average3 = calculateAveragePercent(equipmentMapOut1, equipmentMapOut2);
|
System.out.printf("The average percent is: %.2f\n", average3);
|
|
//需求电流满足率
|
List<Map<String,Object>> needElec1 = chargingOrderService.needElec(siteIds,statisticsQueryDto);
|
List<Map<String,Object>> needElec2 = chargingOrderService.needElec1(siteIds,statisticsQueryDto);
|
|
double average4 = calculateAveragePercent(needElec1, needElec2);
|
System.out.printf("The average percent is: %.2f\n", average4);
|
|
|
|
TCharingUserEquimentVO tCharingUserEquimentVO = new TCharingUserEquimentVO();
|
tCharingUserEquimentVO.setEquipmentMap1(equipmentMap1);
|
tCharingUserEquimentVO.setEquipmentMap2(equipmentMap2);
|
tCharingUserEquimentVO.setEquipmentMapbroke1(equipmentMapbroke1);
|
tCharingUserEquimentVO.setEquipmentMapbroke2(equipmentMapbroke2);
|
tCharingUserEquimentVO.setEquipmentMapOut1(equipmentMapOut1);
|
tCharingUserEquimentVO.setEquipmentMapOut2(equipmentMapOut2);
|
tCharingUserEquimentVO.setNeedElec1(needElec1);
|
tCharingUserEquimentVO.setNeedElec2(needElec2);
|
tCharingUserEquimentVO.setAverage1(average1);
|
tCharingUserEquimentVO.setAverage2(average2);
|
tCharingUserEquimentVO.setAverage3(average3);
|
tCharingUserEquimentVO.setAverage4(average4);
|
return R.ok(tCharingUserEquimentVO);
|
}
|
|
private static final DecimalFormat DF = new DecimalFormat("#.00");
|
public static double calculateAveragePercent(List<Map<String, Object>> mapList1, List<Map<String, Object>> mapList2) {
|
int totalElements = mapList1.size() + mapList2.size();
|
double sum = 0.0;
|
|
// 累加两个列表中所有元素的 "percent" 值
|
for (Map<String, Object> map : mapList1) {
|
if (map.containsKey("percent")) {
|
sum += Double.parseDouble((String) map.get("percent"));
|
}
|
}
|
for (Map<String, Object> map : mapList2) {
|
if (map.containsKey("percent")) {
|
sum += Double.parseDouble((String) map.get("percent"));
|
}
|
}
|
|
// 防止除以零错误
|
if (totalElements == 0) {
|
return 0.0;
|
}
|
|
// 计算平均值
|
double average = sum / totalElements;
|
|
// 格式化为两位小数
|
return Double.parseDouble(DF.format(average));
|
}
|
|
|
@RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
|
@ResponseBody
|
@PostMapping(value = "/work/charge")
|
@ApiOperation(value = "上方充电数据统计", tags = {"管理后台-工作台"})
|
public R<TCharingWorkVO> workCharge(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
|
List<Integer> siteIds = new ArrayList<>();
|
if (statisticsQueryDto.getSiteId() == null) {
|
Long userId = tokenService.getLoginUser().getUserid();
|
//获取当前登录的siteIds
|
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data) {
|
siteIds.add(datum.getId());
|
}
|
} else {
|
siteIds.add(statisticsQueryDto.getSiteId());
|
}
|
LocalDateTime selectDate = statisticsQueryDto.getSelectDate();
|
LocalDateTime min = selectDate.with(LocalTime.MIN);
|
LocalDateTime max = selectDate.with(LocalTime.MAX);
|
|
List<TChargingOrder> list = chargingOrderService.lambdaQuery().in(!siteIds.isEmpty(), TChargingOrder::getSiteId, siteIds)
|
.between(TChargingOrder::getCreateTime, min, max).eq(TChargingOrder::getStatus,5).eq(TChargingOrder::getDelFlag, 0)
|
.eq(TChargingOrder::getRechargePaymentStatus, 2)
|
.eq(statisticsQueryDto.getSiteId() != null, TChargingOrder::getSiteId, statisticsQueryDto.getSiteId()).list();
|
//当日的订单总数
|
int size = list.size();
|
//计算list中paymentAmount的总和
|
BigDecimal totalPaymentAmount = BigDecimal.ZERO;
|
//计算list中electrovalence的总和
|
BigDecimal totalElectrovalence = BigDecimal.ZERO;
|
//计算list中serviceCharge的总和
|
BigDecimal totalServiceCharge = BigDecimal.ZERO;
|
//计算list中charging_capacity的总和
|
BigDecimal totalChargingCapacity = BigDecimal.ZERO;
|
List<TChargingOrderAccountingStrategy> accountingStrategyList = chargingOrderAccountingStrategyService.list();
|
for (TChargingOrder order : list) {
|
List<TChargingOrderAccountingStrategy> collect = accountingStrategyList.stream().filter(s -> s.getChargingOrderId().equals(order.getId())).collect(Collectors.toList());
|
BigDecimal periodElectricPrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal periodServicePrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal chargingCapacity = collect.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
totalElectrovalence = totalElectrovalence.add(periodElectricPrice);
|
totalChargingCapacity = totalChargingCapacity.add(chargingCapacity);
|
if(2 != order.getOrderSource()){
|
totalServiceCharge = totalServiceCharge.add(periodServicePrice);
|
totalPaymentAmount = totalPaymentAmount.add(periodElectricPrice).add(periodServicePrice);
|
}else{
|
totalServiceCharge = totalServiceCharge.add(periodServicePrice.multiply(new BigDecimal("0.8")));
|
totalPaymentAmount = totalPaymentAmount.add(periodElectricPrice).add(periodServicePrice.multiply(new BigDecimal("0.8")));
|
}
|
}
|
|
TCharingWorkVO tCharingWorkVO = new TCharingWorkVO();
|
tCharingWorkVO.setCount(size);
|
tCharingWorkVO.setTotalPaymentAmount(totalPaymentAmount);
|
tCharingWorkVO.setTotalElectrovalence(totalElectrovalence);
|
tCharingWorkVO.setTotalServiceCharge(totalServiceCharge);
|
tCharingWorkVO.setTotalChargingCapacity(totalChargingCapacity);
|
return R.ok(tCharingWorkVO);
|
}
|
|
|
|
@RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
|
@ResponseBody
|
@PostMapping(value = "/work/chargeDetail")
|
@ApiOperation(value = "运营情况", tags = {"管理后台-工作台"})
|
public R workCharge(@RequestBody ChargingDetailQueryDto statisticsQueryDto) {
|
List<Integer> siteIds = new ArrayList<>();
|
if (statisticsQueryDto.getSiteId() == null) {
|
Long userId = tokenService.getLoginUser().getUserid();
|
//获取当前登录的siteIds
|
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data) {
|
siteIds.add(datum.getId());
|
}
|
} else {
|
siteIds.add(statisticsQueryDto.getSiteId());
|
}
|
if (statisticsQueryDto.getDayType()==1) {
|
List<Map<String,Object>> charMap1 = chargingOrderService.getHourType(siteIds,statisticsQueryDto);
|
List<Map<String, Object>> charMap = new ArrayList<>();
|
// 生成从 "00:00" 到 "23:00" 的时间数据
|
for (int hour = 0; hour < 24; hour++) {
|
String time = String.format("%02d:00", hour);
|
Map<String, Object> mapWithTimeValue = findMapWithTimeValue(charMap1, time);
|
if (mapWithTimeValue!=null){
|
charMap.add(mapWithTimeValue);
|
}else {
|
Map<String, Object> timeMap = new HashMap<>();
|
timeMap.put("time", time); // 初始化值为 null
|
timeMap.put("electrovalence", 0);
|
timeMap.put("orderCount", 0);
|
timeMap.put("servicecharge", 0);
|
timeMap.put("electricity", 0);
|
charMap.add(timeMap);
|
}
|
}
|
return R.ok(charMap);
|
}else if (statisticsQueryDto.getDayType()==2){
|
// 假设 chargingOrderService.getDateType() 返回的是按天的数据
|
List<Map<String, Object>> charMap1 = chargingOrderService.getDateType(siteIds, statisticsQueryDto);
|
|
// 解析 startTime 和 endTime 为 LocalDate
|
LocalDate startDate = statisticsQueryDto.getStartTime();
|
LocalDate endDate = statisticsQueryDto.getEndTime();
|
|
List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
|
|
// 遍历日期范围
|
while (!startDate.isAfter(endDate)) {
|
String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
Map<String, Object> dailyStats = findMapWithDateValue(charMap1, formattedDate);
|
|
if (dailyStats != null) {
|
dateRangeStatistics.add(dailyStats);
|
} else {
|
Map<String, Object> dateMap = new HashMap<>();
|
dateMap.put("time", formattedDate);
|
dateMap.put("electrovalence", 0);
|
dateMap.put("orderCount", 0);
|
dateMap.put("servicecharge", 0);
|
dateMap.put("electricity", 0);
|
dateRangeStatistics.add(dateMap);
|
}
|
|
// 移动到下一天
|
startDate = startDate.plusDays(1);
|
}
|
|
// return dateRangeStatistics;
|
return R.ok(dateRangeStatistics);
|
}else if (statisticsQueryDto.getDayType()==3){
|
List<Map<String,Object>> charMap1 = chargingOrderService.getMonthType(siteIds,statisticsQueryDto);
|
// 解析 startTime 和 endTime 为 LocalDate
|
LocalDate startDate = statisticsQueryDto.getStartTime();
|
LocalDate endDate = statisticsQueryDto.getEndTime();
|
|
List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
|
|
// 遍历日期范围
|
while (!startDate.isAfter(endDate)) {
|
String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
|
Map<String, Object> dailyStats = findMapWithDateValue(charMap1, formattedDate);
|
|
if (dailyStats != null) {
|
dateRangeStatistics.add(dailyStats);
|
} else {
|
Map<String, Object> dateMap = new HashMap<>();
|
dateMap.put("time", formattedDate);
|
dateMap.put("electrovalence", 0);
|
dateMap.put("orderCount", 0);
|
dateMap.put("servicecharge", 0);
|
dateMap.put("electricity", 0);
|
dateRangeStatistics.add(dateMap);
|
}
|
|
// 移动到下一天
|
startDate = startDate.plusMonths(1);
|
}
|
return R.ok(dateRangeStatistics);
|
|
}
|
return R.ok();
|
|
|
}
|
|
private static Map<String, Object> findMapWithTimeValue(List<Map<String, Object>> charMap1,String timeValue) {
|
for (Map<String, Object> map : charMap1) {
|
if (map.containsKey("time") && map.get("time").equals(timeValue)) {
|
return map;
|
}
|
}
|
return null; // 如果没有找到,返回 null
|
}
|
|
private Map<String, Object> findMapWithDateValue(List<Map<String, Object>> list, String date) {
|
for (Map<String, Object> map : list) {
|
if (date.equals(map.get("time"))) {
|
return map;
|
}
|
}
|
return null;
|
}
|
|
|
|
|
@RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
|
@ResponseBody
|
@PostMapping(value = "/work/use")
|
@ApiOperation(value = "利用率", tags = {"管理后台-工作台"})
|
public R workUse(@RequestBody ChargingDetailQueryDto statisticsQueryDto) {
|
List<Integer> siteIds = new ArrayList<>();
|
if (statisticsQueryDto.getSiteId() == null) {
|
Long userId = tokenService.getLoginUser().getUserid();
|
//获取当前登录的siteIds
|
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
|
for (GetSiteListDTO datum : data) {
|
siteIds.add(datum.getId());
|
}
|
} else {
|
siteIds.add(statisticsQueryDto.getSiteId());
|
}
|
List<Map<String,Object>> capMap = chargingOrderService.getchargingCapacity(siteIds,statisticsQueryDto);
|
List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
|
BigDecimal totalRatedPower = chargingPiles.stream().map(TChargingPile::getRatedPower).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
//每日利用率=当日充电度数/(桩总功率*24小时)
|
BigDecimal multiply1 = totalRatedPower.multiply(new BigDecimal(24));
|
System.err.println(JSON.toJSONString(capMap) + "---" + chargingPiles.size() + "---" + totalRatedPower + "---" + multiply1);
|
capMap.forEach(map -> {
|
BigDecimal chargingCapacity = (BigDecimal) map.get("chargingCapacity");
|
BigDecimal result = chargingCapacity.divide(multiply1, 4, RoundingMode.HALF_UP);
|
BigDecimal multiply = result.multiply(new BigDecimal(100));
|
map.put("chargingCapacity", multiply);
|
});
|
|
// 解析 startTime 和 endTime 为 LocalDate
|
LocalDate startDate = statisticsQueryDto.getStartTime();
|
LocalDate endDate = statisticsQueryDto.getEndTime();
|
|
List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
|
|
// 遍历日期范围
|
while (!startDate.isAfter(endDate)) {
|
String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
Map<String, Object> dailyStats = findMapWithDateValue(capMap, formattedDate);
|
|
if (dailyStats != null) {
|
dateRangeStatistics.add(dailyStats);
|
} else {
|
Map<String, Object> dateMap = new HashMap<>();
|
dateMap.put("time", formattedDate);
|
dateMap.put("chargingCapacity", 0);
|
dateRangeStatistics.add(dateMap);
|
}
|
|
// 移动到下一天
|
startDate = startDate.plusDays(1);
|
}
|
return R.ok(dateRangeStatistics);
|
}
|
|
|
@RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
|
@ResponseBody
|
@GetMapping(value = "/work/shopOrder")
|
@ApiOperation(value = "购物订单统计", tags = {"管理后台-工作台"})
|
public R shopOrder() {
|
Long count = shoppingOrderService.lambdaQuery().eq(TShoppingOrder::getStatus, 1).count();
|
Long count1 = shoppingOrderService.lambdaQuery().eq(TShoppingOrder::getStatus, 2).count();
|
List<Long> counts = new ArrayList<>();
|
counts.add(count);
|
counts.add(count1);
|
return R.ok(counts);
|
}
|
|
|
@RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
|
@ResponseBody
|
@GetMapping(value = "/work/invoice")
|
@ApiOperation(value = "开票统计", tags = {"管理后台-工作台"})
|
public R invoice() {
|
Long count = invoiceService.lambdaQuery().eq(TOrderInvoice::getStatus, 1).count();
|
Long count1 = invoiceService.lambdaQuery().eq(TOrderInvoice::getStatus, 3).count();
|
List<Long> counts = new ArrayList<>();
|
counts.add(count);
|
counts.add(count1);
|
return R.ok(counts);
|
}
|
|
@RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
|
@ResponseBody
|
@GetMapping(value = "/work/users/count")
|
@ApiOperation(value = "用户数量", tags = {"管理后台-工作台"})
|
public R usersCount() {
|
List<Map<String,Object>> userMap = chargingOrderService.countAllUserData();
|
return R.ok(userMap);
|
|
}
|
|
@GetMapping(value = "/getGunIdsByUserId")
|
@ApiOperation(value = "查询当前用户正在充电中的枪id集合", tags = {"小程序-首页-用户充电订单信息"})
|
public R<List<Integer>> getGunIdsByUserId() {
|
Long userId = tokenService.getLoginUserApplet().getUserId();
|
List<TChargingOrder> list = chargingOrderService.list(Wrappers.lambdaQuery(TChargingOrder.class)
|
.eq(TChargingOrder::getAppUserId, userId)
|
.in(TChargingOrder::getStatus, Arrays.asList(1,2,3,4)));
|
List<Integer> gunIds = list.stream().map(TChargingOrder::getChargingGunId).collect(Collectors.toList());
|
return R.ok(gunIds);
|
}
|
|
|
|
|
/**
|
* 硬件充电结束后的处理逻辑
|
* @param code
|
*/
|
@PostMapping("/endCharge")
|
public void endCharge(@RequestParam("code") String code){
|
log.info(code + ":-------------------充电桩自动结束充电-------------------");
|
chargingOrderService.endCharge(code, 2);
|
}
|
|
|
|
/**
|
* 硬件异常结束充电后的处理逻辑
|
* @param code
|
*/
|
@PostMapping("/excelEndCharge")
|
public void excelEndCharge(@RequestParam("code") String code){
|
log.info(code + ":-------------------充电异常,停止充电-------------------");
|
chargingOrderService.excelEndCharge(code);
|
}
|
|
|
/**
|
* 根据车牌号和时间查询有效的充电数据
|
* @param query
|
* @return
|
*/
|
@PostMapping("/getChargingOrderByLicensePlate")
|
public R<TChargingOrder> getChargingOrderByLicensePlate(@RequestBody GetChargingOrderByLicensePlate query){
|
TChargingOrder chargingOrder = chargingOrderService.getChargingOrderByLicensePlate(query);
|
return R.ok(chargingOrder);
|
}
|
|
|
/**
|
* 修改充电订单
|
* @param chargingOrder
|
* @return
|
*/
|
@PostMapping("/updateChargingOrder")
|
public R<String> updateChargingOrder(@RequestBody TChargingOrder chargingOrder){
|
chargingOrderService.updateById(chargingOrder);
|
return R.ok();
|
}
|
|
|
@ResponseBody
|
@GetMapping(value = "/getEndOfChargePageInfo/{id}")
|
@ApiOperation(value = "获取充电结束页面数据", tags = {"小程序-扫一扫"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "id", value = "订单id", required = true)
|
})
|
public AjaxResult<EndOfChargePageInfo> getEndOfChargePageInfo(@PathVariable("id") String id){
|
EndOfChargePageInfo endOfChargePageInfo = chargingOrderService.getEndOfChargePageInfo(id);
|
return AjaxResult.success(endOfChargePageInfo);
|
}
|
|
|
/**
|
* 获取订单数据
|
* @param order
|
* @return
|
*/
|
@PostMapping("/getChargingOrder")
|
public R<List<TChargingOrder>> getChargingOrder(@RequestBody TChargingOrderVo order){
|
List<TChargingOrder> chargingOrder = chargingOrderService.getChargingOrder(order);
|
return R.ok(chargingOrder);
|
}
|
|
|
/**
|
* 根据车辆id获取指定时间范围内的数据
|
* @param carId
|
* @param startTime
|
* @param endTime
|
* @return
|
*/
|
@PostMapping("/getCarChargingOrder")
|
public R<List<TChargingOrder>> getCarChargingOrder(@RequestParam("carId") Long carId, @RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime){
|
List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserCarId, carId).eq(TChargingOrder::getDelFlag, 0)
|
.in(TChargingOrder::getStatus, Arrays.asList(4, 5)).between(TChargingOrder::getStartTime, startTime, endTime));
|
return R.ok(list);
|
}
|
|
|
/**
|
* 根据车牌号查询指定时间范围内的数据
|
* @param plateNum
|
* @param startTime
|
* @param endTime
|
* @return
|
*/
|
@PostMapping("/getCarChargingOrderByPlateNum")
|
public R<List<TChargingOrder>> getCarChargingOrderByPlateNum(@RequestParam("plateNum") String plateNum, @RequestParam("startTime") String startTime,
|
@RequestParam("endTime") String endTime){
|
List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getPlateNum, plateNum).eq(TChargingOrder::getDelFlag, 0)
|
.in(TChargingOrder::getStatus, Arrays.asList(4, 5)).between(TChargingOrder::getStartTime, startTime, endTime));
|
return R.ok(list);
|
}
|
|
|
/**
|
* 添加三方平台充电订单数据
|
* @return
|
*/
|
@PostMapping("/addTripartitePlatformOrder")
|
public R addTripartitePlatformOrder(@RequestBody AddTripartitePlatformOrder query){
|
return chargingOrderService.addTripartitePlatformOrder(query);
|
}
|
|
|
|
|
|
/**
|
* 根据三方平台订单id获取充电数据
|
* @param startChargeSeq
|
* @return
|
*/
|
@PostMapping("/getChargingOrderByStartChargeSeq")
|
public R<TChargingOrder> getChargingOrderByStartChargeSeq(@RequestParam("startChargeSeq") String startChargeSeq){
|
TChargingOrder chargingOrder = chargingOrderService.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getStartChargeSeq, startChargeSeq));
|
return R.ok(chargingOrder);
|
}
|
|
|
|
|
/**
|
* 根据三方平台订单ids获取充电数据
|
* @param startChargeSeqs
|
* @return
|
*/
|
@PostMapping("/getChargingOrderByStartChargeSeqs")
|
public R<List<TChargingOrder>> getChargingOrderByStartChargeSeqs(@RequestParam("startChargeSeqs") List<String> startChargeSeqs){
|
List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>().in(TChargingOrder::getStartChargeSeq, startChargeSeqs));
|
return R.ok(list);
|
}
|
|
|
/**
|
* 三方平台请求停止充电
|
* @param startChargeSeq
|
* @return
|
*/
|
@PostMapping("/tripartitePlatformStopCharge")
|
public R tripartitePlatformStopCharge(@RequestParam("startChargeSeq") String startChargeSeq){
|
return chargingOrderService.tripartitePlatformStopCharge(startChargeSeq);
|
}
|
|
|
/**
|
* 临时接口
|
* 获取充电后没有扣除费用的数据
|
* @return
|
*/
|
@GetMapping("/getNotPaymentChargingOrder")
|
public R getNotPaymentChargingOrder(){
|
return chargingOrderService.getNotPaymentChargingOrder();
|
}
|
|
|
|
}
|