diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java index 6de3f437..97858303 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java @@ -227,6 +227,10 @@ public class XhpcPileOrderController extends BaseController { CacheOrderData cacheOrderData = (CacheOrderData)cacheMap.get("orderData"); //获取充电订单 XhpcChargeOrder xhpcChargeOrder = xhpcChargeOrderService.getSerialNumberMessage(orderNo); + if(xhpcChargeOrder.getStatus()==1 || xhpcChargeOrder.getStatus()==3){ + logger.info("订单已结束不能重复结算>>>>>orderNo:"+orderNo+">>>chargeOrderId:"+xhpcChargeOrder.getChargeOrderId()); + return R.ok(); + } //解析订单编号 Date date = new Date(); //总金额 diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcHistoryOrderServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcHistoryOrderServiceImpl.java index 82561b91..36e6f4d1 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcHistoryOrderServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcHistoryOrderServiceImpl.java @@ -1,5 +1,7 @@ package com.xhpc.order.service.impl; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.xhpc.common.core.web.domain.AjaxResult; import com.xhpc.order.domain.XhpcChargeOrder; @@ -12,10 +14,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author yuyang @@ -79,28 +78,58 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService { Map map =new HashMap<>(); BigDecimal powerPriceTotal =new BigDecimal(0); BigDecimal servicePriceTotal =new BigDecimal(0); - //充电订单信息 - XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getSerialNumberMessage(serialNumber); - //累计充电时间、计费模型、开始时间、结束时间、已充金额 + XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getSerialNumberMessage(serialNumber); Long rateModelId = chargeOrder.getRateModelId(); - String startTime = DateUtil.formatTime(chargeOrder.getStartTime()); - String endTime = DateUtil.formatTime(chargeOrder.getEndTime()); - + Date startTime2 = chargeOrder.getStartTime(); + Date updateTime2 = chargeOrder.getEndTime(); + BigDecimal amountCharged = chargeOrder.getAmountCharged(); + //充电度数 + BigDecimal chargingDegree = chargeOrder.getChargingDegree(); //每分钟充电度数=累计时间/60 BigDecimal chargingTimeNumber = chargeOrder.getChargingDegree(); - BigDecimal s = chargingTimeNumber.divide(new BigDecimal(60)); List> list =new ArrayList<>(); - //获取费率时段集合 - List> reatTimeList = xhpcHistoryOrderMapper.getReatTimeList(startTime, endTime, rateModelId); + //1时间没有跨天 + long betweenDay = DateUtil.between(startTime2, updateTime2, DateUnit.DAY); + if(betweenDay==0){ + return getBigDecimal(actPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime2, updateTime2, chargingDegree, list); + }else{ + //跨天 + String startTime = DateUtil.format(startTime2, "yyyy-MM-dd"); + Date updateTime = DateUtil.parse(startTime+" 23:59:59"); + Map map1 = getBigDecimal(actPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime2, updateTime, chargingDegree, list); + //获取 + List> list1 = (List>)map1.get("list"); + BigDecimal powerPriceTotal1 =(BigDecimal)map1.get("powerPriceTotal"); + BigDecimal servicePriceTotal1 =(BigDecimal)map1.get("servicePriceTotal"); + //明天 + DateTime tomorrow = DateUtil.offsetDay(startTime2,1); + String startTime1 = DateUtil.format(tomorrow, "yyyy-MM-dd"); + Date startTime3 = DateUtil.parse(startTime1+" 00:00:00"); + Map map2 = getBigDecimal(actPrice, powerPriceTotal1, servicePriceTotal1, chargeOrder, rateModelId, startTime3, updateTime2, chargingDegree, list); + return map2; + } + } + + private Map getBigDecimal(String actPrice, BigDecimal powerPriceTotal, BigDecimal servicePriceTotal, XhpcChargeOrder chargeOrder, Long rateModelId, Date startTime2, Date updateTime2, BigDecimal chargingDegree, List> list) { + Map map =new HashMap<>(); + //算出相差时间,分 + double time = (updateTime2.getTime()-startTime2.getTime())/60000; + BigDecimal decimal = new BigDecimal(time).setScale(2); + //每分钟多少度 + BigDecimal degree =chargingDegree.divide(decimal,2,BigDecimal.ROUND_HALF_UP); + //获取费率时间段 + String startTime = DateUtil.formatTime(startTime2); + String endTime = DateUtil.formatTime(updateTime2); + List> reatTimeList = getReatTimeList(startTime, endTime, rateModelId); if(reatTimeList !=null && reatTimeList.size()>0){ Map map1 =new HashMap<>(); int size = reatTimeList.size(); if(size==1){ BigDecimal powerFee = new BigDecimal(reatTimeList.get(0).get("powerFee").toString()); - powerPriceTotal.add(powerFee); + powerPriceTotal = powerFee.multiply(chargingDegree).setScale(2, RoundingMode.HALF_UP); BigDecimal servicePrice = new BigDecimal(reatTimeList.get(0).get("serviceFee").toString()); - servicePriceTotal.add(servicePrice); + servicePriceTotal=servicePrice.multiply(chargingDegree).setScale(2, RoundingMode.HALF_UP); map1.put("time",startTime+"-"+endTime); map1.put("powerPrice",powerFee); map1.put("servicePrice",servicePrice); @@ -114,25 +143,24 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService { BigDecimal servicePrice =new BigDecimal(objectMap.get("serviceFee").toString()); String startTime1 = objectMap.get("startTime").toString(); String endTime1 = objectMap.get("endTime").toString(); - powerPriceTotal.add(powerPrice); - servicePriceTotal.add(servicePrice); if(i==0){ - list.add(getRateTimeList(startTime,endTime1,s,powerPrice,servicePrice)); + list.add(getRateTimeList(startTime,endTime1,decimal,powerPrice,servicePrice)); }else{ if(size==2){ - list.add(getRateTimeList(startTime1,endTime,s,powerPrice,servicePrice)); + list.add(getRateTimeList(startTime,endTime,decimal,powerPrice,servicePrice)); }else{ //三个时段以上 if(i