修改历史订单详情,结束的订单不能再次被结算
This commit is contained in:
parent
515467d740
commit
7b52ceac8b
@ -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();
|
||||
//总金额
|
||||
|
||||
@ -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<String, Object> 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<Map<String, Object>> list =new ArrayList<>();
|
||||
//获取费率时段集合
|
||||
List<Map<String, Object>> 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<String, Object> map1 = getBigDecimal(actPrice, powerPriceTotal, servicePriceTotal, chargeOrder, rateModelId, startTime2, updateTime, chargingDegree, list);
|
||||
//获取
|
||||
List<Map<String, Object>> list1 = (List<Map<String, Object>>)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<String, Object> map2 = getBigDecimal(actPrice, powerPriceTotal1, servicePriceTotal1, chargeOrder, rateModelId, startTime3, updateTime2, chargingDegree, list);
|
||||
return map2;
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, Object> getBigDecimal(String actPrice, BigDecimal powerPriceTotal, BigDecimal servicePriceTotal, XhpcChargeOrder chargeOrder, Long rateModelId, Date startTime2, Date updateTime2, BigDecimal chargingDegree, List<Map<String, Object>> list) {
|
||||
Map<String, Object> 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<Map<String, Object>> reatTimeList = getReatTimeList(startTime, endTime, rateModelId);
|
||||
if(reatTimeList !=null && reatTimeList.size()>0){
|
||||
Map<String, Object> 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<size-1){
|
||||
list.add(getRateTimeList(startTime1,endTime1,s,powerPrice,servicePrice));
|
||||
list.add(getRateTimeList(startTime1,endTime1,decimal,powerPrice,servicePrice));
|
||||
}else{
|
||||
list.add(getRateTimeList(startTime1,endTime,s,powerPrice,servicePrice));
|
||||
list.add(getRateTimeList(startTime1,endTime,decimal,powerPrice,servicePrice));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
map.put("list",list);//数据列表
|
||||
map.put("chargingTimeTotal",chargeOrder.getChargingTime());//总时长
|
||||
map.put("powerPriceTotal",powerPriceTotal);//总电费单价(元/度)
|
||||
|
||||
@ -111,7 +111,7 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
|
||||
XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getChargingOrderId(Long.parseLong(message.get("chargeOrderId").toString()));
|
||||
Long rateModelId = chargeOrder.getRateModelId();
|
||||
Date startTime2 = chargeOrder.getStartTime();
|
||||
Date updateTime2 = chargeOrder.getUpdateTime();
|
||||
Date updateTime2 = chargeOrder.getEndTime();
|
||||
BigDecimal amountCharged = chargeOrder.getAmountCharged();
|
||||
//充电度数
|
||||
BigDecimal chargingDegree = chargeOrder.getChargingDegree();
|
||||
@ -155,6 +155,9 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
|
||||
BigDecimal surplusServicePrice = servicePrice;
|
||||
|
||||
XhpcChargeOrder xhpcChargeOrder = xhpcChargeOrderService.getChargingOrderId(chargingOrderId);
|
||||
if(xhpcChargeOrder.getStatus()==1 || xhpcChargeOrder.getStatus()==3){
|
||||
return AjaxResult.error("订单已结算,请联系技术人员解决");
|
||||
}
|
||||
xhpcChargeOrder.setStatus(3);
|
||||
xhpcChargeOrder.setAmountCharged(money);
|
||||
//生成一条历史订单
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user