From 42bc4fe8686d012db57d4e68591b516b785d62b3 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 15 七月 2025 17:36:34 +0800
Subject: [PATCH] 政务云数据上传、川易充bug修改
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 3077 +++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 1,834 insertions(+), 1,243 deletions(-)
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index 794968a..d956b76 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.*;
import com.ruoyi.account.api.model.*;
@@ -17,11 +18,11 @@
import com.ruoyi.common.core.dto.ChargingOrderGroup;
import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.domain.BasePojo;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.integration.api.feignClient.ChargingHandshakeClient;
import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient;
import com.ruoyi.integration.api.feignClient.SendMessageClient;
import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
@@ -31,6 +32,7 @@
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.integration.api.feignClient.*;
import com.ruoyi.integration.api.model.*;
+import com.ruoyi.integration.api.vo.ChargingOrderVo;
import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply;
import com.ruoyi.integration.api.vo.StartChargeResult;
import com.ruoyi.order.api.dto.SettlementConfirmAdd;
@@ -50,12 +52,19 @@
import com.ruoyi.order.service.TChargingOrderService;
import com.ruoyi.order.service.TOrderEvaluateService;
import com.ruoyi.order.service.*;
+import com.ruoyi.order.util.RedisLock;
+import com.ruoyi.order.util.mongodb.service.PlatformStartChargingReplyService;
+import com.ruoyi.order.util.mongodb.service.TransactionRecordService;
+import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService;
import com.ruoyi.order.vo.EndOfChargePageInfo;
+import com.ruoyi.order.vo.OrderCountByDate;
+import com.ruoyi.order.vo.StatisticsOfBatteryVO;
import com.ruoyi.other.api.domain.*;
import com.ruoyi.order.vo.ChargingOrderListInfoVO;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.other.api.feignClient.*;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
+import com.ruoyi.payment.api.feignClient.H5AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
import com.ruoyi.payment.api.model.RefundReq;
import com.ruoyi.payment.api.model.RefundResp;
@@ -64,9 +73,14 @@
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
import io.seata.spring.annotation.GlobalTransactional;
+import org.redisson.Redisson;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@@ -89,7 +103,7 @@
/**
* <p>
- * 服务实现类
+ * 服务实现类
* </p>
*
* @author xiaochen
@@ -99,7 +113,7 @@
public class TChargingOrderServiceImpl extends ServiceImpl<TChargingOrderMapper, TChargingOrder> implements TChargingOrderService {
private Logger log = LoggerFactory.getLogger(TChargingOrderServiceImpl.class);
-
+
@Resource
private ChargingGunClient chargingGunClient;
@Resource
@@ -113,10 +127,10 @@
private AppUserCarClient appUserCarClient;
@Resource
private AppUserClient appUserClient;
-
+
@Resource
private ChargingPileClient chargingPileClient;
-
+
@Resource
private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
@@ -128,10 +142,12 @@
@Resource
private AliPaymentClient aliPaymentClient;
-
+ @Resource
+ private H5AliPaymentClient h5AliPaymentClient;
+
@Resource
private AppCouponClient appCouponClient;
-
+
@Resource
private AppUserVipDetailClient appUserVipDetailClient;
@@ -139,47 +155,47 @@
private RedisService redisService;
@Resource
- private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
+ private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
@Resource
private TCECClient tcecClient;
-
+
@Resource
private SendMessageClient sendMessageClient;
-
+
@Resource
private TOrderEvaluateService orderEvaluateService;
@Resource
private AccountingStrategyDetailClient accountingStrategyDetailClient;
-
+
@Resource
private AccountingStrategyDetailOrderClient accountingStrategyDetailOrderClient;
-
+
@Resource
private AccountingStrategyClient accountingStrategyClient;
-
+
@Resource
- private PlatformStartChargingReplyClient platformStartChargingReplyClient;
-
+ private PlatformStartChargingReplyService platformStartChargingReplyService;
+
@Resource
private TChargingOrderRefundService chargingOrderRefundService;
-
+
@Resource
private PlatformStopChargingReplyClient platformStopChargingReplyClient;
-
+
@Resource
private AccountingStrategyOrderService accountingStrategyOrderService;
-
+
@Resource
private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService;
-
+
@Resource
private InviteUserClient inviteUserClient;
-
+
@Resource
private AppUserIntegralChangeClient appUserIntegralChangeClient;
-
+
@Resource
private IntegralRuleClient integralRuleClient;
@@ -195,9 +211,6 @@
@Resource
private SecurityDetectionClient securityDetectionClient;
- @Resource
- private BmsDemandAndChargerExportationClient bmsDemandAndChargerExportationClient;
-
//计数器
private Map<String, Integer> counter_map = new HashMap<>();
@@ -208,13 +221,23 @@
private OperatorClient operatorClient;
@Resource
- private TransactionRecordClient transactionRecordClient;
-
-
-
-
+ private TransactionRecordService transactionRecordService;
+
+ @Resource
+ private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
+ @Resource
+ private TOrderAppealService orderAppealService;
+
+ @Autowired
+ private RedissonClient redissonClient;
+
+ @Resource
+ private ChargingMessageClient chargingMessageClient;
+
+
/**
* 获取小程序充电记录列表数据
+ *
* @param query
* @return
*/
@@ -255,6 +278,7 @@
/**
* 获取充电订单明细
+ *
* @param id 订单id
* @return
*/
@@ -263,6 +287,7 @@
TChargingOrder chargingOrder = this.getById(id);
MyChargingOrderInfo myChargingOrderInfo = new MyChargingOrderInfo();
myChargingOrderInfo.setId(id);
+ myChargingOrderInfo.setChargingGunId(chargingOrder.getChargingGunId());
myChargingOrderInfo.setCode(chargingOrder.getCode());
myChargingOrderInfo.setCreateTime(chargingOrder.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
myChargingOrderInfo.setStatus(chargingOrder.getStatus());
@@ -272,18 +297,22 @@
myChargingOrderInfo.setChargeMode(chargingGun.getChargeMode());
String name = chargingGunClient.getAllName(chargingOrder.getChargingGunId()).getData();
myChargingOrderInfo.setName(name);
- if(Objects.nonNull(chargingOrder.getAppUserCarId())){
+ if (Objects.nonNull(chargingOrder.getAppUserCarId())) {
TAppUserCar tAppUserCar = appUserCarClient.getCarById(chargingOrder.getAppUserCarId().toString()).getData();
- if(null != tAppUserCar){
+ if (null != tAppUserCar) {
myChargingOrderInfo.setLicensePlate(tAppUserCar.getLicensePlate());
- }else{
+ } else {
myChargingOrderInfo.setLicensePlate("无");
}
- }else{
+ } else {
myChargingOrderInfo.setLicensePlate(chargingOrder.getPlateNum());
}
- myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
- myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
+ if (null != chargingOrder.getStartTime()) {
+ myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
+ }
+ if (null != chargingOrder.getEndTime()) {
+ myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
+ }
myChargingOrderInfo.setOrderAmount(chargingOrder.getOrderAmount());
myChargingOrderInfo.setPaymentAmount(chargingOrder.getPaymentAmount());
myChargingOrderInfo.setRechargeAmount(chargingOrder.getRechargeAmount());
@@ -295,14 +324,14 @@
.orderByAsc(TChargingOrderAccountingStrategy::getStartTime)
);
myChargingOrderInfo.setStageCost(stageCost);
- List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
- if(null != dataList){
+ List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
+ if (null != dataList) {
//在MongoDB中获取数据
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
List<UploadRealTimeMonitoringData> dataLists = new ArrayList<>();
String t = "";
for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : dataList) {
- if(!sdf.format(uploadRealTimeMonitoringData.getCreate_time()).equals(t)){
+ if (!sdf.format(uploadRealTimeMonitoringData.getCreate_time()).equals(t)) {
dataLists.add(uploadRealTimeMonitoringData);
t = sdf.format(uploadRealTimeMonitoringData.getCreate_time());
}
@@ -324,7 +353,7 @@
myChargingOrderInfo.setCurrentAndVoltage(currentAndVoltage);
//在MongoDB中获取数据
List<Integer> soc = dataLists.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList());
- List<BigDecimal> po = dataLists.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)).collect(Collectors.toList());
+ List<BigDecimal> po = dataLists.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000), 2, RoundingMode.HALF_DOWN)).collect(Collectors.toList());
List<Map<String, Object>> power = new ArrayList<>();
for (int i = 0; i < time.size(); i++) {
Map<String, Object> map = new HashMap<>();
@@ -338,12 +367,16 @@
myChargingOrderInfo.setPower(power);
}
myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L < System.currentTimeMillis() ? 0 : 1);
+ long count = orderAppealService.count(Wrappers.lambdaQuery(TOrderAppeal.class)
+ .eq(TOrderAppeal::getOrderId, id));
+ myChargingOrderInfo.setIsAppeal(count > 0 ? 0 : 1);
return myChargingOrderInfo;
}
/**
* 获取待开票订单列表
+ *
* @param query
* @return
*/
@@ -377,11 +410,11 @@
/**
* 充电支付
+ *
* @param addChargingOrder
* @return
*/
@Override
- @GlobalTransactional(rollbackFor = Exception.class)
public AjaxResult paymentChargingOrder(AddChargingOrder addChargingOrder) {
Long userId = tokenService.getLoginUserApplet().getUserId();
TAppUser appUser = appUserClient.getUserById(userId).getData();
@@ -390,22 +423,32 @@
.eq(TChargingOrder::getRechargePaymentStatus, 1).eq(TChargingOrder::getDelFlag, 0));
for (TChargingOrder tChargingOrder : list) {
Integer rechargePaymentType = tChargingOrder.getRechargePaymentType();
- if(1 == rechargePaymentType){
+ if (1 == rechargePaymentType) {
NotifyV3PayDecodeRespBody data = wxPaymentClient.queryOrderInfo(tChargingOrder.getCode()).getData();
- if(null != data){
+ if (null != data) {
String trade_state = data.getTrade_state();
//支付失败,删除无效的订单
- if(trade_state.equals("REFUND") || trade_state.equals("NOTPAY") || trade_state.equals("REVOKED") || trade_state.equals("PAYERROR")){
+ if (trade_state.equals("REFUND") || trade_state.equals("NOTPAY") || trade_state.equals("REVOKED") || trade_state.equals("PAYERROR")) {
this.removeById(tChargingOrder.getId());
}
}
}
- if(2 == rechargePaymentType){
+ if (2 == rechargePaymentType) {
AliQueryOrder data = aliPaymentClient.query(tChargingOrder.getCode()).getData();
- if(null != data){
+ if (null != data) {
//支付失败,删除无效的订单
String tradeStatus = data.getTradeStatus();
- if(null != tradeStatus && tradeStatus.equals("TRADE_CLOSED")){
+ if (null != tradeStatus && tradeStatus.equals("TRADE_CLOSED")) {
+ this.removeById(tChargingOrder.getId());
+ }
+ }
+ }
+ if (3 == rechargePaymentType) {
+ AliQueryOrder data = h5AliPaymentClient.query(tChargingOrder.getCode()).getData();
+ if (null != data) {
+ //支付失败,删除无效的订单
+ String tradeStatus = data.getTradeStatus();
+ if (null != tradeStatus && tradeStatus.equals("TRADE_CLOSED")) {
this.removeById(tChargingOrder.getId());
}
}
@@ -414,40 +457,55 @@
//检查当前枪是否是正在使用中
TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, addChargingOrder.getId())
- .in(TChargingOrder::getStatus, Arrays.asList(1, 2, 3)).eq(TChargingOrder::getDelFlag, 0));
- if(null != one){
+ .in(TChargingOrder::getStatus, Arrays.asList(3)).eq(TChargingOrder::getDelFlag, 0));
+ if (null != one) {
return AjaxResult.error("充电枪正在充电中,启动失败");
}
//查询当前充电枪是否有正在支付的订单
one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, addChargingOrder.getId())
.eq(TChargingOrder::getAppUserCarId, userId).eq(TChargingOrder::getRechargePaymentStatus, 1).eq(TChargingOrder::getDelFlag, 0));
- if(null != one){
+ if (null != one) {
//查询三方支付数据,支付中直接结束三方订单
- if(1 == one.getRechargePaymentType()){
+ if (1 == one.getRechargePaymentType()) {
NotifyV3PayDecodeRespBody data = wxPaymentClient.queryOrderInfo(one.getCode()).getData();
- if(null != data){
+ if (null != data) {
String trade_state = data.getTrade_state();
//支付失败,删除无效的订单
- if(trade_state.equals("REFUND") || trade_state.equals("NOTPAY") || trade_state.equals("REVOKED") || trade_state.equals("PAYERROR")){
+ if (trade_state.equals("REFUND") || trade_state.equals("NOTPAY") || trade_state.equals("REVOKED") || trade_state.equals("PAYERROR")) {
this.removeById(one.getId());
- }else{
+ } else {
//结束第三方支付,删除订单
wxPaymentClient.close(one.getCode());
this.removeById(one.getId());
}
}
}
- if(2 == one.getRechargePaymentType()){
+ if (2 == one.getRechargePaymentType()) {
AliQueryOrder data = aliPaymentClient.query(one.getCode()).getData();
- if(null != data){
+ if (null != data) {
String trade_state = data.getTradeStatus();
//支付失败,删除无效的订单
- if(trade_state.equals("TRADE_CLOSED")){
+ if (trade_state.equals("TRADE_CLOSED")) {
this.removeById(one.getId());
}
- if(trade_state.equals("WAIT_BUYER_PAY")){
+ if (trade_state.equals("WAIT_BUYER_PAY")) {
//结束第三方支付,删除订单
aliPaymentClient.close(one.getCode());
+ this.removeById(one.getId());
+ }
+ }
+ }
+ if (3 == one.getRechargePaymentType()) {
+ AliQueryOrder data = h5AliPaymentClient.query(one.getCode()).getData();
+ if (null != data) {
+ String trade_state = data.getTradeStatus();
+ //支付失败,删除无效的订单
+ if (trade_state.equals("TRADE_CLOSED")) {
+ this.removeById(one.getId());
+ }
+ if (trade_state.equals("WAIT_BUYER_PAY")) {
+ //结束第三方支付,删除订单
+ h5AliPaymentClient.close(one.getCode());
this.removeById(one.getId());
}
}
@@ -464,9 +522,9 @@
chargingOrder.setOrderClassification(1);
chargingOrder.setAppUserId(userId);
chargingOrder.setAppUserCarId(addChargingOrder.getAppUserCarId());
- if(null != addChargingOrder.getAppUserCarId()){
+ if (null != addChargingOrder.getAppUserCarId()) {
TAppUserCar userCar = appUserCarClient.getCarById(addChargingOrder.getAppUserCarId().toString()).getData();
- if(null != userCar){
+ if (null != userCar) {
chargingOrder.setPlateNum(userCar.getLicensePlate());
}
}
@@ -485,20 +543,20 @@
Site site = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData().get(0);
Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
- if(null == accountingStrategyId){
+ if (null == accountingStrategyId) {
//查询站点上面的计费策略
accountingStrategyId = site.getAccountingStrategyId();
}
TAccountingStrategy accountingStrategy = accountingStrategyClient.getAccountingStrategyById(accountingStrategyId).getData();
//直营站点才可以享受会员折扣
- if(null != appUser.getVipId() && 1 == site.getBusinessCategory()){
+ if (null != appUser.getVipId() && 1 == site.getBusinessCategory()) {
TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
BigDecimal discount = null;
- if(1 == vip.getType()){
+ if (1 == vip.getType()) {
//普通会员折扣使用积分策略上的折扣,且有最高优惠金额
discount = accountingStrategy.getDiscount();
- }else{
+ } else {
//内部会员使用会员信息设置的折扣,没有最高优惠金额
discount = vip.getDiscount();
}
@@ -506,15 +564,15 @@
getAppUserVipDetail.setAppUserId(appUser.getId());
getAppUserVipDetail.setVipId(appUser.getVipId());
TAppUserVipDetail vipDetail = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
- if(null != vipDetail){
+ if (null != vipDetail) {
Integer chargeNum = vipDetail.getChargeNum();
- if(0 < chargeNum){
+ if (0 < chargeNum) {
chargingOrder.setVipDiscount(discount);
}
}
}
this.save(chargingOrder);
-
+
//添加订单的计费策略
List<TAccountingStrategyDetail> strategyDetailList = accountingStrategyDetailClient.getListByAccountingStrategyId(accountingStrategyId).getData();
AccountingStrategyOrder accountingStrategyOrder = new AccountingStrategyOrder();
@@ -529,10 +587,10 @@
list1.add(accountingStrategyDetailOrder);
}
accountingStrategyDetailOrderService.saveBatch(list1);
-
+
//会员优惠折扣将其计入增加充电时长(增加总充电金额)
//如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
- if(1 == addChargingOrder.getPaymentType()){
+ if (1 == addChargingOrder.getPaymentType()) {
PaymentOrder paymentOrder = new PaymentOrder();
paymentOrder.setCode(chargingOrder.getCode());
paymentOrder.setAmount(addChargingOrder.getPaymentAmount());
@@ -542,7 +600,7 @@
Map<String, Object> data = wxPaymentClient.orderPay(paymentOrder).getData();
return AjaxResult.success(data);
}
- if(2 == addChargingOrder.getPaymentType()){
+ if (2 == addChargingOrder.getPaymentType()) {
AliPaymentReq req = new AliPaymentReq();
req.setOutTradeNo(chargingOrder.getCode());
req.setTotalAmount(addChargingOrder.getPaymentAmount().toString());
@@ -551,8 +609,22 @@
req.setBody("充电充值");
req.setNotifyUrl("/payment/ali/callBack");
AliPaymentResp data = aliPaymentClient.payment(req).getData();
- if(null != data){
+ if (null != data) {
return AjaxResult.success(data);
+ }
+ }
+ if (3 == addChargingOrder.getPaymentType()) {
+ AliPaymentReq req = new AliPaymentReq();
+ req.setOutTradeNo(chargingOrder.getCode());
+ req.setTotalAmount(addChargingOrder.getPaymentAmount().toString());
+ req.setSubject("充电充值");
+ req.setBuyerOpenId(appUser.getAliOpenid());
+ req.setBody("充电充值");
+ req.setNotifyUrl("/payment/aliH5/callBack");
+ req.setReturnUrl(addChargingOrder.getReturnUrl());
+ String data = h5AliPaymentClient.payment(req).getData();
+ if (StringUtils.hasLength(data)) {
+ return AjaxResult.success("操作成功", data);
}
}
throw new RuntimeException("无效的支付方式");
@@ -561,24 +633,24 @@
/**
* 支付成功后的回调处理逻辑
- * @param paymentType 支付方式:1=微信,2=支付宝
- * @param out_trade_no 业务流水号
+ *
+ * @param paymentType 支付方式:1=微信,2=支付宝
+ * @param out_trade_no 业务流水号
* @param transaction_id 三方支付流水号
- * @param attach 附加数据
+ * @param attach 附加数据
* @return
*/
@Override
- @GlobalTransactional(rollbackFor = Exception.class)
public AjaxResult chargingOrderCallback(Integer paymentType, String out_trade_no, String transaction_id, String attach) {
TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, out_trade_no));
- if(chargingOrder.getRechargePaymentStatus() == 2){
+ if (chargingOrder.getRechargePaymentStatus() == 2) {
return AjaxResult.success();
}
chargingOrder.setRechargePaymentStatus(2);
chargingOrder.setRechargeSerialNumber(transaction_id);
chargingOrder.setStatus(2);
chargingOrder.setPayTime(LocalDateTime.now());
-
+
//添加安全检测数据到缓存中,每步安全检测完成后需要更新缓存数据
PreChargeCheck preChargeCheck = new PreChargeCheck();
preChargeCheck.setElectronicLockLock(false);
@@ -606,12 +678,12 @@
TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
//判断会员是否还有充电优惠次数,计算会员优惠的折扣金额
- if(null != appUser.getVipId()){
+ if (null != appUser.getVipId()) {
GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
getAppUserVipDetail.setVipId(appUser.getVipId());
TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
- if(null != data && data.getChargeNum() > 0){
+ if (null != data && data.getChargeNum() > 0) {
//计算折扣
List<AccountingStrategyDetailOrder> list = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
list.get(list.size() - 1).setEndTime("23:59");
@@ -622,14 +694,14 @@
Integer start = Integer.valueOf(accountingStrategyDetailOrder.getStartTime().replaceAll(":", ""));
Integer end = Integer.valueOf(accountingStrategyDetailOrder.getEndTime().replaceAll(":", ""));
String[] split = accountingStrategyDetailOrder.getEndTime().split(":");
- if(sta || (now >= start && now < end)){
+ if (sta || (now >= start && now < end)) {
sta = true;
Calendar end_calendar = Calendar.getInstance();
end_calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
end_calendar.set(Calendar.MINUTE, Integer.valueOf(split[1]));
//到此策略结束的秒数
- if(null == nowTimeMillis){
+ if (null == nowTimeMillis) {
String[] split1 = accountingStrategyDetailOrder.getStartTime().split(":");
Calendar start_calendar = Calendar.getInstance();
start_calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
@@ -645,44 +717,45 @@
BigDecimal s_server_amount = s_degrees.multiply(accountingStrategyDetailOrder.getServiceCharge());
//计算剩余金额能充多长时间的电
long times = rechargeAmount1.divide(s_total_amount, 0, RoundingMode.DOWN).longValue();
- if(times > m){
+ if (times > m) {
//充电时间跨度两个计费策略,需要继续对下一个策略进行计算
- serviceCharge = s_server_amount.multiply(new BigDecimal(m));
+ serviceCharge = serviceCharge.add(s_server_amount.multiply(new BigDecimal(m)));
rechargeAmount1 = rechargeAmount1.subtract(s_total_amount.multiply(new BigDecimal(m)));
- if(null != discount){
- discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount)));
- }
nowTimeMillis = null;
- }else{
- serviceCharge = s_server_amount.multiply(new BigDecimal(times));
- if(null != discount){
- discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount)));
- }
+ } else {
+ serviceCharge = serviceCharge.add(s_server_amount.multiply(new BigDecimal(times)));
break;
}
}
}
- if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){
+ if (null != discount) {
+ discountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(discount));
+ }
+
+ if (discountAmount.compareTo(BigDecimal.ZERO) >= 0) {
//计算会员最大优惠金额
TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
BigDecimal maximumDeduction = vip.getMaximumDeduction();
//普通会员有最高优惠限制
- if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){
+ if (vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0) {
discountAmount = maximumDeduction;
}
}
discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN);
+ if (discountAmount.compareTo(BigDecimal.ZERO) >= 0) {
+ data.setChargeNum(data.getChargeNum() - 1);
+ appUserVipDetailClient.updateAppUserVipDetail(data);
+ }
}
}
-
//机子上显示的金额为用户充值的金额+会员折扣金额
BigDecimal account_balance = chargingOrder.getRechargeAmount().add(discountAmount).setScale(4, RoundingMode.HALF_EVEN);
chargingOrder.setChargeAmount(account_balance);
chargingOrder.setVipDiscountAmount(discountAmount);
this.updateById(chargingOrder);
-
-
+
+
TChargingPile chargingPile = chargingPileClient.getChargingPileById(tChargingGun.getChargingPileId()).getData();
//调用远程启动充电消息
PlatformStartCharging platformStartCharging = new PlatformStartCharging();
@@ -695,41 +768,42 @@
log.info(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString());
sendMessageClient.platformStartCharging(platformStartCharging);
- //异步线程检测远程启动的应答结果。如果失败,则需要全额退款
- Long id = chargingOrder.getId();
- //执行5分钟的定时任务检测
- ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
- scheduler.scheduleAtFixedRate(()->{
- if(timingDetection(id)){
- scheduler.shutdown();
- }
- }, 5, 1, TimeUnit.SECONDS);
+// //异步线程检测远程启动的应答结果。如果失败,则需要全额退款
+// Long id = chargingOrder.getId();
+// //执行5分钟的定时任务检测
+// ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+// scheduler.scheduleAtFixedRate(()->{
+// if(timingDetection(id)){
+// scheduler.shutdown();
+// }
+// }, 5, 1, TimeUnit.SECONDS);
return AjaxResult.success();
}
/**
* 定时检测mongodb数据库数据
+ *
* @param id
* @return
*/
- public boolean timingDetection(Long id){
+ public boolean timingDetection(Long id) {
TChargingOrder chargingOrder = this.getById(id);
- if(chargingOrder.getStatus() != 2){
+ if (chargingOrder.getStatus() != 2) {
return true;
}
String code = chargingOrder.getCode();
String key = "AQJC_" + chargingOrder.getChargingGunId();
- List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
+ List<PlatformStartChargingReply> data = platformStartChargingReplyService.getPlatformStartChargingReply(code);
log.info(code + ":-------------------开始检查调起充电结果-------------------" + data.toString());
- if(data.size() != 0){
+ if (data.size() != 0) {
PlatformStartChargingReply platformStartChargingReply = data.get(1);
Integer startup_result = platformStartChargingReply.getStartup_result();
Integer failure_cause = platformStartChargingReply.getFailure_cause();
Integer counter = counter_map.get(code);
PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
//5分钟内还未插枪则取消充电,退回金额。
- if(failure_cause == 5 && (null == counter || counter < 300)){
+ if (failure_cause == 5 && (null == counter || counter < 1800)) {
counter = (null == counter ? 0 : counter) + 1;
counter_map.put(code, counter);
//启动失败
@@ -741,36 +815,42 @@
//清除计时器中的无效数据
counter_map.remove(code);
- TChargingOrder order = new TChargingOrder();
- order.setId(id);
- order.setAppUserId(chargingOrder.getAppUserId());
- if(0 == startup_result){
+ if (0 == startup_result) {
//启动失败
preChargeCheck1.setStartupSuccess(3);
preChargeCheck1.setFailureCause(failure_cause);
//启动失败后取消订单,退款操作
refund(code);
- order.setStatus(-1);
- order.setEndMode(0);
- }else{
+ chargingOrder.setStatus(-1);
+ chargingOrder.setEndMode(0);
+ } else {
//启动成功
preChargeCheck1.setStartupSuccess(2);
- order.setStatus(3);
- order.setStartTime(LocalDateTime.now());
+ chargingOrder.setStatus(3);
+ chargingOrder.setStartTime(LocalDateTime.now());
}
- this.updateById(order);
+ this.updateById(chargingOrder);
+ if (chargingOrder.getStatus() == 3) {
+ //推送监管平台订单状态
+ new Thread(() -> {
+ ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
+ BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
+ chargingMessageClient.pushOrderStatus(chargingOrderVo);
+ }).start();
+ }
+
redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
//推送三方平台订单状态
- if(2 == chargingOrder.getOrderSource()){
+ if (2 == chargingOrder.getOrderSource()) {
tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
}
return true;
- }else{
+ } else {
Integer counter = boot_failed_map.get(code);
log.info(code + ":-------------------未上传开启充电结果-------------------" + counter);
PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
//5分钟内未启动成功,退回金额。
- if(null == counter || counter < 300){
+ if (null == counter || counter < 1800) {
counter = (null == counter ? 0 : counter) + 1;
boot_failed_map.put(code, counter);
//启动失败
@@ -795,7 +875,7 @@
this.updateById(order);
redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
//推送三方平台订单状态
- if(2 == chargingOrder.getOrderSource()){
+ if (2 == chargingOrder.getOrderSource()) {
tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
}
return true;
@@ -805,16 +885,17 @@
/**
* 修改安全检测数据
+ *
* @param securityDetection
*/
@Override
- public void securityDetection(SecurityDetectionVO securityDetection){
+ public void securityDetection(SecurityDetectionVO securityDetection) {
GetChargingGunByCode code = new GetChargingGunByCode();
code.setCharging_pile_code(securityDetection.getCharging_pile_code());
code.setCharging_gun_code(securityDetection.getCharging_gun_code());
TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData();
PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingGun.getId());
- if(null != preChargeCheck1){
+ if (null != preChargeCheck1) {
preChargeCheck1.setElectronicLockLock(true);
preChargeCheck1.setInsulationTesting(true);
preChargeCheck1.setSecureConnectionDetection(securityDetection.getSecure_connection() == 1);
@@ -824,6 +905,7 @@
/**
* 启动充电应答
+ *
* @param message
*/
@Override
@@ -831,17 +913,17 @@
Integer startup_result = message.getStartup_result();
Integer failure_cause = message.getFailure_cause();
TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, message.getTransaction_serial_number()));
- if(order.getStatus() != 2){
+ if (order.getStatus() != 2) {
return;
}
String code = order.getCode();
- PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + order.getChargingGunId());
- if(null != preChargeCheck1){
+ PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + order.getChargingGunId());
+ if (null != preChargeCheck1) {
preChargeCheck1.setElectronicLockLock(true);
preChargeCheck1.setInsulationTesting(true);
preChargeCheck1.setStartupSuccess(1);
}
- if(0 == startup_result){
+ if (0 == startup_result) {
//启动失败
preChargeCheck1.setStartupSuccess(3);
preChargeCheck1.setFailureCause(failure_cause);
@@ -849,7 +931,7 @@
refund(code);
order.setStatus(-1);
order.setEndMode(0);
- }else{
+ } else {
//启动成功
preChargeCheck1.setStartupSuccess(2);
order.setStatus(3);
@@ -858,12 +940,21 @@
chargingGun.setStatus(4);
chargingGunClient.updateChargingGunById(chargingGun);
//推送状态给三方平台
- tcecClient.pushChargingGunStatus(chargingGun.getId(), chargingGun.getStatus());
+ tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus());
}
redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
this.updateById(order);
+
+ if (3 == order.getStatus()) {
+ //推送监管平台订单状态
+ new Thread(() -> {
+ ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
+ BeanUtils.copyProperties(order, chargingOrderVo);
+ chargingMessageClient.pushOrderStatus(chargingOrderVo);
+ }).start();
+ }
//推送三方平台启动充电结果
- if(2 == order.getOrderSource()){
+ if (2 == order.getOrderSource()) {
StartChargeResult result = new StartChargeResult();
result.setStartChargeSeq(order.getStartChargeSeq());
result.setStartChargeSeqStat(3 == order.getStatus() ? 2 : 4);
@@ -879,12 +970,13 @@
/**
* 启动失败后的退款,取消订单
+ *
* @param code
*/
- public void refund(String code){
+ public void refund(String code) {
log.info(code + ":-------------------充电启动失败,执行退款-------------------");
TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
- if(chargingOrder.getOrderSource() == 1 && chargingOrder.getStatus() == 2){
+ if (chargingOrder.getOrderSource() == 1 && chargingOrder.getStatus() == 2) {
Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
//构建退款明细
@@ -903,7 +995,7 @@
chargingOrderRefund.setRefundRemark("全额退款");
chargingOrderRefund.setRefundTotalAmount(rechargeAmount);
chargingOrderRefund.setPayAmount(rechargeAmount);
- if(1 == rechargePaymentType){
+ if (1 == rechargePaymentType) {
WxPaymentRefundModel model = new WxPaymentRefundModel();
model.setOut_trade_no(chargingOrder.getCode());
model.setOut_refund_no(chargingOrderRefund.getRefundCode());
@@ -914,19 +1006,146 @@
amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
amount.setCurrency("CNY");
model.setAmount(amount);
- R<String> orderR = wxPaymentClient.refundOrderR(model);
- if(200 == orderR.getCode()){
+ R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
+ if (200 == orderR.getCode()) {
chargingOrderRefundService.save(chargingOrderRefund);
+ //手续费
+ Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
+ Object refund_fee1 = amount1.get("refund_fee");
+ BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+ chargingOrderRefund.setRefundFee(refund_fee);
+ chargingOrderRefundService.updateById(chargingOrderRefund);
+ //回退会员折扣次数
+ if (chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0) {
+ TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+ GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
+ getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
+ getAppUserVipDetail.setVipId(appUser.getVipId());
+ TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
+ if (null != data) {
+ data.setChargeNum(data.getChargeNum() + 1);
+ appUserVipDetailClient.updateAppUserVipDetail(data);
+ }
+ }
}
}
- if(2 == rechargePaymentType){
+ if (2 == rechargePaymentType) {
RefundReq dto = new RefundReq();
dto.setOutTradeNo(chargingOrder.getCode());
dto.setOutRequestNo(chargingOrderRefund.getCode());
dto.setRefundAmount(rechargeAmount.toString());
dto.setRefundReason("充电失败,取消充电订单");
RefundResp resp = aliPaymentClient.refund(dto).getData();
- if(null != resp){
+ if (null != resp) {
+ chargingOrderRefundService.save(chargingOrderRefund);
+ //回退会员折扣次数
+ if (chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0) {
+ TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+ GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
+ getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
+ getAppUserVipDetail.setVipId(appUser.getVipId());
+ TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
+ if (null != data) {
+ data.setChargeNum(data.getChargeNum() + 1);
+ appUserVipDetailClient.updateAppUserVipDetail(data);
+ }
+ }
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+ }
+ }
+ if (3 == rechargePaymentType) {
+ RefundReq dto = new RefundReq();
+ dto.setOutTradeNo(chargingOrder.getRechargeSerialNumber());
+ dto.setOutRequestNo(chargingOrderRefund.getCode());
+ dto.setRefundAmount(rechargeAmount.toString());
+ dto.setRefundReason("充电失败,取消充电订单");
+ RefundResp resp = h5AliPaymentClient.refund(dto).getData();
+ if (null != resp && "10000".equals(resp.getCode())) {
+ chargingOrderRefundService.save(chargingOrderRefund);
+ //回退会员折扣次数
+ if (chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO) > 0) {
+ TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+ GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
+ getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
+ getAppUserVipDetail.setVipId(appUser.getVipId());
+ TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
+ if (null != data) {
+ data.setChargeNum(data.getChargeNum() + 1);
+ appUserVipDetailClient.updateAppUserVipDetail(data);
+ }
+ }
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+ }
+ }
+
+ }
+ }
+
+
+ public void refund1(String code, BigDecimal money) {
+ log.info(code + ":-------------------充电成功,执行手动退款-------------------");
+ TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
+ if (chargingOrder.getOrderSource() == 1) {
+ BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
+ Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
+ //构建退款明细
+ TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
+ chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+ chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue());
+ chargingOrderRefund.setRefundAmount(money);
+ chargingOrderRefund.setRefundStatus(1);
+ chargingOrderRefund.setPayType(rechargePaymentType);
+ chargingOrderRefund.setRefundStatus(1);
+ chargingOrderRefund.setCode(code);
+ chargingOrderRefund.setRefundTitle("充电完成退款");
+ chargingOrderRefund.setRefundContent("充电完成退款");
+ chargingOrderRefund.setRefundReason("充电完成退款");
+ chargingOrderRefund.setRefundRemark("充电完成退款,手动退款");
+ chargingOrderRefund.setRefundTotalAmount(money);
+ chargingOrderRefund.setPayAmount(money);
+ if (1 == rechargePaymentType) {
+ WxPaymentRefundModel model = new WxPaymentRefundModel();
+ model.setOut_trade_no(chargingOrder.getCode());
+ model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+ model.setReason("充电完成退款");
+ model.setNotify_url("/payment/wx/refund/notify");
+ WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+ amount.setRefund(money.multiply(new BigDecimal(100)).intValue());
+ amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+ amount.setCurrency("CNY");
+ model.setAmount(amount);
+ R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
+ if (200 == orderR.getCode()) {
+ chargingOrderRefundService.save(chargingOrderRefund);
+ //手续费
+ Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
+ Object refund_fee1 = amount1.get("refund_fee");
+ BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+ chargingOrderRefund.setRefundFee(refund_fee);
+ chargingOrderRefundService.updateById(chargingOrderRefund);
+ }
+ }
+ if (2 == rechargePaymentType) {
+ RefundReq dto = new RefundReq();
+ dto.setOutTradeNo(chargingOrder.getCode());
+ dto.setOutRequestNo(chargingOrderRefund.getCode());
+ dto.setRefundAmount(money.toString());
+ dto.setRefundReason("充电完成退款");
+ RefundResp resp = aliPaymentClient.refund(dto).getData();
+ if (null != resp) {
chargingOrderRefundService.save(chargingOrderRefund);
try {
Thread.sleep(1000);
@@ -936,20 +1155,38 @@
chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
}
}
-
+ if (3 == rechargePaymentType) {
+ RefundReq dto = new RefundReq();
+ dto.setOutTradeNo(chargingOrder.getRechargeSerialNumber());
+ dto.setOutRequestNo(chargingOrderRefund.getCode());
+ dto.setRefundAmount(money.toString());
+ dto.setRefundReason("充电完成退款");
+ RefundResp resp = h5AliPaymentClient.refund(dto).getData();
+ if (null != resp && "10000".equals(resp.getCode())) {
+ chargingOrderRefundService.save(chargingOrderRefund);
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+ }
+ }
+
}
}
-
-
+
+
/**
* 启动失败后微信退款的回调处理
+ *
* @param out_refund_no
* @param refund_id
* @param tradeState
* @param success_time
* @return
*/
- public AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time){
+ public AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time) {
TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getRefundCode, out_refund_no));
one.setRefundSerialNumber(refund_id);
one.setRefundStatus(2);
@@ -966,12 +1203,11 @@
this.updateById(chargingOrder);
return AjaxResult.success();
}
-
-
-
-
+
+
/**
* 获取充电中的详情
+ *
* @param id
* @return
*/
@@ -980,7 +1216,7 @@
Long userId = tokenService.getLoginUserApplet().getUserId();
TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, userId).eq(TChargingOrder::getChargingGunId, id)
.eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getDelFlag, 0).orderByDesc(TChargingOrder::getStartTime).last(" limit 0, 1"));
- if(null == one || !one.getAppUserId().equals(userId)){
+ if (null == one || !one.getAppUserId().equals(userId)) {
return null;
}
ChargingDetails chargingDetails = new ChargingDetails();
@@ -992,8 +1228,8 @@
chargingDetails.setCode(one.getCode());
chargingDetails.setStatus(one.getStatus());
chargingDetails.setChargingCost(one.getResidualAmount());
- UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData();
- if(null != data){
+ UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(one.getCode());
+ if (null != data) {
chargingDetails.setChargeCurrent(data.getOutput_current());
chargingDetails.setChargeVoltage(data.getOutput_voltage());
BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000), new MathContext(4, RoundingMode.HALF_EVEN));
@@ -1004,7 +1240,7 @@
Integer h = Integer.valueOf(data.getCumulative_charging_time() / 60);
Integer m = Integer.valueOf(data.getCumulative_charging_time() % 60);
chargingDetails.setChargedTime(String.format("%02d", h) + ":" + String.format("%02d", m));
- if(null != one.getAppUserCarId()){
+ if (null != one.getAppUserCarId()) {
TAppUserCar appUserCar = appUserCarClient.getCarById(one.getAppUserCarId().toString()).getData();
// 续航 = 续航里程 * soc
BigDecimal multiply = new BigDecimal(data.getSoc()).divide(new BigDecimal(100)).multiply(new BigDecimal(appUserCar.getEndurance()));
@@ -1017,36 +1253,34 @@
/**
* 停止充电操作
+ *
* @param id 订单id
* @return
*/
@Override
- @GlobalTransactional(rollbackFor = Exception.class)
public AjaxResult stopCharging(String id) {
TChargingOrder order = this.getById(id);
Integer status = order.getStatus();
- if(status != 3){
+ if (status != 3) {
return AjaxResult.error("还未开始充电");
}
- if(status == 4 || status == 5){
+ if (status == 4 || status == 5) {
return AjaxResult.error("不能重复操作");
}
Long userId = tokenService.getLoginUserApplet().getUserId();
- if(!order.getAppUserId().equals(userId)){
+ if (!order.getAppUserId().equals(userId)) {
return AjaxResult.error("权限不足");
}
- TChargingOrder chargingOrder = new TChargingOrder();
- chargingOrder.setId(Long.valueOf(id));
- chargingOrder.setAppUserId(order.getAppUserId());
- chargingOrder.setEndTime(LocalDateTime.now());
- chargingOrder.setStatus(4);
- chargingOrder.setEndMode(1);
- this.updateById(chargingOrder);
+ order.setEndTime(LocalDateTime.now());
+ order.setStatus(4);
+ order.setEndMode(1);
+ this.updateById(order);
+
String code1 = order.getCode();
TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
//异步线程处理停机
ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1);
- cachedThreadPool.execute(()->{
+ cachedThreadPool.execute(() -> {
//调用硬件停止充电,停止成功后开始计算费用退款
TChargingPile chargingPile = chargingPileClient.getChargingPileById(order.getChargingPileId()).getData();
PlatformStopCharging platformStopCharging = new PlatformStopCharging();
@@ -1055,9 +1289,15 @@
sendMessageClient.platformStopCharging(platformStopCharging);
log.info(code1 + ":-------------------远程停止充电请求-------------------");
log.info(platformStopCharging.toString());
+
+ //推送监管平台订单状态和订单详情
+ ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
+ BeanUtils.copyProperties(order, chargingOrderVo);
+ chargingMessageClient.pushOrderInfo(chargingOrderVo);
+ chargingMessageClient.pushOrderStatus(chargingOrderVo);
});
//推送三方平台
- if(2 == order.getOrderSource()){
+ if (2 == order.getOrderSource()) {
tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
}
@@ -1067,9 +1307,10 @@
/**
* 结束充电后处理用户标签数据
+ *
* @param chargingOrder
*/
- public void editUserTag(TChargingOrder chargingOrder){
+ public void editUserTag(TChargingOrder chargingOrder) {
//处理用户标签数据
List<TUserTag> data = userTagClient.getAllUserTag().getData();
//累计充电次数
@@ -1085,7 +1326,7 @@
String end = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
.eq(TChargingOrder::getRechargePaymentStatus, 2).between(TChargingOrder::getStartTime, start, end).eq(TChargingOrder::getDelFlag, 0));
- if(null == data1 && count1 >= times){
+ if (null == data1 && count1 >= times) {
data1 = new TAppUserTag();
data1.setAppUserId(chargingOrder.getAppUserId());
data1.setUserTagId(tUserTag.getId());
@@ -1109,7 +1350,7 @@
String end = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
.eq(TChargingOrder::getRechargePaymentStatus, 2).between(TChargingOrder::getStartTime, start, end).eq(TChargingOrder::getDelFlag, 0));
- if(null == data1 && count1 >= times){
+ if (null == data1 && count1 >= times) {
data1 = new TAppUserTag();
data1.setAppUserId(chargingOrder.getAppUserId());
data1.setUserTagId(tUserTag.getId());
@@ -1122,46 +1363,47 @@
/**
* 推荐奖励(被推荐首单奖励)
+ *
* @param chargingOrder
*/
- public void referralReward(TChargingOrder chargingOrder){
+ public void referralReward(TChargingOrder chargingOrder) {
//处理推荐奖励(被推荐首单奖励)
TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
long count = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
.in(TChargingOrder::getStatus, Arrays.asList(4, 5)).eq(TChargingOrder::getDelFlag, 0));
- if(null != appUser.getInviteUserId() && 1 == count){
+ if (null != appUser.getInviteUserId() && 1 == count) {
TIntegralRule integralRule = integralRuleClient.getSet().getData();
String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints();
JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints);
Integer num1 = jsonObject.getInteger("num1");
TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
- if(null != appUser1.getVipId()){
+ if (null != appUser1.getVipId()) {
TVip vip = vipClient.getInfo1(appUser1.getVipId()).getData();
Integer doubleIntegration = vip.getDoubleIntegration();
//双倍积分
- if(1 == doubleIntegration){
+ if (1 == doubleIntegration) {
num1 *= 2;
}
-
+
}
GetInviteUser query = new GetInviteUser();
query.setAppUserId(appUser1.getId());
query.setBeInvitedAppUserId(chargingOrder.getAppUserId());
TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData();
- if(null == inviteUser){
+ if (null == inviteUser) {
inviteUser = new TInviteUser();
inviteUser.setAppUserId(appUser1.getId());
inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId());
inviteUser.setAward(num1);
inviteUser.setCreateTime(LocalDateTime.now());
inviteUserClient.saveInviteUser(inviteUser);
- }else{
+ } else {
inviteUser.setAward(num1);
inviteUserClient.updateInviteUser(inviteUser);
}
- if(num1 > 0){
+ if (num1 > 0) {
TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
appUserIntegralChange.setCode(code);
@@ -1181,27 +1423,27 @@
}
-
/**
* 停止充电应答结果处理
+ *
* @param platformStopChargingReply
*/
@Override
- public void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply){
+ public void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply) {
GetChargingGunByCode code = new GetChargingGunByCode();
code.setCharging_gun_code(platformStopChargingReply.getCharging_gun_code());
code.setCharging_pile_code(platformStopChargingReply.getCharging_pile_code());
TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData();
TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, chargingGun.getId())
.orderByDesc(TChargingOrder::getEndTime).eq(TChargingOrder::getRechargePaymentStatus, 2).last(" limit 0, 1"));
- if(null != order && order.getStatus() != 4){
+ if (null != order && order.getStatus() != 4) {
return;
}
String code1 = order.getCode();
- if(0 == platformStopChargingReply.getStop_result()){
+ if (0 == platformStopChargingReply.getStop_result()) {
String failure_cause = "";
- switch (platformStopChargingReply.getFailure_cause()){
+ switch (platformStopChargingReply.getFailure_cause()) {
case 0:
failure_cause = "无";
break;
@@ -1216,7 +1458,7 @@
break;
}
log.info(code1 + ":停机失败:订单号:{},失败原因:{}", order.getCode(), failure_cause);
- }else{
+ } else {
TChargingOrder chargingOrder = new TChargingOrder();
chargingOrder.setId(order.getId());
chargingOrder.setAppUserId(order.getAppUserId());
@@ -1226,40 +1468,34 @@
}
-
-
-
-
- @Override
- public TCharingOrderVO chargingOrder(ChargingOrderQuery dto) {
+ @Override
+ public TCharingOrderVO chargingOrder(ChargingOrderQuery dto) {
TCharingOrderVO tCharingOrderVO = new TCharingOrderVO();
List<TChargingGun> allGun = chargingGunClient.getAllGun().getData();
List<TChargingPile> allPile = chargingGunClient.getAllPile().getData();
List<Site> data9 = siteClient.getSiteAll().getData();
List<TAppUser> data6 = appUserClient.getAllUser().getData();
- List<Partner> data7 = siteClient.getAllPartner().getData();
List<TAppUserCar> data4 = appUserCarClient.getAllCar().getData();
String startTime1 = null;
String startTime2 = null;
String endTime1 = null;
String endTime2 = null;
-
- if (StringUtils.hasLength(dto.getStartTime())){
+
+ if (StringUtils.hasLength(dto.getStartTime())) {
String[] split = dto.getStartTime().split(" - ");
startTime1 = split[0];
startTime2 = split[1];
}
- if (StringUtils.hasLength(dto.getEndTime())){
+ if (StringUtils.hasLength(dto.getEndTime())) {
String[] split = dto.getEndTime().split(" - ");
endTime1 = split[0];
endTime2 = split[1];
}
- PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
- PageInfo<ChargingOrderVO> pageInfo1 = new PageInfo<>(1,999999999);
-
- if (StringUtils.hasLength(dto.getPhone())){
+ PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
+
+ if (StringUtils.hasLength(dto.getPhone())) {
List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
- if (data.isEmpty()){
+ if (data.isEmpty()) {
tCharingOrderVO.setList(pageInfo);
return tCharingOrderVO;
}
@@ -1271,150 +1507,171 @@
Integer roleType = sysUser.getRoleType();
//如果没传siteId,获取当前登陆人所有的siteIds
List<Integer> siteIds = new ArrayList<>();
- if (dto.getSiteId()==null){
- if (userId != null){
+ if (dto.getSiteId() == null) {
+ if (userId != null) {
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
for (GetSiteListDTO datum : data) {
siteIds.add(datum.getId());
}
}
- }else {
+ } else {
siteIds.add(dto.getSiteId());
}
- if (siteIds.isEmpty()){
+ if (siteIds.isEmpty()) {
siteIds.add(-1);
- }else{
- if (roleType == 2){
+ } else {
+ if (roleType == 2) {
List<Integer> integers = new ArrayList<>();
for (Integer siteId : siteIds) {
// 校验有没有这个站点的权限
- List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
-
+ List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData();
+
Boolean b = t1.get(1);
- if (b){
+ if (b) {
integers.add(siteId);
}
}
siteIds = integers;
}
}
- if (siteIds.isEmpty())siteIds.add(-1);
+ if (siteIds.isEmpty()) siteIds.add(-1);
dto.setSiteIds(siteIds);
- List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
- List<ChargingOrderVO> list1 = this.baseMapper.chargingOrder(pageInfo1,dto,startTime1,startTime2,endTime1,endTime2);
- BigDecimal total = new BigDecimal("0");
- long time = 0L;
- BigDecimal income = new BigDecimal("0");
- BigDecimal electronicMoney = new BigDecimal("0");
- BigDecimal serviceMoney = new BigDecimal("0");
- BigDecimal commissionMoney = new BigDecimal("0");
- BigDecimal refundMoney = new BigDecimal("0");
- BigDecimal paymentMoney = new BigDecimal("0");
- List<String> collect2 = list.stream().map(TChargingOrder::getCode).collect(Collectors.toList());
- List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>());
-
+ List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
+ BigDecimal total = new BigDecimal("0");
+ long time = 0L;
+ BigDecimal electronicMoney = new BigDecimal("0");
+ BigDecimal serviceMoney = new BigDecimal("0");
+ BigDecimal commissionMoney = new BigDecimal("0");
+// BigDecimal refundMoney = new BigDecimal("0");
+ BigDecimal paymentMoney = new BigDecimal("0");
+ List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
+
for (ChargingOrderVO chargingOrderVO : list) {
- if (roleType == 2){
+ if (roleType == 2) {
for (Integer siteId : siteIds) {
// 校验有没有这个站点的权限
- List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
+ List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData();
chargingOrderVO.setAuthRecord(t1.get(0));
}
-
}
- chargingOrderVO.setCommissionAmount(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
- chargingOrderVO.setPlatFormMoney(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
- chargingOrderVO.setUid(chargingOrderVO.getId()+"");
- TChargingGun data3 = allGun.stream().filter(e->e.getId().equals(chargingOrderVO.getChargingGunId())).findFirst().orElse(null);
- TChargingPile data2 = allPile.stream().filter(e->e.getId().equals(chargingOrderVO.getChargingPileId())).findFirst().orElse(null);
- if (chargingOrderVO.getSiteId()!=null){
+ chargingOrderVO.setCommissionAmount(chargingOrderVO.getRechargeAmount() != null ? chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")) : new BigDecimal("0"));
+ chargingOrderVO.setPlatFormMoney(chargingOrderVO.getRechargeAmount() != null ? chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2, BigDecimal.ROUND_DOWN) : new BigDecimal("0"));
+ chargingOrderVO.setUid(chargingOrderVO.getId() + "");
+ TChargingGun data3 = allGun.stream().filter(e -> e.getId().equals(chargingOrderVO.getChargingGunId())).findFirst().orElse(null);
+ TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderVO.getChargingPileId())).findFirst().orElse(null);
+ if (chargingOrderVO.getSiteId() != null) {
List<Integer> integers = new ArrayList<>();
integers.add(chargingOrderVO.getSiteId());
Site site = data9.stream().filter(e -> e.getId().equals(chargingOrderVO.getSiteId())).findFirst().orElse(null);
- if (site!=null)chargingOrderVO.setSiteName(site.getName());
+ if (site != null) chargingOrderVO.setSiteName(site.getName());
}
- if (data2!=null && data3!=null){
- chargingOrderVO.setTerminalName(data2.getName()+"-"+data3.getName());
+ if (data2 != null && data3 != null) {
+ chargingOrderVO.setTerminalName(data2.getName() + "-" + data3.getName());
}
// 充电订单 明细记录
List<TChargingOrderAccountingStrategy> chargingOrderId = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
- if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
+ if (chargingOrderVO.getStartTime() != null && chargingOrderVO.getEndTime() != null) {
LocalDateTime startTime = chargingOrderVO.getStartTime();
LocalDateTime endTime = chargingOrderVO.getEndTime();
// 计算时间差 单位秒
long between = ChronoUnit.SECONDS.between(startTime, endTime);
chargingOrderVO.setChargingSecond(between);
-
+
+ BigDecimal electronic_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ chargingOrderVO.setElectrovalence(electronic_reduce);
+ BigDecimal service_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ if (!chargingOrderVO.getOrderSource().equals(2)) {
+ chargingOrderVO.setServiceCharge(service_reduce);
+ chargingOrderVO.setSharingAmount(BigDecimal.ZERO);
+ } else {
+ chargingOrderVO.setServiceCharge(service_reduce.multiply(new BigDecimal("0.8")));
+ chargingOrderVO.setSharingAmount(service_reduce.multiply(new BigDecimal("0.2")));
+ }
}
// 充电时段数
int size = chargingOrderId.size();
chargingOrderVO.setCount(size);
// 用户手机号
TAppUser data = data6.stream().filter(e -> e.getId().equals(chargingOrderVO.getAppUserId())).findFirst().orElse(null);
- if (data!=null){
+ if (data != null) {
// 车牌号
chargingOrderVO.setPhone(data.getPhone());
List<Long> longs = new ArrayList<>();
- if (chargingOrderVO.getAppUserCarId()!=null){
+ if (chargingOrderVO.getAppUserCarId() != null) {
longs.add(chargingOrderVO.getAppUserCarId());
TAppUserCar tAppUserCar = data4.stream().filter(e -> e.getId().equals(chargingOrderVO.getAppUserCarId())).findFirst().orElse(null);
- if (tAppUserCar!=null){
+ if (tAppUserCar != null) {
chargingOrderVO.setLicensePlate(tAppUserCar.getLicensePlate());
}
- }else{
+ } else {
chargingOrderVO.setLicensePlate(chargingOrderVO.getPlateNum());
}
-
+
}
}
-
- List<Long> orderIds = list1.stream().map(TChargingOrder::getId).collect(Collectors.toList());
- if(orderIds.isEmpty())orderIds.add(-1L);
- List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery()
- .in(TChargingOrderRefund::getChargingOrderId, orderIds)
- .eq(TChargingOrderRefund::getRefundStatus,2).list();
-
- for (ChargingOrderVO chargingOrderVO : list1) {
- paymentMoney= paymentMoney.add(chargingOrderVO.getPaymentAmount()!=null?chargingOrderVO.getPaymentAmount():new BigDecimal("0"));
- commissionMoney = commissionMoney.add(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
- if (chargingOrderVO.getChargingCapacity()!=null){
- total = total.add(chargingOrderVO.getElectricity()!=null?chargingOrderVO.getElectricity():new BigDecimal("0"));
- }
- if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
- LocalDateTime startTime = chargingOrderVO.getStartTime();
- LocalDateTime endTime = chargingOrderVO.getEndTime();
- // 计算时间差 单位秒
- long between = ChronoUnit.SECONDS.between(startTime, endTime);
- time+=between;
- }
- List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId()))
- .collect(Collectors.toList());
- for (TChargingOrderRefund tChargingOrderRefund : list2) {
- refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
- }
- electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence()!=null?chargingOrderVO.getElectrovalence():new BigDecimal("0"));
- serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge():new BigDecimal("0"));
+// List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery()
+// .eq(TChargingOrderRefund::getRefundStatus,2).list();
+
+
+ Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto, startTime1, startTime2, endTime1, endTime2);
+// for (ChargingOrderVO chargingOrderVO : list1) {
+// if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
+// continue;
+// }
+// List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
+// BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+// BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+// BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+// electronicMoney = electronicMoney.add(electronic_reduce);
+// total = total.add(chargingCapacity);
+// if (!chargingOrderVO.getOrderSource().equals(2)) {
+// serviceMoney = serviceMoney.add(service_reduce);
+// paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+// }else{
+// serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+// paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+// }
+// if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
+// LocalDateTime startTime = chargingOrderVO.getStartTime();
+// LocalDateTime endTime = chargingOrderVO.getEndTime();
+// // 计算时间差 单位秒
+// long between = ChronoUnit.SECONDS.between(startTime, endTime);
+// time+=between;
+// }
+//// List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId()))
+//// .collect(Collectors.toList());
+//// for (TChargingOrderRefund tChargingOrderRefund : list2) {
+//// refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
+//// }
+// }
+ if (null != map) {
+ tCharingOrderVO.setTotal(map.get("total") == null ? BigDecimal.ZERO : (BigDecimal) map.get("total"));
+ tCharingOrderVO.setTime(map.get("time") == null ? 0L : (Long) map.get("time"));
+ tCharingOrderVO.setIncome((map.get("paymentMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("paymentMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ tCharingOrderVO.setElectronicMoney((map.get("electronicMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("electronicMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ tCharingOrderVO.setServiceMoney((map.get("serviceMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("serviceMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ } else {
+ tCharingOrderVO.setTotal(BigDecimal.ZERO);
+ tCharingOrderVO.setTime(0L);
+ tCharingOrderVO.setIncome(BigDecimal.ZERO);
+ tCharingOrderVO.setElectronicMoney(BigDecimal.ZERO);
+ tCharingOrderVO.setServiceMoney(BigDecimal.ZERO);
}
- tCharingOrderVO.setTotal(total);
- tCharingOrderVO.setTime(time);
- tCharingOrderVO.setIncome(paymentMoney.subtract(commissionMoney));
- tCharingOrderVO.setElectronicMoney(electronicMoney);
- tCharingOrderVO.setServiceMoney(serviceMoney);
pageInfo.setRecords(list);
tCharingOrderVO.setList(pageInfo);
- return tCharingOrderVO;
- }
-
+ return tCharingOrderVO;
+ }
+
@Override
public R<PageInfo<PayOrderDto>> payOrderQuery(PayOrderQueryDto payOrderQueryDto) {
- PageInfo<PayOrderDto> pageInfo = new PageInfo<>(payOrderQueryDto.getPageCurr(),payOrderQueryDto.getPageSize());
- List<PayOrderDto> list = this.baseMapper.payOrderQuery(pageInfo,payOrderQueryDto);
+ PageInfo<PayOrderDto> pageInfo = new PageInfo<>(payOrderQueryDto.getPageCurr(), payOrderQueryDto.getPageSize());
+ List<PayOrderDto> list = this.baseMapper.payOrderQuery(pageInfo, payOrderQueryDto);
for (PayOrderDto payOrderDto : list) {
- if (payOrderDto.getType()==2||payOrderDto.getType()==3){
+ if (payOrderDto.getType() == 2 || payOrderDto.getType() == 3) {
payOrderDto.setFinalAmount(payOrderDto.getOrderAmount());
}
- if (payOrderDto.getType()==1&&payOrderDto.getStatus()==3){
+ if (payOrderDto.getType() == 1 && payOrderDto.getStatus() == 3) {
payOrderDto.setFinalAmount(payOrderDto.getOrderAmount());
payOrderDto.setOrderAmount(payOrderDto.getOrderAmount());
payOrderDto.setPaymentAmount(payOrderDto.getOrderAmount());
@@ -1423,105 +1680,117 @@
pageInfo.setRecords(list);
return R.ok(pageInfo);
}
-
+
@Override
public R<PageInfo<TChargingOrderRefund>> getRefundList(ChargingRefundDto chargingRefundDto) {
- PageInfo<TChargingOrderRefund> pageInfo = new PageInfo<>(chargingRefundDto.getPageCurr(),chargingRefundDto.getPageSize());
- List<TChargingOrderRefund> list = this.baseMapper.getRefundList(pageInfo,chargingRefundDto);
+ PageInfo<TChargingOrderRefund> pageInfo = new PageInfo<>(chargingRefundDto.getPageCurr(), chargingRefundDto.getPageSize());
+ List<TChargingOrderRefund> list = this.baseMapper.getRefundList(pageInfo, chargingRefundDto);
pageInfo.setRecords(list);
-
+
return R.ok(pageInfo);
}
-
+
@Override
public List<ChargingOrderGroup> chargingOrderGroup(ChargingPercentProvinceDto chargingPercentProvinceDto) {
-
+
return this.baseMapper.chargingOrderGroup(chargingPercentProvinceDto);
}
-
+
@Override
public List<SixChargingDto> charge(LocalDate sixBefore, List<Integer> siteIds) {
- return this.baseMapper.charge(sixBefore,siteIds);
+ return this.baseMapper.charge(sixBefore, siteIds);
}
-
+
@Override
- public List<SixCircleDto> circle(List<Integer> siteIds,LocalDate sixBefore) {
- return this.baseMapper.circle(siteIds,sixBefore);
+ public List<SixCircleDto> circle(List<Integer> siteIds, LocalDate sixBefore) {
+ return this.baseMapper.circle(siteIds, sixBefore);
}
-
+
@Override
- public Map<String, Object> countAll(LocalDate sixBefore,List<Integer> siteIds) {
- return this.baseMapper.countAll(sixBefore,siteIds);
+ public Map<String, Object> countAll(List<Integer> siteIds) {
+ return this.baseMapper.countAll(siteIds);
}
-
+
@Override
- public List<Map<String, Object>> getSumByType(List<Long> chargingOrderIds) {
- return this.baseMapper.getSumByType(chargingOrderIds);
+ public List<Map<String, Object>> getSumByType(LocalDate start, LocalDate end, List<Integer> siteIds) {
+ LocalDateTime start1 = start.atStartOfDay();
+ LocalDateTime end1 = end.atTime(LocalTime.MAX);
+ return this.baseMapper.getSumByType(start1, end1, siteIds);
}
-
+
@Override
- public List<Map<String, Object>> getDateData(List<Long> chargingOrderIds) {
- return this.baseMapper.getDateData(chargingOrderIds);
+ public List<Map<String, Object>> getDateData(LocalDate start, LocalDate end, List<Integer> siteIds) {
+ LocalDateTime start1 = start.atStartOfDay();
+ LocalDateTime end1 = end.atTime(LocalTime.MAX);
+ return this.baseMapper.getDateData(start1, end1, siteIds);
}
-
+
@Override
- public List<Map<String, Object>> getWeekData(List<Long> chargingOrderIds) {
- return this.baseMapper.getWeekData(chargingOrderIds);
+ public List<Map<String, Object>> getWeekData(LocalDate start, LocalDate end, List<Integer> siteIds) {
+ LocalDateTime start1 = start.atStartOfDay();
+ LocalDateTime end1 = end.atTime(LocalTime.MAX);
+ return this.baseMapper.getWeekData(start1, end1, siteIds);
}
-
+
@Override
- public List<Map<String, Object>> getMonthData(List<Long> chargingOrderIds) {
- return this.baseMapper.getMonthData(chargingOrderIds);
+ public List<Map<String, Object>> getMonthData(LocalDate start, LocalDate end, List<Integer> siteIds) {
+ LocalDateTime start1 = start.atStartOfDay();
+ LocalDateTime end1 = end.atTime(LocalTime.MAX);
+ return this.baseMapper.getMonthData(start1, end1, siteIds);
}
-
+
@Override
- public List<Map<String, Object>> getYearData(List<Long> chargingOrderIds) {
- return this.baseMapper.getYearData(chargingOrderIds);
+ public List<Map<String, Object>> getYearData(LocalDate start, LocalDate end, List<Integer> siteIds) {
+ LocalDateTime start1 = start.atStartOfDay();
+ LocalDateTime end1 = end.atTime(LocalTime.MAX);
+ return this.baseMapper.getYearData(start1, end1, siteIds);
}
-
+
@Resource
private SysUserClient sysUserClient;
+
+
@Override
public ChargingOrderTimeVO chargingList(ChargingListQuery dto) {
String startTime1 = null;
String startTime2 = null;
String endTime1 = null;
String endTime2 = null;
-
+
List<TChargingGun> allGun = chargingGunClient.getAllGun().getData();
List<TChargingPile> allPile = chargingGunClient.getAllPile().getData();
-
- if (StringUtils.hasLength(dto.getStartTime())){
+
+ if (StringUtils.hasLength(dto.getStartTime())) {
String[] split = dto.getStartTime().split(" - ");
startTime1 = split[0];
startTime2 = split[1];
}
ChargingOrderTimeVO chargingOrderTimeVO = new ChargingOrderTimeVO();
- if (StringUtils.hasLength(dto.getPhone())){
+ if (StringUtils.hasLength(dto.getPhone())) {
List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
- if(data!=null){
- if (!data.isEmpty()){
+ if (data != null) {
+ if (!data.isEmpty()) {
dto.setUserIds(data);
}
- }else{
+ } else {
dto.setUserIds(new ArrayList<Long>());
}
- if (dto.getUserIds().isEmpty()){
+ if (dto.getUserIds().isEmpty()) {
List<Long> carIds = dto.getUserIds();
carIds.add(-1L);
dto.setUserIds(carIds);
}
}
- if (StringUtils.hasLength(dto.getLicensePlate())){
+ if (StringUtils.hasLength(dto.getLicensePlate())) {
List<Long> data = appUserCarClient.getAppUserCarByLicensePlates(dto.getLicensePlate()).getData();
- if(data!=null){
- if (!data.isEmpty()){
+ if (data != null) {
+ if (!data.isEmpty()) {
dto.setCarIds(data);
}
- }else{
+ } else {
dto.setCarIds(new ArrayList<Long>());
}
- if (dto.getCarIds().isEmpty()){
+ if (dto.getCarIds().isEmpty()) {
List<Long> carIds = dto.getCarIds();
carIds.add(-1L);
dto.setCarIds(carIds);
@@ -1533,27 +1802,27 @@
Integer roleType = sysUser.getRoleType();
//如果没传siteId,获取当前登陆人所有的siteIds
List<Integer> siteIds = new ArrayList<>();
- if (dto.getSiteId()==null){
- if (userId != null){
+ if (dto.getSiteId() == null) {
+ if (userId != null) {
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
for (GetSiteListDTO datum : data) {
siteIds.add(datum.getId());
}
}
- }else {
+ } else {
siteIds.add(dto.getSiteId());
}
- if (siteIds.isEmpty()){
+ if (siteIds.isEmpty()) {
siteIds.add(-1);
- }else{
- if (roleType == 2){
+ } else {
+ if (roleType == 2) {
List<Integer> integers = new ArrayList<>();
for (Integer siteId : siteIds) {
// 校验有没有这个站点的权限
- List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
-
+ List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData();
+
Boolean b = t1.get(1);
- if (b){
+ if (b) {
integers.add(siteId);
}
}
@@ -1561,39 +1830,39 @@
}
}
dto.setSiteIds(siteIds);
- PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
- List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
+ PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
+ List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
List<Integer> siteIdsList = list.stream().map(ChargingOrderListVO::getSiteId).collect(Collectors.toList());
- if (siteIdsList.isEmpty())siteIdsList.add(-1);
+ if (siteIdsList.isEmpty()) siteIdsList.add(-1);
List<Site> sites = siteClient.getSiteByIds(siteIdsList).getData();
-
+
for (ChargingOrderListVO chargingOrderListVO : list) {
- if (roleType==2){
+ if (roleType == 2) {
List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
chargingOrderListVO.setAuthInfo(data.get(0));
chargingOrderListVO.setAuthCurve(data.get(1));
}
chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
BigDecimal bigDecimal = new BigDecimal("0.006");
- if (chargingOrderListVO.getOrderAmount()!=null){
- chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getPaymentAmount().multiply(bigDecimal));
+ if (chargingOrderListVO.getOrderAmount() != null) {
+ chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getRechargeAmount().multiply(bigDecimal));
}
chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount());
- chargingOrderListVO.setUid(chargingOrderListVO.getId()+"");
+ chargingOrderListVO.setUid(chargingOrderListVO.getId() + "");
List<Integer> integers = new ArrayList<>();
integers.add(chargingOrderListVO.getSiteId());
Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null);
- if (site!=null){
+ if (site != null) {
chargingOrderListVO.setSiteName(site.getName());
}
- if (chargingOrderListVO.getChargingGunId()!=null && chargingOrderListVO.getChargingPileId()!=null){
- TChargingGun data1 = allGun.stream().filter(e->e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
- TChargingPile data2 = allPile.stream().filter(e->e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
+ if (chargingOrderListVO.getChargingGunId() != null && chargingOrderListVO.getChargingPileId() != null) {
+ TChargingGun data1 = allGun.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
+ TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
if (data2 != null && data1 != null) {
chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName());
}
}
- if (chargingOrderListVO.getStartTime()!=null && chargingOrderListVO.getEndTime()!=null){
+ if (chargingOrderListVO.getStartTime() != null && chargingOrderListVO.getEndTime() != null) {
LocalDateTime startTime = chargingOrderListVO.getStartTime();
LocalDateTime endTime = chargingOrderListVO.getEndTime();
// 计算时间差 单位秒
@@ -1601,38 +1870,38 @@
chargingOrderListVO.setChargingSecond(between);
}
// 获取开始SOC 结束soc
- if (chargingOrderListVO.getCode()!=null){
- List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrderListVO.getCode()).getData();
-
- if (data6!=null && !data6.isEmpty()){
- int min = 100;
- int max = 0;
- for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
- if (uploadRealTimeMonitoringData.getSoc()>max){
- max = uploadRealTimeMonitoringData.getSoc();
+ if (chargingOrderListVO.getCode() != null) {
+ List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode());
+
+ if (data6 != null && !data6.isEmpty()) {
+ int min = 100;
+ int max = 0;
+ for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
+ if (uploadRealTimeMonitoringData.getSoc() > max) {
+ max = uploadRealTimeMonitoringData.getSoc();
+ }
+ if (uploadRealTimeMonitoringData.getSoc() != 0 && uploadRealTimeMonitoringData.getSoc() < min) {
+ min = uploadRealTimeMonitoringData.getSoc();
+ }
}
- if (uploadRealTimeMonitoringData.getSoc()!=0 &&uploadRealTimeMonitoringData.getSoc()<min){
- min = uploadRealTimeMonitoringData.getSoc();
- }
- }
- chargingOrderListVO.setEndSoc(max+"");
- chargingOrderListVO.setStartSoc(min+"");
+ chargingOrderListVO.setEndSoc(max + "");
+ chargingOrderListVO.setStartSoc(min + "");
}
}
-
- if (chargingOrderListVO.getAppUserId()!=null){
+
+ if (chargingOrderListVO.getAppUserId() != null) {
TAppUser data3 = appUserClient.getUserById(chargingOrderListVO.getAppUserId()).getData();
List<Long> carId = new ArrayList<>();
- if (data3!=null){
+ if (data3 != null) {
if (chargingOrderListVO.getAppUserCarId() != null) {
carId.add(chargingOrderListVO.getAppUserCarId());
- if (!carId.isEmpty()){
+ if (!carId.isEmpty()) {
List<TAppUserCar> data4 = appUserCarClient.getCarByIds(carId).getData();
- if (data4!=null && !data4.isEmpty()) {
+ if (data4 != null && !data4.isEmpty()) {
chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate());
}
}
- }else{
+ } else {
chargingOrderListVO.setLicensePlate(chargingOrderListVO.getPlateNum());
}
chargingOrderListVO.setPhone(data3.getPhone());
@@ -1647,7 +1916,7 @@
BigDecimal gu = new BigDecimal("0");
BigDecimal total = new BigDecimal("0");
for (TChargingOrderAccountingStrategy temp : list2) {
- if (temp.getChargingCapacity() == null){
+ if (temp.getChargingCapacity() == null) {
temp.setChargingCapacity(BigDecimal.ZERO);
}
switch (temp.getType()) {
@@ -1666,41 +1935,47 @@
}
}
total = total.add(jian).add(feng).add(ping).add(gu);
- if (total.compareTo(new BigDecimal("0")) != 0){
+ if (total.compareTo(new BigDecimal("0")) != 0) {
chargingOrderListVO.setElectronicProportion(
- jian.divide(total,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%(尖)/"
- +feng.divide(total,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%(峰)/"
- +ping.divide(total,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%(平)/"
- +gu.divide(total,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%(谷)");
- }else{
+ jian.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(尖)/"
+ + feng.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(峰)/"
+ + ping.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(平)/"
+ + gu.divide(total, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%(谷)");
+ } else {
chargingOrderListVO.setElectronicProportion(
- "0"+"%(尖)/"+
- "0"+"%(峰)/"+
- "0"+"%(平)/"+
- "0"+"%(谷)");
+ "0" + "%(尖)/" +
+ "0" + "%(峰)/" +
+ "0" + "%(平)/" +
+ "0" + "%(谷)");
}
-
+ if (chargingOrderListVO.getOrderSource().equals(2)) {
+ chargingOrderListVO.setSharingAmount(chargingOrderListVO.getServiceCharge() != null ?
+ chargingOrderListVO.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_HALF_UP)
+ : new BigDecimal("0"));
+ } else {
+ chargingOrderListVO.setSharingAmount(new BigDecimal("0"));
+ }
}
// 不分页
- PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1,999999999);
- List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(pageInfo1,dto,startTime1,startTime2,endTime1,endTime2);
+ PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1, 999999999);
+ List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(pageInfo1, dto, startTime1, startTime2, endTime1, endTime2);
for (ChargingOrderListVO chargingOrderListVO : list1) {
List<Integer> integers = new ArrayList<>();
integers.add(chargingOrderListVO.getSiteId());
Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null);
- if (site!=null){
+ if (site != null) {
chargingOrderListVO.setSiteName(site.getName());
}
- if (chargingOrderListVO.getStartTime()!=null && chargingOrderListVO.getEndTime()!=null){
+ if (chargingOrderListVO.getStartTime() != null && chargingOrderListVO.getEndTime() != null) {
LocalDateTime startTime = chargingOrderListVO.getStartTime();
LocalDateTime endTime = chargingOrderListVO.getEndTime();
// 计算时间差 单位秒
long between = ChronoUnit.SECONDS.between(startTime, endTime);
chargingOrderListVO.setChargingSecond(between);
}
- if (chargingOrderListVO.getChargingGunId()!=null && chargingOrderListVO.getChargingPileId()!=null){
- TChargingGun data1 = allGun.stream().filter(e->e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
- TChargingPile data2 = allPile.stream().filter(e->e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
+ if (chargingOrderListVO.getChargingGunId() != null && chargingOrderListVO.getChargingPileId() != null) {
+ TChargingGun data1 = allGun.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null);
+ TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderListVO.getChargingPileId())).findFirst().orElse(null);
if (data2 != null && data1 != null) {
chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName());
}
@@ -1720,7 +1995,7 @@
BigDecimal jianElectronic = new BigDecimal("0");
BigDecimal fengElectronic = new BigDecimal("0");
BigDecimal pingElectronic = new BigDecimal("0");
- BigDecimal guElectronic = new BigDecimal("0");
+ BigDecimal guElectronic = new BigDecimal("0");
// 尖峰平谷服务费
BigDecimal jianService = new BigDecimal("0");
BigDecimal fengService = new BigDecimal("0");
@@ -1731,190 +2006,224 @@
BigDecimal feng = new BigDecimal("0");
BigDecimal ping = new BigDecimal("0");
BigDecimal gu = new BigDecimal("0");
- List<Long> collect = list1.stream().map(ChargingOrderListVO::getId).collect(Collectors.toList());
- List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.lambdaQuery()
- .in(TChargingOrderAccountingStrategy::getChargingOrderId,collect).list();
+ List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
for (ChargingOrderListVO chargingOrderListVO : list1) {
- if (chargingOrderListVO.getChargingCapacity()!=null)electronic = electronic.add(chargingOrderListVO.getElectricity());
-
- if (chargingOrderListVO.getPaymentAmount()!=null)paymentAmount = paymentAmount.add(chargingOrderListVO.getPaymentAmount());
- if (chargingOrderListVO.getElectrovalence()!=null)electrovalence = electrovalence.add(chargingOrderListVO.getElectrovalence());
- if (chargingOrderListVO.getServiceCharge()!=null)serviceCharge = serviceCharge.add(chargingOrderListVO.getServiceCharge());
- List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
- .collect(Collectors.toList());
- for (TChargingOrderAccountingStrategy temp : list2) {
- switch (temp.getType()){
- case 1:
- if (temp.getChargingCapacity()!=null)jian = jian.add(temp.getChargingCapacity());
- if (temp.getChargingCapacity()!=null)jianElectronic = jianElectronic.add(temp.getElectrovalence());
- if (temp.getChargingCapacity()!=null)jianService = jianService.add(temp.getServiceCharge());
- break;
- case 2:
- if (temp.getChargingCapacity()!=null)feng = feng.add(temp.getChargingCapacity());
- if (temp.getChargingCapacity()!=null)fengElectronic = fengElectronic.add(temp.getElectrovalence());
- if (temp.getChargingCapacity()!=null)fengService = fengService.add(temp.getServiceCharge());
- break;
- case 3:
- if (temp.getChargingCapacity()!=null)ping = ping.add(temp.getChargingCapacity());
- if (temp.getChargingCapacity()!=null)pingElectronic = pingElectronic.add(temp.getElectrovalence());
- if (temp.getChargingCapacity()!=null)pingService = pingService.add(temp.getServiceCharge());
- break;
- case 4:
- if (temp.getChargingCapacity()!=null)gu = gu.add(temp.getChargingCapacity());
- if (temp.getChargingCapacity()!=null)guElectronic = guElectronic.add(temp.getElectrovalence());
- if (temp.getChargingCapacity()!=null)guService = guService.add(temp.getServiceCharge());
- break;
+ List<TChargingOrderAccountingStrategy> collect = chargingOrderAccountingStrategies.stream().filter(s -> s.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList());
+ BigDecimal periodServicePrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal periodElectricPrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal chargingCapacity = collect.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+ electronic = electronic.add(chargingCapacity);
+ electrovalence = electrovalence.add(periodElectricPrice);
+ if (chargingOrderListVO.getOrderSource().equals(2)) {
+ serviceCharge = serviceCharge.add(periodServicePrice.multiply(new BigDecimal("0.8")));
+ paymentAmount = paymentAmount.add(periodElectricPrice).add(periodServicePrice.multiply(new BigDecimal("0.8")));
+ } else {
+ serviceCharge = serviceCharge.add(periodServicePrice);
+ paymentAmount = paymentAmount.add(periodElectricPrice).add(periodServicePrice);
+ }
+ if (!chargingOrderListVO.getOrderSource().equals(2)) {
+ List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
+ .collect(Collectors.toList());
+ for (TChargingOrderAccountingStrategy temp : list2) {
+ switch (temp.getType()) {
+ case 1:
+ jian = jian.add(temp.getChargingCapacity());
+ jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+ jianService = jianService.add(temp.getPeriodServicePrice());
+ break;
+ case 2:
+ feng = feng.add(temp.getChargingCapacity());
+ fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+ fengService = fengService.add(temp.getPeriodServicePrice());
+ break;
+ case 3:
+ ping = ping.add(temp.getChargingCapacity());
+ pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+ pingService = pingService.add(temp.getPeriodServicePrice());
+ break;
+ case 4:
+ gu = gu.add(temp.getChargingCapacity());
+ guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice());
+ guService = guService.add(temp.getPeriodServicePrice());
+ break;
+ }
+ }
+ } else {
+ List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
+ .collect(Collectors.toList());
+ for (TChargingOrderAccountingStrategy temp : list2) {
+ BigDecimal multiply = temp.getPeriodServicePrice().multiply(new BigDecimal("0.8"));
+ switch (temp.getType()) {
+ case 1:
+ jian = jian.add(temp.getChargingCapacity());
+ jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+ jianService = jianService.add(multiply);
+ break;
+ case 2:
+ feng = feng.add(temp.getChargingCapacity());
+ fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+ fengService = fengService.add(multiply);
+ break;
+ case 3:
+ ping = ping.add(temp.getChargingCapacity());
+ pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+ pingService = pingService.add(multiply);
+ break;
+ case 4:
+ gu = gu.add(temp.getChargingCapacity());
+ guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(multiply);
+ guService = guService.add(multiply);
+ break;
+ }
}
}
}
-
- chargingOrderTimeVO.setChargingCapacity(electronic);
- chargingOrderTimeVO.setPaymentAmount(paymentAmount);
- chargingOrderTimeVO.setElectrovalence(electrovalence);
- chargingOrderTimeVO.setServiceCharge(serviceCharge);
- // 计算尖峰平谷充电量占比
+
+ chargingOrderTimeVO.setChargingCapacity(electronic.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ chargingOrderTimeVO.setPaymentAmount(paymentAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ chargingOrderTimeVO.setElectrovalence(electrovalence.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ chargingOrderTimeVO.setServiceCharge(serviceCharge.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ // 计算尖峰平谷充电到账占比
BigDecimal add = jianElectronic.add(fengElectronic).add(pingElectronic).add(guElectronic);
// 计算尖峰平谷服务费占比
BigDecimal add1 = jianService.add(fengService).add(pingService).add(guService);
- // 计算尖峰平谷充电到账占比
+ // 计算尖峰平谷充电量占比
BigDecimal add2 = jian.add(feng).add(ping).add(gu);
- if (add.compareTo(new BigDecimal("0"))!=0){
- chargingOrderTimeVO.setCapacityProportion(jianElectronic+"度/"+fengElectronic+"度/"+pingElectronic+"度/"+guElectronic+"度-"
- +jianElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
- +fengElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
- +pingElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
- +guElectronic.divide(add,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
- chargingOrderTimeVO.setServiceProportion(jianService+"元/"+fengService+"元/"+pingService+"元/"+guService+"元-"
- +jianService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
- +fengService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
- +pingService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
- +guService.divide(add1,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
- chargingOrderTimeVO.setElectronicProportion(jian+"元/"+feng+"元/"+ping+"元/"+gu+"元-"
- +jian.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
- +feng.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
- +ping.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%/"
- +gu.divide(add2,4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
- }else{
- chargingOrderTimeVO.setCapacityProportion(jianElectronic+"度/"+fengElectronic+"度/"+pingElectronic+"度/"+guElectronic+"度-"
- +"0"+"%/"
- +"0"+"%/"
- +"0"+"%/"
- +"0"+"%");
- chargingOrderTimeVO.setServiceProportion(jianService+"元/"+fengService+"元/"+pingService+"元/"+guService+"元-"
- +"0"+"%/"
- +"0"+"%/"
- +"0"+"%/"
- +"0"+"%");
- chargingOrderTimeVO.setElectronicProportion(jian+"元/"+feng+"元/"+ping+"元/"+gu+"元-"
- +"0"+"%/"
- +"0"+"%/"
- +"0"+"%/"
- +"0"+"%");
+ if (add.compareTo(new BigDecimal("0")) != 0) {
+ chargingOrderTimeVO.setCapacityProportion(jian + "度/" + feng + "度/" + ping + "度/" + gu + "度-"
+ + jian.divide(add2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
+ + feng.divide(add2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
+ + ping.divide(add2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
+ + gu.divide(add2, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%");
+ chargingOrderTimeVO.setServiceProportion(jianService + "元/" + fengService + "元/" + pingService + "元/" + guService + "元-"
+ + jianService.divide(add1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
+ + fengService.divide(add1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
+ + pingService.divide(add1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
+ + guService.divide(add1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%");
+ chargingOrderTimeVO.setElectronicProportion(jianElectronic + "元/" + fengElectronic + "元/" + pingElectronic + "元/" + guElectronic + "元-"
+ + jianElectronic.divide(add, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
+ + fengElectronic.divide(add, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
+ + pingElectronic.divide(add, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%/"
+ + guElectronic.divide(add, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")) + "%");
+ } else {
+ chargingOrderTimeVO.setCapacityProportion(jianElectronic + "度/" + fengElectronic + "度/" + pingElectronic + "度/" + guElectronic + "度-"
+ + "0" + "%/"
+ + "0" + "%/"
+ + "0" + "%/"
+ + "0" + "%");
+ chargingOrderTimeVO.setServiceProportion(jianService + "元/" + fengService + "元/" + pingService + "元/" + guService + "元-"
+ + "0" + "%/"
+ + "0" + "%/"
+ + "0" + "%/"
+ + "0" + "%");
+ chargingOrderTimeVO.setElectronicProportion(jian + "元/" + feng + "元/" + ping + "元/" + gu + "元-"
+ + "0" + "%/"
+ + "0" + "%/"
+ + "0" + "%/"
+ + "0" + "%");
}
pageInfo.setRecords(list);
chargingOrderTimeVO.setList(pageInfo);
return chargingOrderTimeVO;
}
-
-
-
+
@Override
public ChargingOrderListInfoVO chargingInfo(String uid) {
- TChargingOrder chargingOrder= this.getById(uid);
+ TChargingOrder chargingOrder = this.getById(uid);
ChargingOrderListInfoVO chargingOrderListInfoVO = new ChargingOrderListInfoVO();
chargingOrderListInfoVO.setStartTime(chargingOrder.getStartTime());
chargingOrderListInfoVO.setEndTime(chargingOrder.getEndTime());
chargingOrderListInfoVO.setStatus(chargingOrder.getStatus());
BigDecimal bigDecimal = new BigDecimal("0.006");
- if (chargingOrder.getOrderAmount()!=null){
+ if (chargingOrder.getOrderAmount() != null) {
BigDecimal multiply = chargingOrder.getPaymentAmount().multiply(bigDecimal);
chargingOrderListInfoVO.setCommissionAmount(multiply.setScale(2, BigDecimal.ROUND_HALF_UP));
}
chargingOrderListInfoVO.setElectrovalence(chargingOrder.getElectrovalence());
chargingOrderListInfoVO.setServiceCharge(chargingOrder.getServiceCharge());
- if (chargingOrder.getElectrovalence()!=null && chargingOrder.getServiceCharge()!=null){
+ if (chargingOrder.getElectrovalence() != null && chargingOrder.getServiceCharge() != null) {
chargingOrderListInfoVO.setTotal(chargingOrder.getElectrovalence().add(chargingOrder.getServiceCharge()));
- }else{
+ } else {
chargingOrderListInfoVO.setTotal(new BigDecimal("0"));
}
- if (chargingOrderListInfoVO.getTotal().compareTo(new BigDecimal("0"))>0){
- if (chargingOrder.getCouponDiscountAmount()!=null&& chargingOrder.getVipDiscountAmount()!=null&& chargingOrder.getSharingAmount()!=null&& chargingOrder.getCommissionAmount()!=null){
+ if (chargingOrderListInfoVO.getTotal().compareTo(new BigDecimal("0")) > 0) {
+ if (chargingOrder.getCouponDiscountAmount() != null && chargingOrder.getVipDiscountAmount() != null && chargingOrder.getSharingAmount() != null && chargingOrder.getCommissionAmount() != null) {
chargingOrderListInfoVO.setRealTotal(chargingOrderListInfoVO.getTotal().subtract(chargingOrder.getCouponDiscountAmount()).subtract(chargingOrder.getVipDiscountAmount()).subtract(chargingOrder.getSharingAmount()).subtract(chargingOrder.getCommissionAmount()));
- }else{
+ } else {
chargingOrderListInfoVO.setRealTotal(chargingOrderListInfoVO.getTotal());
}
- }else{
+ } else {
chargingOrderListInfoVO.setRealTotal(new BigDecimal("0"));
}
chargingOrderListInfoVO.setCode(chargingOrder.getCode());
List<Site> data = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData();
- if (!data.isEmpty()){
+ if (!data.isEmpty()) {
chargingOrderListInfoVO.setSiteName(data.get(0).getName());
chargingOrderListInfoVO.setSiteAddress(data.get(0).getAddress());
}
- if (chargingOrder.getChargingGunId()!=null){
+ if (chargingOrder.getChargingGunId() != null) {
TChargingGun data1 = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
- if (data1!=null){
+ if (data1 != null) {
TChargingPile data2 = chargingPileClient.getChargingPileById(data1.getChargingPileId()).getData();
- if (data2!=null){
+ if (data2 != null) {
chargingOrderListInfoVO.setGunCode(data1.getCode());
- chargingOrderListInfoVO.setTerminalName(data2.getName()+data1.getName());
+ chargingOrderListInfoVO.setTerminalName(data2.getName() + data1.getName());
}
}
}
chargingOrderListInfoVO.setChargingCapacity(chargingOrder.getChargingCapacity());
-
+
chargingOrderListInfoVO.setEndMode(chargingOrder.getEndMode());
-
+
// 获取开始SOC 结束soc
- if (chargingOrder.getCode()!=null){
- List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
- if (data6!=null){
+ if (chargingOrder.getCode() != null) {
+ List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
+ if (data6 != null) {
for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
- if (uploadRealTimeMonitoringData.getOutput_current()!=null&&
- uploadRealTimeMonitoringData.getOutput_voltage()!=null){
+ if (uploadRealTimeMonitoringData.getOutput_current() != null &&
+ uploadRealTimeMonitoringData.getOutput_voltage() != null) {
uploadRealTimeMonitoringData.setPower(uploadRealTimeMonitoringData.getOutput_voltage()
- .multiply(uploadRealTimeMonitoringData.getOutput_current()).divide(new BigDecimal(1000),2, BigDecimal.ROUND_HALF_UP));
+ .multiply(uploadRealTimeMonitoringData.getOutput_current()).divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP));
}
}
- if (!data6.isEmpty()){
- int min = 100;
- int max = 0;
- for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
- if (uploadRealTimeMonitoringData.getSoc()>max){
- max = uploadRealTimeMonitoringData.getSoc();
- }
- if (uploadRealTimeMonitoringData.getSoc()!=0 &&uploadRealTimeMonitoringData.getSoc()<min){
- min = uploadRealTimeMonitoringData.getSoc();
- }
+ if (!data6.isEmpty()) {
+ int min = 100;
+ int max = 0;
+ for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
+ if (uploadRealTimeMonitoringData.getSoc() > max) {
+ max = uploadRealTimeMonitoringData.getSoc();
}
- chargingOrderListInfoVO.setEndSoc(max+"");
- chargingOrderListInfoVO.setStartSoc(min+"");
-
+ if (uploadRealTimeMonitoringData.getSoc() != 0 && uploadRealTimeMonitoringData.getSoc() < min) {
+ min = uploadRealTimeMonitoringData.getSoc();
+ }
+ }
+ chargingOrderListInfoVO.setEndSoc(max + "");
+ chargingOrderListInfoVO.setStartSoc(min + "");
+
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
uploadRealTimeMonitoringData.setCreateTime(simpleDateFormat.format(uploadRealTimeMonitoringData.getCreate_time()));
}
}
}
-
+
chargingOrderListInfoVO.setList(data6);
}
- if (chargingOrderListInfoVO.getStartTime()!=null && chargingOrderListInfoVO.getEndTime()!=null){
+ if (chargingOrderListInfoVO.getStartTime() != null && chargingOrderListInfoVO.getEndTime() != null) {
LocalDateTime startTime = chargingOrderListInfoVO.getStartTime();
LocalDateTime endTime = chargingOrderListInfoVO.getEndTime();
// 计算时间差 单位秒
long between = ChronoUnit.SECONDS.between(startTime, endTime);
- chargingOrderListInfoVO.setChargingSecond(between+"");
+ chargingOrderListInfoVO.setChargingSecond(between + "");
}
-
- if (chargingOrder.getAppUserCarId()!=null){
+
+ if (chargingOrder.getAppUserCarId() != null) {
List<TAppUserCar> data3 = appUserCarClient.getCarByIds(Collections.singletonList(chargingOrder.getAppUserCarId())).getData();
- if (data3!=null && !data3.isEmpty()) {
+ if (data3 != null && !data3.isEmpty()) {
chargingOrderListInfoVO.setLicensePlate(data3.get(0).getLicensePlate());
}
- }else{
+ } else {
chargingOrderListInfoVO.setLicensePlate(chargingOrder.getPlateNum());
}
chargingOrderListInfoVO.setStartTime(chargingOrder.getStartTime());
@@ -1923,7 +2232,12 @@
chargingOrderListInfoVO.setUid(chargingOrder.getId().toString());
chargingOrderListInfoVO.setCouponDiscountAmount(chargingOrder.getCouponDiscountAmount());
chargingOrderListInfoVO.setVipDiscountAmount(chargingOrder.getVipDiscountAmount());
- chargingOrderListInfoVO.setSharingAmount(chargingOrder.getSharingAmount());
+ if (chargingOrder.getOrderSource().equals(2)) {
+ chargingOrderListInfoVO.setSharingAmount(chargingOrder.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_HALF_UP));
+ } else {
+ chargingOrderListInfoVO.setSharingAmount(chargingOrder.getSharingAmount());
+
+ }
// 查询费用明细列表
List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.lambdaQuery()
.eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())
@@ -1931,16 +2245,16 @@
chargingOrderListInfoVO.setList1(list);
return chargingOrderListInfoVO;
}
-
-
+
+
/**
* 处理充电订单实时监控数据相关的业务逻辑
+ *
* @param query
*/
@Override
- @GlobalTransactional(rollbackFor = Exception.class)
public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) {
- if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())){
+ if (com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())) {
//获取当前的计费策略
TChargingOrder chargingOrder1 = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, query.getTransaction_serial_number()));
BigDecimal residualAmount = chargingOrder1.getRechargeAmount().add(chargingOrder1.getVipDiscountAmount()).subtract(query.getPaid_amount());
@@ -1948,7 +2262,7 @@
chargingOrder.setId(chargingOrder1.getId());
chargingOrder.setAppUserId(chargingOrder1.getAppUserId());
chargingOrder.setResidualAmount(residualAmount);
- if(query.getOutput_current().compareTo(BigDecimal.ZERO) != 0){
+ if (query.getOutput_current().compareTo(BigDecimal.ZERO) != 0) {
BigDecimal divide = (query.getOutput_current().multiply(query.getOutput_voltage())).divide(new BigDecimal(1000));
chargingOrder.setChargingPower(divide);
chargingOrder.setCurrent(query.getOutput_current());
@@ -1963,22 +2277,18 @@
}
chargingOrder.setChargingCapacity(query.getCharging_degree());
chargingOrder.setElectricity(query.getCharging_degree());
- chargingOrder.setTotalElectricity(new BigDecimal(100 - query.getSoc()));
- BmsDemandAndChargerExportation data = bmsDemandAndChargerExportationClient.getBmsDemandAndChargerExportation(chargingOrder1.getCode()).getData();
- if(null != data){
- chargingOrder.setNeedElec(data.getBms_current_requirements());
- }
+ chargingOrder.setTotalElectricity(new BigDecimal(query.getSoc()));
this.updateById(chargingOrder);
}
}
-
-
+
+
/**
* 自动结束充电后的处理逻辑
+ *
* @param orderCode
*/
@Override
- @GlobalTransactional(rollbackFor = Exception.class)
public void endCharge(String orderCode, Integer endMode) {
TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, orderCode));
TChargingOrder chargingOrder = new TChargingOrder();
@@ -1987,9 +2297,10 @@
chargingOrder.setEndMode(endMode);
this.updateById(chargingOrder);
}
-
+
/**
* 异常结束充电处理逻辑
+ *
* @param orderCode
*/
@Override
@@ -2000,34 +2311,53 @@
/**
* 停止充电返回账单后计算费用
+ *
* @param vo
*/
@Override
- @GlobalTransactional(rollbackFor = Exception.class)
public R endChargeBillingCharge(TransactionRecordMessageVO vo) {
- TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
- Integer status = chargingOrder.getStatus();
- if(status == 5){
+ RLock lock = redissonClient.getLock("endOrder:" + vo.getTransaction_serial_number());
+ boolean tryLock = false;
+ try {
+ tryLock = lock.tryLock(100, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ lock.unlock();
return R.ok();
}
-
- //如果使用优惠券需要判断优惠券是否满足使用条件
- //根据实际的充电金额计算退款金额 退回费用=(原金额/总金额)*(总金额-实际充电金额)
- //退款金额=优惠券金额+剩余充电金额
- BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
- BigDecimal periodServicePrice_total = BigDecimal.ZERO;
- BigDecimal total = BigDecimal.ZERO;
-
- //获取订单的计费策略
- List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
- accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1).setEndTime("23:59");
- //开始处理计费明细数据和优惠数据
- chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
- SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
+ if (!tryLock) {
+ return R.ok();
+ }
try {
+ TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
+ if (null == chargingOrder) {
+ return R.ok();
+ }
+ Integer status = chargingOrder.getStatus();
+ if (status == 5) {
+ return R.ok();
+ }
+
+ //如果使用优惠券需要判断优惠券是否满足使用条件
+ //退款金额=优惠券金额+剩余充电金额
+ BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
+ BigDecimal periodServicePrice_total = BigDecimal.ZERO;
+ BigDecimal vipDiscountAmount_total = BigDecimal.ZERO;
+ BigDecimal serviceCharge_total = BigDecimal.ZERO;
+ BigDecimal total = BigDecimal.ZERO;
+
+ //获取订单的计费策略
+ List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
+ if (accountingStrategyDetailOrderList.isEmpty()) {
+ return R.fail("计费策略为空,无法计算费用");
+ }
+ accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1).setEndTime("23:59");
+ //开始处理计费明细数据和优惠数据
+ chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
+ SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
//跨天
- if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
+ if (!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])) {
//当天的
//开始通过计费策略遍历解析每个时段的费用明细
String start_time = vo.getStart_time();
@@ -2042,12 +2372,12 @@
for (int i = accountingStrategyDetailOrderList.size(); i > 0; i--) {
AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i - 1);
long time = sdfs.parse(start_time.split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime();
- if(time < start){
+ if (time < start) {
break;
}
//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
Object invoke = null;
- switch (strategyDetail.getType()){
+ switch (strategyDetail.getType()) {
case 1:
//充电度数
invoke = clazz.getMethod("getSpike_charge" + (i)).invoke(vo);
@@ -2065,14 +2395,14 @@
invoke = clazz.getMethod("getValley_charge" + (i)).invoke(vo);
break;
}
- if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+ if (null == invoke || Double.valueOf(invoke.toString()) == 0) {
continue;
}
BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
BeanUtils.copyProperties(strategyDetail, vo1);
vo1.setChargingCapacity(sharp_peak_charge);
- lists.add(vo1);
+ lists.add(0, vo1);
}
//第二天的
@@ -2080,12 +2410,12 @@
for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
long time = sdfs.parse(end_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime();
- if(time > end){
+ if (time > end) {
break;
}
//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
Object invoke = null;
- switch (strategyDetail.getType()){
+ switch (strategyDetail.getType()) {
case 1:
//充电度数
invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
@@ -2103,7 +2433,7 @@
invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
break;
}
- if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+ if (null == invoke || Double.valueOf(invoke.toString()) == 0) {
continue;
}
BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
@@ -2112,13 +2442,13 @@
vo1.setChargingCapacity(sharp_peak_charge);
lists.add(vo1);
}
- }else{
+ } else {
for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
//阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
Object invoke = null;
- switch (strategyDetail.getType()){
+ switch (strategyDetail.getType()) {
case 1:
//充电度数
invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
@@ -2136,7 +2466,7 @@
invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
break;
}
- if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+ if (null == invoke || Double.valueOf(invoke.toString()) == 0) {
continue;
}
BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
@@ -2146,393 +2476,426 @@
lists.add(vo1);
}
}
- }catch (Exception e){
- e.printStackTrace();
- R.fail("处理失败");
- }
-
- //开始处理明细
- for (int i = 0; i < lists.size(); i++) {
- AccountingStrategyDetailOrderVo strategyDetail = lists.get(i);
- BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity();
- TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
- chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
- chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
- chargingOrderAccountingStrategy.setType(strategyDetail.getType());
- chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
- chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
- chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
- if(i == 0){
- String time = vo.getStart_time().split(" ")[1];
- chargingOrderAccountingStrategy.setStartTime(time.substring(0, time.lastIndexOf(":")));
- }else{
- chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime());
- }
- if(i == lists.size() - 1){
- String time = vo.getEnd_time().split(" ")[1];
- chargingOrderAccountingStrategy.setEndTime(time.substring(0, time.lastIndexOf(":")));
- }else{
- chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
- }
- //已充电总度数
- BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge);
- BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge);
- BigDecimal serviceCharge = originalServicePrice;
- BigDecimal vipDiscountAmount = BigDecimal.ZERO;
- //计算优惠金额
- if(null != chargingOrder.getVipDiscount()){
- //0.58折
- vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount()));
- serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount());
- }
- chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
- chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN));
- chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN));
- chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN));
- chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN));
- chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
- chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
-
- periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
- periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
- total = total.add(electrovalenc.add(originalServicePrice));
- }
-
- //原金额
- BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
- BigDecimal vipDiscountAmount = chargingOrder.getVipDiscountAmount();
- //总金额(充值金额+会员折扣金额)
- BigDecimal decimal = rechargeAmount.add(vipDiscountAmount);
- //退款金额(已经计算了折扣优惠部分)
- //如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额)
- BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total));
- BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
- BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue());
- //折扣金额
- BigDecimal discountAmount = BigDecimal.ZERO;
- if(null != chargingOrder.getVipDiscount()){
- TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
- //判断会员是否还有充电优惠次数
- GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
- getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
- getAppUserVipDetail.setVipId(appUser.getVipId());
- TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
- if(null != data && data.getChargeNum() > 0){
- data.setChargeNum(data.getChargeNum() - 1);
- appUserVipDetailClient.updateAppUserVipDetail(data);
+ //开始处理明细
+ for (int i = 0; i < lists.size(); i++) {
+ AccountingStrategyDetailOrderVo strategyDetail = lists.get(i);
+ BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity();
+ TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
+ chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
+ chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
+ chargingOrderAccountingStrategy.setType(strategyDetail.getType());
+ chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
+ chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
+ chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
+ if (i == 0) {
+ String time = vo.getStart_time().split(" ")[1];
+ chargingOrderAccountingStrategy.setStartTime(time.substring(0, time.lastIndexOf(":")));
+ } else {
+ chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime());
+ }
+ if (i == lists.size() - 1) {
+ String time = vo.getEnd_time().split(" ")[1];
+ chargingOrderAccountingStrategy.setEndTime(time.substring(0, time.lastIndexOf(":")));
+ } else {
+ chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
+ }
- //服务费折扣
- discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount())));
- TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
- BigDecimal maximumDeduction = vip.getMaximumDeduction();
- //普通会员有最高优惠限制
- if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){
- discountAmount = maximumDeduction;
+ //已充电总度数
+ BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge);
+ BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge);
+ BigDecimal serviceCharge = originalServicePrice;
+ BigDecimal vipDiscountAmount = BigDecimal.ZERO;
+ //计算优惠金额
+ if (null != chargingOrder.getVipDiscount()) {
+ //0.58折
+ vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount()));
+ serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount());
+ }
+ chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
+ chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN));
+ chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN));
+ chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN));
+ chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN));
+ chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
+ chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
+ //电费
+ periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
+ //服务费(含折扣)
+ serviceCharge_total = serviceCharge_total.add(serviceCharge);
+ //服务费(不含折扣)
+ periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
+ //会员折扣优惠金额
+ vipDiscountAmount_total = vipDiscountAmount_total.add(vipDiscountAmount);
+ //原始总金额(不含折扣)
+ total = total.add(electrovalenc.add(originalServicePrice));
+ }
+
+ BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
+ //原金额
+ BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
+ //支付金额
+ BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total);
+ //退款金额=充值金额-实际支付金额
+ BigDecimal refundAmount = rechargeAmount.subtract(payAmount);
+
+ TChargingOrder order = new TChargingOrder();
+ order.setId(chargingOrder.getId());
+ order.setAppUserId(chargingOrder.getAppUserId());
+ UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(chargingOrder.getCode());
+ if (null != uploadRealTimeMonitoringData && null == chargingOrder.getEndMode()) {
+ Integer soc = uploadRealTimeMonitoringData.getSoc();
+ if (soc >= 98) {
+ order.setEndMode(2);
+ } else if (chargingOrder.getResidualAmount().compareTo(new BigDecimal(1)) <= 0) {
+ order.setEndMode(3);
+ } else {
+ order.setEndMode(0);
}
}
- }
- //会员折扣金额
- discountAmount = discountAmount.setScale(4, RoundingMode.HALF_EVEN);
- payAmount = payAmount.subtract(discountAmount);
- periodServicePrice_total = periodServicePrice_total.subtract(discountAmount);
-
- TChargingOrder order = new TChargingOrder();
- order.setId(chargingOrder.getId());
- order.setAppUserId(chargingOrder.getAppUserId());
- UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData();
- if(null != uploadRealTimeMonitoringData && null == chargingOrder.getEndMode()){
- Integer soc = uploadRealTimeMonitoringData.getSoc();
- if(soc >= 98){
- order.setEndMode(2);
- }else if(chargingOrder.getResidualAmount().compareTo(new BigDecimal(1)) <= 0){
- order.setEndMode(3);
- }else{
- order.setEndMode(0);
+ order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
+ order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
+ order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
+ order.setStatus(5);
+ order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
+ order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
+ order.setChargingCapacity(vo.getTotal_electricity());
+ order.setElectricity(vo.getTotal_electricity());
+ order.setVipDiscountAmount(vipDiscountAmount_total);
+ if (vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0) {
+ order.setVipDiscount(BigDecimal.valueOf(1));
}
- }
- order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
- order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
- order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
- order.setStatus(5);
- order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
- order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.HALF_EVEN));
- order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
- order.setChargingCapacity(vo.getTotal_electricity());
- order.setElectricity(vo.getTotal_electricity());
-
- //计算优惠券
- BigDecimal couponDiscount = BigDecimal.ZERO;
- if(null != chargingOrder.getAppCouponId()){
- //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。
- TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData();
- String couponJson = appCoupon.getCouponJson();
- TCoupon tCoupon = JSON.parseObject(couponJson, TCoupon.class);
- Integer preferentialMode = tCoupon.getPreferentialMode();
- if(1 == preferentialMode){
- //满减
- if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
- BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
- //如果优惠金额大于服务费金额,以服务费作为最大限制
- if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){
- couponDiscount = periodServicePrice_total;
- periodServicePrice_total = BigDecimal.ZERO;
- }else{
- couponDiscount = couponDiscountAmount;
+
+ //计算优惠券
+ BigDecimal couponDiscount = BigDecimal.ZERO;
+ if (null != chargingOrder.getAppCouponId()) {
+ //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。
+ TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData();
+ String couponJson = appCoupon.getCouponJson();
+ TCoupon tCoupon = JSON.parseObject(couponJson, TCoupon.class);
+ Integer preferentialMode = tCoupon.getPreferentialMode();
+ if (1 == preferentialMode) {
+ //满减
+ if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) {
+ BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
+ //如果优惠金额大于服务费金额,以服务费作为最大限制
+ if (serviceCharge_total.compareTo(couponDiscountAmount) < 0) {
+ couponDiscount = serviceCharge_total;
+ serviceCharge_total = BigDecimal.ZERO;
+ } else {
+ couponDiscount = couponDiscountAmount;
+ }
+ appCoupon.setStatus(2);
+ appCouponClient.updateAppCoupon(appCoupon);
+ } else {
+ order.setAppCouponId(null);
+ order.setCouponDiscountAmount(BigDecimal.ZERO);
+ appCouponClient.refund(chargingOrder.getAppCouponId().toString());
}
- appCoupon.setStatus(2);
- appCouponClient.updateAppCoupon(appCoupon);
- }else{
- order.setAppCouponId(null);
- order.setCouponDiscountAmount(BigDecimal.ZERO);
- appCouponClient.refund(chargingOrder.getAppCouponId().toString());
+ }
+ if (2 == preferentialMode) {
+ //抵扣
+ if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) {
+ //折扣金额
+ BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
+ divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
+ //如果优惠金额大于服务费金额,以服务费作为最大限制
+ if (serviceCharge_total.compareTo(divide) < 0) {
+ couponDiscount = serviceCharge_total;
+ serviceCharge_total = BigDecimal.ZERO;
+ } else {
+ couponDiscount = divide;
+ }
+
+ appCoupon.setStatus(2);
+ appCouponClient.updateAppCoupon(appCoupon);
+ } else {
+ order.setAppCouponId(null);
+ order.setCouponDiscountAmount(BigDecimal.ZERO);
+ appCouponClient.refund(chargingOrder.getAppCouponId().toString());
+ }
}
}
- if(2 == preferentialMode){
- //抵扣
- if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
- //折扣金额
- BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
- divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
- //如果优惠金额大于服务费金额,以服务费作为最大限制
- if(periodServicePrice_total.compareTo(divide) < 0){
- couponDiscount = periodServicePrice_total;
- periodServicePrice_total = BigDecimal.ZERO;
- }else{
- couponDiscount = divide;
+ //优惠券优惠金额
+ couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN);
+ //退款金额+优惠券
+ refundAmount = refundAmount.add(couponDiscount);
+ //实际支付金额-优惠券
+ payAmount = payAmount.subtract(couponDiscount);
+ if (serviceCharge_total.compareTo(BigDecimal.ZERO) > 0) {
+ serviceCharge_total = serviceCharge_total.subtract(couponDiscount);
+ }
+ order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
+ order.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN));
+ order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
+ order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
+ order.setRefundStatus(1);
+ this.updateById(order);
+ chargingOrder = this.getById(order.getId());
+
+ //推送三方平台
+ if (2 == chargingOrder.getOrderSource()) {
+ TChargingOrder finalChargingOrder = chargingOrder;
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ tcecClient.notificationEquipChargeStatus(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId());
+ tcecClient.notificationStopChargeResult(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getChargingGunId().toString(),
+ finalChargingOrder.getOperatorId());
+ tcecClient.notificationChargeOrderInfo(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId());
+ }
+ }).start();
+ }
+
+ //开始将优惠券优惠的金额添加到明细中
+ BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
+ if (null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0) {
+ List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
+ BigDecimal reduce = list.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
+ BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
+ BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
+ periodServicePrice = periodServicePrice.subtract(multiply);
+ chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN));
+ chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN));
+ }
+ chargingOrderAccountingStrategyService.updateBatchById(list);
+ }
+
+ // 将枪状态重置为空闲
+ TChargingGun chargingGun = new TChargingGun();
+ chargingGun.setId(chargingOrder.getChargingGunId());
+ chargingGun.setStatus(2);
+ chargingGun.setChargingPower(BigDecimal.ZERO);
+ chargingGunClient.updateChargingGunById(chargingGun);
+ //推送状态给三方平台
+ if (2 == chargingOrder.getOrderSource()) {
+ tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus());
+ }
+
+ //添加积分
+ if (1 == chargingOrder.getOrderSource()) {
+ TIntegralRule integralRule = integralRuleClient.getSet().getData();
+ if (null != integralRule) {
+ TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+ Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
+ Integer integral = chargingOrder.getServiceCharge().intValue() * num1;
+ if (null != appUser.getVipId()) {
+ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+ Integer doubleIntegration = vip.getDoubleIntegration();
+ //双倍积分
+ if (1 == doubleIntegration) {
+ integral *= 2;
+ }
}
- appCoupon.setStatus(2);
- appCouponClient.updateAppCoupon(appCoupon);
- }else{
- order.setAppCouponId(null);
- order.setCouponDiscountAmount(BigDecimal.ZERO);
- appCouponClient.refund(chargingOrder.getAppCouponId().toString());
- }
- }
- }
- //优惠券优惠金额
- couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN);
- refundAmount = refundAmount.add(couponDiscount);
- payAmount = payAmount.subtract(couponDiscount);
- if(periodServicePrice_total.compareTo(BigDecimal.ZERO) > 0){
- periodServicePrice_total = periodServicePrice_total.subtract(couponDiscount);
- }
- order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
- order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.HALF_EVEN));
- order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
- order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
- order.setRefundStatus(1);
- this.updateById(order);
- chargingOrder = this.getById(order.getId());
-
- //推送三方平台
- if(2 == chargingOrder.getOrderSource()){
- tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
- tcecClient.notificationStopChargeResult(chargingOrder.getStartChargeSeq(), chargingOrder.getChargingGunId().toString(),
- chargingOrder.getOperatorId());
- tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
- }
-
- //开始将优惠券优惠的金额添加到明细中
- BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
- if(null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){
- List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
- BigDecimal reduce = list.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
- for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
- BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
- BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
- periodServicePrice = periodServicePrice.subtract(multiply);
- chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN));
- chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN));
- }
- chargingOrderAccountingStrategyService.updateBatchById(list);
- }
-
- // 将枪状态重置为空闲
- TChargingGun chargingGun = new TChargingGun();
- chargingGun.setId(chargingOrder.getChargingGunId());
- chargingGun.setStatus(2);
- chargingGun.setChargingPower(BigDecimal.ZERO);
- chargingGunClient.updateChargingGunById(chargingGun);
- //推送状态给三方平台
- if(2 == chargingOrder.getOrderSource()){
- tcecClient.pushChargingGunStatus(chargingGun.getId(), chargingGun.getStatus());
- }
-
- //添加积分
- if(1 == chargingOrder.getOrderSource()){
- TIntegralRule integralRule = integralRuleClient.getSet().getData();
- if(null != integralRule){
- TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
- Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
- Integer integral = chargingOrder.getServiceCharge().intValue() * num1;
- if(null != appUser.getVipId()){
- TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
- Integer doubleIntegration = vip.getDoubleIntegration();
- //双倍积分
- if(1 == doubleIntegration){
- integral *= 2;
+ if (integral > 0) {
+ TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
+ appUserIntegralChange.setAppUserId(appUser.getId());
+ appUserIntegralChange.setChangeType(2);
+ appUserIntegralChange.setHistoricalIntegral(appUser.getPoints());
+ appUser.setPoints(appUser.getPoints() + integral);
+ appUserIntegralChange.setCurrentIntegral(appUser.getPoints());
+ appUserIntegralChange.setCreateTime(LocalDateTime.now());
+ appUserIntegralChange.setOrderCode(chargingOrder.getCode());
+ appUserIntegralChange.setExtension(chargingOrder.getId().toString());
+ appUserClient.updateAppUser(appUser);
+ appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
}
}
- if(integral > 0){
- TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
- appUserIntegralChange.setAppUserId(appUser.getId());
- appUserIntegralChange.setChangeType(2);
- appUserIntegralChange.setHistoricalIntegral(appUser.getPoints());
- appUser.setPoints(appUser.getPoints() + integral);
- appUserIntegralChange.setCurrentIntegral(appUser.getPoints());
- appUserIntegralChange.setCreateTime(LocalDateTime.now());
- appUserIntegralChange.setOrderCode(chargingOrder.getCode());
- appUserIntegralChange.setExtension(chargingOrder.getId().toString());
- appUserClient.updateAppUser(appUser);
- appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
- }
- }
-
- //计算用户标签
- editUserTag(chargingOrder);
- //用户推荐奖励
- referralReward(chargingOrder);
-
- //开始构建退款费用
- refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
- if(refundAmount.compareTo(BigDecimal.ZERO) > 0){
- Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
- //构建退款明细
- TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
- chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
- chargingOrderRefund.setRefundAmount(refundAmount);
- chargingOrderRefund.setRefundStatus(1);
- chargingOrderRefund.setPayType(rechargePaymentType);
- chargingOrderRefund.setRefundStatus(1);
- chargingOrderRefund.setCode(chargingOrder.getCode());
- chargingOrderRefund.setRefundTitle("充电完成退款");
- chargingOrderRefund.setRefundContent("充电完成退款");
- chargingOrderRefund.setRefundReason("充电完成退款");
- chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
- chargingOrderRefund.setRefundTotalAmount(refundAmount);
- chargingOrderRefund.setPayAmount(rechargeAmount);
- if(1 == rechargePaymentType){
- WxPaymentRefundModel model = new WxPaymentRefundModel();
- model.setOut_trade_no(chargingOrder.getCode());
- model.setOut_refund_no(chargingOrderRefund.getRefundCode());
- model.setReason("充电完成退款");
- model.setNotify_url("/payment/wx/refund/notify");
- WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
- amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
- amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
- amount.setCurrency("CNY");
- model.setAmount(amount);
- R<String> orderR = wxPaymentClient.refundOrderR(model);
- if(200 == orderR.getCode()){
- chargingOrderRefundService.save(chargingOrderRefund);
- }
- }
- if(2 == rechargePaymentType){
- RefundReq dto = new RefundReq();
- dto.setOutTradeNo(chargingOrder.getCode());
- dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
- dto.setRefundAmount(refundAmount.toString());
- dto.setRefundReason("充电完成退款");
- RefundResp resp = aliPaymentClient.refund(dto).getData();
- if(null != resp){
- chargingOrderRefundService.save(chargingOrderRefund);
- this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
- }
- }
+ //计算用户标签
+ editUserTag(chargingOrder);
+ //用户推荐奖励
+ referralReward(chargingOrder);
+ //开始构建退款费用
+ refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
+ if (refundAmount.compareTo(BigDecimal.ZERO) > 0) {
+ Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
+ //构建退款明细
+ TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
+ chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+ chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+ chargingOrderRefund.setRefundAmount(refundAmount);
+ chargingOrderRefund.setRefundStatus(1);
+ chargingOrderRefund.setPayType(rechargePaymentType);
+ chargingOrderRefund.setRefundStatus(1);
+ chargingOrderRefund.setCode(chargingOrder.getCode());
+ chargingOrderRefund.setRefundTitle("充电完成退款");
+ chargingOrderRefund.setRefundContent("充电完成退款");
+ chargingOrderRefund.setRefundReason("充电完成退款");
+ chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
+ chargingOrderRefund.setRefundTotalAmount(refundAmount);
+ chargingOrderRefund.setPayAmount(rechargeAmount);
+ if (1 == rechargePaymentType) {
+ WxPaymentRefundModel model = new WxPaymentRefundModel();
+ model.setOut_trade_no(chargingOrder.getCode());
+ model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+ model.setReason("充电完成退款");
+ model.setNotify_url("/payment/wx/refund/notify");
+ WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+ amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
+ amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+ amount.setCurrency("CNY");
+ model.setAmount(amount);
+ R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model);
+ if (200 == result.getCode()) {
+ chargingOrderRefundService.save(chargingOrderRefund);
+ //手续费
+ Map<String, Object> amount1 = (Map<String, Object>) result.getData().get("amount");
+ Object refund_fee1 = amount1.get("refund_fee");
+ BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+ chargingOrderRefund.setRefundFee(refund_fee);
+ chargingOrderRefundService.updateById(chargingOrderRefund);
+ }
+ }
+ if (2 == rechargePaymentType) {
+ RefundReq dto = new RefundReq();
+ dto.setOutTradeNo(chargingOrder.getCode());
+ dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
+ dto.setRefundAmount(refundAmount.toString());
+ dto.setRefundReason("充电完成退款");
+ RefundResp resp = aliPaymentClient.refund(dto).getData();
+ if (null != resp) {
+ chargingOrderRefundService.save(chargingOrderRefund);
+ this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+ }
+ }
+ if (3 == rechargePaymentType) {
+ RefundReq dto = new RefundReq();
+ dto.setOutTradeNo(chargingOrder.getRechargeSerialNumber());
+ dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
+ dto.setRefundAmount(refundAmount.toString());
+ dto.setRefundReason("充电完成退款");
+ RefundResp resp = h5AliPaymentClient.refund(dto).getData();
+ if (null != resp && "10000".equals(resp.getCode())) {
+ chargingOrderRefundService.save(chargingOrderRefund);
+ this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+ }
+ }
+ }
}
+
+ //添加汇总统计数据
+ List<TChargingOrderAccountingStrategy> list4 = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>().eq("charging_order_id", chargingOrder.getId()));
+ BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal serviceMoney = BigDecimal.ZERO;
+ BigDecimal paymentMoney = BigDecimal.ZERO;
+ long time = 0;
+ if (!chargingOrder.getOrderSource().equals(2)) {
+ serviceMoney = serviceMoney.add(service_reduce);
+ paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+ } else {
+ serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+ paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+ }
+ if (chargingOrder.getStartTime() != null && chargingOrder.getEndTime() != null) {
+ LocalDateTime startTime = chargingOrder.getStartTime();
+ LocalDateTime endTime = chargingOrder.getEndTime();
+ // 计算时间差 单位秒
+ time = ChronoUnit.SECONDS.between(startTime, endTime);
+ }
+ TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
+ summaryData.setChargingOrderId(chargingOrder.getId());
+ summaryData.setChargingCapacity(chargingCapacity);
+ summaryData.setChargingDuration(time);
+ summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ chargingOrderSummaryDataService.save(summaryData);
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ lock.unlock();
}
return R.ok();
}
-
-
@Override
- public List<Map<String, Object>> getByDate(List<Long> chargingOrderIds) {
- return this.baseMapper.getByDate(chargingOrderIds);
+ public List<Map<String, Object>> getByDate(LocalDate start, LocalDate end, List<Integer> siteIds) {
+
+ LocalDateTime start1 = start.atStartOfDay();
+ LocalDateTime end1 = end.atTime(LocalTime.MAX);
+ return this.baseMapper.getByDate(start1, end1, siteIds);
}
-
+
@Override
public List<Map<String, Object>> queryPower(List<Integer> siteIds) {
return this.baseMapper.queryPower(siteIds);
}
-
+
@Override
public Map<String, Object> qureryPowerLevel(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
- return this.baseMapper.queryPowerLevel(siteIds,statisticsQueryDto);
+ return this.baseMapper.queryPowerLevel(siteIds, statisticsQueryDto);
}
-
- @Override
- public List<Map<String, Object>> queryOrderCountAndMoneyBySiteIdDate(List<Integer> siteIds) {
- return this.baseMapper.queryOrderCountAndMoneyBySiteIdDate(siteIds);
- }
-
+
+
@Override
public List<Map<String, Object>> usersDay(ChargingStatisticsQueryDto statisticsQueryDto) {
return this.baseMapper.usersDay(statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> usersDay1() {
return this.baseMapper.usersDay1();
}
-
+
@Override
public List<Map<String, Object>> usersByQuery(ChargingStatisticsQueryDto statisticsQueryDto) {
return this.baseMapper.usersByQuery(statisticsQueryDto);
}
+
@Override
public List<Map<String, Object>> usersByQuery1(ChargingStatisticsQueryDto statisticsQueryDto) {
return this.baseMapper.usersByQuery1(statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> getUserTagCount() {
return this.baseMapper.getUserTagCount();
}
-
+
@Override
public List<Map<String, Object>> getVipCount() {
return this.baseMapper.getVipCount();
}
-
+
@Override
public List<Map<String, Object>> unitConsumption(ChargingStatisticsQueryDto statisticsQueryDto) {
return this.baseMapper.unitConsumption(statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> carUserMethod() {
return this.baseMapper.carUserMethod();
}
-
+
@Override
public List<Map<String, Object>> carUserBrand() {
return this.baseMapper.carUserBrand();
}
-
+
@Override
public Map<String, Object> countLocalCar() {
return this.baseMapper.countLocalCar();
}
-
+
@Override
public Double getAver(List<Integer> siteIds) {
return this.baseMapper.getAver(siteIds);
}
-
+
@Override
public List<Map<String, Object>> getLevelEvaluate(List<Integer> siteIds) {
return this.baseMapper.getLevelEvaluate(siteIds);
}
-
-
+
+
@Resource
private TShoppingOrderService shoppingOrderService;
@Resource
@@ -2543,139 +2906,178 @@
private TVipOrderRefundService vipOrderRefundService;
-
-
@Override
public R payRefund(PayOrderRefundDto payOrderQueryDto) {
- if (payOrderQueryDto.getType()==1){
- TChargingOrder tChargingOrder = this.baseMapper.selectById(payOrderQueryDto.getOrderId());
- if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
- return R.fail("退款金额需小于支付金额");
- }
- if ((tChargingOrder.getRechargeAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount()))==0){
- tChargingOrder.setStatus(5);
- }
-
-
- TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
- chargingOrderRefund.setChargingOrderId(tChargingOrder.getId());
- chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
- chargingOrderRefund.setRefundStatus(1);
- chargingOrderRefund.setPayType(tChargingOrder.getRechargePaymentType());
- chargingOrderRefund.setRefundTime(LocalDateTime.now());
- chargingOrderRefund.setCode(tChargingOrder.getCode());
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
- chargingOrderRefund.setRefundTitle("后台退款");
- chargingOrderRefund.setRefundContent("后台退款");
- chargingOrderRefund.setRefundReason("后台退款");
- chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
- chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
- chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
-
- if(1 == tChargingOrder.getRechargePaymentType()){
- WxPaymentRefundModel model = new WxPaymentRefundModel();
- model.setOut_trade_no(tChargingOrder.getCode());
- model.setOut_refund_no(chargingOrderRefund.getRefundCode());
- model.setTransaction_id(tChargingOrder.getRechargeSerialNumber());
- model.setReason("取消订单");
- model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
- WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
- amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
- amount.setTotal(tChargingOrder.getRechargeAmount().multiply(new BigDecimal(100)).intValue());
- amount.setCurrency("CNY");
- model.setAmount(amount);
- R<String> orderR = wxPaymentClient.refundOrderR(model);
- if(200 == orderR.getCode()){
- tChargingOrder.setRefundStatus(2);
- tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
- this.baseMapper.updateById(tChargingOrder);
- chargingOrderRefundService.save(chargingOrderRefund);
- }
- }
-
- if(2 == tChargingOrder.getRechargePaymentType()){
- RefundReq dto = new RefundReq();
- dto.setOutTradeNo(tChargingOrder.getCode());
- dto.setOutRequestNo(tChargingOrder.getCode());
- dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
- dto.setRefundReason("取消订单");
- RefundResp resp = aliPaymentClient.refund(dto).getData();
- if(null != resp){
- chargingOrderRefund.setRefundStatus(2);
- chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
- this.baseMapper.updateById(tChargingOrder);
- chargingOrderRefundService.save(chargingOrderRefund);
-
- }
+ if (payOrderQueryDto.getType() == 1) {
+ TChargingOrder tChargingOrder = this.baseMapper.selectById(payOrderQueryDto.getOrderId());
+ if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
+ return R.fail("退款金额需小于支付金额");
+ }
+ if ((tChargingOrder.getRechargeAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) {
+ tChargingOrder.setStatus(5);
+ }
+
+
+ TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
+ chargingOrderRefund.setChargingOrderId(tChargingOrder.getId());
+ chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
+ chargingOrderRefund.setRefundStatus(1);
+ chargingOrderRefund.setPayType(tChargingOrder.getRechargePaymentType());
+ chargingOrderRefund.setRefundTime(LocalDateTime.now());
+ chargingOrderRefund.setCode(tChargingOrder.getCode());
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+ chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+ chargingOrderRefund.setRefundTitle("后台退款");
+ chargingOrderRefund.setRefundContent("后台退款");
+ chargingOrderRefund.setRefundReason("后台退款");
+ chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
+ chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
+ chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
+
+ if (1 == tChargingOrder.getRechargePaymentType()) {
+ WxPaymentRefundModel model = new WxPaymentRefundModel();
+ model.setOut_trade_no(tChargingOrder.getCode());
+ model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+ model.setTransaction_id(tChargingOrder.getRechargeSerialNumber());
+ model.setReason("取消订单");
+ model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
+ WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+ amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
+ amount.setTotal(tChargingOrder.getRechargeAmount().multiply(new BigDecimal(100)).intValue());
+ amount.setCurrency("CNY");
+ model.setAmount(amount);
+ R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
+ if (200 == orderR.getCode()) {
+ tChargingOrder.setRefundStatus(2);
+ tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ this.baseMapper.updateById(tChargingOrder);
+ chargingOrderRefundService.save(chargingOrderRefund);
+ //手续费
+ Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
+ Object refund_fee1 = amount1.get("refund_fee");
+ BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+ chargingOrderRefund.setRefundFee(refund_fee);
+ chargingOrderRefundService.updateById(chargingOrderRefund);
}
}
- if (payOrderQueryDto.getType()==2){
- TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
- if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
- return R.fail("退款金额需小于支付金额");
+
+ if (2 == tChargingOrder.getRechargePaymentType()) {
+ RefundReq dto = new RefundReq();
+ dto.setOutTradeNo(tChargingOrder.getCode());
+ dto.setOutRequestNo(tChargingOrder.getCode());
+ dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
+ dto.setRefundReason("取消订单");
+ RefundResp resp = aliPaymentClient.refund(dto).getData();
+ if (null != resp) {
+ chargingOrderRefund.setRefundStatus(2);
+ chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ this.baseMapper.updateById(tChargingOrder);
+ chargingOrderRefundService.save(chargingOrderRefund);
+
}
- if ((tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount()))==0){
- tChargingOrder.setStatus(5);
- }
-
- TShoppingOrderRefund chargingOrderRefund = new TShoppingOrderRefund();
- chargingOrderRefund.setShoppingOrderId(tChargingOrder.getId());
- chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
- chargingOrderRefund.setRefundStatus(1);
- chargingOrderRefund.setPayType(tChargingOrder.getPaymentType());
- chargingOrderRefund.setRefundTime(LocalDateTime.now());
- chargingOrderRefund.setCode(tChargingOrder.getCode());
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
- chargingOrderRefund.setRefundTitle("后台退款");
- chargingOrderRefund.setRefundContent("后台退款");
- chargingOrderRefund.setRefundReason("后台退款");
- chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
- chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
- chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
-
- if(1 == tChargingOrder.getPaymentType()){
- WxPaymentRefundModel model = new WxPaymentRefundModel();
- model.setOut_trade_no(tChargingOrder.getCode());
- model.setOut_refund_no(chargingOrderRefund.getRefundCode());
- model.setTransaction_id(tChargingOrder.getSerialNumber());
- model.setReason("取消订单");
- model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
- WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
- amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
- amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
- amount.setCurrency("CNY");
- model.setAmount(amount);
- R<String> orderR = wxPaymentClient.refundOrderR(model);
- if(200 == orderR.getCode()){
- tChargingOrder.setRefundStatus(2);
- tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
- shoppingOrderService.updateById(tChargingOrder);
- shoppingOrderRefundService.save(chargingOrderRefund);
- }
- }
-
- if(2 == tChargingOrder.getPaymentType()){
- RefundReq dto = new RefundReq();
- dto.setOutTradeNo(tChargingOrder.getCode());
- dto.setOutRequestNo(tChargingOrder.getCode());
- dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
- dto.setRefundReason("取消订单");
- RefundResp resp = aliPaymentClient.refund(dto).getData();
- if(null != resp){
- tChargingOrder.setRefundStatus(2);
- tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
- shoppingOrderService.updateById(tChargingOrder);
- shoppingOrderRefundService.save(chargingOrderRefund);
- }
- }
-
}
-
- if (payOrderQueryDto.getType()==3){
+ if (3 == tChargingOrder.getRechargePaymentType()) {
+ RefundReq dto = new RefundReq();
+ dto.setOutTradeNo(tChargingOrder.getRechargeSerialNumber());
+ dto.setOutRequestNo(tChargingOrder.getCode());
+ dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
+ dto.setRefundReason("取消订单");
+ RefundResp resp = h5AliPaymentClient.refund(dto).getData();
+ if (null != resp && "10000".equals(resp.getCode())) {
+ chargingOrderRefund.setRefundStatus(2);
+ chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ this.baseMapper.updateById(tChargingOrder);
+ chargingOrderRefundService.save(chargingOrderRefund);
+
+ }
+ }
+ }
+ if (payOrderQueryDto.getType() == 2) {
+ TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
+ if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
+ return R.fail("退款金额需小于支付金额");
+ }
+ if ((tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) {
+ tChargingOrder.setStatus(5);
+ }
+
+ TShoppingOrderRefund chargingOrderRefund = new TShoppingOrderRefund();
+ chargingOrderRefund.setShoppingOrderId(tChargingOrder.getId());
+ chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
+ chargingOrderRefund.setRefundStatus(1);
+ chargingOrderRefund.setPayType(tChargingOrder.getPaymentType());
+ chargingOrderRefund.setRefundTime(LocalDateTime.now());
+ chargingOrderRefund.setCode(tChargingOrder.getCode());
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+ chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+ chargingOrderRefund.setRefundTitle("后台退款");
+ chargingOrderRefund.setRefundContent("后台退款");
+ chargingOrderRefund.setRefundReason("后台退款");
+ chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
+ chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
+ chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
+
+ if (1 == tChargingOrder.getPaymentType()) {
+ WxPaymentRefundModel model = new WxPaymentRefundModel();
+ model.setOut_trade_no(tChargingOrder.getCode());
+ model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+ model.setTransaction_id(tChargingOrder.getSerialNumber());
+ model.setReason("取消订单");
+ model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
+ WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+ amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
+ amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
+ amount.setCurrency("CNY");
+ model.setAmount(amount);
+ R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
+ if (200 == orderR.getCode()) {
+ tChargingOrder.setRefundStatus(2);
+ tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ shoppingOrderService.updateById(tChargingOrder);
+ shoppingOrderRefundService.save(chargingOrderRefund);
+ //手续费
+ Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
+ Object refund_fee1 = amount1.get("refund_fee");
+ BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+ chargingOrderRefund.setRefundFee(refund_fee);
+ shoppingOrderRefundService.updateById(chargingOrderRefund);
+ }
+ }
+
+ if (2 == tChargingOrder.getPaymentType()) {
+ RefundReq dto = new RefundReq();
+ dto.setOutTradeNo(tChargingOrder.getCode());
+ dto.setOutRequestNo(tChargingOrder.getCode());
+ dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
+ dto.setRefundReason("取消订单");
+ RefundResp resp = aliPaymentClient.refund(dto).getData();
+ if (null != resp) {
+ tChargingOrder.setRefundStatus(2);
+ tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ shoppingOrderService.updateById(tChargingOrder);
+ shoppingOrderRefundService.save(chargingOrderRefund);
+ }
+ }
+// if(3 == tChargingOrder.getPaymentType()){
+// RefundReq dto = new RefundReq();
+// dto.setOutTradeNo(tChargingOrder.getCode());
+// dto.setOutRequestNo(tChargingOrder.getCode());
+// dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
+// dto.setRefundReason("取消订单");
+// RefundResp resp = h5AliPaymentClient.refund(dto).getData();
+// if(null != resp){
+// tChargingOrder.setRefundStatus(2);
+// tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+// shoppingOrderService.updateById(tChargingOrder);
+// shoppingOrderRefundService.save(chargingOrderRefund);
+// }
+// }
+
+ }
+
+ if (payOrderQueryDto.getType() == 3) {
TVipOrder tChargingOrder = vipOrderService.getById(payOrderQueryDto.getOrderId());
- if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
+ if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) {
return R.fail("退款金额需小于支付金额");
}
TVipOrderRefund chargingOrderRefund = new TVipOrderRefund();
@@ -2693,8 +3095,8 @@
chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
-
- if(1 == tChargingOrder.getPaymentType()){
+
+ if (1 == tChargingOrder.getPaymentType()) {
WxPaymentRefundModel model = new WxPaymentRefundModel();
model.setOut_trade_no(tChargingOrder.getCode());
model.setOut_refund_no(chargingOrderRefund.getRefundCode());
@@ -2706,36 +3108,57 @@
amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
amount.setCurrency("CNY");
model.setAmount(amount);
- R<String> orderR = wxPaymentClient.refundOrderR(model);
- if(200 == orderR.getCode()){
+ R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model);
+ if (200 == orderR.getCode()) {
tChargingOrder.setRefundStatus(2);
- tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
vipOrderService.updateById(tChargingOrder);
vipOrderRefundService.save(chargingOrderRefund);
+ //手续费
+ Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount");
+ Object refund_fee1 = amount1.get("refund_fee");
+ BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+ chargingOrderRefund.setRefundFee(refund_fee);
+ vipOrderRefundService.updateById(chargingOrderRefund);
}
}
-
- if(2 == tChargingOrder.getPaymentType()){
+
+ if (2 == tChargingOrder.getPaymentType()) {
RefundReq dto = new RefundReq();
dto.setOutTradeNo(tChargingOrder.getCode());
dto.setOutRequestNo(tChargingOrder.getCode());
dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
dto.setRefundReason("取消订单");
RefundResp resp = aliPaymentClient.refund(dto).getData();
- if(null != resp){
+ if (null != resp) {
tChargingOrder.setRefundStatus(2);
- tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
vipOrderService.updateById(tChargingOrder);
vipOrderRefundService.save(chargingOrderRefund);
}
}
+// if(3 == tChargingOrder.getPaymentType()){
+// RefundReq dto = new RefundReq();
+// dto.setOutTradeNo(tChargingOrder.getCode());
+// dto.setOutRequestNo(tChargingOrder.getCode());
+// dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
+// dto.setRefundReason("取消订单");
+// RefundResp resp = h5AliPaymentClient.refund(dto).getData();
+// if(null != resp){
+// tChargingOrder.setRefundStatus(2);
+// tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+// vipOrderService.updateById(tChargingOrder);
+// vipOrderRefundService.save(chargingOrderRefund);
+// }
+// }
}
return R.ok();
}
-
-
+
+
/**
* 根据车牌号和开始时间查询充电数据
+ *
* @param query
* @return
*/
@@ -2746,17 +3169,19 @@
.eq(TChargingOrder::getRechargePaymentStatus, 2).in(TChargingOrder::getStatus, Arrays.asList(4, 5)));
return one;
}
-
+
@Override
public TSettlementConfirm settlementAdd(SettlementConfirmAdd dto) {
List<Site> data = siteClient.getSiteByIds(Arrays.asList(dto.getSiteId())).getData();
+ List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
+
TSettlementConfirm tSettlementConfirm = new TSettlementConfirm();
- if (!data.isEmpty()){
+ if (!data.isEmpty()) {
tSettlementConfirm.setSiteName(data.get(0).getName());
tSettlementConfirm.setPartnerId(data.get(0).getPartnerId());
- if (data.get(0).getPartnerId()!=null){
+ if (data.get(0).getPartnerId() != null) {
Partner data1 = siteClient.getPartnerR(data.get(0).getPartnerId()).getData();
- if (data1!=null){
+ if (data1 != null) {
tSettlementConfirm.setPartnerName(data1.getName());
tSettlementConfirm.setPartnerId(data1.getId());
}
@@ -2767,19 +3192,17 @@
// 将这两个时间转化为localDateTime
// 创建 DateTimeFormatter 对象,指定格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
-
+
// 将字符串解析为 LocalDateTime 对象
LocalDateTime localDateTime = LocalDateTime.parse(startTime, formatter);
LocalDateTime localDateTime1 = LocalDateTime.parse(endTime, formatter);
tSettlementConfirm.setEndTime(localDateTime1);
tSettlementConfirm.setStartTime(localDateTime);
-
+
// 根据站点id和开始时间和结束时间和归属日期 查询充电订单列表
QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
- .eq("site_id", dto.getSiteId())
- .eq("status", 5)
- .eq("recharge_payment_status",2);
- switch (dto.getType()){
+ .eq("site_id", dto.getSiteId());
+ switch (dto.getType()) {
case 1:
eq.between("pay_time", localDateTime, localDateTime1);
break;
@@ -2807,40 +3230,51 @@
// 支付订单金额 需要减去退款金额
BigDecimal paymentAmount = new BigDecimal("0");
for (TChargingOrder tChargingOrder : tChargingOrders) {
- // 累加充电总度数
- if (tChargingOrder.getChargingCapacity()!=null){
- chargingElectronic = chargingElectronic.add(tChargingOrder.getChargingCapacity());
-
+ if (null == tChargingOrder.getStatus() || 5 != tChargingOrder.getStatus()) {
+ continue;
}
+ List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(tChargingOrder.getId())).collect(Collectors.toList());
+ BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 累加充电总度数
+ chargingElectronic = chargingElectronic.add(chargingCapacity);
// 累加分佣
- if (tChargingOrder.getSharingAmount()!=null) {
- sharingAmount = sharingAmount.add(tChargingOrder.getSharingAmount());
+ if (tChargingOrder.getOrderSource() == 2) {
+ sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
}
// 累加电费
- if (tChargingOrder.getElectrovalence()!=null) {
- electrovalence = electrovalence.add(tChargingOrder.getElectrovalence());
+ electrovalence = electrovalence.add(electronic_reduce);
+ if (tChargingOrder.getPaymentAmount() != null && tChargingOrder.getOrderSource() != 2) {
+ paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
+
}
+ if (tChargingOrder.getRechargeAmount() != null) {
+ orderCommission = orderCommission.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006"))
+ .setScale(2, BigDecimal.ROUND_DOWN));
+ }
+
// 累加服务费
- if (tChargingOrder.getServiceCharge()!=null){
- serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge());
-
+ if (tChargingOrder.getServiceCharge() != null) {
+ if (tChargingOrder.getOrderSource() == 2) {
+ serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+ paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+ } else {
+ serviceCharge = serviceCharge.add(service_reduce);
+ }
}
// 累加会员折扣
- if (tChargingOrder.getVipDiscountAmount()!=null){
+ if (tChargingOrder.getVipDiscountAmount() != null) {
vipDiscount = vipDiscount.add(tChargingOrder.getVipDiscountAmount());
}
// 累加优惠券折扣
- if (tChargingOrder.getCouponDiscountAmount()!=null){
+ if (tChargingOrder.getCouponDiscountAmount() != null) {
couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount());
}
- if (tChargingOrder.getPaymentAmount()!=null){
- paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
- orderCommission = orderCommission.add(tChargingOrder.getPaymentAmount().multiply(new BigDecimal("0.006"))
- .setScale(2,BigDecimal.ROUND_DOWN));
- }
-
+
+
}
-
+
// 三方交易手续费 三方收费*0.6%
commissionAmount = sharingAmount.multiply(new BigDecimal("0.006"));
tSettlementConfirm.setSharingAmount(sharingAmount.setScale(2, RoundingMode.HALF_DOWN));
@@ -2856,8 +3290,8 @@
tSettlementConfirm.setVipDiscount(vipDiscount);
tSettlementConfirm.setCouponDiscount(couponDiscount);
tSettlementConfirm.setType(dto.getType());
-
- if (dto.getState() == 2){
+
+ if (dto.getState() == 2) {
tSettlementConfirm.setServiceMoney(dto.getServiceCharge().subtract(dto.getVenue()).subtract(dto.getClean())
.subtract(dto.getMaintain()).multiply(dto.getServicePartner()));
tSettlementConfirm.setSupplyElectronic(dto.getSupplyElectronic());
@@ -2866,7 +3300,7 @@
tSettlementConfirm.setClean(dto.getClean());
tSettlementConfirm.setLossElectronic(dto.getMeteringElectronic().subtract(dto.getChargingElectronic()));
tSettlementConfirm.setMaintain(dto.getMaintain());
-
+
tSettlementConfirm.setMeteringElectronic(dto.getMeteringElectronic());
tSettlementConfirm.setProportionPartner(dto.getProportionPartner());
tSettlementConfirm.setProportionMoney(dto.getProportionMoney());
@@ -2884,7 +3318,7 @@
BigDecimal subtract2 = multiply.subtract(subtract1);
tSettlementConfirm.setNewMoney(dto.getServiceCharge().subtract(dto.getVenue()).subtract(dto.getClean())
.subtract(dto.getMaintain()).multiply(subtract9).subtract(subtract1));
-
+
tSettlementConfirm.setTotalService(dto.getTotalService());
tSettlementConfirm.setServiceRemark(dto.getServiceRemark());
tSettlementConfirm.setDistribution(dto.getDistribution());
@@ -2898,18 +3332,18 @@
}
return tSettlementConfirm;
}
-
+
@Override
public PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto) {
String startTime = null;
String endTime = null;
- if (StringUtils.hasLength(dto.getStartTime())){
+ if (StringUtils.hasLength(dto.getStartTime())) {
dto.setType(1);
String[] split = dto.getStartTime().split(" - ");
startTime = split[0];
endTime = split[1];
}
- if (StringUtils.hasLength(dto.getEndTime())){
+ if (StringUtils.hasLength(dto.getEndTime())) {
dto.setType(2);
String[] split = dto.getEndTime().split(" - ");
startTime = split[0];
@@ -2923,27 +3357,27 @@
Integer roleType = sysUser.getRoleType();
//如果没传siteId,获取当前登陆人所有的siteIds
List<Integer> siteIds = new ArrayList<>();
- if (dto.getSiteIds()==null){
- if (userId != null){
+ if (dto.getSiteIds() == null) {
+ if (userId != null) {
List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
for (GetSiteListDTO datum : data) {
siteIds.add(datum.getId());
}
}
- }else {
+ } else {
siteIds.add(dto.getSiteIds());
}
- if (siteIds.isEmpty()){
+ if (siteIds.isEmpty()) {
siteIds.add(-1);
- }else{
- if (roleType == 2){
+ } else {
+ if (roleType == 2) {
List<Integer> integers = new ArrayList<>();
for (Integer siteId : siteIds) {
// 校验有没有这个站点的权限
- List<Boolean> t1= partnerClient.getSettlementListMenu(sysUser.getObjectId(),siteId).getData();
-
+ List<Boolean> t1 = partnerClient.getSettlementListMenu(sysUser.getObjectId(), siteId).getData();
+
Boolean b = t1.get(2);
- if (b){
+ if (b) {
integers.add(siteId);
}
}
@@ -2951,58 +3385,65 @@
}
}
dto.setSiteIdss(siteIds);
- PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
- List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
-
+ PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
+ List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo, dto);
+
for (TSettlementConfirm tSettlementConfirm : list) {
- if (roleType==2){
+ if (roleType == 2) {
List<Boolean> data = partnerClient.getSettlementListMenu(sysUser.getObjectId(), tSettlementConfirm.getSiteId()).getData();
tSettlementConfirm.setAuthDownLoad(data.get(0));
tSettlementConfirm.setAuthDelete(data.get(1));
}
tSettlementConfirm.setUid(tSettlementConfirm.getId().toString());
List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
- if (!data1.isEmpty()){
+ if (!data1.isEmpty()) {
tSettlementConfirm.setSiteName(data1.get(0).getName());
Partner data = siteClient.getPartnerR(data1.get(0).getPartnerId()).getData();
- if (data!=null){
+ if (data != null) {
tSettlementConfirm.setPartnerName(data.getName());
}
}
-
+
String format = tSettlementConfirm.getStartTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
String format1 = tSettlementConfirm.getEndTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
- tSettlementConfirm.setTime(format+"至"+format1);
-
-
+ tSettlementConfirm.setTime(format + "至" + format1);
+
+
}
pageInfo.setRecords(list);
return pageInfo;
}
-
+
+ @Autowired
+ private TChargingOrderService chargingOrderService;
+
@Override
public SettlementTotalVO settlementTotal(String time) {
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 (userId != null) {
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ for (GetSiteListDTO datum : data) {
+ siteIds.add(datum.getId());
+ }
}
- if (siteIds.isEmpty()){
+ if (siteIds.isEmpty()) {
siteIds.add(-1);
}
+ List<Site> siteList = siteClient.getSiteAll().getData();
+ List<TChargingPile> pileList = chargingGunClient.getAllPile().getData();
+ List<TChargingOrder> totalOrder = chargingOrderService.list(new LambdaQueryWrapper<>(TChargingOrder.class)
+ .eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getStatus, 5));
SettlementTotalVO res = new SettlementTotalVO();
- List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
+ List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time, siteIds);
LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
// 减少一个月
LocalDateTime minus = parse.minusMonths(1);
- List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
+ List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time, siteIds);
// 合计
List<TSettlementConfirm> total = new ArrayList<>();
-
+
TSettlementConfirm tSettlementConfirm1 = new TSettlementConfirm();
BigDecimal meteringElectronic = new BigDecimal("0");
BigDecimal chargingElectronic = new BigDecimal("0");
@@ -3030,26 +3471,24 @@
BigDecimal orderCommission = new BigDecimal("0");
BigDecimal vipDiscount = new BigDecimal("0");
BigDecimal couponDiscount = new BigDecimal("0");
-// tSettlementConfirm1.setIncomePercentage();
-// tSettlementConfirm1.setTotalPercentage();
tSettlementConfirm1.setElectronicRefund(0);
// 上月成本合计
- BigDecimal beforeCost= new BigDecimal("0");
+ BigDecimal beforeCost = new BigDecimal("0");
// 上月利润合计
- BigDecimal beforeIncome= new BigDecimal("0");
+ BigDecimal beforeIncome = new BigDecimal("0");
int i = 1;
for (TSettlementConfirm tSettlementConfirm : list1) {
tSettlementConfirm.setXuhao(i);
tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
- List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
- if (!data1.isEmpty()){
- tSettlementConfirm.setSiteName(data1.get(0).getName());
+ Site site = siteList.stream().filter(e -> e.getId().equals(tSettlementConfirm.getSiteId())).findFirst().orElse(null);
+ if (site != null) {
+ tSettlementConfirm.setSiteName(site.getName());
}
- if (tSettlementConfirm.getMeteringElectronic()!=null){
+ if (tSettlementConfirm.getMeteringElectronic() != null) {
meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
}
- if (tSettlementConfirm.getLossElectronic()!=null){
+ if (tSettlementConfirm.getLossElectronic() != null) {
lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
}
income = income.add(tSettlementConfirm.getIncome());
@@ -3075,12 +3514,12 @@
orderCommission = orderCommission.add(tSettlementConfirm.getOrderCommission());
vipDiscount = vipDiscount.add(tSettlementConfirm.getVipDiscount());
couponDiscount = couponDiscount.add(tSettlementConfirm.getCouponDiscount());
-
+
// 查询结算确认单开始时间和结束时间的单子
QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
.eq("site_id", tSettlementConfirm.getSiteId())
- .eq("recharge_payment_status",2);
- switch (tSettlementConfirm.getType()){
+ .eq("recharge_payment_status", 2);
+ switch (tSettlementConfirm.getType()) {
case 1:
eq.between("start_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
break;
@@ -3088,26 +3527,17 @@
eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
break;
}
- List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
- Map<String,TChargingOrder> map = new HashMap<>();
- StringBuilder stringBuilder = new StringBuilder();
- for (TChargingOrder tChargingOrder : tChargingOrders) {
- stringBuilder.append(tChargingOrder.getCode()).append(",");
-
- }
+ List<TChargingOrder> tChargingOrders = totalOrder.stream().filter(e -> e.getPayTime()
+ .isBefore(tSettlementConfirm.getEndTime())
+ && e.getPayTime().isAfter(tSettlementConfirm.getStartTime()) && e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
// 充电总时长
-
- Long temp = 1L;
- if (StringUtils.hasLength(stringBuilder.toString())){
- String substring = stringBuilder.substring(0, stringBuilder.length() - 1);
- for (String s : substring.split(",")) {
- UploadRealTimeMonitoringData data6 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(s).getData();
- if (data6!=null){
- temp+=(data6.getCumulative_charging_time()*60);
-
- }
-
- }
+ Long temp = 0L;
+ for (TChargingOrder tChargingOrder : tChargingOrders) {
+ LocalDateTime startTime = tChargingOrder.getStartTime();
+ LocalDateTime endTime = tChargingOrder.getEndTime();
+ // 计算时间差 单位秒
+ long between = ChronoUnit.SECONDS.between(startTime, endTime);
+ temp += between;
}
List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
// 计算充电桩的功率平均值
@@ -3115,18 +3545,17 @@
for (TChargingPile datum : data) {
bigDecimal = bigDecimal.add(datum.getRatedPower());
}
-
-
+
tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
//利用率=充电量/(桩数量*功率*时间)
- List<TChargingPile> data2 = chargingPileClient.getChargingPileBySiteId(tSettlementConfirm.getSiteId()).getData();
+ List<TChargingPile> data2 = pileList.stream().filter(e -> e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
BigDecimal bigDecimal2 = new BigDecimal("0");
-
- if (data2!=null && (!data2.isEmpty())){
+
+ if (data2 != null && (!data2.isEmpty())) {
for (TChargingPile tChargingPile : data2) {
bigDecimal2 = bigDecimal2.add(tChargingPile.getRatedPower());
}
- BigDecimal bigDecimal1 = new BigDecimal(data2.size()+"");
+ BigDecimal bigDecimal1 = new BigDecimal(data2.size() + "");
// 平均功率
BigDecimal divide = bigDecimal2.divide(bigDecimal1, 2, RoundingMode.HALF_DOWN);
// 充电量
@@ -3135,27 +3564,27 @@
BigDecimal bigDecimal3 = new BigDecimal(data2.size());
BigDecimal multiply = chargingElectronic1.multiply(new BigDecimal("24"));
BigDecimal multiply1 = bigDecimal3.multiply(divide).multiply(new BigDecimal(temp));
- tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1,2,RoundingMode.HALF_DOWN)+"");
- }else{
+ tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1, 2, RoundingMode.HALF_DOWN) + "");
+ } else {
tSettlementConfirm.setRate("");
}
-
-
+
+
for (TSettlementConfirm settlementConfirm : list2) {
int value = parse.getMonth().getValue();
settlementConfirm.setMonth(value);
settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
- if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
+ if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())) {
// 电站相同比较收入涨幅跌幅
- if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){
- BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome(),2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
- tSettlementConfirm.setIncomePercentage(subtract+"%");
- }else {
- tSettlementConfirm.setIncomePercentage("100"+"%");
-
+ if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO) > 0) {
+ BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome(), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+ tSettlementConfirm.setIncomePercentage(subtract + "%");
+ } else {
+ tSettlementConfirm.setIncomePercentage("100" + "%");
+
}
-
+
// 比较总利润 收入合计-成本合计
BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost());
BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost());
@@ -3163,7 +3592,8 @@
.divide(subtract2, 2, RoundingMode.HALF_DOWN)
.multiply(new BigDecimal("100"))
.setScale(2, RoundingMode.HALF_DOWN);
- tSettlementConfirm.setTotalPercentage(bigDecimal1+"%"); }
+ tSettlementConfirm.setTotalPercentage(bigDecimal1 + "%");
+ }
beforeCost = beforeCost.add(settlementConfirm.getCost());
beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
}
@@ -3198,22 +3628,21 @@
tSettlementConfirm.setVipDiscount(vipDiscount);
tSettlementConfirm.setCouponDiscount(couponDiscount);
// 本月
- if (beforeIncome.compareTo(new BigDecimal("0")) == 0){
- tSettlementConfirm.setIncomePercentage(0+"%");
- tSettlementConfirm.setIncomePercentage(0+"%");
- }else{
- BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome,2,RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
- tSettlementConfirm.setIncomePercentage(subtract+"%");
- tSettlementConfirm.setIncomePercentage(subtract+"%");
-
+ if (beforeIncome.compareTo(new BigDecimal("0")) == 0) {
+ tSettlementConfirm.setIncomePercentage(0 + "%");
+ tSettlementConfirm.setIncomePercentage(0 + "%");
+ } else {
+ BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome, 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+ tSettlementConfirm.setIncomePercentage(subtract + "%");
+ tSettlementConfirm.setIncomePercentage(subtract + "%");
}
// 比较总利润 收入合计-成本合计
BigDecimal subtract1 = income.subtract(cost);
BigDecimal subtract2 = beforeIncome.subtract(beforeCost);
- if (subtract2.compareTo(new BigDecimal("0")) == 0){
- tSettlementConfirm.setTotalPercentage(0+"%");
- }else{
- tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2,2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
+ if (subtract2.compareTo(new BigDecimal("0")) == 0) {
+ tSettlementConfirm.setTotalPercentage(0 + "%");
+ } else {
+ tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2, 2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")) + "%");
}
tSettlementConfirm.setElectronicRefund(0);
// 查询上次汇报数据 进行比对涨幅跌幅
@@ -3222,28 +3651,34 @@
res.setList2(total);
return res;
}
+
@Override
- public SettlementTotalVO settlementTotalR(String time,Long userId) {
+ public SettlementTotalVO settlementTotalR(String time, Long userId) {
//如果没传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 (userId != null) {
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ for (GetSiteListDTO datum : data) {
+ siteIds.add(datum.getId());
+ }
}
- if (siteIds.isEmpty()){
+ if (siteIds.isEmpty()) {
siteIds.add(-1);
}
+ List<Site> siteList = siteClient.getSiteAll().getData();
+ List<TChargingGun> gunList = chargingGunClient.getAllGun().getData();
+ List<TChargingPile> pileList = chargingGunClient.getAllPile().getData();
+ List<TAppUser> userList = appUserClient.getAllUser().getData();
+ List<TAppUserCar> carList = appUserCarClient.getAllCar().getData();
+ List<TChargingOrder> totalOrder = chargingOrderService.list(new LambdaQueryWrapper<>(TChargingOrder.class)
+ .eq(TChargingOrder::getRechargePaymentStatus, 2));
SettlementTotalVO res = new SettlementTotalVO();
- List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
+ List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time, siteIds);
LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- // 减少一个月
- LocalDateTime minus = parse.minusMonths(1);
- List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
+ List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time, siteIds);
// 合计
List<TSettlementConfirm> total = new ArrayList<>();
-
+
TSettlementConfirm tSettlementConfirm1 = new TSettlementConfirm();
BigDecimal meteringElectronic = new BigDecimal("0");
BigDecimal chargingElectronic = new BigDecimal("0");
@@ -3275,22 +3710,22 @@
// tSettlementConfirm1.setTotalPercentage();
tSettlementConfirm1.setElectronicRefund(0);
// 上月成本合计
- BigDecimal beforeCost= new BigDecimal("0");
+ BigDecimal beforeCost = new BigDecimal("0");
// 上月利润合计
- BigDecimal beforeIncome= new BigDecimal("0");
+ BigDecimal beforeIncome = new BigDecimal("0");
int i = 1;
for (TSettlementConfirm tSettlementConfirm : list1) {
tSettlementConfirm.setXuhao(i);
tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
- List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
- if (!data1.isEmpty()){
+ List<Site> data1 = siteList.stream().filter(e -> e.getId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
+ if (!data1.isEmpty()) {
tSettlementConfirm.setSiteName(data1.get(0).getName());
}
- if (tSettlementConfirm.getMeteringElectronic()!=null){
+ if (tSettlementConfirm.getMeteringElectronic() != null) {
meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
}
- if (tSettlementConfirm.getLossElectronic()!=null){
+ if (tSettlementConfirm.getLossElectronic() != null) {
lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
}
income = income.add(tSettlementConfirm.getIncome());
@@ -3316,12 +3751,12 @@
orderCommission = orderCommission.add(tSettlementConfirm.getOrderCommission());
vipDiscount = vipDiscount.add(tSettlementConfirm.getVipDiscount());
couponDiscount = couponDiscount.add(tSettlementConfirm.getCouponDiscount());
-
+
// 查询结算确认单开始时间和结束时间的单子
QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
.eq("site_id", tSettlementConfirm.getSiteId())
- .eq("recharge_payment_status",2);
- switch (tSettlementConfirm.getType()){
+ .eq("recharge_payment_status", 2);
+ switch (tSettlementConfirm.getType()) {
case 1:
eq.between("start_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
break;
@@ -3329,26 +3764,18 @@
eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
break;
}
- List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
- Map<String,TChargingOrder> map = new HashMap<>();
- StringBuilder stringBuilder = new StringBuilder();
- for (TChargingOrder tChargingOrder : tChargingOrders) {
- stringBuilder.append(tChargingOrder.getCode()).append(",");
-
- }
+
+ List<TChargingOrder> tChargingOrders = totalOrder.stream().filter(e -> e.getPayTime()
+ .isBefore(tSettlementConfirm.getEndTime())
+ && e.getPayTime().isAfter(tSettlementConfirm.getStartTime()) && e.getSiteId().equals(tSettlementConfirm.getSiteId())).collect(Collectors.toList());
// 充电总时长
-
- Long temp = 1L;
- if (StringUtils.hasLength(stringBuilder.toString())){
- String substring = stringBuilder.substring(0, stringBuilder.length() - 1);
- for (String s : substring.split(",")) {
- UploadRealTimeMonitoringData data6 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(s).getData();
- if (data6!=null){
- temp+=(data6.getCumulative_charging_time()*60);
-
- }
-
- }
+ Long temp = 0L;
+ for (TChargingOrder tChargingOrder : tChargingOrders) {
+ LocalDateTime startTime = tChargingOrder.getStartTime();
+ LocalDateTime endTime = tChargingOrder.getEndTime();
+ // 计算时间差 单位秒
+ long between = ChronoUnit.SECONDS.between(startTime, endTime);
+ temp += between;
}
List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
// 计算充电桩的功率平均值
@@ -3356,18 +3783,18 @@
for (TChargingPile datum : data) {
bigDecimal = bigDecimal.add(datum.getRatedPower());
}
-
-
+
+
tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
//利用率=充电量/(桩数量*功率*时间)
List<TChargingPile> data2 = chargingPileClient.getChargingPileBySiteId(tSettlementConfirm.getSiteId()).getData();
BigDecimal bigDecimal2 = new BigDecimal("0");
-
- if (data2!=null && (!data2.isEmpty())){
+
+ if (data2 != null && (!data2.isEmpty())) {
for (TChargingPile tChargingPile : data2) {
bigDecimal2 = bigDecimal2.add(tChargingPile.getRatedPower());
}
- BigDecimal bigDecimal1 = new BigDecimal(data2.size()+"");
+ BigDecimal bigDecimal1 = new BigDecimal(data2.size() + "");
// 平均功率
BigDecimal divide = bigDecimal2.divide(bigDecimal1, 2, RoundingMode.HALF_DOWN);
// 充电量
@@ -3376,27 +3803,27 @@
BigDecimal bigDecimal3 = new BigDecimal(data2.size());
BigDecimal multiply = chargingElectronic1.multiply(new BigDecimal("24"));
BigDecimal multiply1 = bigDecimal3.multiply(divide).multiply(new BigDecimal(temp));
- tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1,2,RoundingMode.HALF_DOWN)+"");
- }else{
+ tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1, 2, RoundingMode.HALF_DOWN) + "");
+ } else {
tSettlementConfirm.setRate("");
}
-
-
+
+
for (TSettlementConfirm settlementConfirm : list2) {
int value = parse.getMonth().getValue();
settlementConfirm.setMonth(value);
settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
- if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
+ if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())) {
// 电站相同比较收入涨幅跌幅
- if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){
- BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome(),2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
- tSettlementConfirm.setIncomePercentage(subtract+"%");
- }else {
- tSettlementConfirm.setIncomePercentage("100"+"%");
-
+ if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO) > 0) {
+ BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome(), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+ tSettlementConfirm.setIncomePercentage(subtract + "%");
+ } else {
+ tSettlementConfirm.setIncomePercentage("100" + "%");
+
}
-
+
// 比较总利润 收入合计-成本合计
BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost());
BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost());
@@ -3404,7 +3831,8 @@
.divide(subtract2, 2, RoundingMode.HALF_DOWN)
.multiply(new BigDecimal("100"))
.setScale(2, RoundingMode.HALF_DOWN);
- tSettlementConfirm.setTotalPercentage(bigDecimal1+"%"); }
+ tSettlementConfirm.setTotalPercentage(bigDecimal1 + "%");
+ }
beforeCost = beforeCost.add(settlementConfirm.getCost());
beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
}
@@ -3439,22 +3867,22 @@
tSettlementConfirm.setVipDiscount(vipDiscount);
tSettlementConfirm.setCouponDiscount(couponDiscount);
// 本月
- if (beforeIncome.compareTo(new BigDecimal("0")) == 0){
- tSettlementConfirm.setIncomePercentage(0+"%");
- tSettlementConfirm.setIncomePercentage(0+"%");
- }else{
- BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome,2,RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
- tSettlementConfirm.setIncomePercentage(subtract+"%");
- tSettlementConfirm.setIncomePercentage(subtract+"%");
-
+ if (beforeIncome.compareTo(new BigDecimal("0")) == 0) {
+ tSettlementConfirm.setIncomePercentage(0 + "%");
+ tSettlementConfirm.setIncomePercentage(0 + "%");
+ } else {
+ BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome, 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+ tSettlementConfirm.setIncomePercentage(subtract + "%");
+ tSettlementConfirm.setIncomePercentage(subtract + "%");
+
}
// 比较总利润 收入合计-成本合计
BigDecimal subtract1 = income.subtract(cost);
BigDecimal subtract2 = beforeIncome.subtract(beforeCost);
- if (subtract2.compareTo(new BigDecimal("0")) == 0){
- tSettlementConfirm.setTotalPercentage(0+"%");
- }else{
- tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2,2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
+ if (subtract2.compareTo(new BigDecimal("0")) == 0) {
+ tSettlementConfirm.setTotalPercentage(0 + "%");
+ } else {
+ tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2, 2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")) + "%");
}
tSettlementConfirm.setElectronicRefund(0);
// 查询上次汇报数据 进行比对涨幅跌幅
@@ -3463,79 +3891,80 @@
res.setList2(total);
return res;
}
-
+
@Override
public List<Map<String, Object>> countBySource(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
- return this.baseMapper.countBySource(siteIds,statisticsQueryDto);
+ return this.baseMapper.countBySource(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> equipmentUserType1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
- return this.baseMapper.equipmentUserType1(siteIds,statisticsQueryDto);
+ return this.baseMapper.equipmentUserType1(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> equipmentUserType2(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
- return this.baseMapper.equipmentUserType2(siteIds,statisticsQueryDto);
+ return this.baseMapper.equipmentUserType2(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> equipmentMapbroke1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
- return this.baseMapper.equipmentMapbroke1(siteIds,statisticsQueryDto);
+ return this.baseMapper.equipmentMapbroke1(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> equipmentMapbroke2(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
- return this.baseMapper.equipmentMapbroke2(siteIds,statisticsQueryDto);
+ return this.baseMapper.equipmentMapbroke2(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> equipmentMapOut1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
- return this.baseMapper.equipmentMapOut1(siteIds,statisticsQueryDto);
+ return this.baseMapper.equipmentMapOut1(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> equipmentMapOut2(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
- return this.baseMapper.equipmentMapOut2(siteIds,statisticsQueryDto);
+ return this.baseMapper.equipmentMapOut2(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> needElec(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
- return this.baseMapper.needElec(siteIds,statisticsQueryDto);
+ return this.baseMapper.needElec(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> getHourType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
- return this.baseMapper.getHourType(siteIds,statisticsQueryDto);
+ return this.baseMapper.getHourType(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> getDateType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
- return this.baseMapper.getDateType(siteIds,statisticsQueryDto);
+ return this.baseMapper.getDateType(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> getMonthType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
- return this.baseMapper.getMonthType(siteIds,statisticsQueryDto);
+ return this.baseMapper.getMonthType(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> getchargingCapacity(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
- return this.baseMapper.getchargingCapacity(siteIds,statisticsQueryDto);
+ return this.baseMapper.getchargingCapacity(siteIds, statisticsQueryDto);
}
-
+
@Override
public List<Map<String, Object>> countAllUserData() {
return this.baseMapper.countAllUserData();
}
-
+
@Override
public List<Map<String, Object>> needElec1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
- return this.baseMapper.needElec1(siteIds,statisticsQueryDto);
+ return this.baseMapper.needElec1(siteIds, statisticsQueryDto);
}
/**
* 获取充电结束页面详情
+ *
* @param id
* @return
*/
@@ -3544,7 +3973,7 @@
EndOfChargePageInfo info = new EndOfChargePageInfo();
TChargingOrder chargingOrder = this.getById(id);
Long userId = tokenService.getLoginUserApplet().getUserId();
- if(!chargingOrder.getAppUserId().equals(userId)){
+ if (!chargingOrder.getAppUserId().equals(userId)) {
throw new RuntimeException("权限不足");
}
info.setId(id);
@@ -3567,7 +3996,7 @@
info.setDuration(0 == hour ? String.format("%s分钟", second) : String.format("%s小时%s分钟", hour, second));
return info;
}
-
+
@Override
public Long countNoTag() {
return this.baseMapper.countNoTag();
@@ -3577,27 +4006,27 @@
@Override
public List<TChargingOrder> getChargingOrder(TChargingOrderVo order) {
LambdaQueryWrapper<TChargingOrder> queryWrapper = new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getDelFlag, 0);
- if(null != order.getChargingPileId()){
+ if (null != order.getChargingPileId()) {
queryWrapper.eq(TChargingOrder::getChargingPileId, order.getChargingPileId());
}
- if(null != order.getChargingGunId()){
+ if (null != order.getChargingGunId()) {
queryWrapper.eq(TChargingOrder::getChargingGunId, order.getChargingGunId());
}
- if(null != order.getStatus()){
+ if (null != order.getStatus()) {
queryWrapper.eq(TChargingOrder::getStatus, order.getStatus());
}
- if(null != order.getAppUserId()){
+ if (null != order.getAppUserId()) {
queryWrapper.eq(TChargingOrder::getAppUserId, order.getAppUserId());
}
- if(null != order.getStatusList()){
+ if (null != order.getStatusList()) {
queryWrapper.in(TChargingOrder::getStatus, order.getStatusList());
}
- if(null != order.getEndMode()){
+ if (null != order.getEndMode()) {
queryWrapper.eq(TChargingOrder::getEndMode, order.getEndMode());
}
return this.list(queryWrapper.orderByDesc(TChargingOrder::getCreateTime));
}
-
+
@Override
public Long countCar(List<String> brands) {
return this.baseMapper.countCar(brands);
@@ -3606,6 +4035,7 @@
/**
* 添加三方平台充电订单数据
+ *
* @param query
*/
@Override
@@ -3613,7 +4043,7 @@
//检查当前枪是否是正在使用中
TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, query.getChargingGunId())
.in(TChargingOrder::getStatus, Arrays.asList(1, 2, 3)).eq(TChargingOrder::getDelFlag, 0));
- if(null != one){
+ if (null != one) {
return R.fail("充电枪正在充电中,启动失败");
}
@@ -3640,9 +4070,9 @@
chargingOrder.setTripartitePlatformName(operator.getName());
chargingOrder.setStartChargeSeq(query.getStartChargeSeq());
//车辆信息
- if(StringUtils.hasLength(query.getPlateNum())){
+ if (StringUtils.hasLength(query.getPlateNum())) {
TAppUserCar appUserCar = appUserCarClient.getAppUserCarByLicensePlate(query.getPlateNum()).getData();
- if(null != appUserCar){
+ if (null != appUserCar) {
chargingOrder.setAppUserCarId(appUserCar.getId());
}
chargingOrder.setPlateNum(query.getPlateNum());
@@ -3653,11 +4083,10 @@
chargingOrder.setStatus(2);
chargingOrder.setPayTime(LocalDateTime.now());
chargingOrder.setChargeAmount(chargingOrder.getRechargeAmount());
- chargingOrder.setVipDiscountAmount(BigDecimal.ZERO);
this.save(chargingOrder);
Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
- if(null == accountingStrategyId){
+ if (null == accountingStrategyId) {
Site site = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData().get(0);
//查询站点上面的计费策略
accountingStrategyId = site.getAccountingStrategyId();
@@ -3700,15 +4129,15 @@
platformStartCharging.setAccount_balance(rechargeAmount);
log.info(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString());
sendMessageClient.platformStartCharging(platformStartCharging);
- //异步线程检测远程启动的应答结果。如果失败,则需要全额退款
- Long id = chargingOrder.getId();
- //执行5分钟的定时任务检测
- ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
- scheduler.scheduleAtFixedRate(()->{
- if(timingDetection(id)){
- scheduler.shutdown();
- }
- }, 5, 1, TimeUnit.SECONDS);
+// //异步线程检测远程启动的应答结果。如果失败,则需要全额退款
+// Long id = chargingOrder.getId();
+// //执行5分钟的定时任务检测
+// ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+// scheduler.scheduleAtFixedRate(()->{
+// if(timingDetection(id)){
+// scheduler.shutdown();
+// }
+// }, 5, 1, TimeUnit.SECONDS);
//推送三方平台订单状态
tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
@@ -3718,6 +4147,7 @@
/**
* 三方平台停止充电操作
+ *
* @param startChargeSeq
* @return
*/
@@ -3725,10 +4155,10 @@
public R tripartitePlatformStopCharge(String startChargeSeq) {
TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getStartChargeSeq, startChargeSeq));
Integer status = order.getStatus();
- if(status != 3){
+ if (status != 3) {
return R.fail("还未开始充电");
}
- if(status == 4 || status == 5){
+ if (status == 4 || status == 5) {
return R.fail("不能重复操作");
}
TChargingOrder chargingOrder = new TChargingOrder();
@@ -3738,14 +4168,13 @@
chargingOrder.setStatus(4);
chargingOrder.setEndMode(1);
this.updateById(chargingOrder);
-
tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
String code1 = order.getCode();
TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
//异步线程处理停机
ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1);
- cachedThreadPool.execute(()->{
+ cachedThreadPool.execute(() -> {
//调用硬件停止充电,停止成功后开始计算费用退款
TChargingPile chargingPile = chargingPileClient.getChargingPileById(order.getChargingPileId()).getData();
PlatformStopCharging platformStopCharging = new PlatformStopCharging();
@@ -3754,6 +4183,12 @@
sendMessageClient.platformStopCharging(platformStopCharging);
log.info(code1 + ":-------------------远程停止充电请求-------------------");
log.info(platformStopCharging.toString());
+
+ //推送监管平台订单状态和订单详情
+ ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
+ BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
+ chargingMessageClient.pushOrderInfo(chargingOrderVo);
+ chargingMessageClient.pushOrderStatus(chargingOrderVo);
});
return R.ok();
}
@@ -3761,6 +4196,7 @@
/**
* 获取充电后没有扣除费用的数据
+ *
* @return
*/
@Override
@@ -3769,7 +4205,7 @@
.ne(TChargingOrder::getElectricity, 0).in(TChargingOrder::getStatus, Arrays.asList(4, 5)));
List<Map<String, Object>> mapList = new ArrayList<>();
for (TChargingOrder order : list) {
- TransactionRecord transactionRecord = transactionRecordClient.findTransactionRecord(order.getCode()).getData();
+ TransactionRecord transactionRecord = transactionRecordService.findOne(order.getCode());
Map<String, Object> map = new HashMap<>();
map.put("order", order);
map.put("transactionRecord", transactionRecord);
@@ -3777,4 +4213,159 @@
}
return R.ok(mapList);
}
+
+
+ /**
+ * 手动推送订单给第三方平台
+ *
+ * @param code
+ * @return
+ */
+ @Override
+ public R pushOrderInfo(String code) {
+ TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
+ tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+ tcecClient.notificationStopChargeResult(chargingOrder.getStartChargeSeq(), chargingOrder.getChargingGunId().toString(),
+ chargingOrder.getOperatorId());
+ tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+ return R.ok();
+ }
+
+
+ public R addChargingOrderSummaryData() {
+ List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
+ List<TChargingOrder> list1 = this.list(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getDelFlag, 0));
+ for (TChargingOrder chargingOrderVO : list1) {
+ if (null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()) {
+ continue;
+ }
+ List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
+ BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal serviceMoney = new BigDecimal("0");
+ BigDecimal paymentMoney = new BigDecimal("0");
+ if (!chargingOrderVO.getOrderSource().equals(2)) {
+ serviceMoney = serviceMoney.add(service_reduce);
+ paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+ } else {
+ serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+ paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+ }
+ Long time = 0L;
+ if (chargingOrderVO.getStartTime() != null && chargingOrderVO.getEndTime() != null) {
+ LocalDateTime startTime = chargingOrderVO.getStartTime();
+ LocalDateTime endTime = chargingOrderVO.getEndTime();
+ // 计算时间差 单位秒
+ long between = ChronoUnit.SECONDS.between(startTime, endTime);
+ time += between;
+ }
+
+ TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
+ summaryData.setChargingOrderId(chargingOrderVO.getId());
+ summaryData.setChargingCapacity(chargingCapacity);
+ summaryData.setChargingDuration(time);
+ summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ chargingOrderSummaryDataService.save(summaryData);
+ }
+ return R.ok();
+ }
+
+ /**
+ * 大屏-新能源汽车电池安全检测次数统计
+ */
+ @Override
+ public R<StatisticsOfBatteryVO> getStatisticsOfBattery() {
+ StatisticsOfBatteryVO vo = new StatisticsOfBatteryVO();
+ //1.计算累计次数
+ //查询该俩站点的快充和超充的充电枪id集合 site_id 25 26 charge_model 1 2
+ R<List<Integer>> r = chargingGunClient.getGunIdsBySiteIdsAndChargeModels(Arrays.asList(25, 26), Arrays.asList(1, 2));
+ if (r.getCode() != 200) {
+ return R.ok(vo);
+ }
+ List<Integer> gunIds = r.getData();
+ //统计
+ Long total = 0L;
+ if (gunIds != null && !gunIds.isEmpty()) {
+ total = this.baseMapper.selectCount(new LambdaQueryWrapper<TChargingOrder>()
+ .eq(TChargingOrder::getDelFlag, 0)//未删除
+ .in(TChargingOrder::getStatus, Arrays.asList(3, 5))//充电中、已结束
+ .in(TChargingOrder::getChargingGunId, gunIds));//符合条件的充电枪
+ }
+ vo.setTotal(total.intValue());
+ //2.折线图
+ /* // 计算日期范围:前七天(不含今日)直接查找数据量太大,内存报错
+ LocalDate today = LocalDate.now();
+ LocalDateTime startDate = today.minusDays(7).atStartOfDay();
+ LocalDateTime endDate = today.minusDays(1).atTime(LocalTime.MAX);
+ // 查询数据库
+ List<OrderCountByDate> orderCounts = this.baseMapper.countOrdersByDate(startDate, endDate, gunIds);*/
+
+
+ List<LocalDate> dates = new ArrayList<>();
+ List<Integer> counts = new ArrayList<>();
+ LocalDate today = LocalDate.now();
+ // 直接查找数据量太大,内存报错,分每天查找
+ for (int i = 7; i >= 1; i--) {//升序
+ LocalDate day = today.minusDays(i);
+ LocalDateTime startOfDay = day.atStartOfDay();
+ LocalDateTime endOfDay = day.atTime(LocalTime.MAX);
+ //统计
+ Long count = 0L;
+ if (gunIds != null && !gunIds.isEmpty()) {
+ count = this.baseMapper.selectCount(new LambdaQueryWrapper<TChargingOrder>()
+ .eq(TChargingOrder::getDelFlag, 0)//未删除
+ .in(TChargingOrder::getStatus, Arrays.asList(3, 5))//充电中、已结束
+ .in(TChargingOrder::getChargingGunId, gunIds)//符合条件的充电枪 站点 超充快充
+ .between(TChargingOrder::getCreateTime, startOfDay, endOfDay));//每天
+ }
+ dates.add(day);
+ counts.add(count.intValue());
+ }
+ vo.setDates(dates);
+ vo.setCounts(counts);
+ return R.ok(vo);
+ }
+
+ @Override
+ public BigDecimal getSumDegreeBySiteIds(List<Integer> siteIds) {
+
+ return this.baseMapper.getSumDegreeBySiteIds(siteIds);
+
+ }
+
+
+ /**
+ * 获取启动失败且时间超过1小时的订单
+ *
+ * @return
+ */
+ @Override
+ public List<TChargingOrder> findFailedStartupOrder() {
+ return this.baseMapper.findFailedStartupOrder();
+ }
+
+
+ /**
+ * 获取停止中的数据
+ *
+ * @return
+ */
+ @Override
+ public List<TChargingOrder> findStoppedOrder() {
+ return this.baseMapper.findStoppedOrder();
+ }
+
+
+ /**
+ * 获取充电中的数据
+ *
+ * @return
+ */
+ @Override
+ public List<TChargingOrder> findChargingOrder() {
+ return this.baseMapper.findChargingOrder();
+ }
}
--
Gitblit v1.7.1