| | |
| | | return new Gson().fromJson(value, ExtractConfig.class); |
| | | } |
| | | |
| | | @Override |
| | | public List<Extract> listNeedPassRecord(BigDecimal maxMoney, Date minCreateTime, int page, int pageSize) { |
| | | DaoQuery daoQuery = new DaoQuery(); |
| | | daoQuery.state = Extract.STATE_NOT_PROCESS; |
| | | daoQuery.minCreateTime = minCreateTime; |
| | | daoQuery.maxMoney = maxMoney; |
| | | daoQuery.sortList = Arrays.asList(new String[]{"create_time asc"}); |
| | | daoQuery.start = (page - 1) * pageSize; |
| | | daoQuery.count = pageSize; |
| | | return extractMapper.list(daoQuery); |
| | | } |
| | | |
| | | @Override |
| | | public long countNeedPassRecord(BigDecimal maxMoney, Date minCreateTime) { |
| | | DaoQuery daoQuery = new DaoQuery(); |
| | | daoQuery.state = Extract.STATE_NOT_PROCESS; |
| | | daoQuery.minCreateTime = minCreateTime; |
| | | daoQuery.maxMoney = maxMoney; |
| | | return extractMapper.count(daoQuery); |
| | | } |
| | | |
| | | private void validateExtract(BigDecimal money, UserInfo user) throws ExtractException { |
| | | ExtractConfig config = getExtractConfig(user.getSystem()); |
| | | if (config == null) { |
| | |
| | | if (extract.getType() == ExtractPayType.alipay) { |
| | | transferByAlipay(extract, adminId); |
| | | } else { |
| | | transferByWX(extract, adminId, systemConfigService.getValueCache(user.getSystem(), SystemConfigKey.wxAppId)); |
| | | String result = transferByWX(extract, adminId, systemConfigService.getValueCache(user.getSystem(), SystemConfigKey.wxAppId)); |
| | | Map<String, String> resultMap = WXUtil.parseXML(result); |
| | | if ("SUCCESS".equalsIgnoreCase(resultMap.get("return_code")) && "SUCCESS".equalsIgnoreCase(resultMap.get("result_code"))) { |
| | | ; |
| | | } else { |
| | | |
| | | String errCode = resultMap.get("err_code"); |
| | | String errMsg = resultMap.get("err_code_des"); |
| | | boolean noMoney = "NOTENOUGH".equalsIgnoreCase(errCode); |
| | | if(noMoney) { |
| | | throw new ExtractException(ExtractException.CODE_WX_PAY_ACCOUNT_NO_MONEY,"微信支付账户余额不足"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | } |
| | | } |
| | | |
| | | private void transferByWX(Extract extract, String adminId, String wxAPPId) { |
| | | private String transferByWX(Extract extract, String adminId, String wxAPPId) { |
| | | //获取用户的系统 |
| | | UserInfo user = userInfoService.get(extract.getUser().getId()); |
| | | String appName = user.getSystem().getName(); |
| | | //理由 |
| | | String result = WXPayUtil.payToOpenId(wxAPPId, extract.getAccount(), Constant.wxTransferConfig.getMchId(), Constant.wxTransferConfig.getKey(), Constant.wxTransferConfig.getCertPwd(), this.getClass().getClassLoader().getResourceAsStream(Constant.wxTransferConfig.getCertPath()), "makemoney" + extract.getId(), extract.getMoney(), "提现", extract.getIp()); |
| | | String result = WXPayUtil.payToOpenId(wxAPPId, extract.getAccount(), Constant.wxTransferConfig.getMchId(), Constant.wxTransferConfig.getKey(), Constant.wxTransferConfig.getCertPwd(), this.getClass().getClassLoader().getResourceAsStream(Constant.wxTransferConfig.getCertPath()), "makemoney" + extract.getId(), extract.getMoney(), String.format("来自%s的提现",appName), extract.getIp()); |
| | | try { |
| | | CMQManager.getInstance().addExtractResultMsg(new ExtractTransferResultMQMsg(extract.getId(), result, adminId)); |
| | | logger.info("提现:添加处理队列成功-" + extract.getId()); |
| | | } catch (Exception e) { |
| | | logger.error("提现:微信提现CMQ异常:{}", result + ",提现信息" + GsonUtil.toJson(extract)); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | |
| | |
| | | if (noMoney) { |
| | | Extract updateExtract = new Extract(); |
| | | updateExtract.setId(extract.getId()); |
| | | updateExtract.setState(Extract.STATE_PROCESSING); |
| | | updateExtract.setState(Extract.STATE_NOT_PROCESS); |
| | | updateExtract.setReason(msg); |
| | | extractMapper.updateByPrimaryKeySelective(updateExtract); |
| | | } else { |