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..674f7ce4e 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/PileService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/PileService.java @@ -488,42 +488,54 @@ 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); } + // 使用stream把relationList转为map, key为type, value为List + Map> map = relationList.stream().collect(Collectors.groupingBy(PileMemberRelation::getType)); + List adminMemberRelationList = map.get(Constants.ONE); // 管理员列表 - List adminList = relationList.stream() - .filter(x -> x.getType().equals(Constants.ONE)) // 1-管理员用户 + 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-普通用户 - .map(PileMemberRelation::getMemberId) - .collect(Collectors.toList()); - - if (userList.contains(memberBasicInfo.getMemberId())) { + List userList = Lists.newArrayList(); + List userMemberRelations = map.get(Constants.TWO); // 普通用户列表 + if (CollectionUtils.isNotEmpty(userMemberRelations)) { + userList = userMemberRelations.stream() + .map(PileMemberRelation::getMemberId) + .collect(Collectors.toList()); + } + // 校验身份 入参是否是普通用户 + if (userList.contains(memberId)) { // 不为空说明已绑定 - throw new BusinessException(ReturnCodeEnum.CODE_USER_HAS_BEEN_THIS_PILE); - } else { - // 进行绑定,此用户为普通用户 - PileMemberRelation info = new PileMemberRelation(); - info.setPileSn(dto.getPileSn()); - info.setMemberId(memberBasicInfo.getMemberId()); - info.setType(Constants.TWO); - pileMemberRelationService.insertPileMemberRelation(info); + throw new BusinessException(ReturnCodeEnum.CODE_ALREADY_AN_USER); } + 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); } /** 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-common/src/main/java/com/jsowell/common/util/YKCUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java index 7436462c9..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 @@ -394,6 +394,7 @@ public class YKCUtils { /** * 保存soc + * 默认保存7天 * @param transactionCode * @param soc */ @@ -429,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"); } } 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 bf73a3de0..9c9d312d5 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; 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); } 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()); + } + } + } /**