From b395de00c162041c75ff7f053634c8eee491928a Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 12 Dec 2024 11:36:54 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BF=9D=E5=AD=980x13,=200x17,=200x19,=200?= =?UTF-8?q?x23=E4=B8=AD=E7=9A=84soc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/common/util/YKCUtils.java | 1 + .../yunkuaichong/BMSDemandAndChargerOutputHandler.java | 4 +++- .../jsowell/netty/handler/yunkuaichong/ChargeEndHandler.java | 3 +++ .../handler/yunkuaichong/ParameterConfigurationHandler.java | 3 +++ .../handler/yunkuaichong/UploadRealTimeMonitorHandler.java | 3 +++ .../jsowell/pile/service/impl/PileBasicInfoServiceImpl.java | 1 + 6 files changed, 14 insertions(+), 1 deletion(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java index 7436462c9..a74a045dc 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java @@ -394,6 +394,7 @@ public class YKCUtils { /** * 保存soc + * 默认保存7天 * @param transactionCode * @param soc */ diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/BMSDemandAndChargerOutputHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/BMSDemandAndChargerOutputHandler.java index 04d6d5816..280786e01 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/BMSDemandAndChargerOutputHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/BMSDemandAndChargerOutputHandler.java @@ -229,9 +229,11 @@ public class BMSDemandAndChargerOutputHandler extends AbstractYkcHandler { .pileVoltageOutput(pileVoltageOutput) .pileCurrentOutput(pileCurrentOutput) .chargingTime(chargingTime) - .build(); + // 保存此订单的soc + YKCUtils.saveSOC(transactionCode, soc); + // 调用方法存入缓存 pileBasicInfoService.saveBMSDemandAndChargerOutputInfo2Redis(bmsDemandAndChargerOutputData); diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ChargeEndHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ChargeEndHandler.java index 3e61c2e69..8191df287 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ChargeEndHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ChargeEndHandler.java @@ -115,6 +115,9 @@ public class ChargeEndHandler extends AbstractYkcHandler { } updateOrder.setUpdateTime(nowDate); orderBasicInfoService.updateOrderBasicInfo(updateOrder); + + // 保存此订单的soc + YKCUtils.saveSOC(transactionCode, stopSoc); } return null; diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ParameterConfigurationHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ParameterConfigurationHandler.java index 674e2dba9..7c11796f2 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ParameterConfigurationHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/ParameterConfigurationHandler.java @@ -157,6 +157,9 @@ public class ParameterConfigurationHandler extends AbstractYkcHandler { .build(); orderBasicInfoService.updateOrderBasicInfo(orderBasicInfo); log.info("更新订单起始SOC, orderCode:{}, transactionCode:{}, startSoc:{}", orderInfo.getOrderCode(), transactionCode, soc); + + // 保存此订单的soc + YKCUtils.saveSOC(transactionCode, data.getSoc()); } return null; diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/UploadRealTimeMonitorHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/UploadRealTimeMonitorHandler.java index 4d1368ba9..b2d535597 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/UploadRealTimeMonitorHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/UploadRealTimeMonitorHandler.java @@ -288,6 +288,9 @@ public class UploadRealTimeMonitorHandler extends AbstractYkcHandler { // 查询数据库中该订单当前信息 OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode); if (Objects.nonNull(orderInfo)) { + // 保存此订单的soc + YKCUtils.saveSOC(transactionCode, realTimeMonitorData.getSOC()); + if (StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue()) || StringUtils.equals(orderInfo.getOrderStatus(), OrderStatusEnum.STAY_SETTLEMENT.getValue())) { // 在订单状态为 订单完成或待结算,不保存 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java index 36069e6a2..115f1f9a0 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileBasicInfoServiceImpl.java @@ -666,6 +666,7 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService { * 0x23信息设置缓存 (缓存时间3天) * @param data */ + @Override public void saveBMSDemandAndChargerOutputInfo2Redis(BMSDemandAndChargerOutputData data) { if (StringUtils.equals(data.getTransactionCode(), Constants.ILLEGAL_TRANSACTION_CODE)) { return; From d084a589373611fa214b1f7849964fac2d34d323 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 12 Dec 2024 13:27:09 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=9D=E5=AD=980x13,=200x17,=200x19,=200?= =?UTF-8?q?x23=E4=B8=AD=E7=9A=84soc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/common/util/YKCUtils.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java index a74a045dc..aa31e4694 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java @@ -430,16 +430,27 @@ public class YKCUtils { } } + /** + * 根据交易流水号获取redis保存的soc信息 + */ + public static Map getSOCMap(String transactionCode) { + String hashKey = CacheConstants.GET_THE_SOC + transactionCode; + RedisCache staticRedisCache = StaticRedisCache.staticRedisCache; + return staticRedisCache.getCacheMap(hashKey); + } + /** * 根据的交易码获取当前soc * @param transactionCode */ public static String getCurrentSOC(String transactionCode) { - String hashKey = CacheConstants.GET_THE_SOC + transactionCode; - RedisCache staticRedisCache = StaticRedisCache.staticRedisCache; - Map cacheMap = staticRedisCache.getCacheMap(hashKey); + // String hashKey = CacheConstants.GET_THE_SOC + transactionCode; + // RedisCache staticRedisCache = StaticRedisCache.staticRedisCache; + // Map cacheMap = staticRedisCache.getCacheMap(hashKey); + + Map socMap = getSOCMap(transactionCode); // 获取最小值和最大值, 两个值中最大的为当前soc - return (String) cacheMap.get("max"); + return (String) socMap.get("max"); } } From d90ece633f6ea650b24f9bde54fc32b234b1e6fb Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 12 Dec 2024 13:39:31 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BF=9D=E5=AD=980x13,=200x17,=200x19,=200?= =?UTF-8?q?x23=E4=B8=AD=E7=9A=84soc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/AbstractProgramLogic.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 9e0fafb29..40eb1965d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -16,6 +16,7 @@ import com.jsowell.common.enums.ykc.OrderPayRecordEnum; import com.jsowell.common.enums.ykc.OrderStatusEnum; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; +import com.jsowell.common.util.YKCUtils; import com.jsowell.pile.domain.*; import com.jsowell.pile.domain.ebike.deviceupload.EBikeMessageCmd03; import com.jsowell.pile.dto.*; @@ -242,6 +243,23 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderBasicInfo.setSettlementTime(DateUtils.getNowDate()); // 结算时间 } orderBasicInfo.setRefundAmount(residue); // 结算退款金额 + + if (StringUtils.isBlank(orderBasicInfo.getStartSoc()) || StringUtils.isBlank(orderBasicInfo.getEndSoc())) { + try { + Map socMap = YKCUtils.getSOCMap(orderBasicInfo.getTransactionCode()); + if (Objects.nonNull(socMap)) { + if (StringUtils.isBlank(orderBasicInfo.getStartSoc())) { + orderBasicInfo.setStartSoc(socMap.get("startSoc")); + } + if (StringUtils.isBlank(orderBasicInfo.getEndSoc())) { + orderBasicInfo.setEndSoc(socMap.get("endSoc")); + } + } + } catch (Exception e) { + logger.error("获取订单充电开始结束SOC失败:{}", e.getMessage()); + } + } + } /** From 4a608eb3ca9b0d754325fe04bb9eda02342e3d9b Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 12 Dec 2024 14:31:35 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E8=93=9D=E7=89=99=E6=A1=A9=E5=88=86?= =?UTF-8?q?=E4=BA=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/service/PileService.java | 41 +++++++++++-------- .../common/enums/ykc/ReturnCodeEnum.java | 8 ++++ .../impl/PileMemberRelationServiceImpl.java | 1 + 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java index 9a19fb2c1..7ceba6b3d 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -488,40 +488,49 @@ public class PileService { // 为空说明此用户未注册平台账号 throw new BusinessException(ReturnCodeEnum.CODE_USER_IS_NOT_REGISTER); } + // 被分享的用户memberId + String memberId = memberBasicInfo.getMemberId(); List relationList = pileMemberRelationService.selectPileMemberRelationByPileSn(dto.getPileSn()); if (CollectionUtils.isEmpty(relationList)) { // 充电桩没有绑定任何人 + throw new BusinessException(ReturnCodeEnum.CODE_NO_ADMIN_FOR_PILE); } - List adminList = relationList.stream() - .filter(x -> x.getType().equals(Constants.ONE)) // 1-管理员用户 + // 使用stream把relationList转为map, key为type, value为List + Map> map = relationList.stream().collect(Collectors.groupingBy(PileMemberRelation::getType)); + List adminMemberRelationList = map.get(Constants.ONE); // 管理员列表 + List userMemberRelations = map.get(Constants.TWO); // 普通用户列表 + if (CollectionUtils.isEmpty(adminMemberRelationList)) { + // 充电桩没有管理员 + throw new BusinessException(ReturnCodeEnum.CODE_NO_ADMIN_FOR_PILE); + } + List adminList = adminMemberRelationList.stream() .map(PileMemberRelation::getMemberId) .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(adminList)) { - // 没有管理员 - } - - // 校验身份 - if (adminList.contains(dto.getMemberId())) { + // 校验身份 入参是否是管理员 + if (adminList.contains(memberId)) { // 如果不为空,说明被分享的用户是管理员,抛出异常 - throw new BusinessException(ReturnCodeEnum.CODE_AUTHENTICATION_ERROR); + throw new BusinessException(ReturnCodeEnum.CODE_ALREADY_AN_ADMIN); } - - List userList = relationList.stream() - .filter(x -> !x.getType().equals(Constants.TWO)) // 2-普通用户 + List userList = userMemberRelations.stream() .map(PileMemberRelation::getMemberId) .collect(Collectors.toList()); - - if (userList.contains(memberBasicInfo.getMemberId())) { + // 校验身份 入参是否是普通用户 + if (userList.contains(memberId)) { // 不为空说明已绑定 - throw new BusinessException(ReturnCodeEnum.CODE_USER_HAS_BEEN_THIS_PILE); + throw new BusinessException(ReturnCodeEnum.CODE_ALREADY_AN_USER); } else { + PileMemberRelation pileMemberRelation = adminMemberRelationList.get(0); // 获取管理员列表的第一个元素 // 进行绑定,此用户为普通用户 PileMemberRelation info = new PileMemberRelation(); info.setPileSn(dto.getPileSn()); - info.setMemberId(memberBasicInfo.getMemberId()); + info.setMemberId(memberId); info.setType(Constants.TWO); + if (pileMemberRelation != null && StringUtils.isNotBlank(pileMemberRelation.getDeviceId())) { + info.setDeviceId(pileMemberRelation.getDeviceId()); + info.setDeviceName(pileMemberRelation.getDeviceName()); + } pileMemberRelationService.insertPileMemberRelation(info); } } diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java index b87c20e78..e09c83d96 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/ReturnCodeEnum.java @@ -187,6 +187,14 @@ public enum ReturnCodeEnum { CODE_START_PERSONAL_PILE_CHARGING_ERROR("00400020", "个人桩启动充电异常"), + CODE_PILE_MEMBER_RELATION_IS_EMPTY("00400021", "个人桩绑定列表为空"), + + CODE_NO_ADMIN_FOR_PILE("00400022", "充电桩未设置管理员"), + + CODE_ALREADY_AN_ADMIN("00400023", "您已经是此充电桩管理员, 无需再次绑定"), + + CODE_ALREADY_AN_USER("00400024", "您已经是此充电桩用户, 无需再次绑定"), + /* 个人桩 end */ CODE_THIS_CARNO_HAS_BEEN_BINDING("00500001", "当前车牌号已经绑定,请检查!"), diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java index fd19f794e..7e30ed359 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMemberRelationServiceImpl.java @@ -116,6 +116,7 @@ public class PileMemberRelationServiceImpl implements PileMemberRelationService return selectPileMemberRelationList(pileMemberRelation); } + @Override public List selectMemberList(String pileSn) { return pileMemberRelationMapper.selectMemberList(pileSn); } From 38a9bd95223e293cbb52e2632537b3061e30bde6 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 12 Dec 2024 14:52:30 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E8=93=9D=E7=89=99=E6=A1=A9=E5=88=86?= =?UTF-8?q?=E4=BA=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/service/PileService.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java index 7ceba6b3d..30901858b 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -496,7 +496,6 @@ public class PileService { // 充电桩没有绑定任何人 throw new BusinessException(ReturnCodeEnum.CODE_NO_ADMIN_FOR_PILE); } - // 使用stream把relationList转为map, key为type, value为List Map> map = relationList.stream().collect(Collectors.groupingBy(PileMemberRelation::getType)); List adminMemberRelationList = map.get(Constants.ONE); // 管理员列表 @@ -513,26 +512,28 @@ public class PileService { // 如果不为空,说明被分享的用户是管理员,抛出异常 throw new BusinessException(ReturnCodeEnum.CODE_ALREADY_AN_ADMIN); } - List userList = userMemberRelations.stream() - .map(PileMemberRelation::getMemberId) - .collect(Collectors.toList()); + List userList = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(userMemberRelations)) { + userList = userMemberRelations.stream() + .map(PileMemberRelation::getMemberId) + .collect(Collectors.toList()); + } // 校验身份 入参是否是普通用户 if (userList.contains(memberId)) { // 不为空说明已绑定 throw new BusinessException(ReturnCodeEnum.CODE_ALREADY_AN_USER); - } else { - PileMemberRelation pileMemberRelation = adminMemberRelationList.get(0); // 获取管理员列表的第一个元素 - // 进行绑定,此用户为普通用户 - PileMemberRelation info = new PileMemberRelation(); - info.setPileSn(dto.getPileSn()); - info.setMemberId(memberId); - info.setType(Constants.TWO); - if (pileMemberRelation != null && StringUtils.isNotBlank(pileMemberRelation.getDeviceId())) { - info.setDeviceId(pileMemberRelation.getDeviceId()); - info.setDeviceName(pileMemberRelation.getDeviceName()); - } - pileMemberRelationService.insertPileMemberRelation(info); } + PileMemberRelation pileMemberRelation = adminMemberRelationList.get(0); // 获取管理员列表的第一个元素 + // 进行绑定,此用户为普通用户 + PileMemberRelation info = new PileMemberRelation(); + info.setPileSn(dto.getPileSn()); + info.setMemberId(memberId); + info.setType(Constants.TWO); + if (pileMemberRelation != null && StringUtils.isNotBlank(pileMemberRelation.getDeviceId())) { + info.setDeviceId(pileMemberRelation.getDeviceId()); + info.setDeviceName(pileMemberRelation.getDeviceName()); + } + pileMemberRelationService.insertPileMemberRelation(info); } /** From a8b8865348d2ec9d9f4af9c91870422812798ef7 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 12 Dec 2024 14:54:18 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E8=93=9D=E7=89=99=E6=A1=A9=E5=88=86?= =?UTF-8?q?=E4=BA=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/service/PileService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java index 30901858b..674f7ce4e 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -499,7 +499,7 @@ public class PileService { // 使用stream把relationList转为map, key为type, value为List Map> map = relationList.stream().collect(Collectors.groupingBy(PileMemberRelation::getType)); List adminMemberRelationList = map.get(Constants.ONE); // 管理员列表 - List userMemberRelations = map.get(Constants.TWO); // 普通用户列表 + if (CollectionUtils.isEmpty(adminMemberRelationList)) { // 充电桩没有管理员 throw new BusinessException(ReturnCodeEnum.CODE_NO_ADMIN_FOR_PILE); @@ -512,7 +512,9 @@ public class PileService { // 如果不为空,说明被分享的用户是管理员,抛出异常 throw new BusinessException(ReturnCodeEnum.CODE_ALREADY_AN_ADMIN); } + List userList = Lists.newArrayList(); + List userMemberRelations = map.get(Constants.TWO); // 普通用户列表 if (CollectionUtils.isNotEmpty(userMemberRelations)) { userList = userMemberRelations.stream() .map(PileMemberRelation::getMemberId)