From e345544f0a1b9f7d7f7d5f584207090c971ae51a Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期六, 02 十一月 2024 09:44:58 +0800 Subject: [PATCH] bug修改 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 415 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 305 insertions(+), 110 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 0539930..5a5c02a 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 @@ -50,6 +50,7 @@ import com.ruoyi.order.vo.EndOfChargePageInfo; import com.ruoyi.other.api.domain.*; import com.ruoyi.order.vo.ChargingOrderListInfoVO; +import com.ruoyi.other.api.domain.TVip; import com.ruoyi.other.api.feignClient.*; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; @@ -186,6 +187,9 @@ @Resource private SecurityDetectionClient securityDetectionClient; + + @Resource + private BmsDemandAndChargerExportationClient bmsDemandAndChargerExportationClient; //计数器 private Map<String, Integer> counter_map = new HashMap<>(); @@ -255,11 +259,13 @@ myChargingOrderInfo.setChargeMode(chargingGun.getChargeMode()); String name = chargingGunClient.getAllName(chargingOrder.getChargingGunId()).getData(); myChargingOrderInfo.setName(name); - if(null != chargingOrder.getAppUserCarId()){ - TAppUserCar tAppUserCar = appUserCarClient.getCarByIds(Arrays.asList(chargingOrder.getAppUserCarId())).getData().get(0); - myChargingOrderInfo.setLicensePlate(tAppUserCar.getLicensePlate()); - }else{ - myChargingOrderInfo.setLicensePlate("无"); + if(Objects.nonNull(chargingOrder.getAppUserCarId())){ + TAppUserCar tAppUserCar = appUserCarClient.getCarById(chargingOrder.getAppUserCarId().toString()).getData(); + if(null != tAppUserCar){ + myChargingOrderInfo.setLicensePlate(tAppUserCar.getLicensePlate()); + }else{ + myChargingOrderInfo.setLicensePlate("无"); + } } myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000); myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000); @@ -278,9 +284,18 @@ if(null != dataList){ //在MongoDB中获取数据 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); - List<String> time = dataList.stream().map(s -> sdf.format(s.getCreate_time())).collect(Collectors.toList()); - List<BigDecimal> outputVoltage = dataList.stream().map(UploadRealTimeMonitoringData::getOutput_voltage).collect(Collectors.toList()); - List<BigDecimal> outputCurrent = dataList.stream().map(UploadRealTimeMonitoringData::getOutput_current).collect(Collectors.toList()); + List<UploadRealTimeMonitoringData> dataLists = new ArrayList<>(); + String t = ""; + for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : dataList) { + if(!sdf.format(uploadRealTimeMonitoringData.getCreate_time()).equals(t)){ + dataLists.add(uploadRealTimeMonitoringData); + t = sdf.format(uploadRealTimeMonitoringData.getCreate_time()); + } + } + + List<String> time = dataLists.stream().map(s -> sdf.format(s.getCreate_time())).collect(Collectors.toList()); + List<BigDecimal> outputVoltage = dataLists.stream().map(UploadRealTimeMonitoringData::getOutput_voltage).collect(Collectors.toList()); + List<BigDecimal> outputCurrent = dataLists.stream().map(UploadRealTimeMonitoringData::getOutput_current).collect(Collectors.toList()); List<Map<String, Object>> currentAndVoltage = new ArrayList<>(); for (int i = 0; i < time.size(); i++) { Map<String, Object> map = new HashMap<>(); @@ -293,8 +308,8 @@ } myChargingOrderInfo.setCurrentAndVoltage(currentAndVoltage); //在MongoDB中获取数据 - List<Integer> soc = dataList.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList()); - List<BigDecimal> po = dataList.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)).collect(Collectors.toList()); + List<Integer> soc = dataLists.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList()); + List<BigDecimal> po = dataLists.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)).collect(Collectors.toList()); List<Map<String, Object>> power = new ArrayList<>(); for (int i = 0; i < time.size(); i++) { Map<String, Object> map = new HashMap<>(); @@ -386,7 +401,7 @@ TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, addChargingOrder.getId()) .in(TChargingOrder::getStatus, Arrays.asList(1, 2, 3)).eq(TChargingOrder::getDelFlag, 0)); if(null != one){ - return AjaxResult.error("充电枪正在充电桩中,启动失败"); + return AjaxResult.error("充电枪正在充电中,启动失败"); } //查询当前充电枪是否有正在支付的订单 one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, addChargingOrder.getId()) @@ -446,6 +461,7 @@ chargingOrder.setVipDiscountAmount(BigDecimal.ZERO); chargingOrder.setOrderSource(0); chargingOrder.setTitle("【充电桩充电】" + chargingPile.getNumber() + "号桩/" + tChargingGun.getCode() + "号枪"); + chargingOrder.setStatus(1); Site site = siteClient.getSiteByIds(Arrays.asList(tChargingGun.getSiteId())).getData().get(0); Integer accountingStrategyId = tChargingGun.getAccountingStrategyId(); @@ -684,9 +700,6 @@ String code = chargingOrder.getCode(); String key = "AQJC_" + chargingOrder.getChargingGunId(); List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData(); - if(null == data || data.size() == 0){ - return false; - } log.error(code + ":-------------------开始检查调起充电结果-------------------" + data.toString()); if(data.size() != 0){ PlatformStartChargingReply platformStartChargingReply = data.get(1); @@ -736,7 +749,7 @@ counter = (null == counter ? 0 : counter) + 1; boot_failed_map.put(code, counter); //启动失败 - preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setStartupSuccess(1); preChargeCheck1.setFailureCause(0); redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); return false; @@ -980,16 +993,17 @@ chargingOrder.setId(Long.valueOf(id)); chargingOrder.setAppUserId(order.getAppUserId()); chargingOrder.setEndTime(LocalDateTime.now()); + chargingOrder.setStatus(4); chargingOrder.setEndMode(1); this.updateById(chargingOrder); - String code1 = chargingOrder.getCode(); - TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + String code1 = order.getCode(); + TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData(); //异步线程处理停机 ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1); cachedThreadPool.execute(()->{ //调用硬件停止充电,停止成功后开始计算费用退款 - TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingOrder.getChargingPileId()).getData(); + TChargingPile chargingPile = chargingPileClient.getChargingPileById(order.getChargingPileId()).getData(); PlatformStopCharging platformStopCharging = new PlatformStopCharging(); platformStopCharging.setCharging_pile_code(chargingPile.getCode()); platformStopCharging.setCharging_gun_code(chargingGun.getCode()); @@ -1096,20 +1110,22 @@ inviteUser.setAward(num1); inviteUserClient.updateInviteUser(inviteUser); } - TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); - String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); - appUserIntegralChange.setCode(code); - appUserIntegralChange.setAppUserId(appUser1.getId()); - appUserIntegralChange.setChangeType(5); - appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints()); - appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1); - appUserIntegralChange.setCreateTime(LocalDateTime.now()); - appUserIntegralChange.setOrderCode(chargingOrder.getCode()); - appUserIntegralChange.setExtension(chargingOrder.getId().toString()); - appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); - - appUser1.setPoints(appUser1.getPoints() + num1); - appUserClient.updateAppUser(appUser1); + if(num1 > 0){ + TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); + String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); + appUserIntegralChange.setCode(code); + appUserIntegralChange.setAppUserId(appUser1.getId()); + appUserIntegralChange.setChangeType(4); + appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints()); + appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1); + appUserIntegralChange.setCreateTime(LocalDateTime.now()); + appUserIntegralChange.setOrderCode(chargingOrder.getCode()); + appUserIntegralChange.setExtension(appUser.getId().toString()); + appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); + + appUser1.setPoints(appUser1.getPoints() + num1); + appUserClient.updateAppUser(appUser1); + } } } @@ -1202,8 +1218,8 @@ BigDecimal electronicMoney = new BigDecimal("0"); BigDecimal serviceMoney = new BigDecimal("0"); for (ChargingOrderVO chargingOrderVO : list) { - chargingOrderVO.setCommissionAmount(chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.006"))); - chargingOrderVO.setPlatFormMoney(chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.006"))); + chargingOrderVO.setCommissionAmount(chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006"))); + chargingOrderVO.setPlatFormMoney(chargingOrderVO.getOrderAmount().multiply(new BigDecimal("0.006"))); chargingOrderVO.setUid(chargingOrderVO.getId()+""); TChargingGun data3 = chargingGunClient.getChargingGunById(chargingOrderVO.getChargingGunId()).getData(); TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderVO.getChargingPileId()).getData(); @@ -1395,12 +1411,11 @@ List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2); for (ChargingOrderListVO chargingOrderListVO : list) { chargingOrderListVO.setChargingCapacity(chargingOrderListVO.getElectricity()); - chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount()); BigDecimal bigDecimal = new BigDecimal("0.006"); if (chargingOrderListVO.getOrderAmount()!=null){ - chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getOrderAmount().multiply(bigDecimal)); + chargingOrderListVO.setCommissionAmount(chargingOrderListVO.getPaymentAmount().multiply(bigDecimal)); } - chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getResidualAmount()==null?chargingOrderListVO.getPaymentAmount():chargingOrderListVO.getPaymentAmount()); + chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getPaymentAmount()); chargingOrderListVO.setUid(chargingOrderListVO.getId()+""); List<Integer> integers = new ArrayList<>(); integers.add(chargingOrderListVO.getSiteId()); @@ -1419,17 +1434,27 @@ UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderListVO.getCode()).getData(); if (data5!=null){ if (data5.getTime_remaining()!=null){ - chargingOrderListVO.setChargingSecond(data5.getTime_remaining()*60L); + chargingOrderListVO.setChargingSecond(data5.getCumulative_charging_time()*60L); } } // 获取开始SOC 结束soc if (chargingOrderListVO.getCode()!=null){ List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrderListVO.getCode()).getData(); + if (data6!=null && !data6.isEmpty()){ - // 第一条数据soc为开始 最后一条数据soc为结束soc - chargingOrderListVO.setStartSoc(data6.get(0).getSoc().toString()); - chargingOrderListVO.setEndSoc(data6.get(data6.size()-1).getSoc().toString()); + int min = 100; + int max = 0; + for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) { + if (uploadRealTimeMonitoringData.getSoc()>max){ + max = uploadRealTimeMonitoringData.getSoc(); + } + if (uploadRealTimeMonitoringData.getSoc()!=0 &&uploadRealTimeMonitoringData.getSoc()<min){ + min = uploadRealTimeMonitoringData.getSoc(); + } + } + chargingOrderListVO.setEndSoc(max+""); + chargingOrderListVO.setStartSoc(min+""); } } @@ -1609,9 +1634,7 @@ @Override public ChargingOrderListInfoVO chargingInfo(String uid) { TChargingOrder chargingOrder= this.getById(uid); - ChargingOrderListInfoVO chargingOrderListInfoVO = new ChargingOrderListInfoVO(); - chargingOrderListInfoVO.setStatus(chargingOrder.getStatus()); BigDecimal bigDecimal = new BigDecimal("0.006"); if (chargingOrder.getOrderAmount()!=null){ @@ -1660,24 +1683,32 @@ if (uploadRealTimeMonitoringData.getOutput_current()!=null&& uploadRealTimeMonitoringData.getOutput_voltage()!=null){ uploadRealTimeMonitoringData.setPower(uploadRealTimeMonitoringData.getOutput_voltage() - .multiply(uploadRealTimeMonitoringData.getOutput_current())); + .multiply(uploadRealTimeMonitoringData.getOutput_current()).divide(new BigDecimal(1000),2, BigDecimal.ROUND_HALF_UP)); } } if (!data6.isEmpty()){ // 第一条数据soc为开始 最后一条数据soc为结束soc - chargingOrderListInfoVO.setStartSoc(data6.get(0).getSoc().toString()); - chargingOrderListInfoVO.setEndSoc(data6.get(data6.size()-1).getSoc().toString()); + chargingOrderListInfoVO.setStartSoc(data6.get(data6.size()-1).getSoc().toString()); + chargingOrderListInfoVO.setEndSoc(data6.get(0).getSoc().toString()); chargingOrderListInfoVO.setChargingCapacity(data6.get(data6.size()-1).getCharging_degree()); - chargingOrderListInfoVO.setChargingSecond(data6.get(data6.size()-1).getCumulative_charging_time()*60+""); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) { uploadRealTimeMonitoringData.setCreateTime(simpleDateFormat.format(uploadRealTimeMonitoringData.getCreate_time())); } } } + 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 (chargingOrder.getAppUserCarId()!=null){ List<TAppUserCar> data3 = appUserCarClient.getCarByIds(Collections.singletonList(chargingOrder.getAppUserCarId())).getData(); @@ -1690,7 +1721,6 @@ chargingOrderListInfoVO.setCouponDiscountAmount(chargingOrder.getCouponDiscountAmount()); chargingOrderListInfoVO.setVipDiscountAmount(chargingOrder.getVipDiscountAmount()); chargingOrderListInfoVO.setSharingAmount(chargingOrder.getSharingAmount()); - chargingOrderListInfoVO.setCommissionAmount(chargingOrder.getCommissionAmount()); // 查询费用明细列表 List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.lambdaQuery() .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()) @@ -1731,6 +1761,10 @@ chargingOrder.setChargingCapacity(query.getCharging_degree()); chargingOrder.setElectricity(query.getCharging_degree()); chargingOrder.setTotalElectricity(new BigDecimal(100 - query.getSoc())); + BmsDemandAndChargerExportation data = bmsDemandAndChargerExportationClient.getBmsDemandAndChargerExportation(chargingOrder.getCode()).getData(); + if(null != data){ + chargingOrder.setNeedElec(data.getBms_current_requirements()); + } this.updateById(chargingOrder); } } @@ -1770,7 +1804,7 @@ public void endChargeBillingCharge(TransactionRecordMessageVO vo) { TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, vo.getTransaction_serial_number())); Integer status = chargingOrder.getStatus(); - if(status == 4 || status == 5){ + if(status == 5){ return; } @@ -1820,7 +1854,7 @@ 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.setServiceCharge(sharp_peak_charge); + vo1.setChargingCapacity(sharp_peak_charge); lists.add(vo1); } catch (IllegalAccessException e) { throw new RuntimeException(e); @@ -1863,10 +1897,8 @@ } catch (ParseException e) { throw new RuntimeException(e); } + for (AccountingStrategyDetailOrderVo strategyDetail : lists) { - if(strategyDetail.getStart() < start.getTime() || strategyDetail.getEnd() > end.getTime()){ - continue; - } BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity(); TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy(); chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId()); @@ -1882,9 +1914,9 @@ chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime()); } if(end.getTime() >= strategyDetail.getEnd()){ - chargingOrderAccountingStrategy.setStartTime(strategyDetail.getEndTime()); + chargingOrderAccountingStrategy.setEndTime(strategyDetail.getEndTime()); }else{ - chargingOrderAccountingStrategy.setStartTime(sdf2.format(end)); + chargingOrderAccountingStrategy.setEndTime(sdf2.format(end)); } //已充电总度数 @@ -1898,16 +1930,16 @@ serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.DOWN); } chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge); - chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc); - chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge); - chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice); - chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount); + chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(2, RoundingMode.DOWN)); + chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(2, RoundingMode.DOWN)); + chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(2, RoundingMode.DOWN)); + chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(2, RoundingMode.DOWN)); chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy); - periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc); - periodServicePrice_total = periodServicePrice_total.add(originalServicePrice); - total = total.add(electrovalenc.add(originalServicePrice)); + periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc.setScale(2, RoundingMode.DOWN)); + periodServicePrice_total = periodServicePrice_total.add(originalServicePrice.setScale(2, RoundingMode.DOWN)); + total = total.add(electrovalenc.add(originalServicePrice.setScale(2, RoundingMode.DOWN))); } @@ -1957,13 +1989,13 @@ if(null == chargingOrder.getEndMode()){ order.setEndMode(1); } - order.setResidualAmount(rechargeAmount.subtract(total)); + order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.DOWN)); 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); - order.setVipDiscountAmount(discountAmount); - order.setElectrovalence(periodElectricPrice_total); + order.setOrderAmount(orderAmount.setScale(2, RoundingMode.DOWN)); + order.setVipDiscountAmount(discountAmount.setScale(2, RoundingMode.DOWN)); + order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.DOWN)); order.setChargingCapacity(vo.getTotal_electricity()); order.setElectricity(vo.getTotal_electricity()); @@ -2028,9 +2060,9 @@ } } - order.setServiceCharge(periodServicePrice_total); - order.setPaymentAmount(payAmount); - order.setRefundAmount(refundAmount); + order.setServiceCharge(periodServicePrice_total.setScale(2, RoundingMode.DOWN)); + order.setPaymentAmount(payAmount.setScale(2, RoundingMode.DOWN)); + order.setRefundAmount(refundAmount.setScale(2, RoundingMode.DOWN)); order.setRefundStatus(1); this.updateById(order); chargingOrder = this.getById(order.getId()); @@ -2044,8 +2076,8 @@ BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice(); BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN))); periodServicePrice = periodServicePrice.subtract(multiply); - chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice); - chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply); + chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.DOWN)); + chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.DOWN)); } chargingOrderAccountingStrategyService.updateBatchById(list); } @@ -2062,7 +2094,7 @@ if(null != integralRule){ TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1"); - Integer integral = payAmount.multiply(new BigDecimal(num1)).intValue(); + Integer integral = chargingOrder.getServiceCharge().intValue() * num1; if(null != appUser.getVipId()){ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); Integer doubleIntegration = vip.getDoubleIntegration(); @@ -2072,17 +2104,19 @@ } } - TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); - appUserIntegralChange.setAppUserId(appUser.getId()); - appUserIntegralChange.setChangeType(2); - appUserIntegralChange.setHistoricalIntegral(appUser.getPoints()); - appUser.setPoints(appUser.getPoints() + integral); - appUserIntegralChange.setCurrentIntegral(appUser.getPoints()); - appUserIntegralChange.setCreateTime(LocalDateTime.now()); - appUserIntegralChange.setOrderCode(chargingOrder.getCode()); - appUserIntegralChange.setExtension(chargingOrder.getId().toString()); - appUserClient.updateAppUser(appUser); - appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); + if(integral > 0){ + TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); + appUserIntegralChange.setAppUserId(appUser.getId()); + appUserIntegralChange.setChangeType(2); + appUserIntegralChange.setHistoricalIntegral(appUser.getPoints()); + appUser.setPoints(appUser.getPoints() + integral); + appUserIntegralChange.setCurrentIntegral(appUser.getPoints()); + appUserIntegralChange.setCreateTime(LocalDateTime.now()); + appUserIntegralChange.setOrderCode(chargingOrder.getCode()); + appUserIntegralChange.setExtension(chargingOrder.getId().toString()); + appUserClient.updateAppUser(appUser); + appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); + } } //计算用户标签 @@ -2106,7 +2140,7 @@ chargingOrderRefund.setRefundTitle("充电完成退款"); chargingOrderRefund.setRefundContent("充电完成退款"); chargingOrderRefund.setRefundReason("充电完成退款"); - chargingOrderRefund.setRefundRemark("实际充电消费金额:" + refundAmount); + chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount()); chargingOrderRefund.setRefundTotalAmount(refundAmount); chargingOrderRefund.setPayAmount(rechargeAmount); if(1 == rechargePaymentType){ @@ -2228,12 +2262,19 @@ private TShoppingOrderService shoppingOrderService; @Resource private TShoppingOrderRefundService shoppingOrderRefundService; + @Resource + private TVipOrderService vipOrderService; + @Resource + private TVipOrderRefundService vipOrderRefundService; @Override public R payRefund(PayOrderRefundDto payOrderQueryDto) { if (payOrderQueryDto.getType()==1){ TChargingOrder tChargingOrder = this.baseMapper.selectById(payOrderQueryDto.getOrderId()); if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){ return R.fail("退款金额需小于支付金额"); + } + if ((tChargingOrder.getRechargeAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount()))==0){ + tChargingOrder.setStatus(5); } @@ -2301,6 +2342,10 @@ if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){ return R.fail("退款金额需小于支付金额"); } + if ((tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount()))==0){ + tChargingOrder.setStatus(5); + } + TShoppingOrderRefund chargingOrderRefund = new TShoppingOrderRefund(); chargingOrderRefund.setShoppingOrderId(tChargingOrder.getId()); chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); @@ -2351,9 +2396,7 @@ tChargingOrder.setRefundStatus(2); tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); - if (payOrderQueryDto.getRefundAmount().compareTo(tChargingOrder.getPaymentAmount())==0){ - tChargingOrder.setStatus(5); - } + shoppingOrderService.updateById(tChargingOrder); shoppingOrderRefundService.save(chargingOrderRefund); @@ -2362,6 +2405,73 @@ } } + + if (payOrderQueryDto.getType()==3){ + TVipOrder tChargingOrder = vipOrderService.getById(payOrderQueryDto.getOrderId()); + if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){ + return R.fail("退款金额需小于支付金额"); + } + + + TVipOrderRefund chargingOrderRefund = new TVipOrderRefund(); + chargingOrderRefund.setVipOrderId(tChargingOrder.getId()); + chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); + chargingOrderRefund.setRefundStatus(1); + chargingOrderRefund.setPayType(tChargingOrder.getPaymentType()); + chargingOrderRefund.setRefundTime(LocalDateTime.now()); + chargingOrderRefund.setCode(tChargingOrder.getCode()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); + chargingOrderRefund.setRefundTitle("后台退款"); + chargingOrderRefund.setRefundContent("后台退款"); + chargingOrderRefund.setRefundReason("后台退款"); + chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark()); + chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount())); + chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount()); + + if(1 == tChargingOrder.getPaymentType()){ + WxPaymentRefundModel model = new WxPaymentRefundModel(); + model.setOut_trade_no(tChargingOrder.getCode()); + model.setOut_refund_no(chargingOrderRefund.getRefundCode()); + model.setTransaction_id(tChargingOrder.getSerialNumber()); + model.setReason("取消订单"); + model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund"); + WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); + amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue()); + amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue()); + amount.setCurrency("CNY"); + model.setAmount(amount); + R<String> orderR = wxPaymentClient.refundOrderR(model); + if(200 == orderR.getCode()){ + tChargingOrder.setRefundStatus(2); + tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); + vipOrderService.updateById(tChargingOrder); + vipOrderRefundService.save(chargingOrderRefund); + } + } + + if(2 == tChargingOrder.getPaymentType()){ + RefundReq dto = new RefundReq(); + dto.setOutTradeNo(tChargingOrder.getCode()); + dto.setOutRequestNo(tChargingOrder.getCode()); + dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString()); + dto.setRefundReason("取消订单"); + RefundResp resp = aliPaymentClient.refund(dto).getData(); + if(null != resp){ + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); + + tChargingOrder.setRefundStatus(2); + tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); + + + vipOrderService.updateById(tChargingOrder); + + vipOrderRefundService.save(chargingOrderRefund); + + } + } + + } @@ -2382,7 +2492,7 @@ } TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserCarId, appUserCar.getId()) .eq(TChargingOrder::getDelFlag, 0).gt(TChargingOrder::getStartTime, query.getStartTime()) - .eq(TChargingOrder::getRechargePaymentStatus, 2).ne(TChargingOrder::getStatus, -1)); + .eq(TChargingOrder::getRechargePaymentStatus, 2).ne(TChargingOrder::getStatus, 5)); return one; } @@ -2416,6 +2526,7 @@ // 根据站点id和开始时间和结束时间和归属日期 查询充电订单列表 QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>() .eq("site_id", dto.getSiteId()) + .eq("status", 5) .eq("recharge_payment_status",2); switch (dto.getType()){ case 1: @@ -2471,33 +2582,25 @@ if (tChargingOrder.getCouponDiscountAmount()!=null){ couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount()); } - if (tChargingOrder.getRefundStatus()!=null &&tChargingOrder.getRefundStatus() == 2){ - // 如果成功退款 那么减去退款金额 + if (tChargingOrder.getPaymentAmount()!=null){ paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); - }else{ - if (tChargingOrder.getPaymentAmount()!=null){ - paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); - } } + } // 三方交易手续费 三方收费*0.6% commissionAmount = sharingAmount.multiply(new BigDecimal("0.006")); // 订单手续费 订单支付金额 - 退款金额*0.6% - orderCommission = paymentAmount.multiply(new BigDecimal("0.006")); + orderCommission = paymentAmount.multiply(new BigDecimal("0.006").setScale(2,RoundingMode.HALF_DOWN)); tSettlementConfirm.setSharingAmount(sharingAmount.setScale(2, RoundingMode.HALF_DOWN)); tSettlementConfirm.setCommissionAmount(commissionAmount.setScale(2, RoundingMode.HALF_DOWN)); - tSettlementConfirm.setElectrovalence(electrovalence); - // 服务费=总服务费-三费收费-交易手续费-交易手续费-服务费会员抵扣-服务费优惠券抵扣 - tSettlementConfirm.setServiceCharge(serviceCharge.subtract(commissionAmount).subtract(sharingAmount).subtract(orderCommission).subtract(vipDiscount).subtract(couponDiscount)); + tSettlementConfirm.setElectrovalence(electrovalence.setScale(2, RoundingMode.HALF_DOWN)); + tSettlementConfirm.setServiceCharge(serviceCharge.subtract(commissionAmount).setScale(2, RoundingMode.HALF_DOWN)); tSettlementConfirm.setOrderCommission(orderCommission); tSettlementConfirm.setVipDiscount(vipDiscount); tSettlementConfirm.setCouponDiscount(couponDiscount); tSettlementConfirm.setSiteId(dto.getSiteId()); tSettlementConfirm.setChargingElectronic(chargingElectronic); tSettlementConfirm.setIncome(chargingElectronic.add(serviceCharge)); - tSettlementConfirm.setProfitMoney(new BigDecimal("0")); - tSettlementConfirm.setNewMoney(new BigDecimal("0")); - tSettlementConfirm.setNewSettlement(new BigDecimal("0")); tSettlementConfirm.setVipDiscount(vipDiscount); tSettlementConfirm.setCouponDiscount(couponDiscount); tSettlementConfirm.setType(dto.getType()); @@ -2518,11 +2621,25 @@ tSettlementConfirm.setRemark(dto.getRemark()); tSettlementConfirm.setServicePartner(dto.getServicePartner()); tSettlementConfirm.setServiceMoney(dto.getServiceMoney()); + BigDecimal subtract = new BigDecimal("1").subtract(dto.getProportionPartner().multiply(new BigDecimal("0.01"))); + // 总电损费用 + BigDecimal divide = tSettlementConfirm.getProportionMoney().divide(subtract, 2, RoundingMode.HALF_DOWN); + // 平台承担电损 + BigDecimal subtract1 = divide.subtract(tSettlementConfirm.getProportionMoney()); + BigDecimal multiply = dto.getServiceMoney().multiply(subtract); + BigDecimal subtract2 = multiply.subtract(subtract1); + tSettlementConfirm.setNewMoney(subtract2); + tSettlementConfirm.setTotalService(dto.getTotalService()); tSettlementConfirm.setServiceRemark(dto.getServiceRemark()); tSettlementConfirm.setDistribution(dto.getDistribution()); tSettlementConfirm.setIncome(dto.getElectrovalence().add(dto.getServiceCharge())); - tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain())); + tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()).add(dto.getSupplyElectronic())); + BigDecimal divide1 = tSettlementConfirm.getProportionMoney().divide(tSettlementConfirm.getProportionPartner(), 2, RoundingMode.HALF_DOWN); + tSettlementConfirm.setProfitMoney(tSettlementConfirm.getServiceCharge().multiply(tSettlementConfirm.getServicePartner()) + .subtract(divide1)); + tSettlementConfirm.setNewSettlement(subtract2.subtract(tSettlementConfirm.getCost())); + tSettlementConfirmMapper.insert(tSettlementConfirm); } return tSettlementConfirm; @@ -2530,6 +2647,22 @@ @Override public PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto) { + String startTime = null; + String endTime = null; + if (StringUtils.hasLength(dto.getStartTime())){ + dto.setType(1); + String[] split = dto.getStartTime().split(" - "); + startTime = split[0]; + endTime = split[1]; + } + if (StringUtils.hasLength(dto.getEndTime())){ + dto.setType(2); + String[] split = dto.getEndTime().split(" - "); + startTime = split[0]; + endTime = split[1]; + } + dto.setStartTime(startTime); + dto.setEndTime(endTime); PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto); for (TSettlementConfirm tSettlementConfirm : list) { @@ -2594,11 +2727,12 @@ // tSettlementConfirm1.setIncomePercentage(); // tSettlementConfirm1.setTotalPercentage(); tSettlementConfirm1.setElectronicRefund(0); -// 上月成本合计 + // 上月成本合计 BigDecimal beforeCost= new BigDecimal("0"); // 上月利润合计 BigDecimal beforeIncome= new BigDecimal("0"); for (TSettlementConfirm tSettlementConfirm : list1) { + tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic()); List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData(); if (!data1.isEmpty()){ tSettlementConfirm.setSiteName(data1.get(0).getName()); @@ -2651,11 +2785,21 @@ StringBuilder stringBuilder = new StringBuilder(); for (TChargingOrder tChargingOrder : tChargingOrders) { stringBuilder.append(tChargingOrder.getCode()).append(","); + } - Long temp = 0L; + // 充电总时长 + + Long temp = 1L; if (StringUtils.hasLength(stringBuilder.toString())){ - List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getOrderInfoByCodes(stringBuilder.substring(0,stringBuilder.length()-1)).getData(); - temp+=data6.stream().mapToLong(UploadRealTimeMonitoringData::getCumulative_charging_time).sum(); + 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(); // 计算充电桩的功率平均值 @@ -2666,15 +2810,36 @@ tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge())); - // todo 计算利用率 该电站充电桩本月利用率: //利用率=充电量/(桩数量*功率*时间) + 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) { 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()).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")); + 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"+"%"); @@ -2749,8 +2914,8 @@ } @Override - public List<Map<String, Object>> countBySource(List<Integer> siteIds) { - return this.baseMapper.countBySource(siteIds); + public List<Map<String, Object>> countBySource(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) { + return this.baseMapper.countBySource(siteIds,statisticsQueryDto); } @Override @@ -2852,4 +3017,34 @@ public Long countNoTag() { return this.baseMapper.countNoTag(); } + + + @Override + public List<TChargingOrder> getChargingOrder(TChargingOrderVo order) { + LambdaQueryWrapper<TChargingOrder> queryWrapper = new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getDelFlag, 0); + if(null != order.getChargingPileId()){ + queryWrapper.eq(TChargingOrder::getChargingPileId, order.getChargingPileId()); + } + if(null != order.getChargingGunId()){ + queryWrapper.eq(TChargingOrder::getChargingGunId, order.getChargingGunId()); + } + if(null != order.getStatus()){ + queryWrapper.eq(TChargingOrder::getStatus, order.getStatus()); + } + if(null != order.getAppUserId()){ + queryWrapper.eq(TChargingOrder::getAppUserId, order.getAppUserId()); + } + if(null != order.getStatusList()){ + queryWrapper.in(TChargingOrder::getStatus, order.getStatusList()); + } + if(null != order.getEndMode()){ + queryWrapper.eq(TChargingOrder::getEndMode, order.getEndMode()); + } + return this.list(queryWrapper.orderByDesc(TChargingOrder::getCreateTime)); + } + + @Override + public Long countCar(List<String> brands) { + return this.baseMapper.countCar(brands); + } } -- Gitblit v1.7.1