修改历史订单详情,结束的订单不能再次被结算

This commit is contained in:
yuyang 2021-08-30 18:40:36 +08:00
parent 515467d740
commit 7b52ceac8b
3 changed files with 57 additions and 22 deletions

View File

@ -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();
//总金额

View File

@ -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);//总电费单价(/)

View File

@ -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);
//生成一条历史订单