开始充电增加soc

This commit is contained in:
yuyang 2021-08-26 19:35:19 +08:00
parent 9fbf1bea1f
commit e20d918bd6
17 changed files with 256 additions and 34 deletions

View File

@ -109,9 +109,10 @@ public class HxpcPileOrderController extends BaseController {
Integer code = 500;
Long userId = update(0, remark, orderNo, 1);
Map<String, Object> map = new HashMap<>();
HxpcChargeOrder hxpcChargeOrder = hxpcChargeOrderService.getSerialNumberMessage(orderNo);
map.put("userId", userId);
if (status == 1) {
hxpcChargeOrder.setStatus(0);
map.put("message", "停止充电成功");
} else if(status==2){
//停止充电失败
@ -119,10 +120,23 @@ public class HxpcPileOrderController extends BaseController {
map.put("message", remark);
}else if(status==3 || status==4){
//订单定位异常,修改充电订单状态
HxpcChargeOrder hxpcChargeOrder = hxpcChargeOrderService.getSerialNumberMessage(orderNo);
if(status==3){
hxpcChargeOrder.setStatus(2);
hxpcChargeOrder.setUpdateTime(new Date());
//获取实时订单
Map<String, Object> cacheMap = redisService.getCacheMap("order:"+orderNo);
List<CacheRealtimeData> list = (List<CacheRealtimeData>)cacheMap.get("realtimeDataList");
if(list !=null && list.size()>0){
int number =0;
if(list.size()!=1){
number=list.size()-1;
}
BigDecimal decimal = new BigDecimal(10000);
CacheRealtimeData cacheRealtimeData =list.get(number);
hxpcChargeOrder.setChargingDegree(new BigDecimal(cacheRealtimeData.getChargingDegree()).divide(decimal));
hxpcChargeOrder.setChargingTimeNumber(cacheRealtimeData.getChargingTime());
hxpcChargeOrder.setAmountCharged(new BigDecimal(cacheRealtimeData.getAmountCharged()).divide(decimal));
}
}else{
if(hxpcChargeOrder.getStatus()==1 || hxpcChargeOrder.getStatus()==3){
//不修改订单
@ -228,8 +242,8 @@ public class HxpcPileOrderController extends BaseController {
}
hxpcChargeOrder.setChargingTimeNumber(tiem.intValue());
BigDecimal divide = new BigDecimal(cacheOrderData.getTotalPowerQuantity()).divide(bigDecimal);
hxpcChargeOrder.setChargingDegree(divide.toString());
hxpcChargeOrder.setAmountCharged(money.toString());
hxpcChargeOrder.setChargingDegree(divide.divide(bigDecimal));
hxpcChargeOrder.setAmountCharged(money.divide(bigDecimal));
String stopReason = cacheOrderData.getStopReason();
hxpcChargeOrder.setErroRemark(stopReason);
hxpcChargeOrder.setUpdateTime(date);

View File

@ -84,9 +84,12 @@ public class XhpcRealTimeOrderController extends BaseController {
}
/**
*
*异常订单审核
*/
@GetMapping("/getExamine")
public AjaxResult getExamine(@RequestParam Long chargingOrderId){
return xhpcRealTimeOrderService.getExamine(chargingOrderId);
}
}

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.xhpc.common.core.web.domain.BaseEntity;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
/**
@ -86,7 +87,7 @@ public class HxpcChargeOrder extends BaseEntity {
private Integer chargingTimeNumber;
/** 充电度数 */
private String chargingDegree;
private BigDecimal chargingDegree;
/** 0桩停止充电 1 远程停止充电 */
private Integer type;
@ -95,7 +96,7 @@ public class HxpcChargeOrder extends BaseEntity {
private String erroRemark;
/** 总金额 */
private String amountCharged;
private BigDecimal amountCharged;
/** 功率 */
private String power;
@ -250,12 +251,12 @@ public class HxpcChargeOrder extends BaseEntity {
this.chargingTime = chargingTime;
}
public String getChargingDegree() {
public BigDecimal getChargingDegree() {
return chargingDegree;
}
public void setChargingDegree(String chargingDegree) {
public void setChargingDegree(BigDecimal chargingDegree) {
this.chargingDegree = chargingDegree;
}
@ -290,12 +291,12 @@ public class HxpcChargeOrder extends BaseEntity {
this.erroRemark = erroRemark;
}
public String getAmountCharged() {
public BigDecimal getAmountCharged() {
return amountCharged;
}
public void setAmountCharged(String amountCharged) {
public void setAmountCharged(BigDecimal amountCharged) {
this.amountCharged = amountCharged;
}

View File

@ -63,9 +63,15 @@ public class XhpcRealTimeOrder extends BaseEntity {
*/
private Integer maxTemperature;
/**
* 累计充电时间
* 累计充电时间(时间)
*/
private String chargingTime;
/**
* 累计充电时间整数
*/
private Integer chargingTimeNumber;
/**
* 剩余时间
*/
@ -336,4 +342,14 @@ public class XhpcRealTimeOrder extends BaseEntity {
this.gunNumber = gunNumber;
}
public Integer getChargingTimeNumber() {
return chargingTimeNumber;
}
public void setChargingTimeNumber(Integer chargingTimeNumber) {
this.chargingTimeNumber = chargingTimeNumber;
}
}

View File

@ -107,4 +107,11 @@ public interface XhpcRealTimeOrderMapper {
void deleteChargeOrderSoc(@Param("chargingOrderId")Long chargingOrderId);
void deleteChargeOrderCurrent(@Param("chargingOrderId")Long chargingOrderId);
/**
* 获取最后一条实时数据
*/
XhpcRealTimeOrder getChargingOrderId(@Param("chargingOrderId")Long chargingOrderId);
}

View File

@ -116,4 +116,7 @@ public interface IHxpcChargeOrderService {
* @return
*/
int addUserAccountStatement(Long userId, BigDecimal amount, BigDecimal remainingSum, Long chargeOrderId, Integer type, Date date);
HxpcChargeOrder getChargingOrderId(Long chargingOrderId);
}

View File

@ -50,4 +50,13 @@ public interface IXhpcHistoryOrderService {
*/
AjaxResult getById(Long historyOrderId);
/**
* 获取费率时段
* @param startTime 开始时间
* @param endTime 结束时间
* @param rateModelId 计费模型
* @return
*/
List<Map<String,Object>> getReatTimeList(String startTime,String endTime,Long rateModelId);
}

View File

@ -88,4 +88,13 @@ public interface IXhpcRealTimeOrderService {
* @return
*/
int addVoltage(XhpcChargeOrderVoltage xhpcChargeOrderVoltage);
/**
* 审核详情
* @param chargingOrderId
* @return
*/
AjaxResult getExamine(Long chargingOrderId);
}

View File

@ -144,6 +144,28 @@ public class HxpcChargeOrderServiceImpl implements IHxpcChargeOrderService {
startChargingData.setGunId(xhpcTerminal.getSerialNumber().substring(14));
startChargingData.setBalance(Double.valueOf(balance).intValue());
startChargingData.setVersion("0A");
//用户平台最小的
int number =0;
if(!"".equals(userMessage.get("soc")) && userMessage.get("soc") !=null && !"".equals(userMessage.get("soc"))){
number =Integer.parseInt(userMessage.get("soc").toString());
}
//平台
String soc = redisService.getCacheObject("global:SOC");
if(!"".equals(soc) && soc!=null){
if(Integer.parseInt(soc)-number<0){
number=Integer.parseInt(soc);
}
}
Map<String, Object> operatorMessage = hxpcChargeOrderMapper.getOperatorMessage(xhpcTerminal.getChargingStationId());
if(operatorMessage !=null && operatorMessage.get("soc") !=null && !"".equals(operatorMessage.get("soc"))){
if(Integer.parseInt(operatorMessage.get("soc").toString())-number<0){
number=Integer.parseInt(operatorMessage.get("soc").toString());
}
}
if(number !=0){
startChargingData.setSoc(number);
}
R r1 = powerPileService.startCharging(startChargingData);
logger.info("<<<<<<<<<<<<<<<<<<<<<<<<充电返回>>>>>>>>>>>>>>>>>");
logger.info("<<<<<<<<<<<<<<<<<<<<<<<<"+r1.getCode()+">>>>>>>>>>>>>>>>>");
@ -249,5 +271,10 @@ public class HxpcChargeOrderServiceImpl implements IHxpcChargeOrderService {
return hxpcChargeOrderMapper.addUserAccountStatement(userId, amount, remainingSum, chargeOrderId, type, date);
}
@Override
public HxpcChargeOrder getChargingOrderId(Long chargingOrderId) {
return hxpcChargeOrderMapper.getChargingOrderId(chargingOrderId);
}
}

View File

@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
/**
@ -64,6 +65,11 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService {
return AjaxResult.success(byId);
}
@Override
public List<Map<String, Object>> getReatTimeList(String startTime, String endTime, Long rateModelId) {
return xhpcHistoryOrderMapper.getReatTimeList(startTime, endTime, rateModelId);
}
/**
* 历史信息费率时段
*/
@ -80,8 +86,8 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService {
String endTime = DateUtil.formatTime(chargeOrder.getEndTime());
//每分钟充电度数=累计时间/60
Integer chargingTimeNumber = chargeOrder.getChargingTimeNumber();
double s = (double) (chargingTimeNumber / 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);
@ -91,7 +97,7 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService {
if(size==1){
BigDecimal powerFee = new BigDecimal(reatTimeList.get(0).get("powerFee").toString());
powerPriceTotal.add(powerFee);
BigDecimal servicePrice = new BigDecimal(reatTimeList.get(0).get("servicePrice").toString());
BigDecimal servicePrice = new BigDecimal(reatTimeList.get(0).get("serviceFee").toString());
servicePriceTotal.add(servicePrice);
map1.put("time",startTime+"-"+endTime);
map1.put("powerPrice",powerFee);
@ -103,7 +109,7 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService {
for (int i = 0; i <reatTimeList.size() ; i++) {
Map<String, Object> objectMap = reatTimeList.get(i);
BigDecimal powerPrice =new BigDecimal(objectMap.get("powerFee").toString());
BigDecimal servicePrice =new BigDecimal(objectMap.get("servicePrice").toString());
BigDecimal servicePrice =new BigDecimal(objectMap.get("serviceFee").toString());
String startTime1 = objectMap.get("startTime").toString();
String endTime1 = objectMap.get("endTime").toString();
powerPriceTotal.add(powerPrice);
@ -134,10 +140,10 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService {
return map;
}
private Map<String, Object> getRateTimeList(String startTime,String endTime,double s,BigDecimal powerPrice,BigDecimal servicePrice){
private Map<String, Object> getRateTimeList(String startTime,String endTime,BigDecimal s,BigDecimal powerPrice,BigDecimal servicePrice){
Map<String, Object> map =new HashMap<>();
double v = (DateUtil.parse(endTime).getTime() - DateUtil.parse(startTime).getTime()) * s;
BigDecimal multiply = powerPrice.add(servicePrice).multiply(new BigDecimal(v));
BigDecimal v = new BigDecimal((DateUtil.parse(endTime).getTime() - DateUtil.parse(startTime).getTime())%60000).multiply(s);
BigDecimal multiply = powerPrice.add(servicePrice).multiply(v).setScale(2, RoundingMode.HALF_UP);
map.put("time",startTime+"-"+endTime);
map.put("powerPrice",powerPrice);
map.put("servicePrice",servicePrice);

View File

@ -1,19 +1,20 @@
package com.xhpc.order.service.impl;
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.XhpcChargeOrderCurrent;
import com.xhpc.order.domain.XhpcChargeOrderSoc;
import com.xhpc.order.domain.XhpcChargeOrderVoltage;
import com.xhpc.order.domain.XhpcRealTimeOrder;
import com.xhpc.order.domain.*;
import com.xhpc.order.mapper.XhpcRealTimeOrderMapper;
import com.xhpc.order.service.IHxpcChargeOrderService;
import com.xhpc.order.service.IXhpcHistoryOrderService;
import com.xhpc.order.service.IXhpcRealTimeOrderService;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
/**
* @author yuyang
@ -25,6 +26,11 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
@Autowired
private XhpcRealTimeOrderMapper xhpcRealTimeOrderMapper;
@Autowired
private IHxpcChargeOrderService hxpcChargeOrderService;
@Autowired
private IXhpcHistoryOrderService xhpcHistoryOrderService;
@Override
public List<Map<String, Object>> list(String phone, String transactionNumber, Integer source, String chargingStationName, String terminalName, Long operatorId, String startTime, String endTime,Integer status,Long userId,Integer type) {
@ -82,6 +88,72 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
return xhpcRealTimeOrderMapper.addVoltage(xhpcChargeOrderVoltage);
}
@Override
public AjaxResult getExamine(Long chargingOrderId) {
//获取开始充电时间结束时间计费模型充电度数已充金额
HxpcChargeOrder chargeOrder = hxpcChargeOrderService.getChargingOrderId(chargingOrderId);
String startTime = DateUtil.formatTime(chargeOrder.getStartTime());
String endTime = DateUtil.formatTime(chargeOrder.getEndTime());
Long rateModelId = chargeOrder.getRateModelId();
BigDecimal chargingDegree =chargeOrder.getChargingDegree();
BigDecimal amountCharged = chargeOrder.getAmountCharged();
//每分钟充电度数=累计时间/60
BigDecimal s = chargingDegree.divide(new BigDecimal(60), 4, BigDecimal.ROUND_HALF_UP);
BigDecimal powerPriceTotal =new BigDecimal(0);
//1时间没有跨天
long betweenDay = DateUtil.between(chargeOrder.getStartTime(), chargeOrder.getEndTime(), DateUnit.DAY);
if(betweenDay==0){
}else{
//跨天
}
//获取费率时段集合
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(s);
}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,s,powerFee,powerPriceTotal);
}else{
if(size==2){
powerPriceTotal=getRateTimeList(startTime1,endTime,s,powerFee,powerPriceTotal);
}else{
//三个时段以上
if(i<size-1){
powerPriceTotal=getRateTimeList(startTime1,endTime1,s,powerFee,powerPriceTotal);
}else{
powerPriceTotal=getRateTimeList(startTime1,endTime,s,powerFee,powerPriceTotal);
}
}
}
}
}
}
//算服务费和电费
BigDecimal servicePriceTotal =amountCharged.subtract(powerPriceTotal);
Map<String, Object> message = new HashMap<>();
message.put("powerPriceTotal",powerPriceTotal);
message.put("servicePriceTotal",servicePriceTotal);
return AjaxResult.success(message);
}
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, RoundingMode.HALF_UP);
powerPriceTotal = powerPriceTotal.add(decimal.multiply(powerFee).multiply(s));
return powerPriceTotal.setScale(2, RoundingMode.HALF_UP);
}
@Override
public void deleteRealTimeOrder(Long chargingOrderId) {
xhpcRealTimeOrderMapper.deleteRealTimeOrder(chargingOrderId);
@ -89,4 +161,5 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
xhpcRealTimeOrderMapper.deleteChargeOrderSoc(chargingOrderId);
xhpcRealTimeOrderMapper.deleteChargeVoltage(chargingOrderId);
}
}

View File

@ -87,6 +87,7 @@
app_user_id as appUserId,
balance as balance,
phone as phone,
soc as soc,
is_refund_application as isRefundApplication
from xhpc_app_user
where del_flag=0 and app_user_id=#{userId}
@ -296,6 +297,7 @@
select
operator_id as operatorId,
commission_type as commissionType,
soc as soc,
platform_commission_rate as platformCommissionRate,
maintenance_commission_rate as maintenanceCommissionRate
from xhpc_operator where operator_id=(select operator_id from xhpc_charging_station where charging_station_id=#{chargingStationId})

View File

@ -456,7 +456,7 @@
left join xhpc_rate ra on rt.rate_id =ra.rate_id
where rt.rate_model_id=#{rateModelId}
and rt.end_time &gt;= #{startTime}
and rt.start_time &lt;= #{startTime}
and rt.start_time &lt;= #{endTime}
</select>
<select id="getById" resultType="map">

View File

@ -19,6 +19,7 @@
<result column="soc" property="soc"/>
<result column="max_temperature" property="maxTemperature"/>
<result column="charging_time" property="chargingTime"/>
<result column="charging_time_number" property="chargingTimeNumber"/>
<result column="remaining_time" property="remainingTime"/>
<result column="charging_degree" property="chargingDegree"/>
<result column="loss_charging_degree" property="lossChargingDegree"/>
@ -114,7 +115,10 @@
user_id,
</if>
<if test="null != chargingStationId ">
charging_station_id
charging_station_id,
</if>
<if test="null != chargingTimeNumber ">
charging_time_number
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
@ -194,7 +198,10 @@
#{userId},
</if>
<if test="null != chargingStationId ">
#{chargingStationId}
#{chargingStationId},
</if>
<if test="null != chargingTimeNumber ">
#{chargingTimeNumber}
</if>
</trim>
</insert>
@ -457,6 +464,7 @@
ter.name as terminalName,
op.operator_id as operatorId,
op.name as operatorName,
cp.serial_number as pileSerialNumber,
cp.power as power,
cp.type as type,
ro.soc as soc,
@ -466,13 +474,15 @@
ro.charging_time as chargingTime,
co.source as source,
co.internet_serial_number as internetSerialNumber,
co.erro_remark as erroRemark,
ro.amount_charged as amountCharged,
(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
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
left join xhpc_operator as op on op.operator_id = ct.operator_id
left join xhpc_terminal as ter on ter.serial_number = ro.gun_number
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 ro.real_time_order_id=#{realTimeOrderId}
</select>
@ -534,4 +544,9 @@
<delete id="deleteChargeOrderCurrent">
delete from xhpc_charge_order_voltage where charge_order_id=#{chargingOrderId}
</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>
</mapper>

View File

@ -77,6 +77,12 @@ public class XhpcAppUser extends BaseEntity {
*/
private String delFlag;
/**
* 用户设置的SOC
*/
private Integer soc;
public Long getAppUserId() {
return appUserId;
}
@ -172,4 +178,15 @@ public class XhpcAppUser extends BaseEntity {
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public Integer getSoc() {
return soc;
}
public void setSoc(Integer soc) {
this.soc = soc;
}
}

View File

@ -77,6 +77,8 @@ public class XhpcAppUser extends BaseEntity {
*/
private String delFlag;
private Integer soc;
public Long getAppUserId() {
return appUserId;
}
@ -172,4 +174,15 @@ public class XhpcAppUser extends BaseEntity {
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public Integer getSoc() {
return soc;
}
public void setSoc(Integer soc) {
this.soc = soc;
}
}

View File

@ -22,6 +22,7 @@
<result column="update_by" property="updateBy"/>
<result column="update_time" property="updateTime"/>
<result column="remark" property="remark"/>
<result column="soc" property="soc"/>
</resultMap>
<insert id="insert" parameterType="com.xhpc.user.domain.XhpcAppUser" useGeneratedKeys="true"
@ -77,7 +78,10 @@
update_time,
</if>
<if test="null != remark and '' != remark">
remark
remark,
</if>
<if test="null != soc and '' != soc">
soc
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
@ -130,7 +134,10 @@
#{updateTime},
</if>
<if test="null != remark and '' != remark">
#{remark}
#{remark},
</if>
<if test="null != soc and '' != soc">
#{soc}
</if>
</trim>
</insert>