From 9dc82f0523649a2cbf62d26938140c79bca33981 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期五, 17 一月 2025 18:41:35 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 1142 +++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 1,022 insertions(+), 120 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 c8218c0..e5b683f 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
@@ -9,6 +9,7 @@
import com.ruoyi.account.api.model.*;
import com.ruoyi.account.api.vo.GetAppUserVipDetail;
import com.ruoyi.account.api.vo.GetInviteUser;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
import com.ruoyi.chargingPile.api.feignClient.*;
import com.ruoyi.chargingPile.api.model.*;
import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode;
@@ -19,6 +20,7 @@
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.integration.api.feignClient.ChargingHandshakeClient;
import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient;
import com.ruoyi.integration.api.feignClient.SendMessageClient;
@@ -58,6 +60,8 @@
import com.ruoyi.payment.api.model.RefundResp;
import com.ruoyi.payment.api.model.WxPaymentRefundModel;
import com.ruoyi.payment.api.vo.*;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysUserClient;
import io.seata.spring.annotation.GlobalTransactional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -98,7 +102,8 @@
private ChargingGunClient chargingGunClient;
@Resource
private TSettlementConfirmMapper tSettlementConfirmMapper;
-
+ @Resource
+ private PartnerClient partnerClient;
@Resource
private SiteClient siteClient;
@@ -528,9 +533,9 @@
req.setSubject("充电充值");
req.setBuyerOpenId(appUser.getAliOpenid());
req.setBody("充电充值");
+ req.setNotifyUrl("/payment/ali/callBack");
AliPaymentResp data = aliPaymentClient.payment(req).getData();
if(null != data){
- data.setNotifyUrl(data.getNotifyUrl() + "/order/t-charging-order/chargingOrderALICallback");
return AjaxResult.success(data);
}
}
@@ -882,8 +887,7 @@
dto.setRefundReason("充电失败,取消充电订单");
RefundResp resp = aliPaymentClient.refund(dto).getData();
if(null != resp){
- SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
- AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date()));
+ AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", null);
if(success.isSuccess()){
chargingOrderRefundService.save(chargingOrderRefund);
}
@@ -933,7 +937,7 @@
Long userId = tokenService.getLoginUserApplet().getUserId();
TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, userId).eq(TChargingOrder::getChargingGunId, id)
.eq(TChargingOrder::getRechargePaymentStatus, 2).eq(TChargingOrder::getDelFlag, 0).orderByDesc(TChargingOrder::getStartTime).last(" limit 0, 1"));
- if(null == one){
+ if(null == one || !one.getAppUserId().equals(userId)){
return null;
}
ChargingDetails chargingDetails = new ChargingDetails();
@@ -957,15 +961,12 @@
Integer h = Integer.valueOf(data.getCumulative_charging_time() / 60);
Integer m = Integer.valueOf(data.getCumulative_charging_time() % 60);
chargingDetails.setChargedTime(String.format("%02d", h) + ":" + String.format("%02d", m));
- }
- //转换成UTC时间
- ChargingHandshake chargingHandshake = chargingHandshakeClient.getDataByOrderCode(one.getCode()).getData();
- if(null != chargingHandshake && null != data && null != one.getAppUserCarId()){
- BigDecimal bms_battery_capacity = chargingHandshake.getBms_battery_capacity();
- TAppUserCar appUserCar = appUserCarClient.getCarByIds(Arrays.asList(one.getAppUserCarId())).getData().get(0);
- // 续航 = 续航里程 * soc
- BigDecimal multiply = new BigDecimal(data.getSoc() / 100).multiply(new BigDecimal(appUserCar.getEndurance()));
- chargingDetails.setEndurance(multiply);
+ if(null != one.getAppUserCarId()){
+ TAppUserCar appUserCar = appUserCarClient.getCarById(one.getAppUserCarId().toString()).getData();
+ // 续航 = 续航里程 * soc
+ BigDecimal multiply = new BigDecimal(data.getSoc()).divide(new BigDecimal(100)).multiply(new BigDecimal(appUserCar.getEndurance()));
+ chargingDetails.setEndurance(multiply.setScale(2, RoundingMode.HALF_EVEN));
+ }
}
return chargingDetails;
}
@@ -986,6 +987,10 @@
}
if(status == 4 || status == 5){
return AjaxResult.error("不能重复操作");
+ }
+ Long userId = tokenService.getLoginUserApplet().getUserId();
+ if(!order.getAppUserId().equals(userId)){
+ return AjaxResult.error("权限不足");
}
TChargingOrder chargingOrder = new TChargingOrder();
chargingOrder.setId(Long.valueOf(id));
@@ -1142,7 +1147,7 @@
TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData();
TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, chargingGun.getId())
.orderByDesc(TChargingOrder::getEndTime).eq(TChargingOrder::getRechargePaymentStatus, 2).last(" limit 0, 1"));
- if(null != order && order.getStatus() != 3){
+ if(null != order && order.getStatus() != 4){
return;
}
@@ -1209,6 +1214,41 @@
}
dto.setUserIds(data);
}
+ Long userId = tokenService.getLoginUser().getUserid();
+ // 查询当前登陆人按钮权限
+ SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+ Integer roleType = sysUser.getRoleType();
+ //如果没传siteId,获取当前登陆人所有的siteIds
+ List<Integer> siteIds = new ArrayList<>();
+ if (dto.getSiteId()==null){
+ if (userId != null){
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ for (GetSiteListDTO datum : data) {
+ siteIds.add(datum.getId());
+ }
+ }
+ }else {
+ siteIds.add(dto.getSiteId());
+ }
+ if (siteIds.isEmpty()){
+ siteIds.add(-1);
+ }else{
+ if (roleType == 2){
+ List<Integer> integers = new ArrayList<>();
+ for (Integer siteId : siteIds) {
+ // 校验有没有这个站点的权限
+ List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
+
+ Boolean b = t1.get(1);
+ if (b){
+ integers.add(siteId);
+ }
+ }
+ siteIds = integers;
+ }
+ }
+ 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");
@@ -1219,7 +1259,26 @@
BigDecimal commissionMoney = new BigDecimal("0");
BigDecimal refundMoney = new BigDecimal("0");
BigDecimal paymentMoney = new BigDecimal("0");
+ List<String> collect2 = list.stream().map(TChargingOrder::getCode).collect(Collectors.toList());
+ StringBuilder stringBuilder2 = new StringBuilder();
+ List<UploadRealTimeMonitoringData> uploadRealTimeMonitoringData2 = new ArrayList<>();
+ for (String s : collect2) {
+ stringBuilder2.append(s).append(",");
+ }
+ if (stringBuilder2.length()>0){
+ StringBuilder ids = stringBuilder2.deleteCharAt(stringBuilder2.length() - 1);
+ uploadRealTimeMonitoringData2 = uploadRealTimeMonitoringDataClient.getOrderInfoByCodes(ids.toString()).getData();
+
+ }
for (ChargingOrderVO chargingOrderVO : list) {
+ if (roleType == 2){
+ for (Integer siteId : siteIds) {
+ // 校验有没有这个站点的权限
+ List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
+ chargingOrderVO.setAuthRecord(t1.get(0));
+ }
+
+ }
chargingOrderVO.setCommissionAmount(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
chargingOrderVO.setPlatFormMoney(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN):new BigDecimal("0"));
chargingOrderVO.setUid(chargingOrderVO.getId()+"");
@@ -1237,8 +1296,9 @@
// 充电订单 明细记录
List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>()
.eq("charging_order_id", chargingOrderVO.getId()));
- UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData();
- if (data5!=null){
+ UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringData2.stream().filter(e -> e.getTransaction_serial_number().equals(chargingOrderVO.getCode()))
+ .findFirst().orElse(null);
+ if (data5!=null && data5.getCumulative_charging_time()!=null){
long l = data5.getCumulative_charging_time() * 60L;
chargingOrderVO.setChargingSecond(l);
}
@@ -1261,17 +1321,27 @@
}
}
+ List<String> collect = list1.stream().map(TChargingOrder::getCode).collect(Collectors.toList());
+ StringBuilder stringBuilder = new StringBuilder();
+ List<UploadRealTimeMonitoringData> uploadRealTimeMonitoringData = new ArrayList<>();
+ for (String s : collect) {
+ stringBuilder.append(s).append(",");
+ }
+ if (stringBuilder.length()>0){
+ StringBuilder ids = stringBuilder.deleteCharAt(stringBuilder.length() - 1);
+ uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataClient.getOrderInfoByCodes(ids.toString()).getData();
+
+ }
+
for (ChargingOrderVO chargingOrderVO : list1) {
paymentMoney= paymentMoney.add(chargingOrderVO.getPaymentAmount()!=null?chargingOrderVO.getPaymentAmount():new BigDecimal("0"));
commissionMoney = commissionMoney.add(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0"));
if (chargingOrderVO.getChargingCapacity()!=null){
- total = total.add(chargingOrderVO.getElectricity());
+ total = total.add(chargingOrderVO.getElectricity()!=null?chargingOrderVO.getElectricity():new BigDecimal("0"));
}
- // 充电订单 明细记录
- List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>()
- .eq("charging_order_id", chargingOrderVO.getId()));
- UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData();
- if (data5!=null){
+ UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringData.stream().filter(e -> e.getTransaction_serial_number().equals(chargingOrderVO.getCode()))
+ .findFirst().orElse(null);
+ if (data5!=null && data5.getCumulative_charging_time()!=null){
long l = data5.getCumulative_charging_time() * 60L;
chargingOrderVO.setChargingSecond(l);
time+=l;
@@ -1340,8 +1410,8 @@
}
@Override
- public Map<String, Object> countAll(LocalDate sixBefore) {
- return this.baseMapper.countAll(sixBefore);
+ public Map<String, Object> countAll(LocalDate sixBefore,List<Integer> siteIds) {
+ return this.baseMapper.countAll(sixBefore,siteIds);
}
@Override
@@ -1369,7 +1439,8 @@
return this.baseMapper.getYearData(chargingOrderIds);
}
-
+ @Resource
+ private SysUserClient sysUserClient;
@Override
public ChargingOrderTimeVO chargingList(ChargingListQuery dto) {
String startTime1 = null;
@@ -1413,9 +1484,52 @@
dto.setCarIds(carIds);
}
}
+ Long userId = tokenService.getLoginUser().getUserid();
+ // 查询当前登陆人按钮权限
+ SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+ Integer roleType = sysUser.getRoleType();
+ //如果没传siteId,获取当前登陆人所有的siteIds
+ List<Integer> siteIds = new ArrayList<>();
+ if (dto.getSiteId()==null){
+ if (userId != null){
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ for (GetSiteListDTO datum : data) {
+ siteIds.add(datum.getId());
+ }
+ }
+ }else {
+ siteIds.add(dto.getSiteId());
+ }
+ if (siteIds.isEmpty()){
+ siteIds.add(-1);
+ }else{
+ if (roleType == 2){
+ List<Integer> integers = new ArrayList<>();
+ for (Integer siteId : siteIds) {
+ // 校验有没有这个站点的权限
+ List<Boolean> t1= partnerClient.getChargingOrderMenu(sysUser.getObjectId(),siteId).getData();
+
+ Boolean b = t1.get(1);
+ if (b){
+ integers.add(siteId);
+ }
+ }
+ siteIds = integers;
+ }
+ }
+ dto.setSiteIds(siteIds);
PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2);
+ List<Integer> siteIdsList = list.stream().map(ChargingOrderListVO::getSiteId).collect(Collectors.toList());
+ if (siteIdsList.isEmpty())siteIdsList.add(-1);
+ List<Site> sites = siteClient.getSiteByIds(siteIdsList).getData();
+
for (ChargingOrderListVO chargingOrderListVO : list) {
+ if (roleType==2){
+ List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
+ chargingOrderListVO.setAuthInfo(data.get(0));
+ chargingOrderListVO.setAuthCurve(data.get(1));
+ }
chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity());
BigDecimal bigDecimal = new BigDecimal("0.006");
if (chargingOrderListVO.getOrderAmount()!=null){
@@ -1425,9 +1539,9 @@
chargingOrderListVO.setUid(chargingOrderListVO.getId()+"");
List<Integer> integers = new ArrayList<>();
integers.add(chargingOrderListVO.getSiteId());
- List<Site> data = siteClient.getSiteByIds(integers).getData();
- if (!data.isEmpty()) {
- chargingOrderListVO.setSiteName(data.get(0).getName());
+ Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null);
+ if (site!=null){
+ chargingOrderListVO.setSiteName(site.getName());
}
if (chargingOrderListVO.getChargingGunId()!=null && chargingOrderListVO.getChargingPileId()!=null){
TChargingGun data1 = chargingGunClient.getChargingGunById(chargingOrderListVO.getChargingGunId()).getData();
@@ -1478,7 +1592,6 @@
}
}
chargingOrderListVO.setPhone(data3.getPhone());
-
}
}
List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery()
@@ -1552,14 +1665,17 @@
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();
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 = chargingOrderAccountingStrategyService.lambdaQuery()
- .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrderListVO.getId()).list();
+ List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
+ .collect(Collectors.toList());
for (TChargingOrderAccountingStrategy temp : list2) {
switch (temp.getType()){
case 1:
@@ -1838,83 +1954,134 @@
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<>();
- for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
- Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
- try {
- AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
- //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
- Object invoke = null;
- switch (strategyDetail.getType()){
- case 1:
- //充电度数
- invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+ try {
+ //跨天
+ if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
+ //当天的
+ //开始通过计费策略遍历解析每个时段的费用明细
+ String start_time = vo.getStart_time();
+ String end_time = vo.getEnd_time();
+ long start = sdfs.parse(start_time).getTime();
+ long end = sdfs.parse(end_time).getTime();
+ Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
+ /**
+ * "start_time": "2025-01-03 23:06:43.00",
+ * "end_time": "2025-01-04 00:39:39.00",
+ */
+ for (int i = accountingStrategyDetailOrderList.size(); i > 0; i--) {
+ AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i - 1);
+ long time = sdfs.parse(start_time.split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime();
+ if(time < start){
break;
- case 2:
- //充电度数
- invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
- break;
- case 3:
- //充电度数
- invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
- break;
- case 4:
- //充电度数
- invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
- break;
+ }
+ //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+ Object invoke = null;
+ switch (strategyDetail.getType()){
+ case 1:
+ //充电度数
+ invoke = clazz.getMethod("getSpike_charge" + (i)).invoke(vo);
+ break;
+ case 2:
+ //充电度数
+ invoke = clazz.getMethod("getPeak_charge" + (i)).invoke(vo);
+ break;
+ case 3:
+ //充电度数
+ invoke = clazz.getMethod("getFlat_charge" + (i)).invoke(vo);
+ break;
+ case 4:
+ //充电度数
+ invoke = clazz.getMethod("getValley_charge" + (i)).invoke(vo);
+ break;
+ }
+ if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+ continue;
+ }
+ BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+ AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+ BeanUtils.copyProperties(strategyDetail, vo1);
+ vo1.setChargingCapacity(sharp_peak_charge);
+ lists.add(vo1);
}
- if(null == invoke || Double.valueOf(invoke.toString()) == 0){
- continue;
+
+ //第二天的
+ //开始通过计费策略遍历解析每个时段的费用明细
+ for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
+ AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
+ long time = sdfs.parse(end_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime();
+ if(time > end){
+ break;
+ }
+ //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+ Object invoke = null;
+ switch (strategyDetail.getType()){
+ case 1:
+ //充电度数
+ invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+ break;
+ case 2:
+ //充电度数
+ invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
+ break;
+ case 3:
+ //充电度数
+ invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
+ break;
+ case 4:
+ //充电度数
+ invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
+ break;
+ }
+ if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+ continue;
+ }
+ BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+ AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+ BeanUtils.copyProperties(strategyDetail, vo1);
+ vo1.setChargingCapacity(sharp_peak_charge);
+ lists.add(vo1);
}
- BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
- AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
- BeanUtils.copyProperties(strategyDetail, vo1);
- vo1.setStart(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime());
- vo1.setEnd(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime());
- vo1.setChargingCapacity(sharp_peak_charge);
- lists.add(vo1);
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
- } catch (InvocationTargetException e) {
- throw new RuntimeException(e);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException(e);
- } catch (ParseException e) {
- throw new RuntimeException(e);
+ }else{
+ for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
+ Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
+ AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
+ //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+ Object invoke = null;
+ switch (strategyDetail.getType()){
+ case 1:
+ //充电度数
+ invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+ break;
+ case 2:
+ //充电度数
+ invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
+ break;
+ case 3:
+ //充电度数
+ invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
+ break;
+ case 4:
+ //充电度数
+ invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
+ break;
+ }
+ if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+ continue;
+ }
+ BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+ AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+ BeanUtils.copyProperties(strategyDetail, vo1);
+ vo1.setChargingCapacity(sharp_peak_charge);
+ lists.add(vo1);
+ }
}
- }
- Collections.sort(lists, new Comparator<AccountingStrategyDetailOrderVo>() {
- public int compare(AccountingStrategyDetailOrderVo s1, AccountingStrategyDetailOrderVo s2) {
- return s1.getStart() < s2.getStart() ? -1 : s1.getStart() == s2.getStart() ? 0 : 1;
- }
- });
- if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
- List<AccountingStrategyDetailOrderVo> list1 = new ArrayList<>(lists);
- for (AccountingStrategyDetailOrderVo orderVo : list1) {
- Calendar start = Calendar.getInstance();
- start.setTimeInMillis(orderVo.getStart());
- start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1);
- orderVo.setStart(start.getTimeInMillis());
- Calendar end = Calendar.getInstance();
- end.setTimeInMillis(orderVo.getEnd());
- end.set(Calendar.DAY_OF_YEAR, end.get(Calendar.DAY_OF_YEAR) + 1);
- orderVo.setEnd(end.getTimeInMillis());
- }
- lists.addAll(list1);
+ }catch (Exception e){
+ e.printStackTrace();
}
//开始处理明细
- SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS");
- SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm");
- Date start = null;
- Date end = null;
- try {
- start = sdf3.parse(vo.getStart_time());
- end = sdf3.parse(vo.getEnd_time());
- } catch (ParseException e) {
- throw new RuntimeException(e);
- }
-
- for (AccountingStrategyDetailOrderVo strategyDetail : lists) {
+ 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());
@@ -1923,16 +2090,17 @@
chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
-
- if(start.getTime() >= strategyDetail.getStart()){
- chargingOrderAccountingStrategy.setStartTime(sdf2.format(start));
+ if(i == 0){
+ String time = vo.getStart_time().split(" ")[1];
+ chargingOrderAccountingStrategy.setStartTime(time.substring(0, time.lastIndexOf(":")));
}else{
chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime());
}
- if(end.getTime() >= strategyDetail.getEnd()){
- chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
+ if(i == lists.size() - 1){
+ String time = vo.getEnd_time().split(" ")[1];
+ chargingOrderAccountingStrategy.setEndTime(time.substring(0, time.lastIndexOf(":")));
}else{
- chargingOrderAccountingStrategy.setEndTime(sdf2.format(end));
+ chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime());
}
//已充电总度数
@@ -1956,8 +2124,8 @@
periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
total = total.add(electrovalenc.add(originalServicePrice));
+
}
-
//原金额
@@ -2141,6 +2309,7 @@
referralReward(chargingOrder);
//开始构建退款费用
+ refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
if(refundAmount.compareTo(BigDecimal.ZERO) > 0){
Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
//构建退款明细
@@ -2178,21 +2347,457 @@
if(2 == rechargePaymentType){
RefundReq dto = new RefundReq();
dto.setOutTradeNo(chargingOrder.getCode());
- dto.setOutRequestNo(chargingOrderRefund.getCode());
+ dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
dto.setRefundAmount(refundAmount.toString());
dto.setRefundReason("充电完成退款");
RefundResp resp = aliPaymentClient.refund(dto).getData();
if(null != resp){
- SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
- AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date()));
- if(success.isSuccess()){
- chargingOrderRefundService.save(chargingOrderRefund);
- }
+ chargingOrderRefundService.save(chargingOrderRefund);
+ this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
}
}
}
}
+
+
+// /**
+// * 停止充电返回账单后计算费用
+// * @param vo
+// */
+// @Override
+// @GlobalTransactional(rollbackFor = Exception.class)
+// public void endChargeBillingCharge1(TransactionRecordMessageVO vo) {
+// TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number()));
+// Integer status = chargingOrder.getStatus();
+//// if(status == 5){
+//// return;
+//// }
+//
+// //如果使用优惠券需要判断优惠券是否满足使用条件
+// //根据实际的充电金额计算退款金额 退回费用=(原金额/总金额)*(总金额-实际充电金额)
+// //退款金额=优惠券金额+剩余充电金额
+// 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<>();
+// try {
+// //跨天
+// if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
+// //当天的
+// //开始通过计费策略遍历解析每个时段的费用明细
+// String start_time = vo.getStart_time();
+// String end_time = vo.getEnd_time();
+// long start = sdfs.parse(start_time).getTime();
+// long end = sdfs.parse(end_time).getTime();
+// Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
+// /**
+// * "start_time": "2025-01-03 23:06:43.00",
+// * "end_time": "2025-01-04 00:39:39.00",
+// */
+// for (int i = accountingStrategyDetailOrderList.size(); i > 0; i--) {
+// AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i - 1);
+// long time = sdfs.parse(start_time.split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime();
+// if(time < start){
+// break;
+// }
+// //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+// Object invoke = null;
+// switch (strategyDetail.getType()){
+// case 1:
+// //充电度数
+// invoke = clazz.getMethod("getSpike_charge" + (i)).invoke(vo);
+// break;
+// case 2:
+// //充电度数
+// invoke = clazz.getMethod("getPeak_charge" + (i)).invoke(vo);
+// break;
+// case 3:
+// //充电度数
+// invoke = clazz.getMethod("getFlat_charge" + (i)).invoke(vo);
+// break;
+// case 4:
+// //充电度数
+// invoke = clazz.getMethod("getValley_charge" + (i)).invoke(vo);
+// break;
+// }
+// if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+// continue;
+// }
+// BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+// AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+// BeanUtils.copyProperties(strategyDetail, vo1);
+// vo1.setChargingCapacity(sharp_peak_charge);
+// lists.add(vo1);
+// }
+//
+// //第二天的
+// //开始通过计费策略遍历解析每个时段的费用明细
+// for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
+// AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
+// long time = sdfs.parse(end_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime();
+// if(time > end){
+// break;
+// }
+// //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+// Object invoke = null;
+// switch (strategyDetail.getType()){
+// case 1:
+// //充电度数
+// invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+// break;
+// case 2:
+// //充电度数
+// invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
+// break;
+// case 3:
+// //充电度数
+// invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
+// break;
+// case 4:
+// //充电度数
+// invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
+// break;
+// }
+// if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+// continue;
+// }
+// BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+// AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+// BeanUtils.copyProperties(strategyDetail, vo1);
+// vo1.setChargingCapacity(sharp_peak_charge);
+// lists.add(vo1);
+// }
+// }else{
+// for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
+// Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
+// AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i);
+// //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)
+// Object invoke = null;
+// switch (strategyDetail.getType()){
+// case 1:
+// //充电度数
+// invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo);
+// break;
+// case 2:
+// //充电度数
+// invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo);
+// break;
+// case 3:
+// //充电度数
+// invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo);
+// break;
+// case 4:
+// //充电度数
+// invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo);
+// break;
+// }
+// if(null == invoke || Double.valueOf(invoke.toString()) == 0){
+// continue;
+// }
+// BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
+// AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
+// BeanUtils.copyProperties(strategyDetail, vo1);
+// vo1.setChargingCapacity(sharp_peak_charge);
+// lists.add(vo1);
+// }
+// }
+// }catch (Exception e){
+// e.printStackTrace();
+// }
+//
+// //开始处理明细
+// 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()){
+// 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);
+// System.err.println("----------"+JSON.toJSONString(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();
+// order.setEndMode(soc > 98 ? 2 : 3);
+// }else{
+// order.setEndMode(1);
+// }
+// order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
+// order.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
+// order.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
+// order.setStatus(5);
+// order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
+// order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.HALF_EVEN));
+// order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
+// order.setChargingCapacity(vo.getTotal_electricity());
+// order.setElectricity(vo.getTotal_electricity());
+//
+// //计算优惠券
+// BigDecimal couponDiscount = BigDecimal.ZERO;
+//// if(null != chargingOrder.getAppCouponId()){
+//// //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。
+//// TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData();
+//// String couponJson = appCoupon.getCouponJson();
+//// TCoupon tCoupon = JSON.parseObject(couponJson, TCoupon.class);
+//// Integer preferentialMode = tCoupon.getPreferentialMode();
+//// if(1 == preferentialMode){
+//// //满减
+//// if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
+//// BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
+//// //如果优惠金额大于服务费金额,以服务费作为最大限制
+//// if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){
+//// couponDiscount = periodServicePrice_total;
+//// periodServicePrice_total = BigDecimal.ZERO;
+//// }else{
+//// couponDiscount = couponDiscountAmount;
+//// }
+//// appCoupon.setStatus(2);
+////// appCouponClient.updateAppCoupon(appCoupon);
+//// }else{
+//// order.setAppCouponId(null);
+//// order.setCouponDiscountAmount(BigDecimal.ZERO);
+////// appCouponClient.refund(chargingOrder.getAppCouponId().toString());
+//// }
+//// }
+//// if(2 == preferentialMode){
+//// //抵扣
+//// if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){
+//// //折扣金额
+//// BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
+//// divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
+//// //如果优惠金额大于服务费金额,以服务费作为最大限制
+//// if(periodServicePrice_total.compareTo(divide) < 0){
+//// couponDiscount = periodServicePrice_total;
+//// periodServicePrice_total = BigDecimal.ZERO;
+//// }else{
+//// couponDiscount = divide;
+//// }
+////
+//// 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);
+// System.err.println("----------"+JSON.toJSONString(order));
+//// chargingOrder = this.getById(order.getId());
+////
+//// //开始将优惠券优惠的金额添加到明细中
+//// 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);
+////
+//// //添加积分
+//// 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);
+//// }
+//// }
+////
+//// //计算用户标签
+//// editUserTag(chargingOrder);
+//// //用户推荐奖励
+//// referralReward(chargingOrder);
+////
+//// //开始构建退款费用
+//// if(refundAmount.compareTo(BigDecimal.ZERO) > 0){
+//// Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
+//// //构建退款明细
+//// TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
+//// chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
+//// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+//// chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+//// chargingOrderRefund.setRefundAmount(refundAmount);
+//// chargingOrderRefund.setRefundStatus(1);
+//// chargingOrderRefund.setPayType(rechargePaymentType);
+//// chargingOrderRefund.setRefundStatus(1);
+//// chargingOrderRefund.setCode(chargingOrder.getCode());
+//// chargingOrderRefund.setRefundTitle("充电完成退款");
+//// chargingOrderRefund.setRefundContent("充电完成退款");
+//// chargingOrderRefund.setRefundReason("充电完成退款");
+//// chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
+//// chargingOrderRefund.setRefundTotalAmount(refundAmount);
+//// chargingOrderRefund.setPayAmount(rechargeAmount);
+//// if(1 == rechargePaymentType){
+//// WxPaymentRefundModel model = new WxPaymentRefundModel();
+//// model.setOut_trade_no(chargingOrder.getCode());
+//// model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+//// model.setReason("充电完成退款");
+//// model.setNotify_url("/payment/wx/refund/notify");
+//// WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+//// amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
+//// amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+//// amount.setCurrency("CNY");
+//// model.setAmount(amount);
+//// R<String> orderR = wxPaymentClient.refundOrderR(model);
+//// if(200 == orderR.getCode()){
+//// chargingOrderRefundService.save(chargingOrderRefund);
+//// }
+//// }
+//// if(2 == rechargePaymentType){
+//// RefundReq dto = new RefundReq();
+//// dto.setOutTradeNo(chargingOrder.getCode());
+//// dto.setOutRequestNo(chargingOrderRefund.getCode());
+//// dto.setRefundAmount(refundAmount.toString());
+//// dto.setRefundReason("充电完成退款");
+//// RefundResp resp = aliPaymentClient.refund(dto).getData();
+//// if(null != resp){
+//// AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", null);
+//// if(success.isSuccess()){
+//// chargingOrderRefundService.save(chargingOrderRefund);
+//// }
+//// }
+//// }
+////
+//// }
+// }
+
+
@Override
public List<Map<String, Object>> getByDate(List<Long> chargingOrderIds) {
@@ -2215,8 +2820,8 @@
}
@Override
- public List<Map<String, Object>> usersDay() {
- return this.baseMapper.usersDay();
+ public List<Map<String, Object>> usersDay(ChargingStatisticsQueryDto statisticsQueryDto) {
+ return this.baseMapper.usersDay(statisticsQueryDto);
}
@Override
@@ -2546,7 +3151,7 @@
.eq("recharge_payment_status",2);
switch (dto.getType()){
case 1:
- eq.between("start_time", localDateTime, localDateTime1);
+ eq.between("pay_time", localDateTime, localDateTime1);
break;
case 2:
eq.between("end_time", localDateTime, localDateTime1);
@@ -2682,9 +3287,49 @@
}
dto.setStartTime(startTime);
dto.setEndTime(endTime);
+ Long userId = tokenService.getLoginUser().getUserid();
+ // 查询当前登陆人按钮权限
+ SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+ Integer roleType = sysUser.getRoleType();
+ //如果没传siteId,获取当前登陆人所有的siteIds
+ List<Integer> siteIds = new ArrayList<>();
+ if (dto.getSiteIds()==null){
+ if (userId != null){
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ for (GetSiteListDTO datum : data) {
+ siteIds.add(datum.getId());
+ }
+ }
+ }else {
+ siteIds.add(dto.getSiteIds());
+ }
+ if (siteIds.isEmpty()){
+ siteIds.add(-1);
+ }else{
+ if (roleType == 2){
+ List<Integer> integers = new ArrayList<>();
+ for (Integer siteId : siteIds) {
+ // 校验有没有这个站点的权限
+ List<Boolean> t1= partnerClient.getSettlementListMenu(sysUser.getObjectId(),siteId).getData();
+
+ Boolean b = t1.get(2);
+ if (b){
+ integers.add(siteId);
+ }
+ }
+ siteIds = integers;
+ }
+ }
+ dto.setSiteIdss(siteIds);
PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
+
for (TSettlementConfirm tSettlementConfirm : list) {
+ if (roleType==2){
+ List<Boolean> data = partnerClient.getSettlementListMenu(sysUser.getObjectId(), tSettlementConfirm.getSiteId()).getData();
+ tSettlementConfirm.setAuthDownLoad(data.get(0));
+ tSettlementConfirm.setAuthDelete(data.get(1));
+ }
tSettlementConfirm.setUid(tSettlementConfirm.getId().toString());
List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
if (!data1.isEmpty()){
@@ -2707,12 +3352,265 @@
@Override
public SettlementTotalVO settlementTotal(String time) {
+ Long userId = tokenService.getLoginUser().getUserid();
+ //如果没传siteId,获取当前登陆人所有的siteIds
+ List<Integer> siteIds = new ArrayList<>();
+ if (userId != null){
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ for (GetSiteListDTO datum : data) {
+ siteIds.add(datum.getId());
+ }
+ }
+ if (siteIds.isEmpty()){
+ siteIds.add(-1);
+ }
SettlementTotalVO res = new SettlementTotalVO();
- List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time);
+ List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
// 减少一个月
LocalDateTime minus = parse.minusMonths(1);
- List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time);
+ List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
+ // 合计
+ List<TSettlementConfirm> total = new ArrayList<>();
+
+ TSettlementConfirm tSettlementConfirm1 = new TSettlementConfirm();
+ BigDecimal meteringElectronic = new BigDecimal("0");
+ BigDecimal chargingElectronic = new BigDecimal("0");
+ BigDecimal lossElectronic = new BigDecimal("0");
+ BigDecimal income = new BigDecimal("0");
+ BigDecimal venue = new BigDecimal("0");
+ BigDecimal metering = new BigDecimal("0");
+ BigDecimal clean = new BigDecimal("0");
+ BigDecimal maintain = new BigDecimal("0");
+ BigDecimal cost = new BigDecimal("0");
+ BigDecimal profitMoney = new BigDecimal("0");
+ BigDecimal newMoney = new BigDecimal("0");
+ BigDecimal newSettlement = new BigDecimal("0");
+ BigDecimal supplyElectronic = new BigDecimal("0");
+ BigDecimal proportionPartner = new BigDecimal("0");
+ BigDecimal proportionMoney = new BigDecimal("0");
+ BigDecimal totalElectronic = new BigDecimal("0");
+ BigDecimal totalService = new BigDecimal("0");
+ BigDecimal servicePartner = new BigDecimal("0");
+ BigDecimal serviceMoney = new BigDecimal("0");
+ BigDecimal sharingAmount = new BigDecimal("0");
+ BigDecimal commissionAmount = new BigDecimal("0");
+ BigDecimal electrovalence = new BigDecimal("0");
+ BigDecimal serviceCharge = new BigDecimal("0");
+ BigDecimal orderCommission = new BigDecimal("0");
+ BigDecimal vipDiscount = new BigDecimal("0");
+ BigDecimal couponDiscount = new BigDecimal("0");
+// tSettlementConfirm1.setIncomePercentage();
+// tSettlementConfirm1.setTotalPercentage();
+ tSettlementConfirm1.setElectronicRefund(0);
+ // 上月成本合计
+ BigDecimal beforeCost= new BigDecimal("0");
+ // 上月利润合计
+ BigDecimal beforeIncome= new BigDecimal("0");
+ int i = 1;
+ for (TSettlementConfirm tSettlementConfirm : list1) {
+ tSettlementConfirm.setXuhao(i);
+ tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
+ List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
+ if (!data1.isEmpty()){
+ tSettlementConfirm.setSiteName(data1.get(0).getName());
+ }
+ if (tSettlementConfirm.getMeteringElectronic()!=null){
+ meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
+ chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
+ }
+ if (tSettlementConfirm.getLossElectronic()!=null){
+ lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
+ }
+ income = income.add(tSettlementConfirm.getIncome());
+ venue = venue.add(tSettlementConfirm.getVenue());
+ metering = metering.add(tSettlementConfirm.getMetering());
+ clean = clean.add(tSettlementConfirm.getClean());
+ maintain = maintain.add(tSettlementConfirm.getMaintain());
+ cost = cost.add(tSettlementConfirm.getCost());
+ profitMoney = profitMoney.add(tSettlementConfirm.getProfitMoney());
+ newMoney = newMoney.add(tSettlementConfirm.getNewMoney());
+ newSettlement = newSettlement.add(tSettlementConfirm.getNewSettlement());
+ supplyElectronic = supplyElectronic.add(tSettlementConfirm.getSupplyElectronic());
+ proportionPartner = proportionPartner.add(tSettlementConfirm.getProportionPartner());
+ proportionMoney = proportionMoney.add(tSettlementConfirm.getProportionMoney());
+ totalElectronic = totalElectronic.add(tSettlementConfirm.getTotalElectronic());
+ totalService = totalService.add(tSettlementConfirm.getTotalService());
+ servicePartner = servicePartner.add(tSettlementConfirm.getServicePartner());
+ serviceMoney = serviceMoney.add(tSettlementConfirm.getServiceMoney());
+ sharingAmount = sharingAmount.add(tSettlementConfirm.getSharingAmount());
+ commissionAmount = commissionAmount.add(tSettlementConfirm.getCommissionAmount());
+ electrovalence = electrovalence.add(tSettlementConfirm.getElectrovalence());
+ serviceCharge = serviceCharge.add(tSettlementConfirm.getServiceCharge());
+ orderCommission = orderCommission.add(tSettlementConfirm.getOrderCommission());
+ vipDiscount = vipDiscount.add(tSettlementConfirm.getVipDiscount());
+ couponDiscount = couponDiscount.add(tSettlementConfirm.getCouponDiscount());
+
+ // 查询结算确认单开始时间和结束时间的单子
+ QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
+ .eq("site_id", tSettlementConfirm.getSiteId())
+ .eq("recharge_payment_status",2);
+ switch (tSettlementConfirm.getType()){
+ case 1:
+ eq.between("start_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
+ break;
+ case 2:
+ eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
+ break;
+ }
+ List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
+ Map<String,TChargingOrder> map = new HashMap<>();
+ StringBuilder stringBuilder = new StringBuilder();
+ for (TChargingOrder tChargingOrder : tChargingOrders) {
+ stringBuilder.append(tChargingOrder.getCode()).append(",");
+
+ }
+ // 充电总时长
+
+ Long temp = 1L;
+ if (StringUtils.hasLength(stringBuilder.toString())){
+ String substring = stringBuilder.substring(0, stringBuilder.length() - 1);
+ for (String s : substring.split(",")) {
+ UploadRealTimeMonitoringData data6 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(s).getData();
+ if (data6!=null){
+ temp+=(data6.getCumulative_charging_time()*60);
+
+ }
+
+ }
+ }
+ List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
+ // 计算充电桩的功率平均值
+ BigDecimal bigDecimal = new BigDecimal("0");
+ for (TChargingPile datum : data) {
+ bigDecimal = bigDecimal.add(datum.getRatedPower());
+ }
+
+
+ tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
+ //利用率=充电量/(桩数量*功率*时间)
+ List<TChargingPile> data2 = chargingPileClient.getChargingPileBySiteId(tSettlementConfirm.getSiteId()).getData();
+ BigDecimal bigDecimal2 = new BigDecimal("0");
+
+ if (data2!=null && (!data2.isEmpty())){
+ for (TChargingPile tChargingPile : data2) {
+ bigDecimal2 = bigDecimal2.add(tChargingPile.getRatedPower());
+ }
+ BigDecimal bigDecimal1 = new BigDecimal(data2.size()+"");
+ // 平均功率
+ BigDecimal divide = bigDecimal2.divide(bigDecimal1, 2, RoundingMode.HALF_DOWN);
+ // 充电量
+ BigDecimal chargingElectronic1 = tSettlementConfirm.getChargingElectronic();
+ // 桩数量
+ BigDecimal bigDecimal3 = new BigDecimal(data2.size());
+ BigDecimal multiply = chargingElectronic1.multiply(new BigDecimal("24"));
+ BigDecimal multiply1 = bigDecimal3.multiply(divide).multiply(new BigDecimal(temp));
+ tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1,2,RoundingMode.HALF_DOWN)+"");
+ }else{
+ tSettlementConfirm.setRate("");
+ }
+
+
+ for (TSettlementConfirm settlementConfirm : list2) {
+ int value = parse.getMonth().getValue();
+ settlementConfirm.setMonth(value);
+ settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
+ tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
+ if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
+ // 电站相同比较收入涨幅跌幅
+ if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){
+ BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome(),2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+ tSettlementConfirm.setIncomePercentage(subtract+"%");
+ }else {
+ tSettlementConfirm.setIncomePercentage("100"+"%");
+
+ }
+
+ // 比较总利润 收入合计-成本合计
+ BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost());
+ BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost());
+ BigDecimal bigDecimal1 = subtract1.subtract(subtract2)
+ .divide(subtract2, 2, RoundingMode.HALF_DOWN)
+ .multiply(new BigDecimal("100"))
+ .setScale(2, RoundingMode.HALF_DOWN);
+ tSettlementConfirm.setTotalPercentage(bigDecimal1+"%"); }
+ beforeCost = beforeCost.add(settlementConfirm.getCost());
+ beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
+ }
+ i++;
+ }
+ TSettlementConfirm tSettlementConfirm = new TSettlementConfirm();
+ tSettlementConfirm.setMonth(parse.getMonthValue());
+ tSettlementConfirm.setMeteringElectronic(meteringElectronic);
+ tSettlementConfirm.setChargingElectronic(chargingElectronic);
+ tSettlementConfirm.setLossElectronic(lossElectronic);
+ tSettlementConfirm.setIncome(income);
+ tSettlementConfirm.setVenue(venue);
+ tSettlementConfirm.setMetering(metering);
+ tSettlementConfirm.setClean(clean);
+ tSettlementConfirm.setMaintain(maintain);
+ tSettlementConfirm.setCost(cost);
+ tSettlementConfirm.setProfitMoney(profitMoney);
+ tSettlementConfirm.setNewMoney(newMoney);
+ tSettlementConfirm.setNewSettlement(newSettlement);
+ tSettlementConfirm.setSupplyElectronic(supplyElectronic);
+ tSettlementConfirm.setProportionPartner(proportionPartner);
+ tSettlementConfirm.setProportionMoney(proportionMoney);
+ tSettlementConfirm.setTotalElectronic(totalElectronic);
+ tSettlementConfirm.setTotalService(totalService);
+ tSettlementConfirm.setServicePartner(servicePartner);
+ tSettlementConfirm.setServiceMoney(serviceMoney);
+ tSettlementConfirm.setSharingAmount(sharingAmount);
+ tSettlementConfirm.setCommissionAmount(commissionAmount);
+ tSettlementConfirm.setElectrovalence(electrovalence);
+ tSettlementConfirm.setServiceCharge(serviceCharge);
+ tSettlementConfirm.setOrderCommission(orderCommission);
+ tSettlementConfirm.setVipDiscount(vipDiscount);
+ tSettlementConfirm.setCouponDiscount(couponDiscount);
+ // 本月
+ if (beforeIncome.compareTo(new BigDecimal("0")) == 0){
+ tSettlementConfirm.setIncomePercentage(0+"%");
+ tSettlementConfirm.setIncomePercentage(0+"%");
+ }else{
+ BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome,2,RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+ tSettlementConfirm.setIncomePercentage(subtract+"%");
+ tSettlementConfirm.setIncomePercentage(subtract+"%");
+
+ }
+ // 比较总利润 收入合计-成本合计
+ BigDecimal subtract1 = income.subtract(cost);
+ BigDecimal subtract2 = beforeIncome.subtract(beforeCost);
+ if (subtract2.compareTo(new BigDecimal("0")) == 0){
+ tSettlementConfirm.setTotalPercentage(0+"%");
+ }else{
+ tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2,2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
+ }
+ tSettlementConfirm.setElectronicRefund(0);
+ // 查询上次汇报数据 进行比对涨幅跌幅
+ total.add(tSettlementConfirm);
+ res.setList1(list1);
+ res.setList2(total);
+ return res;
+ }
+ @Override
+ public SettlementTotalVO settlementTotalR(String time,Long userId) {
+ //如果没传siteId,获取当前登陆人所有的siteIds
+ List<Integer> siteIds = new ArrayList<>();
+ if (userId != null){
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ for (GetSiteListDTO datum : data) {
+ siteIds.add(datum.getId());
+ }
+ }
+ if (siteIds.isEmpty()){
+ siteIds.add(-1);
+ }
+ SettlementTotalVO res = new SettlementTotalVO();
+ List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
+ LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+ // 减少一个月
+ LocalDateTime minus = parse.minusMonths(1);
+ List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time,siteIds);
// 合计
List<TSettlementConfirm> total = new ArrayList<>();
@@ -3015,6 +3913,10 @@
public EndOfChargePageInfo getEndOfChargePageInfo(String id) {
EndOfChargePageInfo info = new EndOfChargePageInfo();
TChargingOrder chargingOrder = this.getById(id);
+ Long userId = tokenService.getLoginUserApplet().getUserId();
+ if(!chargingOrder.getAppUserId().equals(userId)){
+ throw new RuntimeException("权限不足");
+ }
info.setId(id);
info.setCode(chargingOrder.getCode());
info.setPaymentAmount(chargingOrder.getPaymentAmount());
--
Gitblit v1.7.1