admin
2022-09-30 ffc56f912da5d6d842142ae4ea1856bc56f8bcb9
app/src/main/java/com/yeshi/makemoney/app/service/impl/money/ExtractServiceImpl.java
@@ -117,6 +117,27 @@
        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) {
@@ -261,10 +282,21 @@
        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)
@@ -372,18 +404,20 @@
        }
    }
    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;
    }
@@ -434,7 +468,7 @@
        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 {