From e55d73ce63cfadb9f1ca586c6028bdc142ae26ad Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 09 十月 2024 10:35:55 +0800
Subject: [PATCH] 修改bug
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 756 ++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 608 insertions(+), 148 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 239c34f..649a4dd 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
@@ -1,9 +1,7 @@
package com.ruoyi.order.service.impl;
-import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
-import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -13,6 +11,7 @@
import com.ruoyi.account.api.vo.GetInviteUser;
import com.ruoyi.chargingPile.api.feignClient.*;
import com.ruoyi.chargingPile.api.model.*;
+import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.dto.ChargingOrderGroup;
import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
@@ -33,12 +32,13 @@
import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply;
import com.ruoyi.order.api.dto.SettlementConfirmAdd;
import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient;
-import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
+import com.ruoyi.order.api.feignClient.AccountingStrategyOrderClient;
import com.ruoyi.order.api.model.*;
import com.ruoyi.order.api.query.ChargingOrderQuery;
import com.ruoyi.order.api.query.SettlementListQuery;
import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
import com.ruoyi.order.api.vo.*;
+import com.ruoyi.order.api.vo.SecurityDetection;
import com.ruoyi.order.dto.*;
import com.ruoyi.order.mapper.TChargingOrderMapper;
import com.ruoyi.order.mapper.TSettlementConfirmMapper;
@@ -47,14 +47,9 @@
import com.ruoyi.order.service.TChargingOrderService;
import com.ruoyi.order.service.TOrderEvaluateService;
import com.ruoyi.order.service.*;
-import com.ruoyi.other.api.domain.TCoupon;
-import com.ruoyi.other.api.domain.TGoods;
+import com.ruoyi.other.api.domain.*;
import com.ruoyi.order.vo.ChargingOrderListInfoVO;
-import com.ruoyi.other.api.domain.TIntegralRule;
-import com.ruoyi.other.api.feignClient.IntegralRuleClient;
-import com.ruoyi.other.api.feignClient.OtherClient;
-import com.ruoyi.other.api.feignClient.RoleSiteClient;
-import com.ruoyi.other.api.feignClient.UserSiteClient;
+import com.ruoyi.other.api.feignClient.*;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
import com.ruoyi.payment.api.model.RefundReq;
@@ -62,13 +57,10 @@
import com.ruoyi.payment.api.model.WxPaymentRefundModel;
import com.ruoyi.payment.api.vo.*;
import com.ruoyi.system.api.feignClient.SysUserClient;
-import com.sun.org.apache.bcel.internal.generic.NEW;
import io.seata.spring.annotation.GlobalTransactional;
-import io.swagger.annotations.ApiModelProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@@ -154,6 +146,9 @@
@Resource
private AccountingStrategyDetailOrderClient accountingStrategyDetailOrderClient;
+
+ @Resource
+ private AccountingStrategyOrderClient accountingStrategyOrderClient;
@Resource
private AccountingStrategyClient accountingStrategyClient;
@@ -181,9 +176,24 @@
@Resource
private IntegralRuleClient integralRuleClient;
+
+ @Resource
+ private VipClient vipClient;
+
+ @Resource
+ private UserTagClient userTagClient;
+
+ @Resource
+ private AppUserTagClient appUserTagClient;
+
+ @Resource
+ private SecurityDetectionClient securityDetectionClient;
//计数器
private Map<String, Integer> counter_map = new HashMap<>();
+
+ //计数器
+ private Map<String, Integer> boot_failed_map = new HashMap<>();
@@ -417,7 +427,7 @@
//构建新的待支付订单
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
TChargingOrder chargingOrder = new TChargingOrder();
- String code = "CD" + Math.random() * 1000 + sdf.format(new Date());
+ String code = "CD" + Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date());
chargingOrder.setCode(code);
chargingOrder.setOrderType(1);
chargingOrder.setOrderClassification(1);
@@ -431,7 +441,28 @@
chargingOrder.setRechargePaymentStatus(1);
chargingOrder.setRechargeAmount(addChargingOrder.getPaymentAmount());
chargingOrder.setAppCouponId(addChargingOrder.getAppUserCouponId());
- if(null != appUser.getVipId()){
+ chargingOrder.setVipDiscount(new BigDecimal(10));
+ chargingOrder.setVipDiscountAmount(BigDecimal.ZERO);
+
+ Site site = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData().get(0);
+ Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
+ if(null == accountingStrategyId){
+ //查询站点上面的计费策略
+ accountingStrategyId = site.getAccountingStrategyId();
+ }
+ TAccountingStrategy accountingStrategy = accountingStrategyClient.getAccountingStrategyById(accountingStrategyId).getData();
+
+ //直营站点才可以享受会员折扣
+ if(null != appUser.getVipId() && 1 == site.getBusinessCategory()){
+ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+ BigDecimal discount = null;
+ if(1 == vip.getType()){
+ //普通会员折扣使用积分策略上的折扣,且有最高优惠金额
+ discount = accountingStrategy.getDiscount();
+ }else{
+ //内部会员使用会员信息设置的折扣,没有最高优惠金额
+ discount = vip.getDiscount();
+ }
GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
getAppUserVipDetail.setAppUserId(appUser.getId());
getAppUserVipDetail.setVipId(appUser.getVipId());
@@ -439,19 +470,14 @@
if(null != vipDetail){
Integer chargeNum = vipDetail.getChargeNum();
if(0 > chargeNum){
- chargingOrder.setVipDiscount(vipDetail.getDiscount());
- BigDecimal discountAmount = addChargingOrder.getPaymentAmount().multiply((new BigDecimal(10)
- .subtract(vipDetail.getDiscount())).divide(new BigDecimal(10))).setScale(4, BigDecimal.ROUND_HALF_EVEN);
- chargingOrder.setVipDiscountAmount(discountAmount);
+ chargingOrder.setVipDiscount(discount);
}
}
-
}
this.save(chargingOrder);
//添加订单的计费策略
- TAccountingStrategy accountingStrategy = accountingStrategyClient.getAccountingStrategyById(tChargingGun.getAccountingStrategyId()).getData();
- List<TAccountingStrategyDetail> strategyDetailList = accountingStrategyDetailClient.getListByAccountingStrategyId(tChargingGun.getAccountingStrategyId()).getData();
+ List<TAccountingStrategyDetail> strategyDetailList = accountingStrategyDetailClient.getListByAccountingStrategyId(accountingStrategyId).getData();
AccountingStrategyOrder accountingStrategyOrder = new AccountingStrategyOrder();
BeanUtils.copyProperties(accountingStrategy, accountingStrategyOrder);
accountingStrategyOrder.setChargingOrderId(chargingOrder.getId());
@@ -473,7 +499,7 @@
paymentOrder.setAmount(addChargingOrder.getPaymentAmount());
paymentOrder.setOpenId(appUser.getWxOpenid());
paymentOrder.setDescription("充电充值");
- paymentOrder.setNotifyUrl("/order/t-charging-order/chargingOrderWXCallback");
+ paymentOrder.setNotifyUrl("/payment/wx/pay/notify");
Map<String, Object> data = wxPaymentClient.orderPay(paymentOrder).getData();
return AjaxResult.success(data);
}
@@ -486,7 +512,7 @@
req.setBody("充电充值");
AliPaymentResp data = aliPaymentClient.payment(req).getData();
if(null != data){
- data.setNotifyUrl(data.getNotifyUrl() + "/t-charging-order/chargingOrderALICallback");
+ data.setNotifyUrl(data.getNotifyUrl() + "/order/t-charging-order/chargingOrderALICallback");
return AjaxResult.success(data);
}
}
@@ -520,105 +546,281 @@
preChargeCheck.setSecureConnectionDetection(false);
preChargeCheck.setStartupSuccess(1);
String key = "AQJC_" + chargingOrder.getChargingGunId();
- redisService.setCacheObject(key, preChargeCheck);
+ redisService.setCacheObject(key, preChargeCheck, 24L, TimeUnit.HOURS);
//根据当前充值的金额和计费模板算出充电的金额
BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
- //计算充电金额,会员需要将折扣金额加入到充电总金额中
- TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
- AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderClient.getNowAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
- //总单价
- BigDecimal totalUnitPrice = strategyDetail.getServiceCharge().add(strategyDetail.getElectrovalence());
- //计算能充电的度数
- BigDecimal degrees = rechargeAmount.divide(totalUnitPrice);
+ BigDecimal rechargeAmount1 = new BigDecimal(rechargeAmount.toString());
+ SimpleDateFormat sdf = new SimpleDateFormat("HHmm");
+ Long now = Long.valueOf(sdf.format(new Date()));
+ Long nowTimeMillis = System.currentTimeMillis();
+ //根据支付金额,获取出使用的计费策略明细
//计算电费金额和服务费
- BigDecimal serviceCharge = strategyDetail.getServiceCharge().multiply(degrees);
- BigDecimal electrovalence = strategyDetail.getElectrovalence().multiply(degrees);
+ BigDecimal serviceCharge = BigDecimal.ZERO;
+ BigDecimal electrovalence = BigDecimal.ZERO;
+ BigDecimal discountAmount = BigDecimal.ZERO;
+ BigDecimal discount = chargingOrder.getVipDiscount();
+ //先根据额定功率计算出每秒充电度数,然后计算出支付金额能充多少度电
+ TChargingGun tChargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+ BigDecimal s_degrees = tChargingGun.getRatedPower().divide(new BigDecimal(3600), 6, RoundingMode.HALF_EVEN);
- //再处理会员折扣
- BigDecimal discount = BigDecimal.ZERO;
TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
- if(null != appUser.getVipId()){
- GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
- getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId());
- getAppUserVipDetail.setVipId(appUser.getVipId());
- TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
- if(data.getChargeNum() > 0){
- discount = serviceCharge.multiply(data.getDiscount().divide(new BigDecimal(10)));
- data.setChargeNum(data.getChargeNum() - 1);
- appUserVipDetailClient.updateAppUserVipDetail(data);
+ List<AccountingStrategyDetailOrder> list = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
+ for (AccountingStrategyDetailOrder accountingStrategyDetailOrder : list) {
+ Integer start = Integer.valueOf(accountingStrategyDetailOrder.getStartTime().replaceAll(":", ""));
+ Integer end = Integer.valueOf(accountingStrategyDetailOrder.getEndTime().replaceAll(":", ""));
+ String[] split = accountingStrategyDetailOrder.getEndTime().split(":");
+ if(now >= start && now < end){
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
+ calendar.set(Calendar.MINUTE, Integer.valueOf(split[1]));
+ //到此策略结束的秒数
+ if(null == nowTimeMillis){
+ String[] split1 = accountingStrategyDetailOrder.getStartTime().split(":");
+ Calendar calendar1 = Calendar.getInstance();
+ calendar1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
+ calendar1.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
+ nowTimeMillis = calendar.getTimeInMillis();
+ }
+ long m = (calendar.getTimeInMillis() - nowTimeMillis) / 1000;
+ //每度电的单价
+ BigDecimal total_unit = accountingStrategyDetailOrder.getElectrovalence().add(accountingStrategyDetailOrder.getServiceCharge());
+ //每秒需要支付的金额
+ BigDecimal multiply = s_degrees.multiply(total_unit);
+ //计算充值金额能充多长时间的电
+ long times = rechargeAmount1.divide(multiply, 0, RoundingMode.DOWN).longValue();
+ if(times > m){
+ //充电时间跨度两个计费策略,需要继续对下一个策略进行计算
+ electrovalence = accountingStrategyDetailOrder.getElectrovalence().multiply(s_degrees).multiply(new BigDecimal(m));
+ serviceCharge = accountingStrategyDetailOrder.getServiceCharge().multiply(s_degrees).multiply(new BigDecimal(m));
+ discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(10).subtract(discount)).divide(new BigDecimal(10))));
+ rechargeAmount1 = rechargeAmount1.subtract(multiply.multiply(new BigDecimal(m)));
+ nowTimeMillis = null;
+ }else{
+ electrovalence = accountingStrategyDetailOrder.getElectrovalence().multiply(s_degrees).multiply(new BigDecimal(times));
+ serviceCharge = accountingStrategyDetailOrder.getServiceCharge().multiply(s_degrees).multiply(new BigDecimal(times));
+ discountAmount = discountAmount.add(serviceCharge.multiply((new BigDecimal(10).subtract(discount)).divide(new BigDecimal(10))));
+ break;
+ }
}
}
- electrovalence = electrovalence.add(discount);
+ if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){
+ //计算会员最大优惠金额
+ if(null != appUser.getVipId()){
+ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+ BigDecimal maximumDeduction = vip.getMaximumDeduction();
+ //普通会员有最高优惠限制
+ if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){
+ discountAmount = maximumDeduction;
+ }
+
+ //判断会员是否还有充电优惠次数
+ 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);
+ //会员有充电优惠次数,直接将优惠金额加入到充电费用中增加充电时长
+ electrovalence = electrovalence.add(discountAmount);
+ }
+ }
+ }
chargingOrder.setChargeAmount(electrovalence);
+ chargingOrder.setVipDiscountAmount(discountAmount);
this.updateById(chargingOrder);
- TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData();
+ TChargingPile chargingPile = chargingPileClient.getChargingPileById(tChargingGun.getChargingPileId()).getData();
//调用远程启动充电消息
PlatformStartCharging platformStartCharging = new PlatformStartCharging();
platformStartCharging.setTransaction_serial_number(chargingOrder.getCode());
platformStartCharging.setCharging_pile_code(chargingPile.getCode());
- platformStartCharging.setCharging_gun_code(chargingGun.getCode());
+ platformStartCharging.setCharging_gun_code(tChargingGun.getCode());
//使用订单id作为逻辑卡号
platformStartCharging.setCard_number(chargingOrder.getId().toString());
platformStartCharging.setAccount_balance(electrovalence);
+
+ log.error(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------");
+ log.error(platformStartCharging.toString());
+
sendMessageClient.platformStartCharging(platformStartCharging);
//异步线程检测远程启动的应答结果。如果失败,则需要全额退款
- String code = chargingOrder.getCode();
+ Long id = chargingOrder.getId();
//执行5分钟的定时任务检测
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(()->{
- List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
- 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的时候,硬件会间隔60秒后再次检测,依然未插枪,则不启动充电
- //因这里是间隔5秒执行检测,所以累计次数在30次以上
- if(failure_cause == 5 && null == counter || counter < 35){
- counter++;
- counter_map.put(code, counter);
- //启动失败
- preChargeCheck1.setStartupSuccess(3);
- preChargeCheck1.setFailureCause(failure_cause);
- redisService.setCacheObject(key, preChargeCheck1);
- return;
- }
- //清除计时器中的无效数据
- counter_map.remove(code);
- //开始处理退款
- TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
- if(0 == startup_result){
- //启动失败
- preChargeCheck1.setStartupSuccess(3);
- preChargeCheck1.setFailureCause(failure_cause);
- //启动失败后取消订单,退款操作
- refund(code);
- order.setStatus(-1);
- order.setEndMode(0);
- }else{
- preChargeCheck1.setStartupSuccess(2);
- order.setStatus(3);
- order.setStartTime(LocalDateTime.now());
- }
- this.updateById(order);
- redisService.setCacheObject(key, preChargeCheck1);
- //提前结束定时任务
+ if(timingDetection(id)){
scheduler.shutdown();
}
- }, 5, 300, TimeUnit.SECONDS);
+ }, 5, 1, TimeUnit.SECONDS);
return AjaxResult.success();
}
+
+ /**
+ * 定时检测mongodb数据库数据
+ * @param id
+ * @return
+ */
+ public boolean timingDetection(Long id){
+ TChargingOrder chargingOrder = this.getById(id);
+ if(chargingOrder.getStatus() != 2){
+ return true;
+ }
+ String code = chargingOrder.getCode();
+ String key = "AQJC_" + chargingOrder.getChargingGunId();
+ //获取安全校验
+ com.ruoyi.integration.api.model.SecurityDetection securityDetection = securityDetectionClient.getSecurityDetection(chargingOrder.getCode()).getData();
+ if(null != securityDetection){
+ PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingOrder.getChargingGunId());
+ if(null != preChargeCheck1){
+ preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock());
+ preChargeCheck1.setInsulationTesting(true);
+ preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection());
+ preChargeCheck1.setStartupSuccess(1);
+ redisService.setCacheObject("AQJC_" + chargingOrder.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
+ }
+ }
+
+ List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
+ log.error(code + ":-------------------开始检查调起充电结果-------------------");
+ log.error(data.toString());
+ 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)){
+ counter = (null == counter ? 0 : counter) + 1;
+ counter_map.put(code, counter);
+ //启动失败
+ preChargeCheck1.setStartupSuccess(3);
+ preChargeCheck1.setFailureCause(failure_cause);
+ redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
+ return false;
+ }
+
+ //清除计时器中的无效数据
+ counter_map.remove(code);
+ TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
+ if(0 == startup_result){
+ //启动失败
+ preChargeCheck1.setStartupSuccess(3);
+ preChargeCheck1.setFailureCause(failure_cause);
+ //启动失败后取消订单,退款操作
+ refund(code);
+ order.setStatus(-1);
+ order.setEndMode(0);
+ }else{
+ //启动成功
+ preChargeCheck1.setStartupSuccess(2);
+ order.setStatus(3);
+ order.setStartTime(LocalDateTime.now());
+ }
+ this.updateById(order);
+ redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
+ return true;
+ }else{
+ log.error(code + ":-------------------未上传开启充电结果-------------------");
+
+ Integer counter = boot_failed_map.get(code);
+ PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
+ //5分钟内未启动成功,退回金额。
+ if(null == counter || counter < 300){
+ counter = (null == counter ? 0 : counter) + 1;
+ boot_failed_map.put(code, counter);
+ //启动失败
+ preChargeCheck1.setStartupSuccess(3);
+ preChargeCheck1.setFailureCause(0);
+ redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
+ return false;
+ }
+
+ //清除计时器中的无效数据
+ boot_failed_map.remove(code);
+ TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
+ //启动失败
+ preChargeCheck1.setStartupSuccess(3);
+ preChargeCheck1.setFailureCause(0);
+ //启动失败后取消订单,退款操作
+ refund(code);
+ order.setStatus(-1);
+ order.setEndMode(0);
+ this.updateById(order);
+ redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
+ return true;
+ }
+ }
+
+
+ /**
+ * 修改安全检测数据
+ * @param securityDetection
+ */
+ @Override
+ public void securityDetection(SecurityDetection 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){
+ preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock());
+ preChargeCheck1.setInsulationTesting(true);
+ preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection());
+ preChargeCheck1.setStartupSuccess(1);
+ redisService.setCacheObject("AQJC_" + chargingGun.getId(), preChargeCheck1, 24L, TimeUnit.HOURS);
+ }
+ }
+
+ /**
+ * 启动充电应发
+ * @param message
+ */
+ @Override
+ public void startChargeSuccessfully(PlatformStartChargingReplyMessage message) {
+ 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){
+ return;
+ }
+ String code = order.getCode();
+ PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + order.getChargingGunId());
+ if(null != preChargeCheck1){
+ preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock());
+ preChargeCheck1.setInsulationTesting(true);
+ preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection());
+ preChargeCheck1.setStartupSuccess(1);
+ redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
+ }
+ if(0 == startup_result){
+ //启动失败
+ preChargeCheck1.setStartupSuccess(3);
+ preChargeCheck1.setFailureCause(failure_cause);
+ //启动失败后取消订单,退款操作
+ refund(code);
+ order.setStatus(-1);
+ order.setEndMode(0);
+ }else{
+ //启动成功
+ preChargeCheck1.setStartupSuccess(2);
+ order.setStatus(3);
+ order.setStartTime(LocalDateTime.now());
+ }
+ this.updateById(order);
+ }
/**
* 启动失败后的退款,取消订单
* @param code
*/
public void refund(String code){
+ log.error(code + ":-------------------充电启动失败,执行退款-------------------");
TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
if(chargingOrder.getStatus() == 2){
Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
@@ -627,7 +829,7 @@
TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Math.random() * 1000));
+ chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue());
chargingOrderRefund.setRefundAmount(rechargeAmount);
chargingOrderRefund.setRefundStatus(1);
chargingOrderRefund.setPayType(rechargePaymentType);
@@ -644,7 +846,7 @@
model.setOut_trade_no(chargingOrder.getCode());
model.setOut_refund_no(chargingOrderRefund.getRefundCode());
model.setReason("充电失败,取消充电订单");
- model.setNotify_url("http://221.182.45.100:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund");
+ model.setNotify_url("/payment/wx/refund/notify");
WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
amount.setRefund(rechargeAmount.multiply(new BigDecimal(100)).intValue());
amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
@@ -759,7 +961,65 @@
chargingOrder.setStatus(4);
chargingOrder.setEndMode(1);
this.updateById(chargingOrder);
-
+
+ //处理用户标签数据
+ List<TUserTag> data = userTagClient.getAllUserTag().getData();
+ //累计充电次数
+ long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
+ .eq(TChargingOrder::getRechargePaymentStatus, 2).isNotNull(TChargingOrder::getPaymentAmount).eq(TChargingOrder::getDelFlag, 0));
+ List<TUserTag> userTagList1 = data.stream().filter(s -> s.getStandardCondition() == 1).collect(Collectors.toList());
+ int old_times = 0;
+ Integer userTagId = null;
+ for (TUserTag tUserTag : userTagList1) {
+ Integer times = JSON.parseObject(tUserTag.getConditions()).getInteger("times");
+ //加上本次充电
+ //获取最大值标签
+ if((count1 + 1) >= times && old_times < times){
+ userTagId = tUserTag.getId();
+ old_times = times;
+ }
+ }
+ if(null != userTagId){
+ TAppUserTag appUserTag = new TAppUserTag();
+ appUserTag.setAppUserId(chargingOrder.getAppUserId());
+ appUserTag.setUserTagId(userTagId);
+ TAppUserTag data1 = appUserTagClient.getUserTag(appUserTag).getData();
+ if(null == data1){
+ data1 = new TAppUserTag();
+ data1.setAppUserId(chargingOrder.getAppUserId());
+ data1.setUserTagId(userTagId);
+ data1.setCreateTime(LocalDateTime.now());
+ appUserTagClient.addUserTag(data1);
+ }
+ }
+ //充电评率
+ List<TUserTag> userTagList2 = data.stream().filter(s -> s.getStandardCondition() == 2).collect(Collectors.toList());
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ for (TUserTag tUserTag : userTagList2) {
+ TAppUserTag appUserTag = new TAppUserTag();
+ appUserTag.setAppUserId(chargingOrder.getAppUserId());
+ appUserTag.setUserTagId(tUserTag.getId());
+ TAppUserTag data1 = appUserTagClient.getUserTag(appUserTag).getData();
+ if(null == data1){
+ Integer day = JSON.parseObject(tUserTag.getConditions()).getInteger("day");
+ Integer times = JSON.parseObject(tUserTag.getConditions()).getInteger("times");
+ Calendar start = Calendar.getInstance();
+ start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + day);
+ count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
+ .eq(TChargingOrder::getRechargePaymentStatus, 2).isNotNull(TChargingOrder::getPaymentAmount)
+ .between(TChargingOrder::getStartTime, sdf.format(start.getTime()), sdf.format(new Date())).eq(TChargingOrder::getDelFlag, 0));
+ //加上本次充电
+ if(count1 >= times){
+ data1 = new TAppUserTag();
+ data1.setAppUserId(chargingOrder.getAppUserId());
+ data1.setUserTagId(tUserTag.getId());
+ data1.setCreateTime(LocalDateTime.now());
+ appUserTagClient.addUserTag(data1);
+ }
+ }
+ }
+
+
//异步线程处理停机
ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1);
cachedThreadPool.execute(()->{
@@ -805,6 +1065,9 @@
throw new RuntimeException(failure_cause);
}
+ // 将枪状态重置为空闲
+ chargingGun.setStatus(2);
+ chargingGunClient.updateChargingGunById(chargingGun);
//计算费用,处理退款
endCharge(chargingOrder);
break;
@@ -821,13 +1084,24 @@
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()){
+ TVip vip = vipClient.getInfo1(appUser1.getVipId()).getData();
+ Integer doubleIntegration = vip.getDoubleIntegration();
+ //双倍积分
+ if(1 == doubleIntegration){
+ num1 *= 2;
+ }
+ }
+
GetInviteUser query = new GetInviteUser();
- query.setAppUserId(appUser.getInviteUserId());
+ query.setAppUserId(appUser1.getId());
query.setBeInvitedAppUserId(chargingOrder.getAppUserId());
TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData();
if(null == inviteUser){
inviteUser = new TInviteUser();
- inviteUser.setAppUserId(appUser.getInviteUserId());
+ inviteUser.setAppUserId(appUser1.getId());
inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId());
inviteUser.setAward(num1);
inviteUser.setCreateTime(LocalDateTime.now());
@@ -836,11 +1110,10 @@
inviteUser.setAward(num1);
inviteUserClient.updateInviteUser(inviteUser);
}
- TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
- String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
+ String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
appUserIntegralChange.setCode(code);
- appUserIntegralChange.setAppUserId(appUser.getInviteUserId());
+ appUserIntegralChange.setAppUserId(appUser1.getId());
appUserIntegralChange.setChangeType(5);
appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints());
appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1);
@@ -888,7 +1161,33 @@
chargingOrder.setStatus(5);
chargingOrder.setPaymentAmount(payAmount);
this.updateById(chargingOrder);
-
+
+ //添加积分
+ 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 = payAmount.multiply(new BigDecimal(num1)).intValue();
+ if(null != appUser.getVipId()){
+ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+ Integer doubleIntegration = vip.getDoubleIntegration();
+ //双倍积分
+ if(1 == doubleIntegration){
+ integral *= 2;
+ }
+ }
+
+ 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());
+ appUserClient.updateAppUser(appUser);
+ appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
+ }
+
//计算优惠券
if(null != chargingOrder.getAppCouponId()){
//判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。
@@ -937,7 +1236,7 @@
TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Math.random() * 1000));
+ chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
chargingOrderRefund.setRefundAmount(refundAmount);
chargingOrderRefund.setRefundStatus(1);
chargingOrderRefund.setPayType(rechargePaymentType);
@@ -954,7 +1253,7 @@
model.setOut_trade_no(chargingOrder.getCode());
model.setOut_refund_no(chargingOrderRefund.getRefundCode());
model.setReason("充电完成退款");
- model.setNotify_url("http://221.182.45.100:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund");
+ 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());
@@ -983,6 +1282,7 @@
}
+
}
@@ -1027,6 +1327,12 @@
for (ChargingOrderVO chargingOrderVO : list) {
TChargingGun data3 = chargingGunClient.getChargingGunById(chargingOrderVO.getChargingGunId()).getData();
TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderVO.getChargingPileId()).getData();
+ if (chargingOrderVO.getSiteId()!=null){
+ List<Integer> integers = new ArrayList<>();
+ integers.add(chargingOrderVO.getSiteId());
+ List<Site> data = siteClient.getSiteByIds(integers).getData();
+ if (!data.isEmpty())chargingOrderVO.setSiteName(data.get(0).getName());
+ }
if (data2!=null && data3!=null){
chargingOrderVO.setTerminalName(data2.getName()+"-"+data3.getName());
@@ -1042,7 +1348,9 @@
// 单个订单累计服务费
BigDecimal serviceMoney1 = new BigDecimal("0");
UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData();
- chargingOrderVO.setChargingSecond(data5.getTime_remaining()*60L);
+ if (data5!=null){
+ chargingOrderVO.setChargingSecond(data5.getTime_remaining()*60L);
+ }
// 总收入
if (chargingOrderVO.getRefundStatus() !=null && chargingOrderVO.getRefundStatus() == 2){
income = income.add(chargingOrderVO.getPaymentAmount().subtract(chargingOrderVO.getRefundAmount()));
@@ -1578,7 +1886,7 @@
//计算费用,处理退款
endCharge(chargingOrder);
-
+
//处理推荐奖励(被推荐首单奖励)
TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
long count = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
@@ -1588,13 +1896,24 @@
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()){
+ TVip vip = vipClient.getInfo1(appUser1.getVipId()).getData();
+ Integer doubleIntegration = vip.getDoubleIntegration();
+ //双倍积分
+ if(1 == doubleIntegration){
+ num1 *= 2;
+ }
+ }
+
GetInviteUser query = new GetInviteUser();
- query.setAppUserId(appUser.getInviteUserId());
+ query.setAppUserId(appUser1.getId());
query.setBeInvitedAppUserId(chargingOrder.getAppUserId());
TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData();
if(null == inviteUser){
inviteUser = new TInviteUser();
- inviteUser.setAppUserId(appUser.getInviteUserId());
+ inviteUser.setAppUserId(appUser1.getId());
inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId());
inviteUser.setAward(num1);
inviteUser.setCreateTime(LocalDateTime.now());
@@ -1603,20 +1922,20 @@
inviteUser.setAward(num1);
inviteUserClient.updateInviteUser(inviteUser);
}
- TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
- String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
+ String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
appUserIntegralChange.setCode(code);
- appUserIntegralChange.setAppUserId(appUser.getInviteUserId());
+ appUserIntegralChange.setAppUserId(appUser1.getId());
appUserIntegralChange.setChangeType(5);
appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints());
appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1);
appUserIntegralChange.setCreateTime(LocalDateTime.now());
appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
-
+
appUser1.setPoints(appUser1.getPoints() + num1);
appUserClient.updateAppUser(appUser1);
}
+
}
/**
@@ -1651,6 +1970,11 @@
@Override
public List<Map<String, Object>> usersDay() {
return this.baseMapper.usersDay();
+ }
+
+ @Override
+ public List<Map<String, Object>> usersDay1() {
+ return this.baseMapper.usersDay1();
}
@Override
@@ -1699,6 +2023,10 @@
}
+ @Resource
+ private TShoppingOrderService shoppingOrderService;
+ @Resource
+ private TShoppingOrderRefundService shoppingOrderRefundService;
@Override
public R payRefund(PayOrderRefundDto payOrderQueryDto) {
if (payOrderQueryDto.getType()==1){
@@ -1711,7 +2039,7 @@
chargingOrderRefund.setRefundTime(LocalDateTime.now());
chargingOrderRefund.setCode(tChargingOrder.getCode());
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Math.random() * 1000));
+ chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
chargingOrderRefund.setRefundTitle("后台退款");
chargingOrderRefund.setRefundContent("后台退款");
chargingOrderRefund.setRefundReason("后台退款");
@@ -1725,7 +2053,7 @@
model.setOut_refund_no(chargingOrderRefund.getRefundCode());
model.setTransaction_id(tChargingOrder.getRechargeSerialNumber());
model.setReason("取消订单");
- model.setNotify_url("http://221.182.45.100:9000/order/t-shopping-order/cancelShoppingOrderWxRefund");
+ 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());
@@ -1733,6 +2061,9 @@
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);
}
}
@@ -1746,6 +2077,9 @@
RefundResp resp = aliPaymentClient.refund(dto).getData();
if(null != resp){
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
+ tChargingOrder.setRefundStatus(2);
+ tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ this.baseMapper.updateById(tChargingOrder);
chargingOrderRefundService.save(chargingOrderRefund);
}
@@ -1756,10 +2090,69 @@
}
+ if (payOrderQueryDto.getType()==2){
+ TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
+ 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("后台退款");
+ 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){
+ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
+
+ tChargingOrder.setRefundStatus(2);
+ tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+ shoppingOrderService.updateById(tChargingOrder);
+
+ shoppingOrderRefundService.save(chargingOrderRefund);
+
+ }
+ }
+
+ }
- return null;
+ return R.ok();
}
@@ -1798,18 +2191,25 @@
String startTime = dto.getStartTime();
String endTime = dto.getEndTime();
// 将这两个时间转化为localDateTime
- tSettlementConfirm.setStartTime(LocalDateTime.parse(startTime));
- tSettlementConfirm.setEndTime(LocalDateTime.parse(endTime));
+ // 创建 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("recharge_payment_status",2);
switch (dto.getType()){
case 1:
- eq.between("start_time", startTime, endTime);
+ eq.between("start_time", localDateTime, localDateTime1);
break;
case 2:
- eq.between("end_time", startTime, endTime);
+ eq.between("end_time", localDateTime, localDateTime1);
break;
}
List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
@@ -1833,13 +2233,23 @@
BigDecimal paymentAmount = new BigDecimal("0");
for (TChargingOrder tChargingOrder : tChargingOrders) {
// 累加充电总度数
- chargingElectronic = chargingElectronic.add(tChargingOrder.getChargingCapacity());
+ if (tChargingOrder.getChargingCapacity()!=null){
+ chargingElectronic = chargingElectronic.add(tChargingOrder.getChargingCapacity());
+
+ }
// 累加分佣
- sharingAmount = sharingAmount.add(tChargingOrder.getSharingAmount());
+ if (tChargingOrder.getSharingAmount()!=null) {
+ sharingAmount = sharingAmount.add(tChargingOrder.getSharingAmount());
+ }
// 累加电费
+ if (tChargingOrder.getElectrovalence()!=null) {
electrovalence = electrovalence.add(tChargingOrder.getElectrovalence());
+ }
// 累加服务费
- serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge());
+ if (tChargingOrder.getServiceCharge()!=null){
+ serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge());
+
+ }
// 累加会员折扣
if (tChargingOrder.getVipDiscountAmount()!=null){
vipDiscount = vipDiscount.add(tChargingOrder.getVipDiscountAmount());
@@ -1848,11 +2258,13 @@
if (tChargingOrder.getCouponDiscountAmount()!=null){
couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount());
}
- if (tChargingOrder.getRefundStatus() == 2){
+ if (tChargingOrder.getRefundStatus()!=null &&tChargingOrder.getRefundStatus() == 2){
// 如果成功退款 那么减去退款金额
paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()));
}else{
- paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
+ if (tChargingOrder.getPaymentAmount()!=null){
+ paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
+ }
}
}
// 三方交易手续费 三方收费*0.6%
@@ -1868,34 +2280,36 @@
tSettlementConfirm.setVipDiscount(vipDiscount);
tSettlementConfirm.setCouponDiscount(couponDiscount);
tSettlementConfirm.setSiteId(dto.getSiteId());
- tSettlementConfirm.setMeteringElectronic(dto.getData().getMeteringElectronic());
tSettlementConfirm.setChargingElectronic(chargingElectronic);
- tSettlementConfirm.setLossElectronic(dto.getData().getLossElectronic());
tSettlementConfirm.setIncome(chargingElectronic.add(serviceCharge));
- tSettlementConfirm.setVenue(dto.getData().getVenue());
- tSettlementConfirm.setMetering(dto.getData().getMetering());
- tSettlementConfirm.setClean(dto.getData().getClean());
- tSettlementConfirm.setMaintain(dto.getData().getMaintain());
- tSettlementConfirm.setCost(dto.getData().getVenue().add(dto.getData().getClean()).add(dto.getData().getMaintain()));
tSettlementConfirm.setProfitMoney(new BigDecimal("0"));
tSettlementConfirm.setNewMoney(new BigDecimal("0"));
tSettlementConfirm.setNewSettlement(new BigDecimal("0"));
tSettlementConfirm.setVipDiscount(vipDiscount);
tSettlementConfirm.setCouponDiscount(couponDiscount);
- tSettlementConfirm.setSupplyElectronic(dto.getData().getSupplyElectronic());
tSettlementConfirm.setType(dto.getType());
- tSettlementConfirm.setProportionPartner(dto.getData().getProportionPartner());
- tSettlementConfirm.setProportionMoney(dto.getData().getProportionMoney());
- tSettlementConfirm.setTotalElectronic(dto.getData().getTotalElectronic());
- tSettlementConfirm.setTotalService(dto.getData().getTotalService());
- tSettlementConfirm.setRemark(dto.getData().getRemark());
- tSettlementConfirm.setServicePartner(dto.getData().getServicePartner());
- tSettlementConfirm.setServiceMoney(dto.getData().getServiceMoney());
- tSettlementConfirm.setTotalService(dto.getData().getTotalService());
- tSettlementConfirm.setServiceRemark(dto.getData().getServiceRemark());
- tSettlementConfirm.setDistribution(dto.getData().getDistribution());
- tSettlementConfirm.setIncome(dto.getData().getElectrovalence().add(dto.getData().getServiceCharge()));
+
if (dto.getState() == 2){
+ tSettlementConfirm.setSupplyElectronic(dto.getSupplyElectronic());
+ tSettlementConfirm.setVenue(dto.getVenue());
+ tSettlementConfirm.setMetering(dto.getMetering());
+ 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());
+ tSettlementConfirm.setTotalElectronic(dto.getTotalElectronic());
+ tSettlementConfirm.setTotalService(dto.getTotalService());
+ tSettlementConfirm.setRemark(dto.getRemark());
+ tSettlementConfirm.setServicePartner(dto.getServicePartner());
+ tSettlementConfirm.setServiceMoney(dto.getServiceMoney());
+ tSettlementConfirm.setTotalService(dto.getTotalService());
+ tSettlementConfirm.setServiceRemark(dto.getServiceRemark());
+ tSettlementConfirm.setDistribution(dto.getDistribution());
+ tSettlementConfirm.setIncome(dto.getElectrovalence().add(dto.getServiceCharge()));
+ tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()));
tSettlementConfirmMapper.insert(tSettlementConfirm);
}
return tSettlementConfirm;
@@ -1907,14 +2321,15 @@
List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
for (TSettlementConfirm tSettlementConfirm : list) {
tSettlementConfirm.setUid(tSettlementConfirm.getId().toString());
- Partner data = siteClient.getPartnerR(tSettlementConfirm.getPartnerId()).getData();
List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
if (!data1.isEmpty()){
tSettlementConfirm.setSiteName(data1.get(0).getName());
+ Partner data = siteClient.getPartnerR(data1.get(0).getPartnerId()).getData();
+ if (data!=null){
+ tSettlementConfirm.setPartnerName(data.getName());
+ }
}
- 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);
@@ -1922,7 +2337,7 @@
}
pageInfo.setRecords(list);
- return null;
+ return pageInfo;
}
@Override
@@ -2031,7 +2446,7 @@
for (TChargingPile datum : data) {
bigDecimal = bigDecimal.add(datum.getRatedPower());
}
- BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(data.size())).setScale(2, RoundingMode.HALF_DOWN);
+
tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
// todo 计算利用率 该电站充电桩本月利用率:
@@ -2082,13 +2497,23 @@
tSettlementConfirm.setVipDiscount(vipDiscount);
tSettlementConfirm.setCouponDiscount(couponDiscount);
// 本月
- BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
- tSettlementConfirm.setIncomePercentage(subtract+"%");
+ if (beforeIncome.compareTo(new BigDecimal("0")) == 0){
+ tSettlementConfirm.setIncomePercentage(0+"%");
+ tSettlementConfirm.setIncomePercentage(0+"%");
+ }else{
+ BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+ tSettlementConfirm.setIncomePercentage(subtract+"%");
+ tSettlementConfirm.setIncomePercentage(subtract+"%");
+
+ }
// 比较总利润 收入合计-成本合计
BigDecimal subtract1 = income.subtract(cost);
BigDecimal subtract2 = beforeIncome.subtract(beforeCost);
- tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
- tSettlementConfirm.setIncomePercentage(subtract+"%");
+ if (subtract2.compareTo(new BigDecimal("0")) == 0){
+ tSettlementConfirm.setTotalPercentage(0+"%");
+ }else{
+ tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
+ }
tSettlementConfirm.setElectronicRefund(0);
// 查询上次汇报数据 进行比对涨幅跌幅
total.add(tSettlementConfirm);
@@ -2132,6 +2557,41 @@
return this.baseMapper.equipmentMapOut2(siteIds,statisticsQueryDto);
}
+ @Override
+ public List<Map<String, Object>> needElec(List<Integer> siteIds, ChargingStatisticsQueryDto 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);
+ }
+
+ @Override
+ public List<Map<String, Object>> getDateType(List<Integer> siteIds, ChargingDetailQueryDto 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);
+ }
+
+ @Override
+ public List<Map<String, Object>> getchargingCapacity(List<Integer> siteIds, ChargingDetailQueryDto 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);
+ }
+
public static void main(String[] args) {
// String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
// String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
--
Gitblit v1.7.1