From 8a038cf6f0792cfe260a94e86d954b50f068e758 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期五, 07 二月 2025 16:55:41 +0800 Subject: [PATCH] bug修改 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 516 ++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 344 insertions(+), 172 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 dfd55ed..d54b825 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 @@ -60,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; @@ -78,6 +80,7 @@ import java.time.*; import java.time.format.DateTimeFormatter; import java.time.format.TextStyle; +import java.time.temporal.ChronoUnit; import java.time.temporal.WeekFields; import java.util.*; import java.util.concurrent.*; @@ -100,7 +103,8 @@ private ChargingGunClient chargingGunClient; @Resource private TSettlementConfirmMapper tSettlementConfirmMapper; - + @Resource + private PartnerClient partnerClient; @Resource private SiteClient siteClient; @@ -884,11 +888,13 @@ 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); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); } + chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); } } @@ -935,7 +941,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(); @@ -959,12 +965,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)); - } - if(null != data && null != one.getAppUserCarId()){ - 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; } @@ -985,6 +991,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)); @@ -1090,7 +1100,7 @@ if(1 == doubleIntegration){ num1 *= 2; } - + } GetInviteUser query = new GetInviteUser(); @@ -1141,7 +1151,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; } @@ -1208,7 +1218,10 @@ } dto.setUserIds(data); } - Long userId = SecurityUtils.getUserId(); + 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){ @@ -1221,6 +1234,24 @@ }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); @@ -1232,7 +1263,16 @@ 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()); 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()+""); @@ -1250,10 +1290,13 @@ // 充电订单 明细记录 List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>() .eq("charging_order_id", chargingOrderVO.getId())); - UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData(); - if (data5!=null){ - long l = data5.getCumulative_charging_time() * 60L; - chargingOrderVO.setChargingSecond(l); + if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){ + LocalDateTime startTime = chargingOrderVO.getStartTime(); + LocalDateTime endTime = chargingOrderVO.getEndTime(); + // 计算时间差 单位秒 + long between = ChronoUnit.SECONDS.between(startTime, endTime); + chargingOrderVO.setChargingSecond(between); + } // 充电时段数 int size = chargingOrderId.size(); @@ -1274,27 +1317,31 @@ } } + + + List<Long> orderIds = list1.stream().map(TChargingOrder::getId).collect(Collectors.toList()); + if(orderIds.isEmpty())orderIds.add(-1L); + List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery() + .in(TChargingOrderRefund::getChargingOrderId, orderIds) + .eq(TChargingOrderRefund::getRefundStatus,2).list(); + for (ChargingOrderVO chargingOrderVO : list1) { paymentMoney= paymentMoney.add(chargingOrderVO.getPaymentAmount()!=null?chargingOrderVO.getPaymentAmount():new BigDecimal("0")); commissionMoney = commissionMoney.add(chargingOrderVO.getOrderAmount()!=null?chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006")):new BigDecimal("0")); if (chargingOrderVO.getChargingCapacity()!=null){ - total = total.add(chargingOrderVO.getElectricity()); + 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){ - long l = data5.getCumulative_charging_time() * 60L; - chargingOrderVO.setChargingSecond(l); - time+=l; + if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){ + LocalDateTime startTime = chargingOrderVO.getStartTime(); + LocalDateTime endTime = chargingOrderVO.getEndTime(); + // 计算时间差 单位秒 + long between = ChronoUnit.SECONDS.between(startTime, endTime); + time+=between; } - List<TChargingOrderRefund> list2 = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getRefundStatus, 2) - .eq(TChargingOrderRefund::getChargingOrderId, chargingOrderVO.getId()).list(); + List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId())) + .collect(Collectors.toList()); for (TChargingOrderRefund tChargingOrderRefund : list2) { - if (tChargingOrderRefund.getRefundStatus()==2){ refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount()); - } } electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence()!=null?chargingOrderVO.getElectrovalence():new BigDecimal("0")); serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()!=null?chargingOrderVO.getServiceCharge():new BigDecimal("0")); @@ -1353,8 +1400,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 @@ -1382,13 +1429,17 @@ return this.baseMapper.getYearData(chargingOrderIds); } - + @Resource + private SysUserClient sysUserClient; @Override public ChargingOrderTimeVO chargingList(ChargingListQuery dto) { String startTime1 = null; String startTime2 = null; String endTime1 = null; String endTime2 = null; + + List<TChargingGun> allGun = chargingGunClient.getAllGun().getData(); + List<TChargingPile> allPile = chargingGunClient.getAllPile().getData(); if (StringUtils.hasLength(dto.getStartTime())){ String[] split = dto.getStartTime().split(" - "); @@ -1426,7 +1477,10 @@ dto.setCarIds(carIds); } } - Long userId = SecurityUtils.getUserId(); + 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){ @@ -1439,10 +1493,36 @@ }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){ @@ -1452,24 +1532,23 @@ 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(); - TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderListVO.getChargingPileId()).getData(); + TChargingGun data1 = allGun.stream().filter(e->e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null); + TChargingGun data2 = allGun.stream().filter(e->e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null); if (data2 != null && data1 != null) { chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName()); } } - // 获取充电时间 - UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderListVO.getCode()).getData(); - if (data5!=null){ - if (data5.getTime_remaining()!=null){ - chargingOrderListVO.setChargingSecond(data5.getCumulative_charging_time()*60L); - - } + if (chargingOrderListVO.getStartTime()!=null && chargingOrderListVO.getEndTime()!=null){ + LocalDateTime startTime = chargingOrderListVO.getStartTime(); + LocalDateTime endTime = chargingOrderListVO.getEndTime(); + // 计算时间差 单位秒 + long between = ChronoUnit.SECONDS.between(startTime, endTime); + chargingOrderListVO.setChargingSecond(between); } // 获取开始SOC 结束soc if (chargingOrderListVO.getCode()!=null){ @@ -1505,7 +1584,6 @@ } } chargingOrderListVO.setPhone(data3.getPhone()); - } } List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery() @@ -1554,6 +1632,28 @@ // 不分页 PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1,999999999); List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(pageInfo1,dto,startTime1,startTime2,endTime1,endTime2); + for (ChargingOrderListVO chargingOrderListVO : list1) { + List<Integer> integers = new ArrayList<>(); + integers.add(chargingOrderListVO.getSiteId()); + Site site = sites.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null); + if (site!=null){ + chargingOrderListVO.setSiteName(site.getName()); + } + if (chargingOrderListVO.getStartTime()!=null && chargingOrderListVO.getEndTime()!=null){ + LocalDateTime startTime = chargingOrderListVO.getStartTime(); + LocalDateTime endTime = chargingOrderListVO.getEndTime(); + // 计算时间差 单位秒 + long between = ChronoUnit.SECONDS.between(startTime, endTime); + chargingOrderListVO.setChargingSecond(between); + } + if (chargingOrderListVO.getChargingGunId()!=null && chargingOrderListVO.getChargingPileId()!=null){ + TChargingGun data1 = allGun.stream().filter(e->e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null); + TChargingGun data2 = allGun.stream().filter(e->e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null); + if (data2 != null && data1 != null) { + chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName()); + } + } + } chargingOrderTimeVO.setExportList(list1); chargingOrderTimeVO.setOrderCount(list1.size()); // 计算充电总度数 @@ -1579,14 +1679,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: @@ -1668,6 +1771,8 @@ public ChargingOrderListInfoVO chargingInfo(String uid) { TChargingOrder chargingOrder= this.getById(uid); ChargingOrderListInfoVO chargingOrderListInfoVO = new ChargingOrderListInfoVO(); + chargingOrderListInfoVO.setStartTime(chargingOrder.getStartTime()); + chargingOrderListInfoVO.setEndTime(chargingOrder.getEndTime()); chargingOrderListInfoVO.setStatus(chargingOrder.getStatus()); BigDecimal bigDecimal = new BigDecimal("0.006"); if (chargingOrder.getOrderAmount()!=null){ @@ -1744,13 +1849,12 @@ chargingOrderListInfoVO.setList(data6); } - // 获取充电时间 - UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData(); - if (data5!=null){ - if (data5.getTime_remaining()!=null){ - chargingOrderListInfoVO.setChargingSecond(data5.getCumulative_charging_time()*60L+""); - - } + if (chargingOrderListInfoVO.getStartTime()!=null && chargingOrderListInfoVO.getEndTime()!=null){ + LocalDateTime startTime = chargingOrderListInfoVO.getStartTime(); + LocalDateTime endTime = chargingOrderListInfoVO.getEndTime(); + // 计算时间差 单位秒 + long between = ChronoUnit.SECONDS.between(startTime, endTime); + chargingOrderListInfoVO.setChargingSecond(between+""); } if (chargingOrder.getAppUserCarId()!=null){ @@ -1865,83 +1969,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()); @@ -1950,16 +2105,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()); } //已充电总度数 @@ -1969,6 +2125,7 @@ BigDecimal vipDiscountAmount = BigDecimal.ZERO; //计算优惠金额 if(null != chargingOrder.getVipDiscount()){ + //0.58折 vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())); serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()); } @@ -1984,8 +2141,6 @@ periodServicePrice_total = periodServicePrice_total.add(originalServicePrice); total = total.add(electrovalenc.add(originalServicePrice)); } - - //原金额 BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); @@ -2024,7 +2179,7 @@ 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()); @@ -2168,6 +2323,7 @@ referralReward(chargingOrder); //开始构建退款费用 + refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN); if(refundAmount.compareTo(BigDecimal.ZERO) > 0){ Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); //构建退款明细 @@ -2205,21 +2361,21 @@ 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); } } } } + + + @Override public List<Map<String, Object>> getByDate(List<Long> chargingOrderIds) { @@ -2242,8 +2398,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 @@ -2309,6 +2465,10 @@ private TVipOrderService vipOrderService; @Resource private TVipOrderRefundService vipOrderRefundService; + + + + @Override public R payRefund(PayOrderRefundDto payOrderQueryDto) { if (payOrderQueryDto.getType()==1){ @@ -2366,7 +2526,6 @@ dto.setRefundReason("取消订单"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if(null != resp){ - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); chargingOrderRefund.setRefundStatus(2); chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); this.baseMapper.updateById(tChargingOrder); @@ -2374,11 +2533,6 @@ } } - - - - - } if (payOrderQueryDto.getType()==2){ TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId()); @@ -2434,16 +2588,10 @@ 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); - } } @@ -2454,8 +2602,6 @@ if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){ return R.fail("退款金额需小于支付金额"); } - - TVipOrderRefund chargingOrderRefund = new TVipOrderRefund(); chargingOrderRefund.setVipOrderId(tChargingOrder.getId()); chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); @@ -2501,23 +2647,13 @@ 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())); - - vipOrderService.updateById(tChargingOrder); - vipOrderRefundService.save(chargingOrderRefund); - } } - } - - - return R.ok(); } @@ -2573,7 +2709,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); @@ -2709,7 +2845,10 @@ } dto.setStartTime(startTime); dto.setEndTime(endTime); - Long userId = SecurityUtils.getUserId(); + 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){ @@ -2722,10 +2861,33 @@ }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()){ @@ -2748,7 +2910,7 @@ @Override public SettlementTotalVO settlementTotal(String time) { - Long userId = SecurityUtils.getUserId(); + Long userId = tokenService.getLoginUser().getUserid(); //如果没传siteId,获取当前登陆人所有的siteIds List<Integer> siteIds = new ArrayList<>(); if (userId != null){ @@ -2756,6 +2918,9 @@ 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); @@ -2994,6 +3159,9 @@ 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); @@ -3303,6 +3471,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