订单管理增加流量方显示

This commit is contained in:
yuyang 2021-11-22 18:53:46 +08:00
parent 343a45b2ee
commit db4b92521e
6 changed files with 213 additions and 127 deletions

View File

@ -74,7 +74,6 @@ public class XhpcPileOrderController extends BaseController {
logger.info("桩启动回调接口>>>>>状态:"+status+"备注++"+"remark"+"订单号"+orderNo);
//解析订单编号
//String s1 = orderNo.substring(6);
Long userId =0L;
Integer code =200;
if (status == 1) {
@ -90,7 +89,10 @@ public class XhpcPileOrderController extends BaseController {
JSONObject json = new JSONObject(map);
logger.info("桩启动回调接口>>>>>json"+json.toString());
//消息对了内容
XhpcChargeOrder xhpcChargeOrder = xhpcChargeOrderService.getSerialNumberMessage(orderNo);
if(xhpcChargeOrder.getSource()==0){
webSocketService.getMessage(userId+"",json.toString());
}
return R.ok();
}
@ -107,7 +109,6 @@ public class XhpcPileOrderController extends BaseController {
logger.info("桩停止回调接口>>>>>状态:"+status+"备注++"+"remark"+"订单号"+orderNo);
//解析订单编号
//String s1 = orderNo.substring(6);
Integer code = 500;
Long userId=0L;
Map<String, Object> map = new HashMap<>();
@ -194,7 +195,7 @@ public class XhpcPileOrderController extends BaseController {
CacheRealtimeData cacheRealtimeData = redisService.getCacheObject("order:" + orderNo + ".lord");
XhpcChargeOrder xhpcChargeOrder = xhpcChargeOrderService.getSerialNumberMessage(orderNo);
if(xhpcChargeOrder.getSource()==0){
Long userId = xhpcChargeOrder.getUserId();
try {
Date date = new Date();
@ -202,19 +203,23 @@ public class XhpcPileOrderController extends BaseController {
xhpcChargeOrder.setUpdateTime(date);
xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder);
Map<String, Object> map = xhpcRealTimeOrderService.addOrderTime(cacheRealtimeData, xhpcChargeOrder, orderNo, 1);
if(xhpcChargeOrder.getSource()==0){
JSONObject json = new JSONObject(map);
//消息对了内容
webSocketService.getMessage(userId+"",json.toString());
logger.info("桩实时数据发送WebSocket成功>>>>>orderNo" + orderNo);
}
} catch (Exception e) {
Map<String, Object> map = new HashMap<>();
map.put("code", 500);
map.put("userId", xhpcChargeOrder.getUserId());
JSONObject json = new JSONObject(map);
if(xhpcChargeOrder.getSource()==0){
//消息对了内容
webSocketService.getMessage(userId+"",json.toString());
return R.fail(500,"无实时数据");
}
return R.fail(500,"无实时数据");
}
return R.ok();
}

View File

@ -921,28 +921,28 @@ public class XhpcHistoryOrderController extends BaseController {
}
public static void main(String[] args) {
String dateStr = "2017-03-01 20:33:23";
Date date = DateUtil.parse(dateStr);
String dateStr1 = "2017-03-01 22:33:23";
Date date1 = DateUtil.parse(dateStr1);
System.out.println(date1.getTime()-date.getTime());
DateTime startTime = DateUtil.parse("2021-10-19 17:35:19");
DateTime endTime = DateUtil.parse("2021-10-19 17:36:02");
//充电时长
Long tiem = (endTime.getTime() - startTime.getTime())/1000;
System.out.println(">>>>"+tiem);
BigDecimal decimal = new BigDecimal(72);
BigDecimal decimal1 = new BigDecimal(3600);
System.out.println(decimal.divide(decimal1,2,BigDecimal.ROUND_DOWN));
// String dateStr = "2017-03-01 20:33:23";
// Date date = DateUtil.parse(dateStr);
//
//
// String dateStr1 = "2017-03-01 22:33:23";
// Date date1 = DateUtil.parse(dateStr1);
//
// System.out.println(date1.getTime()-date.getTime());
//
//
// DateTime startTime = DateUtil.parse("2021-10-19 17:35:19");
// DateTime endTime = DateUtil.parse("2021-10-19 17:36:02");
//
// //充电时长
// Long tiem = (endTime.getTime() - startTime.getTime())/1000;
// System.out.println(">>>>"+tiem);
//
//
// BigDecimal decimal = new BigDecimal(72);
// BigDecimal decimal1 = new BigDecimal(3600);
//
// System.out.println(decimal.divide(decimal1,2,BigDecimal.ROUND_DOWN));
}
}

View File

@ -109,9 +109,9 @@ public interface XhpcRealTimeOrderMapper {
void deleteChargeOrderCurrent(@Param("chargingOrderId")Long chargingOrderId);
/**
* 获取最后一条实时数据
* 获取一条实时数据
*/
XhpcRealTimeOrder getChargingOrderId(@Param("chargingOrderId")Long chargingOrderId);
XhpcRealTimeOrder getChargingOrderId(@Param("chargingOrderId")Long chargingOrderId,@Param("type")Integer type);
Map<String,Object> getChargeOrderById(@Param("chargingOrderId")Long chargingOrderId);

View File

@ -149,9 +149,88 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
if(message ==null || message.get("chargeOrderId") ==null){
return AjaxResult.success(new HashMap<>());
}
//获取开始充电时间结束时间计费模型充电度数已充金额
XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getChargingOrderId(Long.parseLong(message.get("chargeOrderId").toString()));
//获取该订单最后一条实时数据
Map<String, Object> cacheMap = redisService.getCacheMap("order:" + chargeOrder.getSerialNumber());
List<CacheRealtimeData> list = (List<CacheRealtimeData>) cacheMap.get("realtimeDataList");
CacheRealtimeData startData =new CacheRealtimeData();
CacheRealtimeData endData =new CacheRealtimeData();
if (list != null && list.size() > 0) {
endData =list.get(list.size()-1);
for (int i = 0; i <list.size() ; i++) {
startData =list.get(i);
if(startData.getSoc()>0){
break;
}
}
}
Long rateModelId = chargeOrder.getRateModelId();
if(endData !=null && endData.getAmountCharged() !=null){
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) + "");
}
Integer chargingDegree = endData.getChargingDegree();
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(new BigDecimal(chargingDegree));
chargeOrder.setType(0);
chargeOrder.setAmountCharged(new BigDecimal(endData.getAmountCharged()).divide(new BigDecimal(10000),2,BigDecimal.ROUND_DOWN));
}else{
//当没有缓存数据时查询数据库
XhpcRealTimeOrder startRealTimeOrder = xhpcRealTimeOrderMapper.getChargingOrderId(chargeOrder.getChargeOrderId(), 1);
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());
chargeOrder.setStartTime(startTime);
chargeOrder.setEndTime(endTime);
chargeOrder.setStartSoc(startRealTimeOrder.getSoc());
chargeOrder.setEndSoc(endRealTimeOrder.getSoc());
Integer chargingTimeNumber = endRealTimeOrder.getChargingTimeNumber();
if(chargingTimeNumber>0){
chargeOrder.setChargingTimeNumber(Long.valueOf(chargingTimeNumber*60));
}else{
chargeOrder.setChargingTimeNumber(0L);
}
chargeOrder.setChargingDegree(chargingDegree);
chargeOrder.setType(0);
chargeOrder.setAmountCharged(endRealTimeOrder.getAmountCharged());
}
Date startTime2 = chargeOrder.getStartTime();
Date updateTime2 = chargeOrder.getEndTime();
BigDecimal amountCharged = chargeOrder.getAmountCharged();
@ -161,27 +240,38 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
//1时间没有跨天
DateTime parse = DateUtil.parse(DateUtil.format(startTime2, "yyyy-MM-dd"), "yyyy-MM-dd");
DateTime parse1 = DateUtil.parse(DateUtil.format(updateTime2, "yyyy-MM-dd"), "yyyy-MM-dd");
System.out.println(parse.toString());
System.out.println(parse.toString());
//每分钟多少度电
BigDecimal decimal = new BigDecimal((updateTime2.getTime() - startTime2.getTime())).divide(new BigDecimal(60000),2,BigDecimal.ROUND_DOWN);
BigDecimal divide = chargingDegree.divide(decimal,2,BigDecimal.ROUND_DOWN);
long betweenDay = DateUtil.between(parse,parse1, DateUnit.DAY);
if(betweenDay==0){
powerPriceTotal = getBigDecimal(rateModelId, startTime2, updateTime2, chargingDegree, powerPriceTotal);
powerPriceTotal = getBigDecimal(rateModelId,DateUtil.formatTime(startTime2), DateUtil.formatTime(updateTime2), powerPriceTotal, divide);
}else{
//跨天
Date updateTime = DateUtil.endOfDay(startTime2);
powerPriceTotal = getBigDecimal(rateModelId, startTime2, updateTime, chargingDegree, powerPriceTotal);
powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime2), "23:59:59", chargingDegree, powerPriceTotal);
//明天
DateTime tomorrow = DateUtil.offsetDay(startTime2,1);
Date startTime3 = DateUtil.beginOfDay(tomorrow);
powerPriceTotal = getBigDecimal(rateModelId, startTime3, updateTime2, chargingDegree, powerPriceTotal);
powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime3), DateUtil.formatTime(updateTime2), chargingDegree, powerPriceTotal);
}
//算服务费和电费
if(amountCharged.compareTo(powerPriceTotal)==1){
BigDecimal servicePriceTotal =amountCharged.subtract(powerPriceTotal);
message.put("powerPriceTotal",powerPriceTotal);
message.put("servicePriceTotal",servicePriceTotal);
}else{
message.put("powerPriceTotal",amountCharged);
message.put("servicePriceTotal",0);
}
//修改充电订单
xhpcChargeOrderService.updateXhpcChargeOrder(chargeOrder);
return AjaxResult.success(message);
}
@Override
public AjaxResult getExamine(Long chargingOrderId, BigDecimal powerPrice, BigDecimal servicePrice) {
@ -468,6 +558,12 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
}catch (Exception e){
logger.info("<<<<<<<<<<<<<<<<发送短信失败>>>>>>>>>>>>>>>>>");
}
}
xhpcHistoryOrderService.insert(xhpcHistoryOrder);
xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder);
// 另起线程处理业务上传redis数据
executorService.execute(new Runnable() {
@Override
@ -475,63 +571,9 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
addPileEndOrder(xhpcHistoryOrder, xhpcChargeOrder, xhpcChargeOrder.getSerialNumber(),1);
}
});
}
xhpcHistoryOrderService.insert(xhpcHistoryOrder);
xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder);
// redisService.deleteObject("pushOrder:"+xhpcChargeOrder.getSerialNumber());
}
private BigDecimal getBigDecimal(Long rateModelId, Date startTime2, Date updateTime2, BigDecimal chargingDegree, BigDecimal powerPriceTotal) {
//算出相差时间,
double time = (updateTime2.getTime()-startTime2.getTime())/60000;
BigDecimal decimal = new BigDecimal(time).setScale(2);
//每分钟多少度
BigDecimal degree =chargingDegree.divide(decimal,2,BigDecimal.ROUND_DOWN);
//获取费率时间段
String startTime = DateUtil.formatTime(startTime2);
String endTime = DateUtil.formatTime(updateTime2);
List<Map<String, Object>> reatTimeList = xhpcHistoryOrderService.getReatTimeList(startTime, endTime, rateModelId);
if(reatTimeList !=null && reatTimeList.size()>0){
int size = reatTimeList.size();
if(size==1){
BigDecimal powerFee = new BigDecimal(reatTimeList.get(0).get("powerFee").toString());
powerPriceTotal = powerFee.multiply(chargingDegree).setScale(2, BigDecimal.ROUND_DOWN);
}else{
for (int i = 0; i <reatTimeList.size() ; i++) {
Map<String, Object> objectMap = reatTimeList.get(i);
BigDecimal powerFee =new BigDecimal(objectMap.get("powerFee").toString());
String startTime1 = objectMap.get("startTime").toString();
String endTime1 = objectMap.get("endTime").toString();
if(i==0){
powerPriceTotal=getRateTimeList(startTime1,endTime,degree,powerFee,powerPriceTotal);
}else{
if(size==2){
powerPriceTotal=getRateTimeList(startTime1,endTime,degree,powerFee,powerPriceTotal);
}else{
//三个时段以上
if(i<size-1){
powerPriceTotal=getRateTimeList(startTime1,endTime1,degree,powerFee,powerPriceTotal);
}else{
powerPriceTotal=getRateTimeList(startTime1,endTime,degree,powerFee,powerPriceTotal);
}
}
}
}
}
}
return powerPriceTotal;
}
private BigDecimal getRateTimeList(String startTime,String endTime,BigDecimal s,BigDecimal powerFee,BigDecimal powerPriceTotal){
BigDecimal decimal = new BigDecimal((DateUtil.parse(endTime).getTime() - DateUtil.parse(startTime).getTime())/60000).setScale(2, BigDecimal.ROUND_DOWN);
powerPriceTotal = powerPriceTotal.add(decimal.multiply(powerFee).multiply(s));
return powerPriceTotal.setScale(2, BigDecimal.ROUND_DOWN);
}
@Override
public void deleteRealTimeOrder(Long chargingOrderId) {
xhpcRealTimeOrderMapper.deleteRealTimeOrder(chargingOrderId);
@ -738,4 +780,24 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
}
return map;
}
private BigDecimal getBigDecimal(Long rateModelId, String startTime, String updateTime, BigDecimal powerPriceTotal, BigDecimal divide) {
List<Map<String, Object>> reatTimeList = xhpcHistoryOrderService.getReatTimeList(startTime,updateTime, rateModelId);
for (int i = 0; i <reatTimeList.size() ; i++) {
Map<String, Object> map = reatTimeList.get(i);
//获取费率
if(reatTimeList.size()==1){
BigDecimal powerFee =new BigDecimal(map.get("powerFee").toString());
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{
BigDecimal powerFee =new BigDecimal(map.get("powerFee").toString());
powerPriceTotal = powerPriceTotal.add(powerFee.multiply(divide).setScale(2, BigDecimal.ROUND_DOWN));
}
}
return powerPriceTotal;
}
}

