main^2
wubin 11 months ago
commit c0168e0371

@ -156,13 +156,13 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
.build();
//碳大脑
private static String QUEUE_NAME="chongdianzhuang";
private static String QUEUE_NAME = "chongdianzhuang";
//碳大脑
private static String QUEUE_NAME2="chongdianzhuang2";
private static String QUEUE_NAME2 = "chongdianzhuang2";
//德科能源
private static String CHARGEPILE_DATA_PUSH_URL="http://sjeh.dekaiot.com/energy-harbor-charging-pile/chargePile/data/push";
private static String CHARGEPILE_DATA_PUSH_URL = "http://sjeh.dekaiot.com/energy-harbor-charging-pile/chargePile/data/push";
@Override
public Response<NotifyStartChargeResultVO> notification_start_charge_result(Request<NotifyStartChargeResultBO> tReq) throws Exception {
@ -179,7 +179,7 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
return errorResponse.notifyStarChargeErrorResp("业务参数不合法", 4004);
}
String orderNo = equipmentChargeOrderDOMapper.getOrderNoByPlatformOrderNo(platformOrderNo);
removeFreezeUser(orderNo,tReq.getData().getStartChargeSeqStat());
removeFreezeUser(orderNo, tReq.getData().getStartChargeSeqStat());
CommonResponse response = null;
if (state == 4) {
// 轨迹日志
@ -265,7 +265,7 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
resp.setData(notifyEquipChargeStatusVO);
//记录第一次充电中数据
if(orderState == 2) {
if (orderState == 2) {
//存储充电中信息到mongo上
ReverseOrderInfo reverseOrderInfo = new ReverseOrderInfo();
BeanUtil.copyProperties(req, reverseOrderInfo, false);
@ -320,7 +320,7 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
//存储反向互通订单上报账单信息
String orderNo = equipmentChargeOrderDOMapper.getOrderNoByPlatformOrderNo(notifyChargeOrderInfoBO.getStartChargeSeq());
if(StringUtils.isNotBlank(orderNo)) {
if (StringUtils.isNotBlank(orderNo)) {
NotificationChargeOrderInfoReqMongoDO notificationChargeOrderInfoReq = new NotificationChargeOrderInfoReqMongoDO();
BeanUtil.copyProperties(notifyChargeOrderInfoBO, notificationChargeOrderInfoReq, false);
notificationChargeOrderInfoReq.setOrderNo(orderNo);
@ -420,7 +420,7 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
//进行反向订单的平台对账
boolean check = checkReverseOrderPrice(orderDO, notifyChargeOrderInfoBO);
if(!check) {
if (!check) {
equipmentChargeOrderDOMapper.updateByPrimaryKeySelective(orderDO);
log.error("反向结算订单:{}平台对账结算失败,原因:{}", orderDO.getOrderNo(), orderDO.getExceptionMsg());
addOrderTrack(orderDO.getOrderNo(), orderDO.getUserId(), orderDO.getConnectorId().toString(), (byte) 3, (byte) 0, "反向结算失败,平台对账结算失败,原因:" + orderDO.getExceptionMsg());
@ -465,7 +465,7 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
//参与服务返券
joinActivityRebate(orderDTO.getUserId().toString(), orderDO.getOrderNo(), "0", "0", "", "0");
//推送碳大脑
if (flag){
if (flag) {
//推送碳大脑
pushOrderCarbonCrain(orderDO.getOrderNo());
}
@ -484,43 +484,68 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
}
}
/**
*
* @param orderDO
*
* @param orderDO
* @param notifyChargeOrderInfoBO
* @return
*/
private Boolean checkReverseOrderPrice(EquipmentChargeOrderDO orderDO, NotifyChargeOrderInfoBO notifyChargeOrderInfoBO) {
//若是没有,则直接返回
if(notifyChargeOrderInfoBO.getChargeDetails() == null || notifyChargeOrderInfoBO.getChargeDetails().isEmpty()) {
if (notifyChargeOrderInfoBO.getChargeDetails() == null || notifyChargeOrderInfoBO.getChargeDetails().isEmpty()) {
return true;
}
//暂时去除对账功能
if(true) {
if (true) {
return true;
}
//获取当前配置的互联互通的容许单价误差金额、总金额误差金额
// select * from t_dict where code = #{code} and parent_id != 0
/**
29 28 reverseOrderCheck -1 1 0-1 0 0
30 28 reverseOrderCheck 1 * 2 -01 0 0
*/
List<DictDO> dictDOList = commonMapper.getDictByCode("reverseOrderCheck");
BigDecimal unitPrice = BigDecimal.valueOf(-1);
BigDecimal totalPrice = BigDecimal.valueOf(-1);
if(dictDOList.size() >= 2) {
if (dictDOList.size() >= 2) {
//单价差额上限
unitPrice = new BigDecimal(Optional.ofNullable(dictDOList.get(0).getDictKey()).orElse("0.0"));
//总价差额上限
totalPrice = new BigDecimal(Optional.ofNullable(dictDOList.get(1).getDictKey()).orElse("0.0"));
}
//都关闭,则直接返回
if(unitPrice.compareTo(BigDecimal.valueOf(-1)) == 0 && totalPrice.compareTo(BigDecimal.valueOf(-1)) == 0) {
if (unitPrice.compareTo(BigDecimal.valueOf(-1)) == 0 && totalPrice.compareTo(BigDecimal.valueOf(-1)) == 0) {
return true;
}
//查询该充电桩的计费规则
List<PriceRule> lpr = commonMapper.selectPriceRule(orderDO.getEquipmentId());
/**
select
ter.charge_settle_type chargeSettleType, //电费结算类型 1 全时段电费 2 分时段电费
tept.end_time endTime,
tept.elecfee elecfee, //电费
tept.servicefee servicefee, //服务费
tept.cost,
tept.start_time startTime,
tept.time_flag as timeFlag
from
t_equipment_pricing_rule ter left join t_equipment_pricing_rule_time tept on ter.id = tept.equipment_pricing_rule_id
where
ter.equipment_id=#{equipmentId} //哪个设备,也就是哪个电桩
order by tept.end_time asc
*/
List<PriceRule> lpr = commonMapper.selectPriceRule(orderDO.getEquipmentId());//以电桩ID为条件进行查询获取此电桩的在不同时段的电费和服务费
//若是计费规则为空,则置为挂起状态,然后
// 电桩没有计费规则是个什么情况?
if (null == lpr || lpr.size() == 0) {
orderDO.setState((byte) 5);
orderDO.setExceptionFlag((byte) 4);
orderDO.setState((byte) 5);//订单状态 0 创建中 1准备充电中 2 充电中 3完成 4 取消 5挂起 6需要手动补单 7结算中
orderDO.setExceptionFlag((byte) 4); //订单异常标志 0正常 1电量负数 2 vin相同,在一个有交集的时间段内出现的订单异常 3电量异常修正后订单
orderDO.setExceptionMsg("账单单价与站点计费不一致");
orderDO.setCancelMsg("账单单价与站点计费不一致");
orderDO.setCancelTime(new Date());
@ -534,21 +559,24 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
BigDecimal unitDiffPrice = BigDecimal.ZERO;
BigDecimal totalDiffPrice = BigDecimal.ZERO;
BigDecimal totalDetailMoney = BigDecimal.ZERO;
//遍历每个互联互通账单数据
for (ChargeDetailDTO detailDTO : notifyChargeOrderInfoBO.getChargeDetails()) {
long chargeStartTime = getCurrentMinute(detailDTO.getDetailStartTime());
//查询当前的detail的开始时间的所属计费时段
for(PriceRule priceRule : lpr) {
if(priceRule.getStartTime().longValue() <= chargeStartTime && priceRule.getEndTime().longValue() > chargeStartTime) {
for (PriceRule priceRule : lpr) {//遍历每个时段
//如果当前的detail的开始时间在当前计费时段内
if (priceRule.getStartTime().longValue() <= chargeStartTime && priceRule.getEndTime().longValue() > chargeStartTime) {
//进行单价差额的计算
unitDiffPrice = unitDiffPrice.add(BigDecimal.valueOf(priceRule.getElecfee()).subtract(BigDecimal.valueOf(detailDTO.getElecPrice())).abs()).setScale(2 ,BigDecimal.ROUND_HALF_UP);
unitDiffPrice = unitDiffPrice.add(BigDecimal.valueOf(priceRule.getElecfee()).subtract(BigDecimal.valueOf(detailDTO.getElecPrice())).abs()).setScale(2, BigDecimal.ROUND_HALF_UP);
unitDiffPrice = unitDiffPrice.add(BigDecimal.valueOf(priceRule.getServicefee()).subtract(BigDecimal.valueOf(detailDTO.getSevicePrice())).abs()).setScale(2, BigDecimal.ROUND_HALF_UP);
//计算detail详单的服务费与电费
BigDecimal serviceAmount = BigDecimal.valueOf(priceRule.getServicefee()).multiply(BigDecimal.valueOf(detailDTO.getDetailPower())).abs().setScale(2 ,BigDecimal.ROUND_HALF_UP);
BigDecimal electricAmount = BigDecimal.valueOf(priceRule.getElecfee()).multiply(BigDecimal.valueOf(detailDTO.getDetailPower())).abs().setScale(2 ,BigDecimal.ROUND_HALF_UP);
BigDecimal serviceAmount = BigDecimal.valueOf(priceRule.getServicefee()).multiply(BigDecimal.valueOf(detailDTO.getDetailPower())).abs().setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal electricAmount = BigDecimal.valueOf(priceRule.getElecfee()).multiply(BigDecimal.valueOf(detailDTO.getDetailPower())).abs().setScale(2, BigDecimal.ROUND_HALF_UP);
totalDetailMoney = totalDetailMoney.add(serviceAmount).add(electricAmount).setScale(2 ,BigDecimal.ROUND_HALF_UP);
totalDetailMoney = totalDetailMoney.add(serviceAmount).add(electricAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
log.info("比较订单{}11111计费电{},计费服务{}detail电{}detail服务{}", orderDO.getOrderNo(), priceRule.getElecfee(), priceRule.getServicefee(), detailDTO.getElecPrice(), detailDTO.getSevicePrice());
log.info("比较订单{}22222单价差{},服务费差:{},电费差:{},总金额差{}", orderDO.getOrderNo(), unitDiffPrice, serviceAmount, electricAmount, totalDetailMoney);
@ -558,8 +586,8 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
}
//判断单价的差额绝对值是否在允许范围内
if(unitDiffPrice.compareTo(unitPrice) > 0 && unitPrice.compareTo(BigDecimal.valueOf(-1)) != 0) {
orderDO.setState((byte) 5);
if (unitDiffPrice.compareTo(unitPrice) > 0 && unitPrice.compareTo(BigDecimal.valueOf(-1)) != 0) {
orderDO.setState((byte) 5); //订单状态 0 创建中 1准备充电中 2 充电中 3完成 4 取消 5挂起 6需要手动补单 7结算中
orderDO.setExceptionFlag((byte) 4);
orderDO.setExceptionMsg("账单单价与站点计费不一致");
orderDO.setCancelMsg("账单单价与站点计费不一致");
@ -571,8 +599,8 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
}
//判断总金额的差额绝对值是否在允许范围内
totalDiffPrice = totalDetailMoney.subtract(BigDecimal.valueOf(notifyChargeOrderInfoBO.getTotalMoney())).abs().setScale(2 ,BigDecimal.ROUND_HALF_UP);
if(totalDiffPrice.compareTo(totalPrice) > 0 && totalPrice.compareTo(BigDecimal.valueOf(-1)) != 0) {
totalDiffPrice = totalDetailMoney.subtract(BigDecimal.valueOf(notifyChargeOrderInfoBO.getTotalMoney())).abs().setScale(2, BigDecimal.ROUND_HALF_UP);
if (totalDiffPrice.compareTo(totalPrice) > 0 && totalPrice.compareTo(BigDecimal.valueOf(-1)) != 0) {
orderDO.setState((byte) 5);
orderDO.setExceptionFlag((byte) 4);
orderDO.setExceptionMsg("账单总金额与站点计费*充电量不一致");
@ -583,13 +611,12 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
OrderTrackInfoUtil.addOrderTrackInfoCommon(new OrderTrackInfoDetail(orderDO.getOrderNo(), notifyChargeOrderInfoBO.toString(), "反向互联互通订单结算", false, "账单总金额与站点计费*充电量不一致", ""));
return false;
}
return true;
}
/**
*
*
* @param detailStartTime
* @return
*/
@ -837,6 +864,7 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
/**
*
*
* @param orderNoList
* @return
*/
@ -850,23 +878,25 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
orderList.forEach(orderNo -> {
//先重新拉取指定运营商下站点的计费规则
String platformSn = commonMapper.getOrderPlatform(orderNo);
if(platformSn == null) {
if (platformSn == null) {
log.warn("订单{}所属站点的运营商编码为空,对账失败", orderNo);
OrderTrackInfoUtil.addOrderTrackInfoCommon(new OrderTrackInfoDetail(orderNo, orderNo, "反向互联互通订单更新对账", false, "订单所属站点的运营商编码为空,对账失败", ""));
return ;
return;
}
//若是运营商还未重新拉取站点,则拉取
if(platformPull.get(platformSn) == null) {
if (platformPull.get(platformSn) == null) {
evcsQueryService.query_equip_business_policy(platformSn);
platformPull.put(platformSn, true);
}
//获取最后一次推送过来的账单数据
//【HuangHai】
// 互联互通的数据其它平台的数据是保存在MongoDb的 notificationChargeOrderInfoReqMongoDO 集合中
NotificationChargeOrderInfoReqMongoDO orderInfoReqMongoDO = notificationChargeOrderInfoReqDao.findOne(orderNo);
if(orderInfoReqMongoDO == null) {
if (orderInfoReqMongoDO == null) {
log.warn("订单{}存储mongo上的账单数据为空,对账失败", orderNo);
OrderTrackInfoUtil.addOrderTrackInfoCommon(new OrderTrackInfoDetail(orderNo, orderNo, "反向互联互通订单更新对账", false, "订单存储mongo上的账单数据为空,对账失败", ""));
return ;
return;
}
//copy数据重新走一遍反向互通的结算
@ -1148,8 +1178,8 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
long chargeStartTime = getCurrentMinute(chargeDetail.get(i).getDetailStartTime());
//查询当前的detail的开始时间的所属计费时段
for(PriceRule priceRule : lpr) {
if(priceRule.getStartTime().longValue() <= chargeStartTime && priceRule.getEndTime().longValue() > chargeStartTime) {
for (PriceRule priceRule : lpr) {
if (priceRule.getStartTime().longValue() <= chargeStartTime && priceRule.getEndTime().longValue() > chargeStartTime) {
timeFlag = priceRule.getTimeFlag();
}
}
@ -1204,8 +1234,8 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
resp.setData(connectorStatusInfoVO);
ChargeCommandDTO chargeCommandDTO = connectorDOMapper.queryEquipmentConnectorInfo(connectorSn);
if(Objects.isNull(chargeCommandDTO)){
log.error("三方平台推送的枪数据没找到,抢号={},平台={}",connectorSn,tReq.getOperatorID());
if (Objects.isNull(chargeCommandDTO)) {
log.error("三方平台推送的枪数据没找到,抢号={},平台={}", connectorSn, tReq.getOperatorID());
return resp;
}
pileIPConnectService.saveIPConnect(chargeCommandDTO.getEquipmentSn());//记录服务ip
@ -1287,16 +1317,17 @@ public class EvcsNotifyServiceImpl implements EvcsNotifyService {
// resp.setData(notifyChargeOrderInfoVO);
// return resp;
// }
/**
*
*/
private void removeFreezeUser(String orderNo,Integer startChargeSeqStat){
private void removeFreezeUser(String orderNo, Integer startChargeSeqStat) {
//启动结果推送3停止中4已结束5未知解冻用户
if(ChargeExtendEnum.Enum.ChargeSeqStat.stopping.getCode()==startChargeSeqStat ||
ChargeExtendEnum.Enum.ChargeSeqStat.end.getCode() ==startChargeSeqStat ||
ChargeExtendEnum.Enum.ChargeSeqStat.unkonw.getCode() ==startChargeSeqStat ){
if (ChargeExtendEnum.Enum.ChargeSeqStat.stopping.getCode() == startChargeSeqStat ||
ChargeExtendEnum.Enum.ChargeSeqStat.end.getCode() == startChargeSeqStat ||
ChargeExtendEnum.Enum.ChargeSeqStat.unkonw.getCode() == startChargeSeqStat) {
UserDO userDO = userDOMapper.querUserInfoByOrderId(orderNo);
if(!Objects.isNull(userDO) && userDO.getSharedUser() == 1) {
if (!Objects.isNull(userDO) && userDO.getSharedUser() == 1) {
Boolean removeFreezeUserResult = userAccountStateService.removeFreezeUser(userDO.getId().intValue());
log.info("启动充电失败,解冻用户返回结果:{}", removeFreezeUserResult);
}

@ -217,6 +217,8 @@ public class YltController extends Controller {
2
0
*/
//MongoDB中集合notificationChargeOrderInfoReqDao.findOne(orderNo); 可以获取到互联互通平台传送过来的账单信息,可以提供出来让人来看
//TODO
} else {//直连
//最后一次通讯记录
JSONObject jo = query.use("equipmentOrder").eq("_id", order_no).findOne();

@ -4,6 +4,12 @@
docker ps -a
```
#### 通过名称转为$ID$
```shell
docker ps -aqf "name=gw-charge"
```
#### 删除容器
```shell

Loading…
Cancel
Save