From e936c45f009d2cd0ae98ef2c25debae319e0ce17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Wed, 14 Aug 2024 13:19:48 +0800 Subject: [PATCH] 'commit' --- .../service/impl/EvcsNotifyServiceImpl.java | 115 +++++++++++------- .../ZhuQue/Ylt/Controller/YltController.java | 2 + ...$特收到的需求、分析与现状.docx | Bin 162 -> 0 bytes 操作文档/11、Docker常用命令.md | 6 + 4 files changed, 81 insertions(+), 42 deletions(-) delete mode 100644 业务梳理/~$特收到的需求、分析与现状.docx diff --git a/Ylt/ms-openapi/src/main/java/com/charge/openapi/hlht/service/impl/EvcsNotifyServiceImpl.java b/Ylt/ms-openapi/src/main/java/com/charge/openapi/hlht/service/impl/EvcsNotifyServiceImpl.java index c49ba2a..784a60e 100644 --- a/Ylt/ms-openapi/src/main/java/com/charge/openapi/hlht/service/impl/EvcsNotifyServiceImpl.java +++ b/Ylt/ms-openapi/src/main/java/com/charge/openapi/hlht/service/impl/EvcsNotifyServiceImpl.java @@ -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 notification_start_charge_result(Request 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 键值 断冗余值,-≥0表示开启,并按该值(元)判1表示关闭 0 0 + */ List 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 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 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); } diff --git a/ZhuQue/src/main/java/com/dsideal/ZhuQue/Ylt/Controller/YltController.java b/ZhuQue/src/main/java/com/dsideal/ZhuQue/Ylt/Controller/YltController.java index b76ea20..736f099 100644 --- a/ZhuQue/src/main/java/com/dsideal/ZhuQue/Ylt/Controller/YltController.java +++ b/ZhuQue/src/main/java/com/dsideal/ZhuQue/Ylt/Controller/YltController.java @@ -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(); diff --git a/业务梳理/~$特收到的需求、分析与现状.docx b/业务梳理/~$特收到的需求、分析与现状.docx deleted file mode 100644 index 721717c100a3fa053b11a9429a82752698f610b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmd;eOv%m6%PcM_N-W7QVjvRmGB`4%Fyu01GUNeqF+&MM5kn%7%m>oQfC@vTpIsW8 diff --git a/操作文档/11、Docker常用命令.md b/操作文档/11、Docker常用命令.md index bb8d9e7..0409976 100644 --- a/操作文档/11、Docker常用命令.md +++ b/操作文档/11、Docker常用命令.md @@ -4,6 +4,12 @@ docker ps -a ``` +#### 通过名称转为$ID$ + +```shell +docker ps -aqf "name=gw-charge" +``` + #### 删除容器 ```shell