View File

@ -601,9 +601,11 @@
co.end_time as endTime,
co.update_time as updateTime,
co.source as source,
co.Plate_num as plateNum,
dispute_order_status as disputeOrderStatus,
(SELECT phone FROM xhpc_app_user where app_user_id = co.user_id) as appUserPhone,
(SELECT phone from xhpc_internet_user where internet_user_id = co.user_id) as internetUserPhone
(SELECT phone from xhpc_internet_user where internet_user_id = co.user_id) as internetUserPhone,
(SELECT name from xhpc_internet_user where internet_user_id = co.user_id and co.source =1) as internetName
from xhpc_history_order as ho
left join xhpc_charging_station as ct on ct.charging_station_id = ho.charging_station_id
left join xhpc_operator as op on op.operator_id = ct.operator_id
@ -615,11 +617,14 @@
<if test="type !=null">
and ho.type=#{type}
</if>
<if test="source !=null">
and co.source=#{source}
</if>
<if test="startTime !=null and startTime !=''">
and co.start_time &gt;= #{startTime}
</if>
<if test="endTime !=null and endTime !=''">
and co.start_time &lt;= #{startTime}
and co.start_time &lt;= #{endTime}
</if>
<if test="transactionNumber !=null and transactionNumber !=''">
and ho.serial_number like concat('%', #{transactionNumber}, '%')
@ -652,11 +657,9 @@
</if>
</if>
<if test="status==1">
and co.source =0
and co.charging_station_id in (select charging_station_id from xhpc_charging_station where operator_id=#{userId})
</if>
<if test="status==2">
and co.source =0
and co.charging_station_id in (select charging_station_id from xhpc_user_privilege where user_id=#{userId})
</if>
order by ho.create_time desc
@ -670,13 +673,12 @@
ra.service_fee as serviceFee
from xhpc_rate_time as rt
left join xhpc_rate ra on rt.rate_id =ra.rate_id
where rt.rate_model_id=#{rateModelId}
and (
(rt.start_time &lt;= #{startTime} and replace(rt.end_time, '00:00:00', '23:59:59') &gt;= #{endTime} )
OR
(rt.start_time &lt;= #{startTime} and replace(rt.end_time, '00:00:00', '23:59:59') &gt;= #{startTime} and replace(rt.end_time, '00:00:00', '23:59:59') &gt;= #{endTime} )
OR
(rt.start_time &lt;= #{endTime} and replace(rt.end_time, '00:00:00', '23:59:59') &gt;= #{endTime} )
WHERE
rt.rate_time_id &gt;= (
SELECT rate_time_id FROM xhpc_rate_time WHERE rate_model_id = #{rateModelId} AND start_time &lt;= #{startTime} AND replace(end_time, '00:00:00', '23:59:59') &gt;= #{startTime}
)
AND rt.rate_time_id &lt;= (
SELECT rate_time_id FROM xhpc_rate_time WHERE rate_model_id = #{rateModelId} AND start_time &lt;= #{endTime} AND replace(end_time, '00:00:00', '23:59:59') &gt;= #{endTime}
)
</select>
@ -724,6 +726,8 @@
ed.check_order_seq as sanCheckOrderSeq,
(SELECT phone FROM xhpc_app_user where app_user_id = co.user_id) as appUserPhone,
(SELECT phone from xhpc_internet_user where internet_user_id = co.user_id) as internetUserPhone,
co.Plate_num as plateNum,
(SELECT name from xhpc_internet_user where internet_user_id = co.user_id and co.source =1) as internetName,
case when ho.stop_reason_evcs=40 then "APP远程停止"
when ho.stop_reason_evcs=41 then "SOC达到100%"
when ho.stop_reason_evcs=42 then "充电电量满足设定条件"

View File

@ -392,19 +392,27 @@
co.erro_remark as erroRemark,
co.create_time as createTime,
co.start_time as startTime,
(select real_time_order_id from xhpc_real_time_order where transaction_number =co.serial_number order by real_time_order_id desc limit 1) realTimeOrderId,
(select soc from xhpc_real_time_order where transaction_number =co.serial_number order by real_time_order_id desc limit 1) soc,
(select charging_degree from xhpc_real_time_order where transaction_number =co.serial_number order by real_time_order_id desc limit 1) chargingDegree,
(select charging_time from xhpc_real_time_order where transaction_number =co.serial_number order by real_time_order_id desc limit 1) chargingTime,
(select real_time_order_id from xhpc_real_time_order where co.charge_order_id= charging_order_id order by real_time_order_id desc limit 1) realTimeOrderId,
(select soc from xhpc_real_time_order where co.charge_order_id= charging_order_id order by real_time_order_id desc limit 1) soc,
(select charging_degree from xhpc_real_time_order where co.charge_order_id= charging_order_id order by real_time_order_id desc limit 1) chargingDegree,
(select charging_time from xhpc_real_time_order where co.charge_order_id= charging_order_id order by real_time_order_id desc limit 1) chargingTime,
co.source as source,
co.Plate_num as plateNum,
(SELECT phone FROM xhpc_app_user where app_user_id = co.user_id) as appUserPhone,
(SELECT phone from xhpc_internet_user where internet_user_id = co.user_id) as internetUserPhone
(SELECT phone from xhpc_internet_user where internet_user_id = co.user_id) as internetUserPhone,
(SELECT name from xhpc_internet_user where internet_user_id = co.user_id and co.source =1) as internetName
from xhpc_charge_order co
left join xhpc_charging_station as ct on ct.charging_station_id = co.charging_station_id
left join xhpc_operator as op on op.operator_id = ct.operator_id
left join xhpc_terminal as ter on ter.terminal_id = co.terminal_id
left join xhpc_charging_pile as cp on cp.charging_pile_id = ter.charging_pile_id
where co.status=#{status} and co.del_flag=0
<if test="source !=null">
and co.source =#{source}
</if>
<if test="status !=null">
and co.status =#{status}
</if>
<if test="startTime !=null and startTime !=''">
and co.start_time &gt;= #{startTime}
</if>
@ -445,11 +453,9 @@
</if>
</if>
<if test="type==1">
and co.source =0
and co.charging_station_id in (select charging_station_id from xhpc_charging_station where operator_id=#{userId})
</if>
<if test="type==2">
and co.source =0
and co.charging_station_id in (select charging_station_id from xhpc_user_privilege where user_id=#{userId})
</if>
order by co.create_time desc
@ -479,8 +485,10 @@
co.internet_serial_number as internetSerialNumber,
co.erro_remark as erroRemark,
ro.amount_charged as amountCharged,
co.Plate_num as plateNum,
(SELECT phone FROM xhpc_app_user where app_user_id = co.user_id) as appUserPhone,
(SELECT phone from xhpc_internet_user where internet_user_id = co.user_id) as internetUserPhone
(SELECT phone from xhpc_internet_user where internet_user_id = co.user_id) as internetUserPhone,
(SELECT name from xhpc_internet_user where internet_user_id = co.user_id and co.source=1) as internetName
from xhpc_real_time_order ro
Left join xhpc_charge_order co on co.serial_number = ro.transaction_number
Left join xhpc_charging_station as ct on ct.charging_station_id = ro.charging_station_id
@ -549,7 +557,14 @@
</delete>
<select id="getChargingOrderId" resultMap="XhpcRealTimeOrderMap">
select * from xhpc_real_time_order where charging_order_id=#{chargingOrderId} order by create_time desc limit 1
select * from xhpc_real_time_order where charging_order_id=#{chargingOrderId}
<if test="type ==1">
order by create_time asc
</if>
<if test="type==2">
order by create_time desc
</if>
limit 1
</select>
<select id="getChargeOrderById" resultType="map">