优化申请异常订单

This commit is contained in:
yuyang 2021-12-02 17:15:40 +08:00
parent 2195ca2caa
commit 704af8f6bb
5 changed files with 65 additions and 30 deletions

View File

@ -377,7 +377,7 @@ public class XhpcPileOrderController extends BaseController {
xhpcHistoryOrder.setOperatorId3rdptyEvcs((String) pushOrder.get("operatorId3rdpty")); xhpcHistoryOrder.setOperatorId3rdptyEvcs((String) pushOrder.get("operatorId3rdpty"));
xhpcChargeOrder.setOperatorId3rdptyEvcs((String) pushOrder.get("operatorId3rdpty")); xhpcChargeOrder.setOperatorId3rdptyEvcs((String) pushOrder.get("operatorId3rdpty"));
} }
xhpcHistoryOrder.setType(1);
//结算 //结算
xhpcRealTimeOrderService.addSettlement(powerPrice,servicePrice,money,surplusPowerPrice,surplusServicePrice,xhpcChargeOrder,userId,userMessage,1,cacheOrderData.getVinNormal(),xhpcHistoryOrder); xhpcRealTimeOrderService.addSettlement(powerPrice,servicePrice,money,surplusPowerPrice,surplusServicePrice,xhpcChargeOrder,userId,userMessage,1,cacheOrderData.getVinNormal(),xhpcHistoryOrder);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();

View File

@ -580,18 +580,18 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService {
BigDecimal servicePrice = new BigDecimal(objectMap.get("serviceFee").toString()).setScale(2, BigDecimal.ROUND_DOWN); BigDecimal servicePrice = new BigDecimal(objectMap.get("serviceFee").toString()).setScale(2, BigDecimal.ROUND_DOWN);
String startTime1 = objectMap.get("startTime").toString(); String startTime1 = objectMap.get("startTime").toString();
String endTime1 = objectMap.get("endTime").toString(); String endTime1 = objectMap.get("endTime").toString();
if (i == 0) { if("00:00:00".equals(endTime1)){
list.add(getRateTimeList(startTime, endTime1, degree, powerPrice, servicePrice)); endTime1="23:59:59";
} else { }
if (size == 2) { if(size==1){
list.add(getRateTimeList(startTime, endTime, degree, powerPrice, servicePrice));
}else{
if(i==0){
list.add(getRateTimeList(startTime, endTime1, degree, powerPrice, servicePrice));
} else if(i<size-1){
list.add(getRateTimeList(startTime1, endTime1, degree, powerPrice, servicePrice));
}else{
list.add(getRateTimeList(startTime1, endTime, degree, powerPrice, servicePrice)); list.add(getRateTimeList(startTime1, endTime, degree, powerPrice, servicePrice));
} else {
//三个时段以上
if (i < size - 1) {
list.add(getRateTimeList(startTime1, endTime1, degree, powerPrice, servicePrice));
} else {
list.add(getRateTimeList(startTime1, endTime, degree, powerPrice, servicePrice));
}
} }
} }
} }

View File

