| | |
| | | private static final long SYSTEM_OPERATOR = 0L; |
| | | private static final BigDecimal MAX_AMOUNT = new BigDecimal("9999999999.99"); |
| | | private static final int PASSWORD_MAX_LENGTH = 64; |
| | | /** 完整卡号固定长度:16位,不足前面补0(仅充电桩刷卡查询用,不在前端展示) */ |
| | | private static final int CARD_NO_FULL_LENGTH = 16; |
| | | /** 公司账户模式:2=分配模式(可设置初始分配额度并扣减公司可用余额) */ |
| | | private static final int ACCOUNT_MODE_ALLOCATION = 2; |
| | | /** 公司账户模式:1=共享模式(可用余额取公司可用余额) */ |
| | |
| | | try { |
| | | TChargingCard card = new TChargingCard(); |
| | | card.setCardNo(cardNo); |
| | | card.setFullCardNo(buildFullCardNo(cardNo)); |
| | | card.setBalance(quota.signum() > 0 ? quota : BigDecimal.ZERO); |
| | | card.setStatus(dto.getStatus() == null ? ENABLED : dto.getStatus()); |
| | | card.setPassword(encodePasswordIfPresent(dto.getPassword())); |
| | |
| | | TChargingCard card = new TChargingCard(); |
| | | card.setId(dto.getId()); |
| | | card.setCardNo(dto.getCardNo().trim()); |
| | | card.setFullCardNo(buildFullCardNo(card.getCardNo())); |
| | | card.setStatus(dto.getStatus() == null ? ENABLED : dto.getStatus()); |
| | | card.setUpdateTime(LocalDateTime.now()); |
| | | card.setUpdateBy(SecurityUtils.getUserId()); |
| | |
| | | throw new ServiceException("导入数据不能为空"); |
| | | } |
| | | Set<String> importCardNos = new HashSet<>(); |
| | | Set<String> importFullCardNos = new HashSet<>(); |
| | | int row = 1; |
| | | for (ChargingCardExcelDTO item : cards) { |
| | | row++; |
| | |
| | | if (existsCardNo(cardNo, null)) { |
| | | throw new ServiceException("第" + row + "行卡号已存在"); |
| | | } |
| | | String fullCardNo = buildFullCardNo(cardNo); |
| | | if (!importFullCardNos.add(fullCardNo)) { |
| | | throw new ServiceException("第" + row + "行卡号补零后与其他卡号重复"); |
| | | } |
| | | if (existsFullCardNo(fullCardNo, null)) { |
| | | throw new ServiceException("第" + row + "行卡号已存在"); |
| | | } |
| | | if (item.getBalance() != null) { |
| | | validateAmount(item.getBalance(), true, "第" + row + "行卡余额"); |
| | | } |
| | |
| | | for (ChargingCardExcelDTO item : cards) { |
| | | TChargingCard card = new TChargingCard(); |
| | | card.setCardNo(item.getCardNo().trim()); |
| | | card.setFullCardNo(buildFullCardNo(card.getCardNo())); |
| | | if (lockedCompanyId != null) { |
| | | card.setCompanyId(lockedCompanyId); |
| | | } |
| | |
| | | if (dto == null || StringUtils.isEmpty(dto.getCardNo())) { |
| | | throw new ServiceException("卡号不能为空"); |
| | | } |
| | | // 按完整卡号(16位补零)查询,与充电桩上报的完整卡号口径一致 |
| | | String fullCardNo = buildFullCardNo(dto.getCardNo()); |
| | | TChargingCard card = getOne(new LambdaQueryWrapper<TChargingCard>() |
| | | .eq(TChargingCard::getCardNo, dto.getCardNo().trim())); |
| | | .eq(TChargingCard::getFullCardNo, fullCardNo)); |
| | | if (card == null) { |
| | | throw new ServiceException("卡片不存在或已删除"); |
| | | } |
| | |
| | | TChargingCard update = new TChargingCard(); |
| | | update.setId(card.getId()); |
| | | update.setCardNo(card.getCardNo()); |
| | | update.setFullCardNo(card.getFullCardNo()); |
| | | update.setStatus(card.getStatus()); |
| | | update.setPassword(encodedPassword); |
| | | update.setUpdateTime(card.getUpdateTime()); |
| | |
| | | } |
| | | } |
| | | |
| | | /** 完整卡号规范化:固定16位,不足前面补0(trim 后左补0) */ |
| | | private String buildFullCardNo(String cardNo) { |
| | | return StringUtils.padl(cardNo == null ? "" : cardNo.trim(), CARD_NO_FULL_LENGTH, '0'); |
| | | } |
| | | |
| | | private void validateCard(ChargingCardSaveDTO dto, boolean update) { |
| | | if (dto == null || StringUtils.isEmpty(dto.getCardNo())) { |
| | | throw new ServiceException("卡号不能为空"); |
| | |
| | | throw new ServiceException("卡片状态参数错误"); |
| | | } |
| | | if (existsCardNo(cardNo, dto.getId())) { |
| | | throw new ServiceException("卡号已存在"); |
| | | } |
| | | if (existsFullCardNo(buildFullCardNo(cardNo), dto.getId())) { |
| | | throw new ServiceException("卡号已存在"); |
| | | } |
| | | } |
| | |
| | | return baseMapper.countByCardNo(cardNo, excludeId) > 0; |
| | | } |
| | | |
| | | private boolean existsFullCardNo(String fullCardNo, Long excludeId) { |
| | | return baseMapper.countByFullCardNo(fullCardNo, excludeId) > 0; |
| | | } |
| | | |
| | | private void validateDeductRequest(ChargingCardDeductDTO dto) { |
| | | if (dto == null) { |
| | | throw new ServiceException("扣款参数不能为空"); |