package project.blockchain.internal; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.security.providers.encoding.PasswordEncoder; import kernel.bo.RecordObjectMapper; import kernel.exception.BusinessException; import kernel.util.StringUtils; import kernel.web.ApplicationUtil; import kernel.web.Page; import kernel.web.PagedQueryDao; import project.Constants; import project.blockchain.AdminRechargeBlockchainOrderService; import project.blockchain.RechargeBlockchain; import project.blockchain.RechargeBlockchainService; import project.log.Log; import project.log.LogService; import project.party.recom.UserRecomService; import project.tip.TipService; import project.wallet.WalletLog; import project.wallet.WalletLogService; import security.SecUser; import security.internal.SecUserService; public class AdminRechargeBlockchainOrderServiceImpl implements AdminRechargeBlockchainOrderService { private JdbcTemplate jdbcTemplate; private PagedQueryDao pagedQueryDao; private UserRecomService userRecomService; private PasswordEncoder passwordEncoder; private RechargeBlockchainService rechargeBlockchainService; private LogService logService; private WalletLogService walletLogService; private SecUserService secUserService; private TipService tipService; @Override public Page pagedQuery(int pageNo, int pageSize, String name_para, Integer state_para, String loginPartyId, String orderNo, String rolename_para, String startTime, String endTime) { StringBuffer queryString = new StringBuffer(); queryString.append("SELECT"); queryString.append(" party.USERNAME username ,party.ROLENAME rolename,party.USERCODE usercode, party.REMARKS remarks,"); queryString.append(" recharge.UUID id,recharge.ORDER_NO order_no,recharge.BLOCKCHAIN_NAME blockchanin_name, " + "recharge.IMG img, recharge.TX hash, recharge.CREATED created, recharge.DESCRIPTION description, "); queryString.append(" recharge.COIN coin,recharge.REVIEWTIME reviewTime, " + "recharge.SUCCEEDED succeeded,recharge.CHANNEL_AMOUNT channel_amount, " + "recharge.ADDRESS address,recharge.CHANNEL_ADDRESS channel_address, party_parent.USERNAME username_parent "); queryString.append(" FROM "); queryString.append(" T_RECHARGE_BLOCKCHAIN_ORDER recharge " + "LEFT JOIN PAT_PARTY party ON recharge.PARTY_ID = party.UUID " + " LEFT JOIN PAT_USER_RECOM user ON user.PARTY_ID = party.UUID " + " LEFT JOIN PAT_PARTY party_parent ON user.RECO_ID = party_parent.UUID " + " "); queryString.append(" WHERE 1=1 "); Map parameters = new HashMap(); if (!StringUtils.isNullOrEmpty(loginPartyId)) { List children = this.userRecomService.findChildren(loginPartyId); if (children.size() == 0) { // return Page.EMPTY_PAGE; return new Page(); } queryString.append(" and recharge.PARTY_ID in (:children) "); parameters.put("children", children); } // if (!StringUtils.isNullOrEmpty(name_para)) { // queryString.append(" and (party.USERNAME like :name_para or party.USERCODE =:usercode) "); // parameters.put("name_para", "%" + name_para + "%"); // parameters.put("usercode", name_para); // // } if (!StringUtils.isNullOrEmpty(name_para)) { queryString.append("AND (party.USERNAME like:username OR party.USERCODE like:username ) "); parameters.put("username", "%" + name_para + "%"); } if (!StringUtils.isNullOrEmpty(rolename_para)) { queryString.append(" and party.ROLENAME =:rolename"); parameters.put("rolename", rolename_para); } if (!StringUtils.isNullOrEmpty(orderNo)) { queryString.append(" and recharge.ORDER_NO = :orderNo "); parameters.put("orderNo", orderNo); } if (state_para != null) { queryString.append(" and recharge.SUCCEEDED = :succeeded "); parameters.put("succeeded", state_para); } if (!StringUtils.isNullOrEmpty(startTime)) { queryString.append(" AND DATE(recharge.CREATED) >= DATE('" + startTime + " 00:00:00') "); // parameters.put("startTime",DateUtils.toDate(startTime)); } if (!StringUtils.isNullOrEmpty(endTime)) { queryString.append(" AND DATE(recharge.CREATED) <= DATE('" + endTime + " 23:59:59') "); // parameters.put("endTime", DateUtils.toDate(endTime)); } queryString.append(" order by recharge.CREATED desc "); Page page = this.pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters); return page; } @Override public void saveSucceeded(String id, String safeword, String operator_username, double success_amount) { SecUser sec = this.secUserService.findUserByLoginName(operator_username); String sysSafeword = sec.getSafeword(); String safeword_md5 = passwordEncoder.encodePassword(safeword, operator_username); if (!safeword_md5.equals(sysSafeword)) { throw new BusinessException("资金密码错误"); } rechargeBlockchainService.saveSucceeded(id, operator_username, success_amount); } public RechargeBlockchain get(String id) { List list = jdbcTemplate.query("SELECT * FROM T_RECHARGE_BLOCKCHAIN_ORDER WHERE UUID=?", RecordObjectMapper.newInstance(RechargeBlockchain.class), id); if (null != list && list.size() > 0) { return list.get(0); } return null; } @Override public void saveReject(String id, String failure_msg, String userName, String partyId) { RechargeBlockchain recharge = this.get(id); // 通过后不可驳回 if (recharge.getSucceeded() == 2 || recharge.getSucceeded() == 1) { return; } Date date = new Date(); recharge.setReviewTime(date); recharge.setSucceeded(2); recharge.setDescription(failure_msg); this.updateRechargeBlockchain(recharge); WalletLog walletLog = walletLogService.find(Constants.MONEYLOG_CATEGORY_RECHARGE, recharge.getOrder_no()); walletLog.setStatus(recharge.getSucceeded()); walletLogService.update(walletLog); SecUser sec = this.secUserService.findUserByPartyId(recharge.getPartyId()); Log log = new Log(); log.setCategory(Constants.LOG_CATEGORY_OPERATION); log.setExtra(recharge.getOrder_no()); log.setUsername(sec.getUsername()); log.setOperator(userName); log.setPartyId(partyId); log.setLog("管理员驳回一笔充值订单。充值订单号[" + recharge.getOrder_no() + "],驳回理由[" + recharge.getDescription() + "]。"); logService.saveSync(log); tipService.deleteTip(id); } @Override public void saveRejectRemark(String id, String failure_msg, String userName, String partyId) { RechargeBlockchain recharge = this.get(id); String before_failure_msg = recharge.getDescription(); recharge.setDescription(failure_msg); this.updateRechargeBlockchain(recharge); SecUser sec = this.secUserService.findUserByPartyId(recharge.getPartyId()); Log log = new Log(); log.setCategory(Constants.LOG_CATEGORY_OPERATION); log.setExtra(recharge.getOrder_no()); log.setUsername(sec.getUsername()); log.setOperator(userName); log.setPartyId(partyId); log.setLog("管理员修改备注信息。充值订单号[" + recharge.getOrder_no() + "],修改前备注信息[" + before_failure_msg + "],修改后备注信息[" + recharge.getDescription() + "]。"); logService.saveSync(log); } @Override public void saveRechargeImg(String id, String img, String safeword, String userName, String partyId) { 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("资金密码错误"); } RechargeBlockchain recharge = this.get(id); String before_img = "为空"; if (!StringUtils.isEmptyString(recharge.getImg())) { before_img = recharge.getImg(); } recharge.setImg(img); this.updateRechargeBlockchain(recharge); SecUser secUser = secUserService.findUserByPartyId(recharge.getPartyId()); Log log = new Log(); log.setCategory(Constants.LOG_CATEGORY_OPERATION); log.setExtra(recharge.getOrder_no()); log.setUsername(secUser.getUsername()); log.setOperator(userName); log.setPartyId(secUser.getPartyId()); log.setLog("管理员修改用户充值订单上传截图信息。充值订单号[" + recharge.getOrder_no() + "],修改前图片[" + before_img + "],修改后图片[" + recharge.getImg() + "]。"); logService.saveSync(log); } @Override public void callback(String timestamp, String nonce, String sign, String body) { rechargeBlockchainService.callback(timestamp, nonce, sign,body); } public void updateRechargeBlockchain(RechargeBlockchain recharge) { Object[] jdbcParams = ApplicationUtil.getUpdateStatement(recharge, "WHERE UUID=?", new Object[] {recharge.getId()}); String updateUserSql = (String)jdbcParams[0]; Object[] sqlParameters = (Object[])jdbcParams[1]; jdbcTemplate.update(updateUserSql, sqlParameters); } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void setPagedQueryDao(PagedQueryDao pagedQueryDao) { this.pagedQueryDao = pagedQueryDao; } public void setUserRecomService(UserRecomService userRecomService) { this.userRecomService = userRecomService; } public void setRechargeBlockchainService(RechargeBlockchainService rechargeBlockchainService) { this.rechargeBlockchainService = rechargeBlockchainService; } public void setLogService(LogService logService) { this.logService = logService; } public void setPasswordEncoder(PasswordEncoder passwordEncoder) { this.passwordEncoder = passwordEncoder; } public void setSecUserService(SecUserService secUserService) { this.secUserService = secUserService; } public void setWalletLogService(WalletLogService walletLogService) { this.walletLogService = walletLogService; } public void setTipService(TipService tipService) { this.tipService = tipService; } }