@ -185,7 +185,7 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
message.put("chargingTime",new BigDecimal(mins).setScale(0) + ""); message.put("chargingTime",new BigDecimal(mins).setScale(0) + "");
chargeOrder.setChargingTime(new BigDecimal(mins).setScale(0) + ""); chargeOrder.setChargingTime(new BigDecimal(mins).setScale(0) + "");
} }
Integer chargingDegree = endData.getChargingDegree(); BigDecimal chargingDegree = new BigDecimal(endData.getChargingDegree()).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_DOWN);
message.put("chargingDegree",chargingDegree); message.put("chargingDegree",chargingDegree);
chargeOrder.setStartTime(startTime); chargeOrder.setStartTime(startTime);
@ -193,7 +193,7 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
chargeOrder.setStartSoc(startData.getSoc().toString()); chargeOrder.setStartSoc(startData.getSoc().toString());
chargeOrder.setEndSoc(endData.getSoc().toString()); chargeOrder.setEndSoc(endData.getSoc().toString());
chargeOrder.setChargingTimeNumber(tiem); chargeOrder.setChargingTimeNumber(tiem);
chargeOrder.setChargingDegree(new BigDecimal(chargingDegree)); chargeOrder.setChargingDegree(chargingDegree);
chargeOrder.setType(0); chargeOrder.setType(0);
chargeOrder.setAmountCharged(new BigDecimal(endData.getAmountCharged()).divide(new BigDecimal(10000),2,BigDecimal.ROUND_DOWN)); chargeOrder.setAmountCharged(new BigDecimal(endData.getAmountCharged()).divide(new BigDecimal(10000),2,BigDecimal.ROUND_DOWN));
}else{ }else{
@ -244,15 +244,17 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
powerPriceTotal = getBigDecimal(rateModelId,DateUtil.formatTime(startTime2), DateUtil.formatTime(updateTime2), powerPriceTotal, divide); powerPriceTotal = getBigDecimal(rateModelId,DateUtil.formatTime(startTime2), DateUtil.formatTime(updateTime2), powerPriceTotal, divide);
}else{ }else{
//跨天 //跨天
powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime2), "23:59:59", chargingDegree, powerPriceTotal); powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime2), "23:59:59", powerPriceTotal, divide);
System.out.println(">>>>>>跨天前>>>>>>>"+powerPriceTotal);
//明天 //明天
DateTime tomorrow = DateUtil.offsetDay(startTime2,1); DateTime tomorrow = DateUtil.offsetDay(startTime2,1);
Date startTime3 = DateUtil.beginOfDay(tomorrow); Date startTime3 = DateUtil.beginOfDay(tomorrow);
powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime3), DateUtil.formatTime(updateTime2), chargingDegree, powerPriceTotal); powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime3), DateUtil.formatTime(updateTime2), powerPriceTotal, divide);
System.out.println(">>>>>>跨天后>>>>>>>"+powerPriceTotal);
} }
//算服务费和电费 //算服务费和电费
if(amountCharged.compareTo(powerPriceTotal)==1){ if(amountCharged.compareTo(powerPriceTotal)>-1){
BigDecimal servicePriceTotal =amountCharged.subtract(powerPriceTotal); BigDecimal servicePriceTotal =amountCharged.subtract(powerPriceTotal);
message.put("powerPriceTotal",powerPriceTotal); message.put("powerPriceTotal",powerPriceTotal);
message.put("servicePriceTotal",servicePriceTotal); message.put("servicePriceTotal",servicePriceTotal);
@ -303,7 +305,11 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
//生成一条历史订单 //生成一条历史订单
XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder(); XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder();
xhpcHistoryOrder.setEndTime(xhpcChargeOrder.getEndTime());
xhpcHistoryOrder.setStartSoc(xhpcChargeOrder.getStartSoc());
xhpcHistoryOrder.setEndSoc(xhpcChargeOrder.getEndSoc());
xhpcHistoryOrder.setTotalPower(xhpcChargeOrder.getChargingDegree().doubleValue());
xhpcHistoryOrder.setType(2);
addSettlement(powerPrice, servicePrice, money, surplusPowerPrice, surplusServicePrice, xhpcChargeOrder, userId, userMessage,0,null,xhpcHistoryOrder); addSettlement(powerPrice, servicePrice, money, surplusPowerPrice, surplusServicePrice, xhpcChargeOrder, userId, userMessage,0,null,xhpcHistoryOrder);
return AjaxResult.success(); return AjaxResult.success();
@ -495,7 +501,6 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
xhpcHistoryOrder.setStartSoc(xhpcChargeOrder.getStartSoc()); xhpcHistoryOrder.setStartSoc(xhpcChargeOrder.getStartSoc());
xhpcHistoryOrder.setReconciliationStatus(0); xhpcHistoryOrder.setReconciliationStatus(0);
xhpcHistoryOrder.setSortingStatus(0); xhpcHistoryOrder.setSortingStatus(0);
xhpcHistoryOrder.setType(1);
//订单总价---运维服务费抽成 //订单总价---运维服务费抽成
xhpcHistoryOrder.setTotalPrice(money.setScale(2, BigDecimal.ROUND_DOWN)); xhpcHistoryOrder.setTotalPrice(money.setScale(2, BigDecimal.ROUND_DOWN));
xhpcHistoryOrder.setPromotionDiscount(promotionDiscount.setScale(2, BigDecimal.ROUND_DOWN)); xhpcHistoryOrder.setPromotionDiscount(promotionDiscount.setScale(2, BigDecimal.ROUND_DOWN));
@ -791,22 +796,41 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
} }
private BigDecimal getBigDecimal(Long rateModelId, String startTime, String updateTime, BigDecimal powerPriceTotal, BigDecimal divide) { private BigDecimal getBigDecimal(Long rateModelId, String startTime, String updateTime, BigDecimal powerPriceTotal, BigDecimal divide) {
List<Map<String, Object>> reatTimeList = xhpcHistoryOrderService.getReatTimeList(startTime,updateTime, rateModelId); List<Map<String, Object>> reatTimeList = xhpcHistoryOrderService.getReatTimeList(startTime,updateTime, rateModelId);
for (int i = 0; i <reatTimeList.size() ; i++) { for (int i = 0; i <reatTimeList.size() ; i++) {
int size = reatTimeList.size();
Map<String, Object> map = reatTimeList.get(i); Map<String, Object> map = reatTimeList.get(i);
String startTime1 = map.get("startTime").toString();
String endTime1 = map.get("endTime").toString();
BigDecimal powerFee =new BigDecimal(map.get("powerFee").toString());
if("00:00:00".equals(endTime1)){
endTime1="23:59:59";
}
//获取费率 //获取费率
if(reatTimeList.size()==1){ if(size==1){
BigDecimal powerFee =new BigDecimal(map.get("powerFee").toString()); powerPriceTotal = powerPriceTotal.add(getRateTimeList(startTime,updateTime,divide,powerFee));
powerPriceTotal = powerPriceTotal.add(powerFee.multiply(divide).setScale(2, BigDecimal.ROUND_DOWN));
}else if(i!=reatTimeList.size()-1){
BigDecimal powerFee =new BigDecimal(map.get("powerFee").toString());
powerPriceTotal = powerPriceTotal.add(powerFee.multiply(divide).setScale(2, BigDecimal.ROUND_DOWN));
}else{ }else{
BigDecimal powerFee =new BigDecimal(map.get("powerFee").toString()); if(i==0){
powerPriceTotal = powerPriceTotal.add(powerFee.multiply(divide).setScale(2, BigDecimal.ROUND_DOWN)); powerPriceTotal = powerPriceTotal.add(getRateTimeList(startTime,endTime1,divide,powerFee));
} else if(i<size-1){
powerPriceTotal = powerPriceTotal.add(getRateTimeList(startTime1,endTime1,divide,powerFee));
}else{
powerPriceTotal = powerPriceTotal.add(getRateTimeList(startTime1,updateTime,divide,powerFee));
}
} }
} }
return powerPriceTotal; return powerPriceTotal;
} }
private BigDecimal getRateTimeList(String startTime, String endTime, BigDecimal degree, BigDecimal powerPrice) {
System.out.println("startTime>>"+startTime);
System.out.println("endTime>>"+endTime);
long time = DateUtil.parse(endTime).getTime();
long time1= DateUtil.parse(startTime).getTime();
BigDecimal multiply = new BigDecimal(time-time1).divide(new BigDecimal(60000),2, BigDecimal.ROUND_DOWN).multiply(degree).setScale(2,BigDecimal.ROUND_DOWN);
BigDecimal bigDecimal = multiply.multiply(powerPrice).setScale(2, BigDecimal.ROUND_DOWN);
System.out.println("bigDecimal>>"+bigDecimal);
return bigDecimal;
}
} }

