From 72a76cd3ad51a520100ec59481d99118ffebd33c Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 28 十月 2024 15:18:50 +0800 Subject: [PATCH] 合并代码 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 556 +++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 416 insertions(+), 140 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 99dbb12..0539930 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 @@ -65,10 +65,12 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; +import javax.crypto.MacSpi; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTimeFormatter; @@ -539,6 +541,7 @@ chargingOrder.setRechargePaymentStatus(2); chargingOrder.setRechargeSerialNumber(transaction_id); chargingOrder.setStatus(2); + chargingOrder.setPayTime(LocalDateTime.now()); //添加安全检测数据到缓存中,每步安全检测完成后需要更新缓存数据 PreChargeCheck preChargeCheck = new PreChargeCheck(); @@ -608,12 +611,16 @@ if(times > m){ //充电时间跨度两个计费策略,需要继续对下一个策略进行计算 serviceCharge = s_server_amount.multiply(new BigDecimal(m)); - discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount))); rechargeAmount1 = rechargeAmount1.subtract(s_total_amount.multiply(new BigDecimal(m))); + if(null != discount){ + discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount))); + } nowTimeMillis = null; }else{ serviceCharge = s_server_amount.multiply(new BigDecimal(times)); - discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount))); + if(null != discount){ + discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount))); + } break; } } @@ -651,10 +658,107 @@ log.error(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString()); sendMessageClient.platformStartCharging(platformStartCharging); + //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 + Long id = chargingOrder.getId(); + //执行5分钟的定时任务检测 + ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + scheduler.scheduleAtFixedRate(()->{ + if(timingDetection(id)){ + scheduler.shutdown(); + } + }, 5, 1, TimeUnit.SECONDS); return AjaxResult.success(); } - + + /** + * 定时检测mongodb数据库数据 + * @param id + * @return + */ + public boolean timingDetection(Long id){ + TChargingOrder chargingOrder = this.getById(id); + if(chargingOrder.getStatus() != 2){ + return true; + } + String code = chargingOrder.getCode(); + String key = "AQJC_" + chargingOrder.getChargingGunId(); + 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); + Integer startup_result = platformStartChargingReply.getStartup_result(); + Integer failure_cause = platformStartChargingReply.getFailure_cause(); + Integer counter = counter_map.get(code); + PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); + //5分钟内还未插枪则取消充电,退回金额。 + if(failure_cause == 5 && (null == counter || counter < 300)){ + counter = (null == counter ? 0 : counter) + 1; + counter_map.put(code, counter); + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(failure_cause); + redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); + return false; + } + + //清除计时器中的无效数据 + counter_map.remove(code); + TChargingOrder order = new TChargingOrder(); + order.setId(id); + order.setAppUserId(chargingOrder.getAppUserId()); + if(0 == startup_result){ + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(failure_cause); + //启动失败后取消订单,退款操作 + refund(code); + order.setStatus(-1); + order.setEndMode(0); + }else{ + //启动成功 + preChargeCheck1.setStartupSuccess(2); + order.setStatus(3); + order.setStartTime(LocalDateTime.now()); + } + this.updateById(order); + redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); + return true; + }else{ + Integer counter = boot_failed_map.get(code); + log.error(code + ":-------------------未上传开启充电结果-------------------" + counter); + PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); + //5分钟内未启动成功,退回金额。 + if(null == counter || counter < 300){ + counter = (null == counter ? 0 : counter) + 1; + boot_failed_map.put(code, counter); + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(0); + redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); + return false; + } + + //清除计时器中的无效数据 + boot_failed_map.remove(code); + TChargingOrder order = new TChargingOrder(); + order.setId(id); + order.setAppUserId(chargingOrder.getAppUserId()); + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(0); + //启动失败后取消订单,退款操作 + refund(code); + order.setStatus(-1); + order.setEndMode(0); + this.updateById(order); + redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); + return true; + } + } /** @@ -708,6 +812,9 @@ preChargeCheck1.setStartupSuccess(2); order.setStatus(3); order.setStartTime(LocalDateTime.now()); + TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData(); + chargingGun.setStatus(4); + chargingGunClient.updateChargingGunById(chargingGun); } redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS); this.updateById(order); @@ -789,6 +896,15 @@ one.setRefundStatus(2); one.setRefundTime(LocalDateTime.now()); chargingOrderRefundService.updateById(one); + + TChargingOrder order = this.getById(one.getChargingOrderId()); + TChargingOrder chargingOrder = new TChargingOrder(); + chargingOrder.setId(one.getChargingOrderId()); + chargingOrder.setAppUserId(order.getAppUserId()); + chargingOrder.setRefundStatus(2); + chargingOrder.setRefundSerialNumber(refund_id); + chargingOrder.setRefundTime(LocalDateTime.now()); + this.updateById(chargingOrder); return AjaxResult.success(); } @@ -812,24 +928,25 @@ chargingDetails.setId(one.getId().toString()); TChargingGun chargingGun = chargingGunClient.getChargingGunById(id).getData(); TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData(); - Site site = siteClient.getSiteByIds(Arrays.asList(chargingPile.getSiteId())).getData().get(0); - chargingDetails.setName(site.getName() + "-" + chargingPile.getName()); - chargingDetails.setCode(one.getCode()); - chargingDetails.setStatus(one.getStatus()); - chargingDetails.setChargingCost(one.getResidualAmount()); - UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData(); - if(null != data){ - chargingDetails.setChargeCurrent(data.getOutput_current()); - chargingDetails.setChargeVoltage(data.getOutput_voltage()); - BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000)); - chargingDetails.setChargePower(power); - chargingDetails.setCompletionRatio(data.getSoc()); - chargingDetails.setRemainingChargeTime(data.getTime_remaining()); - chargingDetails.setChargedDegrees(data.getCharging_degree()); - Integer h = Integer.valueOf(data.getCumulative_charging_time() / 60); + Site site = siteClient.getSiteByIds(Arrays.asList(chargingPile.getSiteId())).getData().get(0); + chargingDetails.setName(site.getName() + "-" + chargingPile.getName()); + chargingDetails.setCode(one.getCode()); + chargingDetails.setStatus(one.getStatus()); + chargingDetails.setChargingCost(one.getResidualAmount()); + UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData(); + if(null != data){ + chargingDetails.setChargeCurrent(data.getOutput_current()); + chargingDetails.setChargeVoltage(data.getOutput_voltage()); + BigDecimal power = data.getOutput_current().multiply(data.getOutput_voltage()).divide(new BigDecimal(1000), new MathContext(4, RoundingMode.HALF_EVEN)); + chargingDetails.setChargePower(power); + chargingDetails.setCompletionRatio(data.getSoc()); + chargingDetails.setRemainingChargeTime(data.getTime_remaining()); + chargingDetails.setChargedDegrees(data.getCharging_degree()); + 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(); @@ -851,14 +968,17 @@ @Override @GlobalTransactional(rollbackFor = Exception.class) public AjaxResult stopCharging(String id) { - TChargingOrder chargingOrder = this.getById(id); - Integer status = chargingOrder.getStatus(); + TChargingOrder order = this.getById(id); + Integer status = order.getStatus(); if(status != 3){ return AjaxResult.error("还未开始充电"); } if(status == 4 || status == 5){ return AjaxResult.error("不能重复操作"); } + TChargingOrder chargingOrder = new TChargingOrder(); + chargingOrder.setId(Long.valueOf(id)); + chargingOrder.setAppUserId(order.getAppUserId()); chargingOrder.setEndTime(LocalDateTime.now()); chargingOrder.setEndMode(1); this.updateById(chargingOrder); @@ -889,57 +1009,48 @@ //处理用户标签数据 List<TUserTag> data = userTagClient.getAllUserTag().getData(); //累计充电次数 - long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId()) - .eq(TChargingOrder::getRechargePaymentStatus, 2).isNotNull(TChargingOrder::getPaymentAmount).eq(TChargingOrder::getDelFlag, 0)); List<TUserTag> userTagList1 = data.stream().filter(s -> s.getStandardCondition() == 1).collect(Collectors.toList()); - int old_times = 0; - Integer userTagId = null; for (TUserTag tUserTag : userTagList1) { Integer times = JSON.parseObject(tUserTag.getConditions()).getInteger("times"); - //加上本次充电 - //获取最大值标签 - if((count1 + 1) >= times && old_times < times){ - userTagId = tUserTag.getId(); - old_times = times; - } - } - if(null != userTagId){ TAppUserTag appUserTag = new TAppUserTag(); appUserTag.setAppUserId(chargingOrder.getAppUserId()); - appUserTag.setUserTagId(userTagId); + appUserTag.setUserTagId(tUserTag.getId()); TAppUserTag data1 = appUserTagClient.getUserTag(appUserTag).getData(); - if(null == data1){ + + String start = tUserTag.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + String end = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId()) + .eq(TChargingOrder::getRechargePaymentStatus, 2).between(TChargingOrder::getStartTime, start, end).eq(TChargingOrder::getDelFlag, 0)); + if(null == data1 && count1 >= times){ data1 = new TAppUserTag(); data1.setAppUserId(chargingOrder.getAppUserId()); - data1.setUserTagId(userTagId); + data1.setUserTagId(tUserTag.getId()); data1.setCreateTime(LocalDateTime.now()); appUserTagClient.addUserTag(data1); } } - //充电评率 + //充电频率 List<TUserTag> userTagList2 = data.stream().filter(s -> s.getStandardCondition() == 2).collect(Collectors.toList()); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (TUserTag tUserTag : userTagList2) { TAppUserTag appUserTag = new TAppUserTag(); appUserTag.setAppUserId(chargingOrder.getAppUserId()); appUserTag.setUserTagId(tUserTag.getId()); TAppUserTag data1 = appUserTagClient.getUserTag(appUserTag).getData(); - if(null == data1){ - Integer day = JSON.parseObject(tUserTag.getConditions()).getInteger("day"); - Integer times = JSON.parseObject(tUserTag.getConditions()).getInteger("times"); - Calendar start = Calendar.getInstance(); - start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + day); - count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId()) - .eq(TChargingOrder::getRechargePaymentStatus, 2).isNotNull(TChargingOrder::getPaymentAmount) - .between(TChargingOrder::getStartTime, sdf.format(start.getTime()), sdf.format(new Date())).eq(TChargingOrder::getDelFlag, 0)); - //加上本次充电 - if(count1 >= times){ - data1 = new TAppUserTag(); - data1.setAppUserId(chargingOrder.getAppUserId()); - data1.setUserTagId(tUserTag.getId()); - data1.setCreateTime(LocalDateTime.now()); - appUserTagClient.addUserTag(data1); - } + + Integer day = JSON.parseObject(tUserTag.getConditions()).getInteger("day"); + Integer times = JSON.parseObject(tUserTag.getConditions()).getInteger("times"); + LocalDateTime endTime = LocalDateTime.now(); + endTime.plusDays(day); + String start = tUserTag.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + String end = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + long count1 = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId()) + .eq(TChargingOrder::getRechargePaymentStatus, 2).between(TChargingOrder::getStartTime, start, end).eq(TChargingOrder::getDelFlag, 0)); + if(null == data1 && count1 >= times){ + data1 = new TAppUserTag(); + data1.setAppUserId(chargingOrder.getAppUserId()); + data1.setUserTagId(tUserTag.getId()); + data1.setCreateTime(LocalDateTime.now()); + appUserTagClient.addUserTag(data1); } } } @@ -1073,6 +1184,7 @@ endTime2 = split[1]; } PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); + PageInfo<ChargingOrderVO> pageInfo1 = new PageInfo<>(1,9999999); if (StringUtils.hasLength(dto.getPhone())){ List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData(); @@ -1083,12 +1195,15 @@ dto.setUserIds(data); } List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo,dto,startTime1,startTime2,endTime1,endTime2); + List<ChargingOrderVO> list1 = this.baseMapper.chargingOrder(pageInfo1,dto,startTime1,startTime2,endTime1,endTime2); BigDecimal total = new BigDecimal("0"); long time = 0L; BigDecimal income = new BigDecimal("0"); BigDecimal electronicMoney = new BigDecimal("0"); BigDecimal serviceMoney = new BigDecimal("0"); for (ChargingOrderVO chargingOrderVO : list) { + chargingOrderVO.setCommissionAmount(chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.006"))); + chargingOrderVO.setPlatFormMoney(chargingOrderVO.getServiceCharge().multiply(new BigDecimal("0.006"))); chargingOrderVO.setUid(chargingOrderVO.getId()+""); TChargingGun data3 = chargingGunClient.getChargingGunById(chargingOrderVO.getChargingGunId()).getData(); TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderVO.getChargingPileId()).getData(); @@ -1100,10 +1215,6 @@ } if (data2!=null && data3!=null){ chargingOrderVO.setTerminalName(data2.getName()+"-"+data3.getName()); - - } - if (chargingOrderVO.getChargingCapacity()!=null){ - total = total.add(chargingOrderVO.getElectricity()); } // 充电订单 明细记录 List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>() @@ -1112,14 +1223,6 @@ if (data5!=null){ long l = data5.getCumulative_charging_time() * 60L; chargingOrderVO.setChargingSecond(l); - time+=l; - } - electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence()); - serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()); - - income = income.add(chargingOrderVO.getServiceCharge().add(chargingOrderVO.getElectrovalence())); - if (chargingOrderVO.getRefundAmount()!=null){ - income = income.subtract(chargingOrderVO.getRefundAmount()); } // 充电时段数 int size = chargingOrderId.size(); @@ -1140,6 +1243,27 @@ } } + for (ChargingOrderVO chargingOrderVO : list1) { + if (chargingOrderVO.getChargingCapacity()!=null){ + total = total.add(chargingOrderVO.getElectricity()); + } + // 充电订单 明细记录 + 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; + } + electronicMoney = electronicMoney.add(chargingOrderVO.getElectrovalence()); + serviceMoney = serviceMoney.add(chargingOrderVO.getServiceCharge()); + + income = income.add(chargingOrderVO.getOrderAmount()); + + + + } tCharingOrderVO.setTotal(total); tCharingOrderVO.setTime(time); tCharingOrderVO.setIncome(income); @@ -1154,6 +1278,16 @@ public R<PageInfo<PayOrderDto>> payOrderQuery(PayOrderQueryDto payOrderQueryDto) { PageInfo<PayOrderDto> pageInfo = new PageInfo<>(payOrderQueryDto.getPageCurr(),payOrderQueryDto.getPageSize()); List<PayOrderDto> list = this.baseMapper.payOrderQuery(pageInfo,payOrderQueryDto); + for (PayOrderDto payOrderDto : list) { + if (payOrderDto.getType()==2||payOrderDto.getType()==3){ + payOrderDto.setFinalAmount(payOrderDto.getOrderAmount()); + } + if (payOrderDto.getType()==1&&payOrderDto.getStatus()==3){ + payOrderDto.setFinalAmount(payOrderDto.getRechargeAmount()); + payOrderDto.setOrderAmount(payOrderDto.getRechargeAmount()); + payOrderDto.setPaymentAmount(payOrderDto.getRechargeAmount()); + } + } pageInfo.setRecords(list); return R.ok(pageInfo); } @@ -1242,7 +1376,7 @@ dto.setUserIds(carIds); } } - if (StringUtils.hasLength(dto.getPhone())){ + if (StringUtils.hasLength(dto.getLicensePlate())){ List<Long> data = appUserCarClient.getAppUserCarByLicensePlates(dto.getLicensePlate()).getData(); if(data!=null){ if (!data.isEmpty()){ @@ -1260,7 +1394,13 @@ PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2); for (ChargingOrderListVO chargingOrderListVO : list) { - chargingOrderListVO.setPaymentAmount(chargingOrderListVO.getResidualAmount()==null?chargingOrderListVO.getPaymentAmount():chargingOrderListVO.getPaymentAmount().subtract(chargingOrderListVO.getResidualAmount())); + 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.setPaymentAmount(chargingOrderListVO.getResidualAmount()==null?chargingOrderListVO.getPaymentAmount():chargingOrderListVO.getPaymentAmount()); chargingOrderListVO.setUid(chargingOrderListVO.getId()+""); List<Integer> integers = new ArrayList<>(); integers.add(chargingOrderListVO.getSiteId()); @@ -1301,7 +1441,9 @@ carId.add(chargingOrderListVO.getAppUserCarId()); if (!carId.isEmpty()){ List<TAppUserCar> data4 = appUserCarClient.getCarByIds(carId).getData(); - if (data4!=null && !data4.isEmpty()) chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate()); + if (data4!=null && !data4.isEmpty()) { + chargingOrderListVO.setLicensePlate(data4.get(0).getLicensePlate()); + } } } chargingOrderListVO.setPhone(data3.getPhone()); @@ -1317,6 +1459,9 @@ BigDecimal gu = new BigDecimal("0"); BigDecimal total = new BigDecimal("0"); for (TChargingOrderAccountingStrategy temp : list2) { + if (temp.getChargingCapacity() == null){ + temp.setChargingCapacity(BigDecimal.ZERO); + } switch (temp.getType()) { case 1: jian = jian.add(temp.getChargingCapacity()); @@ -1377,7 +1522,7 @@ BigDecimal ping = new BigDecimal("0"); BigDecimal gu = new BigDecimal("0"); for (ChargingOrderListVO chargingOrderListVO : list1) { - if (chargingOrderListVO.getChargingCapacity()!=null)electronic = electronic.add(chargingOrderListVO.getChargingCapacity()); + 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()); @@ -1466,6 +1611,12 @@ TChargingOrder chargingOrder= this.getById(uid); ChargingOrderListInfoVO chargingOrderListInfoVO = new ChargingOrderListInfoVO(); + + chargingOrderListInfoVO.setStatus(chargingOrder.getStatus()); + BigDecimal bigDecimal = new BigDecimal("0.006"); + if (chargingOrder.getOrderAmount()!=null){ + chargingOrderListInfoVO.setCommissionAmount(chargingOrder.getOrderAmount().multiply(bigDecimal)); + } chargingOrderListInfoVO.setElectrovalence(chargingOrder.getElectrovalence()); chargingOrderListInfoVO.setServiceCharge(chargingOrder.getServiceCharge()); if (chargingOrder.getElectrovalence()!=null && chargingOrder.getServiceCharge()!=null){ @@ -1505,6 +1656,13 @@ if (chargingOrder.getCode()!=null){ List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData(); if (data6!=null){ + for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) { + if (uploadRealTimeMonitoringData.getOutput_current()!=null&& + uploadRealTimeMonitoringData.getOutput_voltage()!=null){ + uploadRealTimeMonitoringData.setPower(uploadRealTimeMonitoringData.getOutput_voltage() + .multiply(uploadRealTimeMonitoringData.getOutput_current())); + } + } if (!data6.isEmpty()){ // 第一条数据soc为开始 最后一条数据soc为结束soc chargingOrderListInfoVO.setStartSoc(data6.get(0).getSoc().toString()); @@ -1616,11 +1774,6 @@ return; } - //计算用户标签 - editUserTag(chargingOrder); - //用户推荐奖励 - referralReward(chargingOrder); - //如果使用优惠券需要判断优惠券是否满足使用条件 //根据实际的充电金额计算退款金额 退回费用=(原金额/总金额)*(总金额-实际充电金额) //退款金额=优惠券金额+剩余充电金额 @@ -1630,7 +1783,11 @@ //获取订单的计费策略 List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); + + //开始处理计费明细数据和优惠数据 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 { @@ -1659,43 +1816,100 @@ continue; } BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); - TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy(); - chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId()); - chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId()); - chargingOrderAccountingStrategy.setType(strategyDetail.getType()); - chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm"))); - chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm"))); - chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence()); - chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge()); - chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge()); - //已充电总度数 - BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN); - BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN); - BigDecimal serviceCharge = originalServicePrice; - //计算优惠金额 - if(null != chargingOrder.getVipDiscount()){ - serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.DOWN); - } - chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge); - chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc); - chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge); - chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice); - chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); - chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy); - - BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice(); - BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice(); - periodElectricPrice_total = periodElectricPrice_total.add(periodElectricPrice); - periodServicePrice_total = periodServicePrice_total.add(periodServicePrice); - total = total.add(periodElectricPrice.add(periodServicePrice)); + 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.setServiceCharge(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); } } + 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); + } + + //开始处理明细 + 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) { + if(strategyDetail.getStart() < start.getTime() || strategyDetail.getEnd() > end.getTime()){ + continue; + } + 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(start.getTime() >= strategyDetail.getStart()){ + chargingOrderAccountingStrategy.setStartTime(sdf2.format(start)); + }else{ + chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime()); + } + if(end.getTime() >= strategyDetail.getEnd()){ + chargingOrderAccountingStrategy.setStartTime(strategyDetail.getEndTime()); + }else{ + chargingOrderAccountingStrategy.setStartTime(sdf2.format(end)); + } + + //已充电总度数 + BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN); + BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN); + BigDecimal serviceCharge = originalServicePrice; + BigDecimal vipDiscountAmount = BigDecimal.ZERO; + //计算优惠金额 + if(null != chargingOrder.getVipDiscount()){ + vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())).setScale(2, RoundingMode.DOWN); + 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.setCreateTime(LocalDateTime.now()); + chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy); + + periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc); + periodServicePrice_total = periodServicePrice_total.add(originalServicePrice); + total = total.add(electrovalenc.add(originalServicePrice)); + } + //原金额 @@ -1710,20 +1924,19 @@ //折扣金额 BigDecimal discountAmount = BigDecimal.ZERO; if(null != chargingOrder.getVipDiscount()){ - //服务费折扣 - discountAmount = periodServicePrice_total.multiply((new BigDecimal(1).subtract(chargingOrder.getVipDiscount()))); - TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); - if(null != appUser.getVipId()){ - //判断会员是否还有充电优惠次数 - GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); - getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId()); - getAppUserVipDetail.setVipId(appUser.getVipId()); - TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData(); - if(null != data && data.getChargeNum() > 0){ - data.setChargeNum(data.getChargeNum() - 1); - appUserVipDetailClient.updateAppUserVipDetail(data); - } + //判断会员是否还有充电优惠次数 + 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()))); + periodServicePrice_total = periodServicePrice_total.multiply(chargingOrder.getVipDiscount()); TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); BigDecimal maximumDeduction = vip.getMaximumDeduction(); @@ -1732,8 +1945,8 @@ discountAmount = maximumDeduction; } } - payAmount = payAmount.subtract(discountAmount); } + payAmount = payAmount.subtract(discountAmount); TChargingOrder order = new TChargingOrder(); order.setId(chargingOrder.getId()); @@ -1750,7 +1963,6 @@ order.setStatus(5); order.setOrderAmount(orderAmount); order.setVipDiscountAmount(discountAmount); - order.setServiceCharge(periodServicePrice_total); order.setElectrovalence(periodElectricPrice_total); order.setChargingCapacity(vo.getTotal_electricity()); order.setElectricity(vo.getTotal_electricity()); @@ -1765,9 +1977,22 @@ if(1 == preferentialMode){ //满减 if(payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0){ - refundAmount = refundAmount.add(tCoupon.getDiscountAmount()); - order.setCouponDiscountAmount(tCoupon.getDiscountAmount()); - payAmount = payAmount.subtract(tCoupon.getDiscountAmount()); + BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount(); + //如果优惠金额大于服务费金额,以服务费作为最大限制 + if(periodServicePrice_total.compareTo(couponDiscountAmount) < 0){ + refundAmount = refundAmount.add(periodServicePrice_total); + order.setCouponDiscountAmount(periodServicePrice_total); + payAmount = payAmount.subtract(periodServicePrice_total); + periodServicePrice_total = BigDecimal.ZERO; + }else{ + refundAmount = refundAmount.add(couponDiscountAmount); + order.setCouponDiscountAmount(couponDiscountAmount); + payAmount = payAmount.subtract(couponDiscountAmount); + periodServicePrice_total = periodServicePrice_total.subtract(couponDiscountAmount); + } + + appCoupon.setStatus(2); + appCouponClient.updateAppCoupon(appCoupon); }else{ order.setAppCouponId(null); order.setCouponDiscountAmount(BigDecimal.ZERO); @@ -1780,9 +2005,21 @@ //折扣金额 BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10)); divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide; - refundAmount = refundAmount.add(divide); - order.setCouponDiscountAmount(divide); - payAmount = payAmount.subtract(divide); + //如果优惠金额大于服务费金额,以服务费作为最大限制 + if(periodServicePrice_total.compareTo(divide) < 0){ + refundAmount = refundAmount.add(periodServicePrice_total); + order.setCouponDiscountAmount(periodServicePrice_total); + payAmount = payAmount.subtract(periodServicePrice_total); + periodServicePrice_total = BigDecimal.ZERO; + }else{ + refundAmount = refundAmount.add(divide); + order.setCouponDiscountAmount(divide); + payAmount = payAmount.subtract(divide); + periodServicePrice_total = periodServicePrice_total.subtract(divide); + } + + appCoupon.setStatus(2); + appCouponClient.updateAppCoupon(appCoupon); }else{ order.setAppCouponId(null); order.setCouponDiscountAmount(BigDecimal.ZERO); @@ -1790,11 +2027,28 @@ } } } + + order.setServiceCharge(periodServicePrice_total); order.setPaymentAmount(payAmount); order.setRefundAmount(refundAmount); order.setRefundStatus(1); this.updateById(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); + chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply); + } + chargingOrderAccountingStrategyService.updateBatchById(list); + } // 将枪状态重置为空闲 TChargingGun chargingGun = new TChargingGun(); @@ -1830,7 +2084,11 @@ appUserClient.updateAppUser(appUser); appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); } - + + //计算用户标签 + editUserTag(chargingOrder); + //用户推荐奖励 + referralReward(chargingOrder); //开始构建退款费用 if(refundAmount.compareTo(BigDecimal.ZERO) > 0){ @@ -1848,7 +2106,7 @@ chargingOrderRefund.setRefundTitle("充电完成退款"); chargingOrderRefund.setRefundContent("充电完成退款"); chargingOrderRefund.setRefundReason("充电完成退款"); - chargingOrderRefund.setRefundRemark("充电完成退款"); + chargingOrderRefund.setRefundRemark("实际充电消费金额:" + refundAmount); chargingOrderRefund.setRefundTotalAmount(refundAmount); chargingOrderRefund.setPayAmount(rechargeAmount); if(1 == rechargePaymentType){ @@ -1922,7 +2180,7 @@ } @Override public List<Map<String, Object>> usersByQuery1(ChargingStatisticsQueryDto statisticsQueryDto) { - return this.baseMapper.usersByQuery(statisticsQueryDto); + return this.baseMapper.usersByQuery1(statisticsQueryDto); } @Override @@ -1956,7 +2214,7 @@ } @Override - public Long getAver(List<Integer> siteIds) { + public Double getAver(List<Integer> siteIds) { return this.baseMapper.getAver(siteIds); } @@ -1974,6 +2232,11 @@ 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("退款金额需小于支付金额"); + } + + TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); chargingOrderRefund.setChargingOrderId(tChargingOrder.getId()); chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); @@ -1986,7 +2249,7 @@ chargingOrderRefund.setRefundTitle("后台退款"); chargingOrderRefund.setRefundContent("后台退款"); chargingOrderRefund.setRefundReason("后台退款"); - chargingOrderRefund.setRefundRemark("后台退款"); + chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark()); chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount())); chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount()); @@ -1999,7 +2262,7 @@ 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.setTotal(tChargingOrder.getRechargeAmount().multiply(new BigDecimal(100)).intValue()); amount.setCurrency("CNY"); model.setAmount(amount); R<String> orderR = wxPaymentClient.refundOrderR(model); @@ -2035,6 +2298,9 @@ } if (payOrderQueryDto.getType()==2){ TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId()); + if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){ + return R.fail("退款金额需小于支付金额"); + } TShoppingOrderRefund chargingOrderRefund = new TShoppingOrderRefund(); chargingOrderRefund.setShoppingOrderId(tChargingOrder.getId()); chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); @@ -2047,7 +2313,7 @@ chargingOrderRefund.setRefundTitle("后台退款"); chargingOrderRefund.setRefundContent("后台退款"); chargingOrderRefund.setRefundReason("后台退款"); - chargingOrderRefund.setRefundRemark("后台退款"); + chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark()); chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount())); chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount()); @@ -2084,6 +2350,10 @@ 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); @@ -2203,10 +2473,10 @@ } if (tChargingOrder.getRefundStatus()!=null &&tChargingOrder.getRefundStatus() == 2){ // 如果成功退款 那么减去退款金额 - paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount())); + paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); }else{ if (tChargingOrder.getPaymentAmount()!=null){ - paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount()); + paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); } } } @@ -2214,8 +2484,8 @@ commissionAmount = sharingAmount.multiply(new BigDecimal("0.006")); // 订单手续费 订单支付金额 - 退款金额*0.6% orderCommission = paymentAmount.multiply(new BigDecimal("0.006")); - tSettlementConfirm.setSharingAmount(sharingAmount); - tSettlementConfirm.setCommissionAmount(commissionAmount); + 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)); @@ -2457,7 +2727,7 @@ tSettlementConfirm.setIncomePercentage(0+"%"); tSettlementConfirm.setIncomePercentage(0+"%"); }else{ - BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")); + BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome,2,RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")); tSettlementConfirm.setIncomePercentage(subtract+"%"); tSettlementConfirm.setIncomePercentage(subtract+"%"); @@ -2567,13 +2837,19 @@ info.setRefundAmount(chargingOrder.getRefundAmount()); LocalDateTime startTime = chargingOrder.getStartTime(); LocalDateTime endTime = chargingOrder.getEndTime(); - info.setStartDay(startTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " 周" + startTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE)); + info.setStartDay(startTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " " + startTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE)); info.setStartHour(startTime.format(DateTimeFormatter.ofPattern("HH:mm"))); - info.setEndDay(endTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " 周" + endTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE)); + info.setEndDay(endTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " " + endTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE)); info.setEndHour(endTime.format(DateTimeFormatter.ofPattern("HH:mm"))); - int hour = endTime.getHour() - startTime.getHour(); - int second = endTime.getMinute() - startTime.getMinute(); + long time = (endTime.toEpochSecond(ZoneOffset.UTC) - startTime.toEpochSecond(ZoneOffset.UTC)) / 60; + long hour = time / 60; + long second = time % 60; info.setDuration(0 == hour ? String.format("%s分钟", second) : String.format("%s小时%s分钟", hour, second)); return info; } + + @Override + public Long countNoTag() { + return this.baseMapper.countNoTag(); + } } -- Gitblit v1.7.1