From 4c77ac6367145e4740141e872e1cda1c16efa9b1 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 09 六月 2025 15:17:16 +0800
Subject: [PATCH] 优化功能及重复退款问题
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 1272 ++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 762 insertions(+), 510 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 6a24a15..654db7e 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
@@ -21,7 +21,6 @@
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;
@@ -50,6 +49,9 @@
import com.ruoyi.order.service.TChargingOrderService;
import com.ruoyi.order.service.TOrderEvaluateService;
import com.ruoyi.order.service.*;
+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.other.api.domain.*;
import com.ruoyi.order.vo.ChargingOrderListInfoVO;
@@ -140,7 +142,7 @@
private RedisService redisService;
@Resource
- private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
+ private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
@Resource
private TCECClient tcecClient;
@@ -161,7 +163,7 @@
private AccountingStrategyClient accountingStrategyClient;
@Resource
- private PlatformStartChargingReplyClient platformStartChargingReplyClient;
+ private PlatformStartChargingReplyService platformStartChargingReplyService;
@Resource
private TChargingOrderRefundService chargingOrderRefundService;
@@ -196,9 +198,6 @@
@Resource
private SecurityDetectionClient securityDetectionClient;
- @Resource
- private BmsDemandAndChargerExportationClient bmsDemandAndChargerExportationClient;
-
//计数器
private Map<String, Integer> counter_map = new HashMap<>();
@@ -209,7 +208,10 @@
private OperatorClient operatorClient;
@Resource
- private TransactionRecordClient transactionRecordClient;
+ private TransactionRecordService transactionRecordService;
+
+ @Resource
+ private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
@@ -283,8 +285,12 @@
}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());
@@ -296,7 +302,7 @@
.orderByAsc(TChargingOrderAccountingStrategy::getStartTime)
);
myChargingOrderInfo.setStageCost(stageCost);
- List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
+ List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
if(null != dataList){
//在MongoDB中获取数据
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
@@ -382,7 +388,6 @@
* @return
*/
@Override
- @GlobalTransactional(rollbackFor = Exception.class)
public AjaxResult paymentChargingOrder(AddChargingOrder addChargingOrder) {
Long userId = tokenService.getLoginUserApplet().getUserId();
TAppUser appUser = appUserClient.getUserById(userId).getData();
@@ -569,7 +574,6 @@
* @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){
@@ -648,21 +652,19 @@
long times = rechargeAmount1.divide(s_total_amount, 0, RoundingMode.DOWN).longValue();
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)));
- }
+ serviceCharge = serviceCharge.add(s_server_amount.multiply(new BigDecimal(times)));
break;
}
}
}
+ if(null != discount){
+ discountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(discount));
+ }
+
if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){
//计算会员最大优惠金额
TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
@@ -673,9 +675,12 @@
}
}
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);
@@ -696,15 +701,15 @@
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();
}
@@ -721,7 +726,7 @@
}
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){
PlatformStartChargingReply platformStartChargingReply = data.get(1);
@@ -730,7 +735,7 @@
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);
//启动失败
@@ -771,7 +776,7 @@
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);
//启动失败
@@ -924,6 +929,18 @@
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){
@@ -935,6 +952,19 @@
RefundResp resp = aliPaymentClient.refund(dto).getData();
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) {
@@ -944,6 +974,73 @@
}
}
+ }
+ }
+
+
+
+ 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);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+ }
+ }
+
}
}
@@ -999,7 +1096,7 @@
chargingDetails.setCode(one.getCode());
chargingDetails.setStatus(one.getStatus());
chargingDetails.setChargingCost(one.getResidualAmount());
- UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData();
+ UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(one.getCode());
if(null != data){
chargingDetails.setChargeCurrent(data.getOutput_current());
chargingDetails.setChargeVoltage(data.getOutput_voltage());
@@ -1028,7 +1125,6 @@
* @return
*/
@Override
- @GlobalTransactional(rollbackFor = Exception.class)
public AjaxResult stopCharging(String id) {
TChargingOrder order = this.getById(id);
Integer status = order.getStatus();
@@ -1244,7 +1340,6 @@
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;
@@ -1262,7 +1357,6 @@
endTime2 = split[1];
}
PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
- PageInfo<ChargingOrderVO> pageInfo1 = new PageInfo<>(1,999999999);
if (StringUtils.hasLength(dto.getPhone())){
List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
@@ -1308,17 +1402,14 @@
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 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<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
for (ChargingOrderVO chargingOrderVO : list) {
if (roleType == 2){
@@ -1327,7 +1418,6 @@
List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
chargingOrderVO.setAuthRecord(t1.get(0));
}
-
}
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"));
@@ -1351,7 +1441,17 @@
// 计算时间差 单位秒
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();
@@ -1375,42 +1475,54 @@
}
}
-
- 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"));
- if (chargingOrderVO.getRechargeAmount()!=null){
- commissionMoney = commissionMoney.add(chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
- }
- 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.setIncome(paymentMoney);
- tCharingOrderVO.setElectronicMoney(electronicMoney);
- tCharingOrderVO.setServiceMoney(serviceMoney);
pageInfo.setRecords(list);
tCharingOrderVO.setList(pageInfo);
return tCharingOrderVO;
@@ -1460,37 +1572,49 @@
}
@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;
@@ -1612,7 +1736,7 @@
}
// 获取开始SOC 结束soc
if (chargingOrderListVO.getCode()!=null){
- List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrderListVO.getCode()).getData();
+ List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode());
if (data6!=null && !data6.isEmpty()){
int min = 100;
@@ -1689,7 +1813,13 @@
"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);
@@ -1741,69 +1871,105 @@
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.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(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.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"+"%/"
@@ -1879,7 +2045,7 @@
// 获取开始SOC 结束soc
if (chargingOrder.getCode()!=null){
- List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
+ List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
if (data6!=null){
for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
if (uploadRealTimeMonitoringData.getOutput_current()!=null&&
@@ -1933,7 +2099,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())
@@ -1948,7 +2119,6 @@
* @param query
*/
@Override
- @GlobalTransactional(rollbackFor = Exception.class)
public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) {
if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())){
//获取当前的计费策略
@@ -1974,10 +2144,6 @@
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());
- }
this.updateById(chargingOrder);
}
}
@@ -1988,7 +2154,6 @@
* @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();
@@ -2013,32 +2178,38 @@
* @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()));
- if(null == chargingOrder){
+ Boolean hasKey = redisService.hasKey("endOrder:" + vo.getTransaction_serial_number());
+ if(hasKey){
return R.ok();
}
- Integer status = chargingOrder.getStatus();
- if(status == 5){
- 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<>();
+ //添加1分钟的缓存
+ redisService.setCacheObject("endOrder:" + vo.getTransaction_serial_number(), vo.getTransaction_serial_number(), 1L, TimeUnit.MINUTES);
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();
+ 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])){
//当天的
@@ -2085,7 +2256,7 @@
AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
BeanUtils.copyProperties(strategyDetail, vo1);
vo1.setChargingCapacity(sharp_peak_charge);
- lists.add(vo1);
+ lists.add(0, vo1);
}
//第二天的
@@ -2159,312 +2330,330 @@
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);
-
- //服务费折扣
- 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;
- }
- }
- }
- //会员折扣金额
- 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.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;
- }
- appCoupon.setStatus(2);
- appCouponClient.updateAppCoupon(appCoupon);
+ //开始处理明细
+ 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{
- order.setAppCouponId(null);
- order.setCouponDiscountAmount(BigDecimal.ZERO);
- appCouponClient.refund(chargingOrder.getAppCouponId().toString());
+ 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);
+ //服务费(含折扣)
+ 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);
}
}
- 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;
+ 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));
+ }
+
+ //计算优惠券
+ 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{
- couponDiscount = divide;
+ 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());
+ }
+ }
+ }
+ //优惠券优惠金额
+ 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.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;
+ 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<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);
- }
- }
+ //计算用户标签
+ 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);
+ }
+ }
+
+ }
}
+
+ //添加汇总统计数据
+ 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 {
+ redisService.deleteObject("endOrder:" + vo.getTransaction_serial_number());
}
return R.ok();
}
@@ -2473,8 +2662,11 @@
@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
@@ -2487,10 +2679,7 @@
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) {
@@ -2787,6 +2976,8 @@
@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()){
tSettlementConfirm.setSiteName(data.get(0).getName());
@@ -2813,9 +3004,7 @@
// 根据站点id和开始时间和结束时间和归属日期 查询充电订单列表
QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
- .eq("site_id", dto.getSiteId())
- .eq("status", 5)
- .eq("recharge_payment_status",2);
+ .eq("site_id", dto.getSiteId());
switch (dto.getType()){
case 1:
eq.between("pay_time", localDateTime, localDateTime1);
@@ -2844,23 +3033,38 @@
// 支付订单金额 需要减去退款金额
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.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){
@@ -2870,11 +3074,7 @@
if (tChargingOrder.getCouponDiscountAmount()!=null){
couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount());
}
- if (tChargingOrder.getPaymentAmount()!=null){
- paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
- orderCommission = orderCommission.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006"))
- .setScale(2,BigDecimal.ROUND_DOWN));
- }
+
}
@@ -3034,13 +3234,9 @@
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));
- List<TChargingOrderRefund> totalRefund = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getRefundStatus, 2).list();
+ .eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getStatus, 5));
SettlementTotalVO res = new SettlementTotalVO();
List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
@@ -3077,8 +3273,6 @@
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");
@@ -3153,7 +3347,6 @@
for (TChargingPile datum : data) {
bigDecimal = bigDecimal.add(datum.getRatedPower());
}
-
tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
//利用率=充电量/(桩数量*功率*时间)
@@ -3243,7 +3436,6 @@
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);
@@ -3688,7 +3880,6 @@
chargingOrder.setStatus(2);
chargingOrder.setPayTime(LocalDateTime.now());
chargingOrder.setChargeAmount(chargingOrder.getRechargeAmount());
- chargingOrder.setVipDiscountAmount(BigDecimal.ZERO);
this.save(chargingOrder);
Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
@@ -3735,15 +3926,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());
@@ -3804,7 +3995,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);
@@ -3812,4 +4003,65 @@
}
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();
+ }
}
--
Gitblit v1.7.1