package project.blockchain.internal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import org.apache.commons.lang3.StringUtils; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.security.providers.encoding.PasswordEncoder; import kernel.bo.RecordObjectMapper; import kernel.exception.BusinessException; import kernel.web.ApplicationUtil; import project.Constants; import project.blockchain.ChannelBlockchain; import project.blockchain.ChannelBlockchainService; import project.log.Log; import project.log.LogService; import project.user.googleauth.GoogleAuthService; import security.SecUser; import security.internal.SecUserService; public class ChannelBlockchainServiceImpl implements ChannelBlockchainService { private JdbcTemplate jdbcTemplate; private LogService logService; private SecUserService secUserService; private PasswordEncoder passwordEncoder; private GoogleAuthService googleAuthService; public void save(ChannelBlockchain entity, String userName, String safeword, String login_ip, String code, String superGoogleAuthCode) { // checkEmailCode(code); googleAuthService.checkSuperGoogleAuthCode(superGoogleAuthCode); SecUser sec = this.secUserService.findUserByLoginName(userName); String sysSafeword = sec.getSafeword(); String safeword_md5 = passwordEncoder.encodePassword(safeword, userName); if (!safeword_md5.equals(sysSafeword)) { throw new BusinessException("资金密码错误"); } entity.setId(ApplicationUtil.getCurrentTimeUUID()); Object[] jdbcParams = ApplicationUtil.getInsertStatement(entity); String insertUserSql = (String)jdbcParams[0]; Object[] sqlParameters = (Object[])jdbcParams[1]; jdbcTemplate.update(insertUserSql, sqlParameters); String log = "新增地址,名称[" + entity.getBlockchain_name() + "],地址[" + entity.getAddress() + "]" + "币种[" + entity.getCoin() + "],图片[" + entity.getImg() + "]," + "ip[" + login_ip + "],验证码:[" + code + "]"; saveLog(sec, userName, log); sendCodeToSysUsers(sec, userName, "新增区块链地址地址", "用户[" + userName + "],新增区块链地址地址"); } private void sendCodeToSysUsers(SecUser secUser, String operator, String title, String content) { List users = secUserService.findAllSysUsers(); String log = "以下系统用户尚未配置邮箱,无法收到邮件:"; for (SecUser user : users) { if (StringUtils.isEmpty(user.getEmail())) { log += user.getUsername() + ","; } else { log += user.getUsername() + ","; } } saveLog(secUser, operator, log); } public void update(ChannelBlockchain old, ChannelBlockchain entity, String userName, String partyId, String safeword, String login_ip, String code, String superGoogleAuthCode) { googleAuthService.checkSuperGoogleAuthCode(superGoogleAuthCode); SecUser sec = this.secUserService.findUserByLoginName(userName); String sysSafeword = sec.getSafeword(); String safeword_md5 = passwordEncoder.encodePassword(safeword, userName); if (!safeword_md5.equals(sysSafeword)) { throw new BusinessException("资金密码错误"); } Object[] jdbcParams=ApplicationUtil.getUpdateStatement(entity, "WHERE UUID=?",new Object[] {entity.getId()}); String updateUserSql = (String)jdbcParams[0]; Object[] sqlParameters = (Object[])jdbcParams[1]; jdbcTemplate.update(updateUserSql, sqlParameters); String log = "区块链充值地址修改。原名称[" + old.getBlockchain_name() + "],原地址[" + old.getAddress() + "]" + "原币种[" + old.getCoin() + "],原图片[" + old.getImg() + "]。" + "修改后,新名称[" + entity.getBlockchain_name() + "],新地址[" + entity.getAddress() + "]" + "新币种[" + entity.getCoin() + "],新图片[" + entity.getImg() + "]," + "ip[" + login_ip + "],验证码:[" + code + "]"; saveLog(sec, userName, log); sendCodeToSysUsers(sec, userName, "区块链充值地址修改", "用户[" + userName + "],区块链充值地址修改"); } public void saveLog(SecUser secUser, String operator, String context) { Log log = new Log(); log.setCategory(Constants.LOG_CATEGORY_OPERATION); log.setOperator(operator); log.setUsername(secUser.getUsername()); log.setPartyId(secUser.getPartyId()); log.setLog(context); log.setCreateTime(new Date()); logService.saveSync(log); } public void delete(String id, String safeword, String userName, String loginIp, String code, String superGoogleAuthCode) { googleAuthService.checkSuperGoogleAuthCode(superGoogleAuthCode); SecUser sec = this.secUserService.findUserByLoginName(userName); String sysSafeword = sec.getSafeword(); String safeword_md5 = passwordEncoder.encodePassword(safeword, userName); if (!safeword_md5.equals(sysSafeword)) { throw new BusinessException("资金密码错误"); } ChannelBlockchain entity = findById(id); jdbcTemplate.update("DELETE FROM T_CHANNEL_BLOCKCHAIN WHERE UUID=?", entity.getId()); String log = "删除地址,名称[" + entity.getBlockchain_name() + "],地址[" + entity.getAddress() + "]" + "币种[" + entity.getCoin() + "],图片[" + entity.getImg() + "]," + "ip[" + loginIp + "],验证码:[" + code + "]"; saveLog(sec, userName, log); sendCodeToSysUsers(sec, userName, "区块链充值地址删除", "用户[" + userName + "],区块链充值地址删除"); } public List findAll() { return jdbcTemplate.query("SELECT * FROM T_CHANNEL_BLOCKCHAIN", RecordObjectMapper.newInstance(ChannelBlockchain.class)); } public ChannelBlockchain findById(String id) { List list = jdbcTemplate.query("SELECT * FROM T_CHANNEL_BLOCKCHAIN WHERE UUID=?", RecordObjectMapper.newInstance(ChannelBlockchain.class), id); if (null != list && list.size() > 0) { return list.get(0); } return null; } @Override public ChannelBlockchain findByNameAndCoinAndAdd(String blockchain_name, String coin, String address) { List list = new ArrayList(); if (StringUtils.isEmpty(address)) { list = jdbcTemplate.query("SELECT * FROM T_CHANNEL_BLOCKCHAIN WHERE BLOCKCHAIN_NAME = ? AND COIN=? ", RecordObjectMapper.newInstance(ChannelBlockchain.class), blockchain_name, coin ); } else { list = jdbcTemplate.query("SELECT * FROM T_CHANNEL_BLOCKCHAIN WHERE BLOCKCHAIN_NAME = ? AND COIN=? AND ADDRESS =? ", RecordObjectMapper.newInstance(ChannelBlockchain.class), blockchain_name, coin, address ); } if (list.size() > 0) return list.get(0); return null; } public List findByCoin(String coin) { List list = jdbcTemplate.query("SELECT * FROM T_CHANNEL_BLOCKCHAIN WHERE COIN=? ", RecordObjectMapper.newInstance(ChannelBlockchain.class), coin ); if (list.size() > 0) return filterBlockchain(list); return null; } public List findByCoinAndName(String coin, String blockchain_name) { List list = jdbcTemplate.query("SELECT * FROM T_CHANNEL_BLOCKCHAIN WHERE BLOCKCHAIN_NAME = ? AND COIN=? ", RecordObjectMapper.newInstance(ChannelBlockchain.class), blockchain_name, coin ); if (list.size() > 0) return filterBlockchain(list); return null; } /** * 过滤充值地址链,随机获取 * * @param list * @return */ public List filterBlockchain(List list) { Map> map = new HashMap>(); for (ChannelBlockchain cb : list) { if (map.containsKey(cb.getBlockchain_name())) { map.get(cb.getBlockchain_name()).add(cb); } else { List nameList = new ArrayList(); nameList.add(cb); map.put(cb.getBlockchain_name(), nameList); } } Random random = new Random(); List result = new ArrayList(); for (List value : map.values()) { if (value.size() == 1) { result.addAll(value); } else { int randIndex = random.nextInt(value.size());// 随机抽取一个,减1即为索引 result.add(value.get(randIndex)); } } return result; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void setLogService(LogService logService) { this.logService = logService; } public void setSecUserService(SecUserService secUserService) { this.secUserService = secUserService; } public void setPasswordEncoder(PasswordEncoder passwordEncoder) { this.passwordEncoder = passwordEncoder; } public void setGoogleAuthService(GoogleAuthService googleAuthService) { this.googleAuthService = googleAuthService; } }