优化异常订单审核

This commit is contained in:
yuyang 2022-08-29 17:36:28 +08:00
parent 5cdd792800
commit 3fbdde558b

View File

@ -13,6 +13,7 @@ import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.common.core.web.service.BaseService;
import com.xhpc.common.data.redis.CacheOrderData;
import com.xhpc.common.data.redis.CacheRealtimeData;
import com.xhpc.common.domain.XhpcRate;
import com.xhpc.common.enums.StopReasonEnum;
import com.xhpc.common.redis.service.RedisService;
import com.xhpc.common.security.service.TokenService;
@ -165,7 +166,6 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
@Transactional
@Override
public Map<String, Object> getExamineMessage(Long realTimeOrderId,Long chargeOrderId) {
if(realTimeOrderId==null){
Map<String, Object> message = xhpcRealTimeOrderMapper.getMessageChargeOrderId(chargeOrderId);
message.put("powerPriceTotal",0);
@ -182,12 +182,100 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
}
//获取开始充电时间结束时间计费模型充电度数已充金额
XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getChargingOrderId(Long.parseLong(message.get("chargeOrderId").toString()));
if(chargeOrder.getRateModelId()==null || "".equals(chargeOrder.getRateModelId())){
if(chargeOrder.getRateModelId()==null || "".equals(chargeOrder.getRateModelId().toString())){
Map<String, Object> xhpcChargingStationMap = xhpcRealTimeOrderMapper.getXhpcChargingStationById(chargeOrder.getChargingStationId());
chargeOrder.setRateModelId(Long.valueOf(xhpcChargingStationMap.get("rateModelId").toString()));
}
//获取该订单最后一条实时数据
Map<String, Object> cacheMap = redisService.getCacheMap("order:" + chargeOrder.getSerialNumber());
Long rateModelId = chargeOrder.getRateModelId();
if(cacheMap !=null && cacheMap.get("orderData") !=null){
CacheOrderData cacheOrderData = (CacheOrderData)cacheMap.get("orderData");
BigDecimal bigDecimal = new BigDecimal(10000);
BigDecimal money = new BigDecimal(cacheOrderData.getCost()).divide(bigDecimal,2,BigDecimal.ROUND_HALF_UP);
//00: 尖费率 01: 峰费率 02: 平费率 03: 谷费率
BigDecimal t1powerFee =new BigDecimal(0);
BigDecimal t2powerFee =new BigDecimal(0);
BigDecimal t3powerFee =new BigDecimal(0);
BigDecimal t4powerFee =new BigDecimal(0);
BigDecimal t1serviceFee =new BigDecimal(0);
BigDecimal t2serviceFee =new BigDecimal(0);
BigDecimal t3serviceFee =new BigDecimal(0);
BigDecimal t4serviceFee =new BigDecimal(0);
//费率计费模型
List<XhpcRate> rateModelList = xhpcChargeOrderService.getRateModelId(rateModelId);
for (XhpcRate xhpcRate:rateModelList) {
if("00".equals(xhpcRate.getRateValue())){
t1powerFee = xhpcRate.getPowerFee();
t1serviceFee =xhpcRate.getServiceFee();
}
if("01".equals(xhpcRate.getRateValue())){
t2powerFee = xhpcRate.getPowerFee();
t2serviceFee =xhpcRate.getServiceFee();
}
if("02".equals(xhpcRate.getRateValue())){
t3powerFee = xhpcRate.getPowerFee();
t3serviceFee = xhpcRate.getServiceFee();
}
if("03".equals(xhpcRate.getRateValue())){
t4powerFee = xhpcRate.getPowerFee();
t4serviceFee =xhpcRate.getServiceFee();
}
}
BigDecimal powerPrice =new BigDecimal(0);
BigDecimal servicePrice =new BigDecimal(0);
//因桩有误差电费和服务费重新计算
if(!"0".equals(cacheOrderData.getT1PowerQuantity().toString())){
BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(t1powerFee).setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(t1serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP);
powerPrice=powerPrice.add(multiply1);
servicePrice=servicePrice.add(multiply2);
}
if(!"0".equals(cacheOrderData.getT2PowerQuantity().toString())){
BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(t2powerFee).setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(t2serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP);
powerPrice=powerPrice.add(multiply1);
servicePrice=servicePrice.add(multiply2);
}
if(!"0".equals(cacheOrderData.getT3PowerQuantity().toString())){
BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(t3powerFee).setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(t3serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP);
powerPrice=powerPrice.add(multiply1);
servicePrice=servicePrice.add(multiply2);
}
if(!"0".equals(cacheOrderData.getT4PowerQuantity().toString())){
BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(t4powerFee).setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(t4serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP);
powerPrice=powerPrice.add(multiply1);
servicePrice=servicePrice.add(multiply2);
}
powerPrice =powerPrice.setScale(2,BigDecimal.ROUND_HALF_UP);
//总服务费
servicePrice =servicePrice.setScale(2,BigDecimal.ROUND_HALF_UP);
message.put("powerPriceTotal",powerPrice);
message.put("servicePriceTotal",servicePrice);
chargeOrder.setStartTime(DateUtil.parse(cacheOrderData.getStartTime()));
chargeOrder.setEndTime(DateUtil.parse(cacheOrderData.getEndTime()));
if(cacheOrderData.getStartSoc() !=null){
chargeOrder.setStartSoc(cacheOrderData.getStartSoc()+"");
}
if(cacheOrderData.getEndTime() !=null){
chargeOrder.setEndSoc(cacheOrderData.getEndSoc()+"");
}
if(cacheOrderData.getTotalPowerQuantity() !=null){
BigDecimal chargingDegree1 = new BigDecimal(cacheOrderData.getTotalPowerQuantity()).divide(bigDecimal,2,BigDecimal.ROUND_HALF_UP);
chargeOrder.setChargingDegree(chargingDegree1);
}
chargeOrder.setAmountCharged(money);
}else{
if (cacheMap.get("startTime")!=null && cacheMap.get("lastOrderTime")!=null && cacheMap.get("totalPower")!=null && cacheMap.get("totalMoney")!=null) {
chargeOrder.setStartTime(DateUtil.parse(cacheMap.get("startTime").toString()));
chargeOrder.setStartTime(DateUtil.parse(cacheMap.get("lastOrderTime").toString()));
String totalPower = cacheMap.get("totalPower").toString();
String totalPowerSub = totalPower.substring(0, totalPower.length() - 1);
chargeOrder.setChargingDegree(new BigDecimal(totalPowerSub));
}else{
//没有获取到时间 1.获取缓存数据 2.缓存没有获取数据库数据
List<CacheRealtimeData> list = (List<CacheRealtimeData>) cacheMap.get("realtimeDataList");
CacheRealtimeData startData =new CacheRealtimeData();
@ -202,65 +290,37 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
}
}
}
Long rateModelId = chargeOrder.getRateModelId();
if(endData !=null && endData.getAmountCharged() !=null && startData.getChargingTime()>0){
message.put("soc",endData.getSoc());
//最后一祯时间
Date endTime = DateUtil.parse(endData.getCreateTime());
Date startTime =DateUtil.parse(startData.getCreateTime());
//充电时长
Long tiem = (endTime.getTime() - startTime.getTime()) / 1000;
if (tiem > 3600) {
long hours = tiem / 3600;
double mins = (double) ((tiem - (hours * 3600)) / 60);
message.put("chargingTime",hours + "" + new BigDecimal(mins).setScale(0) + "");
chargeOrder.setChargingTime(hours + "" + new BigDecimal(mins).setScale(0) + "");
} else {
double mins = (double) (tiem / 60);
message.put("chargingTime",new BigDecimal(mins).setScale(0) + "");
chargeOrder.setChargingTime(new BigDecimal(mins).setScale(0) + "");
}
BigDecimal chargingDegree = new BigDecimal(endData.getChargingDegree()).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP);
message.put("chargingDegree",chargingDegree);
chargeOrder.setStartTime(startTime);
chargeOrder.setEndTime(endTime);
chargeOrder.setStartSoc(startData.getSoc().toString());
chargeOrder.setEndSoc(endData.getSoc().toString());
chargeOrder.setChargingTimeNumber(tiem);
chargeOrder.setChargingDegree(chargingDegree);
chargeOrder.setType("平台停止");
chargeOrder.setAmountCharged(new BigDecimal(endData.getAmountCharged()).divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP));
}else{
//当没有缓存数据时查询数据库
XhpcRealTimeOrder startRealTimeOrder = xhpcRealTimeOrderMapper.getChargingOrderId(chargeOrder.getChargeOrderId(), 1);
if(startRealTimeOrder ==null){
message.put("powerPriceTotal",0);
message.put("servicePriceTotal",0);
return message;
}
XhpcRealTimeOrder endRealTimeOrder = xhpcRealTimeOrderMapper.getChargingOrderId(chargeOrder.getChargeOrderId(), 2);
message.put("soc",endRealTimeOrder.getSoc());
//最后一祯时间
Date endTime = endRealTimeOrder.getCreateTime();
Date startTime = startRealTimeOrder.getCreateTime();
BigDecimal chargingDegree = endRealTimeOrder.getChargingDegree();
message.put("chargingDegree",chargingDegree);
chargeOrder.setChargingTime(endRealTimeOrder.getChargingTime());
message.put("chargingTime",endRealTimeOrder.getChargingTime());
if(startRealTimeOrder.getRealTimeOrderId().equals(startRealTimeOrder.getRealTimeOrderId())){
message.put("powerPriceTotal",0);
message.put("servicePriceTotal",0);
return message;
}
chargeOrder.setStartTime(startTime);
chargeOrder.setEndTime(endTime);
chargeOrder.setStartSoc(startRealTimeOrder.getSoc());
@ -272,11 +332,10 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
chargeOrder.setChargingTimeNumber(0L);
}
chargeOrder.setChargingDegree(chargingDegree);
chargeOrder.setType("平台停止充电");
chargeOrder.setAmountCharged(endRealTimeOrder.getAmountCharged());
}
}
Date startTime2 = chargeOrder.getStartTime();
Date updateTime2 = chargeOrder.getEndTime();
BigDecimal amountCharged = chargeOrder.getAmountCharged();
@ -302,7 +361,6 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime3), DateUtil.formatTime(updateTime2), powerPriceTotal, divide);
System.out.println(">>>>>>跨天后>>>>>>>"+powerPriceTotal);
}
//算服务费和电费
if(amountCharged.compareTo(powerPriceTotal)>-1){
BigDecimal servicePriceTotal =amountCharged.subtract(powerPriceTotal);
@ -312,11 +370,34 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe
message.put("powerPriceTotal",amountCharged);
message.put("servicePriceTotal",0);
}
}
message.put("chargingDegree",chargeOrder.getChargingDegree());
Long tiem = (chargeOrder.getEndTime().getTime() - chargeOrder.getStartTime().getTime()) / 1000;
if (tiem > 3600) {
long hours = tiem / 3600;
double mins = (double) ((tiem - (hours * 3600)) / 60);
message.put("chargingTime",hours + "" + new BigDecimal(mins).setScale(0) + "");
chargeOrder.setChargingTime(hours + "" + new BigDecimal(mins).setScale(0) + "");
} else {
double mins = (double) (tiem / 60);
message.put("chargingTime",new BigDecimal(mins).setScale(0) + "");
chargeOrder.setChargingTime(new BigDecimal(mins).setScale(0) + "");
}
message.put("startSoc",chargeOrder.getStartSoc());
message.put("endSoc",chargeOrder.getEndSoc());
if(cacheMap.get("stopReasonHex") !=null && "".equals(cacheMap.get("stopReasonHex").toString())){
chargeOrder.setType(cacheMap.get("stopReasonHex").toString());
}else{
chargeOrder.setType("平台停止充电");
}
//修改充电订单
xhpcChargeOrderService.updateXhpcChargeOrder(chargeOrder);
}catch (Exception e){
e.printStackTrace();
logger.info("======================异常订单审核异常=======================");
message.put("powerPriceTotal",0);
message.put("servicePriceTotal",0);
}