View File

@ -833,7 +833,7 @@
left join xhpc_charge_order co on co.charge_order_id = ho.charge_order_id left join xhpc_charge_order co on co.charge_order_id = ho.charge_order_id
left join xhpc_charging_station cs on cs.charging_station_id = co.charging_station_id left join xhpc_charging_station cs on cs.charging_station_id = co.charging_station_id
left join xhpc_terminal as te on te.terminal_id = ho.terminal_id left join xhpc_terminal as te on te.terminal_id = ho.terminal_id
where ho.state = #{state} and ho.total_price &gt;0 and ho.end_time &gt; ho.start_time and ho.vin_normal !="2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" and ho.power_price_total !=0 where ho.state = #{state} and ho.total_price &gt;0 and ho.end_time &gt; ho.start_time and ho.power_price_total !=0
limit 0,#{number} limit 0,#{number}
</select> </select>

View File

@ -409,7 +409,18 @@
left join xhpc_charging_pile as cp on cp.charging_pile_id = ter.charging_pile_id left join xhpc_charging_pile as cp on cp.charging_pile_id = ter.charging_pile_id
left join xhpc_internet_user as inu on inu.internet_user_id = co.user_id and co.source =1 left join xhpc_internet_user as inu on inu.internet_user_id = co.user_id and co.source =1
left join xhpc_app_user as apu on apu.app_user_id = co.user_id and co.source =0 left join xhpc_app_user as apu on apu.app_user_id = co.user_id and co.source =0
left join (select charging_order_id, real_time_order_id, soc, charging_degree, charging_time from xhpc_real_time_order ro0 order by ro0.real_time_order_id desc limit 1) ro on ro.charging_order_id = co.charge_order_id LEFT JOIN (
SELECT
charging_order_id,
real_time_order_id,
soc,
charging_degree,
charging_time
FROM
xhpc_real_time_order
WHERE
real_time_order_id IN ( SELECT max( real_time_order_id ) FROM xhpc_real_time_order GROUP BY charging_order_id )
) ro ON ro.charging_order_id = co.charge_order_id
where co.status=#{status} and co.del_flag=0 where co.status=#{status} and co.del_flag=0
<if test="internetId !=null"> <if test="internetId !=null">
and co.source =1 and co.source =1