admin
2020-06-15 6a47350594a4843f6cc36e5c94902d6fa97a6d4a
Merge remote-tracking branch 'origin/div' into div
6个文件已添加
41个文件已修改
1个文件已删除
1735 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/admin/OrderAdminController.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/UserInfoAdminController.java 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/UserSystemCouponAdminController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/redpack/RedPackAdminController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/user/cloud/UserCloudAdminController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserCloudControllerV2.java 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/dynamic/GoodsEvaluateDao.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2CountMapper.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserSystemCouponCountMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/user/cloud/UserCloudSendContentDao.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/user/cloud/UserCloudSendRecordDao.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/user/invite/ThreeSaleDetailDao.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/AlipayTradeWapPayDTO.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/aitaoker/RobotInfoDTO.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/cloud/CloudOrderMenuEnum.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/cloud/UserCloudGoods.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/config/AlipayWapConfig.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/UserCloudJob.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserSystemCouponCountMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/user/cloud/UserCloudMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/count/HongBaoV2CountServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/count/UserSystemCouponCountServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudGoodsServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudGroupServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudManageServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudOrderServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudSendRecordServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleDetailSerivceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/count/HongBaoV2CountService.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/count/UserSystemCouponCountService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/cloud/UserCloudGroupService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/cloud/UserCloudSendRecordService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/ThreeSaleDetailService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/alipay/UserCloudAlipayManager.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/Constant.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/aitaoker/AitaokerApiUtil.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/alipay/AlipayApi.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/alipay/AlipayWapConfig.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/user/UserCloudMessageListener.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/user/cloud/UserCloudInfoVO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/alipay/web/alipayCertPublicKey_RSA2.crt 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/alipay/web/alipayRootCert.crt 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/alipay/web/appCertPublicKey_2021001164655513.crt 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/alipay_wap.properties 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/log4j.properties 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/OrderAdminController.java
@@ -447,30 +447,51 @@
    
    @RequestMapping(value = "countOrderInfo")
    public void countOrderInfo(String callback, Long uid, PrintWriter out) {
        JSONObject data = new JSONObject();
        /* ---------  本月累计 ------------*/
        JSONObject month = new JSONObject();
        // 自购已到账
        long selfNumEnd = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, null, 1);
        month.put("selfNumEnd", hongBaoV2CountService.countOrderByCashArrival(uid, null, 1, 1));
        // 分享已到账
        long shareNumEnd = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, null, 2);
        month.put("shareNumEnd", hongBaoV2CountService.countOrderByCashArrival(uid, null, 2, 1));
        // 邀请已到账
        month.put("inviteNumEnd", hongBaoV2CountService.countOrderByCashArrival(uid, null, 3, 1));
        // 自购未到账
        long selfNum = hongBaoV2CountService.countMyDirectOrderByCashNotArrival(uid, null, 1);
        month.put("selfNum", hongBaoV2CountService.countOrderByCashNotArrival(uid, null, 1, 1));
        // 分享未到账
        long shareNum = hongBaoV2CountService.countMyDirectOrderByCashNotArrival(uid, null, 2);
        month.put("shareNum", hongBaoV2CountService.countOrderByCashNotArrival(uid, null, 2, 1));
        // 邀请未到账
        month.put("inviteNum", hongBaoV2CountService.countOrderByCashNotArrival(uid, null, 3, 1));
        data.put("month", month);
        
        
        /* ---------  历史累计 ------------*/
        JSONObject history = new JSONObject();
        // 自购已到账
        history.put("selfNumEnd", hongBaoV2CountService.countOrderByCashArrival(uid, null, 1, null));
        // 分享已到账
        history.put("shareNumEnd", hongBaoV2CountService.countOrderByCashArrival(uid, null, 2, null));
        // 邀请已到账
        history.put("inviteNumEnd", hongBaoV2CountService.countOrderByCashArrival(uid, null, 3, null));
        // 自购未到账
        history.put("selfNum", hongBaoV2CountService.countOrderByCashNotArrival(uid, null, 1, null));
        // 分享未到账
        history.put("shareNum", hongBaoV2CountService.countOrderByCashNotArrival(uid, null, 2, null));
        // 邀请未到账
        history.put("inviteNum", hongBaoV2CountService.countOrderByCashNotArrival(uid, null, 3, null));
        data.put("history", history);
        /* ---------  付款金额大于1 ------------*/
        // 自购已到账
        long selfAccountEnd = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, Constant.VIP_ORDER_PAY, 1);
        // 分享已到账
        long shareAccountEnd = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, Constant.VIP_ORDER_PAY, 2);
        // 自购未到账
        long selfAccount = hongBaoV2CountService.countMyDirectOrderByCashNotArrival(uid, Constant.VIP_ORDER_PAY, 1);
        long selfAccount = hongBaoV2CountService.countOrderByCashNotArrival(uid, Constant.VIP_ORDER_PAY, 1, null);
        // 分享未到账
        long shareAccount = hongBaoV2CountService.countMyDirectOrderByCashNotArrival(uid, Constant.VIP_ORDER_PAY, 2);
        JSONObject data = new JSONObject();
        data.put("selfNumEnd", selfNumEnd);
        data.put("shareNumEnd", shareNumEnd);
        data.put("selfNum", selfNum);
        data.put("shareNum", shareNum);
        long shareAccount = hongBaoV2CountService.countOrderByCashNotArrival(uid, Constant.VIP_ORDER_PAY, 2, null);
        data.put("selfAccountEnd", selfAccountEnd);
        data.put("shareAccountEnd", shareAccountEnd);
        data.put("selfAccount", selfAccount);
fanli/src/main/java/com/yeshi/fanli/controller/admin/UserInfoAdminController.java
@@ -2,6 +2,7 @@
import java.io.PrintWriter;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
@@ -31,11 +32,13 @@
import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode;
import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode.ForbiddenUserIdentifyCodeTypeEnum;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.UserActiveLog;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.bus.user.UserInviteValidNum;
import com.yeshi.fanli.entity.bus.user.UserRank;
import com.yeshi.fanli.entity.bus.user.vip.TearcherInfo;
import com.yeshi.fanli.entity.bus.user.vip.UserVIPInfo;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.integral.IntegralDetail;
@@ -44,9 +47,12 @@
import com.yeshi.fanli.exception.user.ForbiddenUserIdentifyCodeException;
import com.yeshi.fanli.exception.user.vip.UserVIPInfoException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
import com.yeshi.fanli.service.inter.count.UserInfoCountService;
import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
import com.yeshi.fanli.service.inter.money.extract.BindingAccountService;
import com.yeshi.fanli.service.inter.money.extract.ExtractService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService;
import com.yeshi.fanli.service.inter.user.UserAccountService;
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
@@ -55,9 +61,11 @@
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserRankService;
import com.yeshi.fanli.service.inter.user.integral.IntegralDetailService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleDetailService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.invite.UserInviteValidNumService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.service.inter.user.vip.TearcherService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.Constant;
@@ -120,6 +128,22 @@
    
    @Resource
    private ThreeSaleSerivce threeSaleSerivce;
    @Resource
    private ExtractService extractService;
    @Resource
    private HongBaoV2Service hongBaoV2Service;
    @Resource
    private TearcherService tearcherService;
    @Resource
    private ThreeSaleDetailService threeSaleDetailService;
    @Resource
    private HongBaoV2CountService hongBaoV2CountService;
    
    /**
     * 查询用户信息列表 正常用户/异常用户
@@ -290,6 +314,226 @@
            e.printStackTrace();
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
        }
    }
    /**
     * 资金统计
     * @param callback
     * @param uid
     * @param out
     */
    @RequestMapping(value = "statisticsMoney")
    public void statisticsMoney(String callback, Long uid, PrintWriter out) {
        try {
            UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
            if (user == null) {
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该用户ID不存在"));
                return;
            }
            Date minDate = null;
            Date maxDate = null;
            long timeStamp = System.currentTimeMillis();
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(timeStamp);
            List<UserMoneyDetailTypeEnum> typeList = new ArrayList<>();
            typeList.add(UserMoneyDetailTypeEnum.extract);
            typeList.add(UserMoneyDetailTypeEnum.extractNew);
            typeList.add(UserMoneyDetailTypeEnum.extractVerify);
            typeList.add(UserMoneyDetailTypeEnum.extractVerifyNew);
            typeList.add(UserMoneyDetailTypeEnum.extractReject);
            typeList.add(UserMoneyDetailTypeEnum.extractAutoWX);
            minDate = new Date(0L);
            maxDate = new Date(timeStamp);
            // 累计成功提现
            BigDecimal totalExtractMoney = userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate,
                    maxDate, 1).abs();
            // 提现中金额
            BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid);
            // 全部未到账
            minDate = new Date(0);
            maxDate = new Date(timeStamp);
            BigDecimal unRecievedMoney = hongBaoV2Service.getUnRecievedMoneyWithCreateTime(uid, minDate, maxDate);
            JSONObject data = new JSONObject();
            data.put("totalExtractMoney", totalExtractMoney);
            data.put("extractingMoney", extractingMoney);
            data.put("balanceMoney", user.getMyHongBao());
            data.put("unRecievedMoney", unRecievedMoney);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
            e.printStackTrace();
        }
    }
    /**
     * 权益统计
     * @param callback
     * @param uid
     * @param out
     */
    @RequestMapping(value = "statisticsGoldCoin")
    public void statisticsEquity(String callback, Long uid, PrintWriter out) {
        try {
            int goldCoin = 0;
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
            if (userInfoExtra != null) {
                goldCoin = userInfoExtra.getGoldCoin();
            }
            JSONObject data = new JSONObject();
            data.put("goldCoin", goldCoin);
            data.put("exchangeGoldCoin",new BigDecimal(integralDetailService.sumUseGoldCoin(uid)).abs());
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
            e.printStackTrace();
        }
    }
    /**
     *  用户粉丝统计
     *
     * @param callback
     * @param pageIndex
     * @param pageSize
     * @param id
     * @param out
     */
    @RequestMapping(value = "countTeamFans")
    public void countTeamFans(String callback, Long uid, PrintWriter out) {
        JSONObject data = new JSONObject();
        // 导师
        String tearcherName = "";
        TearcherInfo tearcherInfo = tearcherService.selectByUid(uid);
        if (tearcherInfo != null) {
            tearcherName = tearcherInfo.getNickName();
        }
        data.put("tearcherName", tearcherName);
        // 邀请人
        String bossName = "";
        UserInfo boss = threeSaleSerivce.getBoss(uid);
        if (boss != null) {
            bossName =  boss.getNickName();
        }
        data.put("bossName", bossName);
        // 邀请粉丝
        int doneFirst = 0;
        int doneSecond = 0;
        UserInviteValidNum userInviteValidNum = userInviteValidNumService.selectByPrimaryKey(uid);
        if (userInviteValidNum != null) {
            doneFirst = userInviteValidNum.getNumFirst() == null ? 0 : userInviteValidNum.getNumFirst();
            doneSecond = userInviteValidNum.getNumSecond() == null ? 0 : userInviteValidNum.getNumSecond();
        }
        data.put("doneFirst", doneFirst);
        data.put("doneSecond", doneSecond);
        // 九代粉丝数量
        data.put("nineFans", threeSaleDetailService.countByBossUidAndMaxLevel(uid, 9));
        // 有效粉丝
        data.put("first", threeSaleSerivce.countFirstTeam(uid));
        data.put("second", threeSaleSerivce.countSecondTeam(uid));
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
    }
    /**
     * 用户详细信息
     * @param callback
     * @param uid
     * @param out
     */
    @RequestMapping(value = "getInfoDetail")
    public void getInfoDetail(String callback, Long uid, PrintWriter out) {
        JSONObject data = new JSONObject();
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        data.put("phone", user.getPhone());
        data.put("state", user.getState());
        data.put("createtime", user.getCreatetime());
        String mark = "";
        String activation = "未激活";
        UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
        if (userInfoExtra != null) {
            if (!StringUtil.isNullOrEmpty(userInfoExtra.getMark())) {
                mark = userInfoExtra.getMark();
            }
            String inviteCode = userInfoExtra.getInviteCode();
            if (!StringUtil.isNullOrEmpty(inviteCode)) {
                activation = "已激活";
            } else {
                activation = "未激活";
            }
        }
        data.put("mark", mark);
        data.put("activation", activation);
        // 最近一次下单时间
        String orderTime = "";
        Date lastOrderTime = hongBaoV2CountService.getLastHongBaoTime(uid);
        if (lastOrderTime != null) {
            orderTime = TimeUtil.formatDate(lastOrderTime);
        }
        data.put("orderTime", orderTime);
        // 最近登录时间
        String activeTime = "";
        UserActiveLog userActiveLog = userActiveLogService.getUserLatestActiveInfo(uid);
        if (userActiveLog != null) {
            activeTime = TimeUtil.formatDate(userActiveLog.getCreateTime());
        }
        data.put("activeTime", activeTime);
//
//        // 显示用户微信 淘宝 老版本存在
//        String wxUnionId = userInfoVO.getWxUnionId();
//        if (wxUnionId == null || wxUnionId.trim().length() == 0) {
//            userInfoVO.setWxName(null);
//        }
//
//        // 是否绑定支付宝(购买 + 分享权限)
//        String taoBaoUid = userInfoVO.getTaoBaoUid();
//        String tbSpecialId = userInfoVO.getTbSpecialId();
//        String tbRelationId = userInfoVO.getTbRelationId();
//        if (StringUtil.isNullOrEmpty(taoBaoUid) || StringUtil.isNullOrEmpty(tbSpecialId)
//                || StringUtil.isNullOrEmpty(tbRelationId)) {
//            userInfoVO.setTbName(null);
//            userInfoVO.setTaoBaoUid(null);
//        }
//
//        Long uid = userInfoVO.getId();
//        /* 绑定收款账号信息 */
//        List<BindingAccount> account = bindingAccountMapper.selectByUid(uid);
//        if (account != null && account.size() > 0) {
//            BindingAccount bindingAccount = account.get(0);
//            Integer type = bindingAccount.getType();
//            if (type != null && type == 1) {
//                // 支付宝
//                userInfoVO.setAccountAlipay(bindingAccount.getAccount());
//                userInfoVO.setAccountName(bindingAccount.getName());
//                userInfoVO.setAccountBindId(bindingAccount.getId());
//
//            } else if (type != null && type == 2) {
//                // 微信
//                userInfoVO.setAccountWX(bindingAccount.getAccount());
//                userInfoVO.setAccountNameWX(bindingAccount.getName());
//                userInfoVO.setAccountBindIdWX(bindingAccount.getId());
//            }
//        }
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
    }
    
    
@@ -1391,31 +1635,7 @@
    
    
    
    /**
     *  用户粉丝统计
     *
     * @param callback
     * @param pageIndex
     * @param pageSize
     * @param id
     * @param out
     */
    @RequestMapping(value = "countTeamFans")
    public void countTeamFans(String callback, Long uid, PrintWriter out) {
        int doneFirst = 0;
        int doneSecond = 0;
        UserInviteValidNum userInviteValidNum = userInviteValidNumService.selectByPrimaryKey(uid);
        if (userInviteValidNum != null) {
            doneFirst = userInviteValidNum.getNumFirst() == null ? 0 : userInviteValidNum.getNumFirst();
            doneSecond = userInviteValidNum.getNumSecond() == null ? 0 : userInviteValidNum.getNumSecond();
        }
        JSONObject data = new JSONObject();
        data.put("doneFirst", doneFirst);
        data.put("doneSecond", doneSecond);
        data.put("first", threeSaleSerivce.countFirstTeam(uid));
        data.put("second", threeSaleSerivce.countSecondTeam(uid));
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
    }
            
}
fanli/src/main/java/com/yeshi/fanli/controller/admin/UserSystemCouponAdminController.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.controller.admin;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
@@ -11,7 +12,9 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
import com.yeshi.fanli.entity.bus.user.UserSystemCouponGiveRecord;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.service.inter.count.UserSystemCouponCountService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponGiveRecordService;
import com.yeshi.fanli.tag.PageEntity;
@@ -339,4 +342,55 @@
    }
    /**
     * 券统计
     * @param callback
     * @param uid
     * @param out
     */
    @RequestMapping(value = "statisticsCoupon")
    public void statisticsCoupon(String callback, Long uid, PrintWriter out) {
        try {
            List<String> listSource = new ArrayList<>();
            listSource.add(UserSystemCoupon.SOURCE_EXCHANGE);
            // 免单券
            List<String> listFree = new ArrayList<>();
            listFree.add(CouponTypeEnum.freeCoupon.name());
            listFree.add(CouponTypeEnum.welfareFreeCoupon.name());
            listFree.add(CouponTypeEnum.freeCouponBuy.name());
            listFree.add(CouponTypeEnum.freeCouponGive.name());
            // 累计-金币兑换
            long freeTotal = userSystemCouponCountService.countCouponNum(uid, null, null, listFree,listSource);
            // 使用中
            long freeUseIn = userSystemCouponCountService.countCouponNum(uid, UserSystemCoupon.STATE_IN_USE, null, listFree, null);
            // 剩余
            long freeUseCan = userSystemCouponCountService.countCouponNum(uid, UserSystemCoupon.STATE_CAN_USE, null, listFree, null);
            long freeUseActive = userSystemCouponCountService.countCouponNum(uid, 0, 0, listFree, null);
            // 奖励券
            listFree.clear();
            listFree.add(CouponTypeEnum.rebatePercentCoupon.name());
            // 累计-金币兑换
            long rebateTotal = userSystemCouponCountService.countCouponNum(uid, null, null, listFree, listSource);
            // 使用中
            long rebateUseIn = userSystemCouponCountService.countCouponNum(uid, UserSystemCoupon.STATE_IN_USE, null, listFree, null);
            // 剩余
            long rebateUseCan = userSystemCouponCountService.countCouponNum(uid, UserSystemCoupon.STATE_CAN_USE, null, listFree, null);
            JSONObject data = new JSONObject();
            data.put("freeTotal", freeTotal);
            data.put("freeUseIn", freeUseIn);
            data.put("freeLeft", freeUseCan + freeUseActive);
            data.put("rebateTotal", rebateTotal);
            data.put("rebateUseIn", rebateUseIn);
            data.put("rebateLeft", rebateUseCan);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/admin/redpack/RedPackAdminController.java
@@ -216,5 +216,25 @@
        }
    }
    /**
     * 红包统计
     * @param callback
     * @param uid
     * @param out
     */
    @RequestMapping(value = "statisticsRedPack")
    public void statisticsRedPack(String callback, Long uid, PrintWriter out) {
        try {
            JSONObject data = new JSONObject();
            data.put("balance", redPackBalanceService.getBalance(uid));
            data.put("exchanging", redPackExchangeService.countByUidAndState(uid, RedPackExchange.STATE_INIT));
            data.put("exchangeSucceed", redPackExchangeService.countByUidAndState(uid, RedPackExchange.STATE_SUCCESS));
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/admin/user/cloud/UserCloudAdminController.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.controller.admin.user.cloud;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
@@ -12,12 +13,14 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloud;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGoods;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGroup;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudOrder;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudSendContent;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudSendRecord;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
@@ -228,7 +231,7 @@
     * @param out
     */
    @RequestMapping(value = "getSendContent")
    public void getSendContent(String callback, String pid, Integer origin, PrintWriter out) {
    public void getSendContent(String callback, String pid, PrintWriter out) {
        try {
            List<UserCloudSendContent> list = userCloudSendContentService.getByPid(pid);
            if (list == null || list.size() == 0) {
@@ -341,4 +344,29 @@
    }
    
    
    /**
     * 发圈记录统计
     * @param callback
     * @param uid
     * @param out
     */
    @RequestMapping(value = "statisticsCloud")
    public void statisticsCloud(String callback, Long uid, PrintWriter out) {
        try {
            long orderNum = userCloudOrderService.countOrderRecord(uid, 1);
            long recordNum = userCloudSendRecordService.countRecordNum(uid, null);
            long goodsNum = userCloudGoodsService.countByUid(uid);
            JSONObject data = new JSONObject();
            data.put("orderNum", orderNum);
            data.put("recordNum", recordNum);
            data.put("goodsNum", goodsNum);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserCloudControllerV2.java
@@ -33,14 +33,13 @@
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.user.cloud.UserCloudException;
import com.yeshi.fanli.exception.user.cloud.UserCloudGroupException;
import com.yeshi.fanli.exception.user.cloud.UserCloudOrderException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudGoodsService;
@@ -57,8 +56,8 @@
import com.yeshi.fanli.util.aitaoker.AitaokerApiUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.homemodule.BannerVO;
import com.yeshi.fanli.vo.user.cloud.CloudOrderMenuVO;
import com.yeshi.fanli.vo.user.cloud.UserCloudInfoVO;
@@ -102,6 +101,8 @@
    @Resource
    private RedisManager redisManager;
    
    @Resource
    private SwiperPictureService swiperPictureService;
    /**
     * 查询开通记录
@@ -241,6 +242,13 @@
                }
            }
        }
        // 教程
        List<BannerVO> listBanner = swiperPictureService.getByBannerCard("cloud_course");
        if (listBanner != null && listBanner.size() > 0) {
            cloudInfoVO.setCourse(listBanner.get(0));
        }
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(cloudInfoVO));
    }
@@ -396,7 +404,7 @@
     * @param out
     */
    @RequestMapping(value = "switchCircleState")
    public void switchCircleState(String callback, AcceptData acceptData, Long uid, Boolean state, PrintWriter out) {
    public void switchCircleState(String callback, AcceptData acceptData, Long uid, Integer state, PrintWriter out) {
        if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
@@ -405,8 +413,14 @@
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "状态不能为空"));
            return;
        }
        boolean reslut = false;
        if (state == 1) {
            reslut = true;
        }
        try {
            userCloudGroupService.switchCircleState(uid, state);
            userCloudGroupService.switchCircleState(uid, reslut);
        } catch (UserCloudGroupException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
        }
@@ -455,7 +469,7 @@
     * @param out
     */
    @RequestMapping(value = "switchGroupState")
    public void switchGroupState(String callback, AcceptData acceptData, Long uid, Long id, Boolean state,
    public void switchGroupState(String callback, AcceptData acceptData, Long uid, Long id, Integer state,
            PrintWriter out) {
        if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
@@ -465,12 +479,60 @@
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "参数不能为空"));
            return;
        }
        boolean reslut = false;
        if (state == 1) {
            reslut = true;
        }
        try {
            userCloudGroupService.switchGroupState(uid, id, state);
            userCloudGroupService.switchGroupState(uid, id, reslut);
            // 获取最新群
            List<UserCloudGroup> list = userCloudGroupService.listGroupByUid(uid);
            if (list == null)
                list = new ArrayList<>();
            JSONObject data = new JSONObject();
            data.put("listGroup", list);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (UserCloudGroupException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
        }
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("操作成功"));
    }
    /**
     * 设置状态
     *
     * @param callback
     * @param acceptData
     * @param uid
     * @param type
     * @param out
     */
    @RequestMapping(value = "deleteGroup")
    public void switchGroupState(String callback, AcceptData acceptData, Long uid, Long id,
            PrintWriter out) {
        if (uid == null || id == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "参数不完整"));
            return;
        }
        try {
            userCloudGroupService.deleteGroup(uid, id);
            // 获取最新群
            List<UserCloudGroup> list = userCloudGroupService.listGroupByUid(uid);
            if (list == null)
                list = new ArrayList<>();
            JSONObject data = new JSONObject();
            data.put("listGroup", list);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (UserCloudGroupException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
        }
    }
    /**
@@ -518,6 +580,10 @@
                    if (goodsState != null && goodsState != 1) {
                        commonGoods.setState(2);
                    }
                }
                if (state != null && state == UserCloudGoods.STATE_INVALID) {
                    commonGoods.setState(1);
                }
                GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, paramsDTO);
@@ -585,18 +651,26 @@
     * @param out
     */
    @RequestMapping(value = "switchState")
    public void switchState(String callback, AcceptData acceptData, Long uid, Integer type, Boolean state,
    public void switchState(String callback, AcceptData acceptData, Long uid, Integer type, Integer state,
            PrintWriter out) {
        if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
        if (uid == null || type == null || state == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "参数不完整"));
            return;
        }
        if (type == 1) {
            userCloudManageService.save(uid, state, null);
        } else {
            userCloudManageService.save(uid, null, state);
        boolean reslut = false;
        if (state == 1) {
            reslut = true;
        }
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("操作成功"));
        if (type == 1) {
            userCloudManageService.save(uid, reslut, null);
        } else {
            userCloudManageService.save(uid, null, reslut);
        }
        JSONObject data = new JSONObject();
        data.put("state", reslut);
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
    }
    /**
@@ -635,7 +709,7 @@
            key = StringUtil.Md5(key);
            redisManager.cacheCommonString(key , builder.toString() , 60*10);
            
            String link = configService.get(ConfigKeyEnum.cloudAlipayNotifyLink.getKey()) +"?key=%s";
            String link = configService.get(ConfigKeyEnum.cloudAlipayJumpLink.getKey()) +"?key=%s";
            JSONObject dataObject = new JSONObject();
            dataObject.put("link", String.format(link, key));
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(dataObject));
@@ -647,6 +721,34 @@
    
    /**
     * 支付完成
     *
     * @param id
     * @param out
     */
    @RequestMapping(value = "payEnd")
    public void payEnd(String callback, AcceptData acceptData, Long uid, Long id, PrintWriter out) {
        if (uid == null || id == null) {
            out.print(JsonUtil.loadFalseResult(1, "参数信息缺失"));
            return;
        }
        try {
            // 检测是否支付完成
            userCloudAlipayManager.tradeQueryByOrderId(id);
            UserCloudOrder cloudOrder = userCloudOrderService.selectByPrimaryKey(id);
            JSONObject dataObject = new JSONObject();
            dataObject.put("money", cloudOrder.getMoney());
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(dataObject));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult(1, "回调信息失败"));
            LogHelper.errorDetailInfo(e);
        }
    }
    /**
     * 动态一键发单
     * @param callback
     * @param acceptData
fanli/src/main/java/com/yeshi/fanli/dao/dynamic/GoodsEvaluateDao.java
@@ -332,8 +332,8 @@
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("dynamicType").is(1));
        list.add(Criteria.where("state").is(1));
        list.add(Criteria.where("startTime").gt(new Date()));
        list.add(Criteria.where("startTime").lte(date));
        list.add(Criteria.where("startTime").gt(date));
        list.add(Criteria.where("startTime").lte(new Date()));
        list.add(new Criteria().orOperator(Criteria.where("type").is("single"),
                    new Criteria().andOperator(Criteria.where("type").is("activity"))));
        
@@ -344,7 +344,7 @@
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.with(new Sort(Sort.Direction.ASC,"startTime"));
        query.with(new Sort(Sort.Direction.DESC,"startTime"));
        
        return mongoTemplate.find(query, GoodsEvaluate.class);
    }
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2CountMapper.java
@@ -144,16 +144,29 @@
             @Param("type")Integer type);
    
    /**
     *  注:1笔且付款总金额不小于 payment 元(退款为失效
     * 统计已到账订单数量
     * @param uid
     * @param payment
     * @param payment -付款金额
     * @param type -类型: 1自购 2分享 3邀请  4自购+分享
     * @param dateType 1本月
     * @return
     */
    Long countMyDirectOrderByCashNotArrival(@Param("uid") Long uid, @Param("payment") BigDecimal payment,
             @Param("type")Integer type);
    Long countOrderByCashArrival(@Param("uid") Long uid, @Param("payment") BigDecimal payment,
             @Param("type")Integer type, @Param("dateType")Integer dateType);
    
    
    /**
     * 统计未到账订单数量
     * @param uid
     * @param payment -付款金额
     * @param type -类型: 1自购 2分享 3邀请  4自购+分享
     * @param dateType 1本月
     * @return
     */
    Long countOrderByCashNotArrival(@Param("uid") Long uid, @Param("payment") BigDecimal payment,
             @Param("type")Integer type, @Param("dateType")Integer dateType);
    /**
     * 查询用户个类型预计奖金
     * @param uid
     * @param dateType 日期类型
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserSystemCouponCountMapper.java
@@ -136,4 +136,14 @@
     */
    BigDecimal countCouponNumByDay(@Param("type") String type, @Param("preDay") String preDay);
    
    /**
     * 统计券数量
     * @param state
     * @param activated
     * @param list
     * @return
     */
    Long countCouponNum(@Param("uid")Long uid,  @Param("state") Integer state, @Param("activated") Integer activated,
            @Param("list")List<String> list, @Param("listSource")List<String> listSource);
}
fanli/src/main/java/com/yeshi/fanli/dao/user/cloud/UserCloudSendContentDao.java
@@ -1,6 +1,5 @@
package com.yeshi.fanli.dao.user.cloud;
import java.util.ArrayList;
import java.util.List;
import org.springframework.data.mongodb.core.query.Criteria;
@@ -21,15 +20,8 @@
     * @return
     */
    public List<UserCloudSendContent> getByPid(String pid) {
        List<Criteria> list = new ArrayList<Criteria>();
        list.add(Criteria.where("pid").is(pid));
        Query query = new Query();
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        query.addCriteria(Criteria.where("pid").is(pid));
        return findList(query);
    }
}
fanli/src/main/java/com/yeshi/fanli/dao/user/cloud/UserCloudSendRecordDao.java
@@ -104,4 +104,22 @@
        }
        return count(query);
    }
    public long countRecordNum(Long uid, Integer sendOrigin){
        List<Criteria> list = new ArrayList<Criteria>();
        if (uid != null)
            list.add(Criteria.where("uid").is(uid));
        if (sendOrigin != null)
            list.add(Criteria.where("sendOrigin").is(sendOrigin));
        Query query = new Query();
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
                cas[i] = list.get(i);
            query.addCriteria(new Criteria().andOperator(cas));
        }
        return count(query);
    }
}
fanli/src/main/java/com/yeshi/fanli/dao/user/invite/ThreeSaleDetailDao.java
@@ -68,6 +68,14 @@
        return count(query);
    }
    public long countByBossUidAndMaxLevel(Long bossUid, int minLevel) {
        Query query = new Query();
        query.addCriteria(new Criteria().andOperator(Criteria.where("bossUid").is(bossUid),
                Criteria.where("level").lte(minLevel)));
        return count(query);
    }
    public List<ThreeSaleDetail> listByWorkerUid(Long uid) {
        Query query = new Query();
        query.addCriteria(Criteria.where("workerUid").is(uid));
fanli/src/main/java/com/yeshi/fanli/dto/AlipayTradeWapPayDTO.java
New file
@@ -0,0 +1,85 @@
package com.yeshi.fanli.dto;
public class AlipayTradeWapPayDTO {
    // 收款方账号
    private String sellerId;
    // 订单号
    private String outTradeNo;
    // 订单金额:0.01元,精准到分
    private String totalAmount;
    // 订单标题
    private String subject;
    // 销售产品码,商家和支付宝签约的产品码
    private String productCode;
    // 该笔订单允许的最晚付款时间,逾期将关闭交易
    private String timeoutExpress;
    // 支付成功后返回哪个前端页面
    private String returnUrl;
    // 支付成功后回调地址
    private String notifyUrl;
    public String getSellerId() {
        return sellerId;
    }
    public void setSellerId(String sellerId) {
        this.sellerId = sellerId;
    }
    public String getOutTradeNo() {
        return outTradeNo;
    }
    public void setOutTradeNo(String outTradeNo) {
        this.outTradeNo = outTradeNo;
    }
    public String getTotalAmount() {
        return totalAmount;
    }
    public void setTotalAmount(String totalAmount) {
        this.totalAmount = totalAmount;
    }
    public String getSubject() {
        return subject;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }
    public String getProductCode() {
        return productCode;
    }
    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }
    public String getTimeoutExpress() {
        return timeoutExpress;
    }
    public void setTimeoutExpress(String timeoutExpress) {
        this.timeoutExpress = timeoutExpress;
    }
    public String getReturnUrl() {
        return returnUrl;
    }
    public void setReturnUrl(String returnUrl) {
        this.returnUrl = returnUrl;
    }
    public String getNotifyUrl() {
        return notifyUrl;
    }
    public void setNotifyUrl(String notifyUrl) {
        this.notifyUrl = notifyUrl;
    }
}
fanli/src/main/java/com/yeshi/fanli/dto/aitaoker/RobotInfoDTO.java
@@ -6,14 +6,17 @@
    @SerializedName("id")
    private Integer id;
    
    @SerializedName("robot_type")
    private Integer robotType;
    @SerializedName("uid")
    private String uid;
    
    @SerializedName("wechatrobot")
    private String wechatrobot;
    
    @SerializedName("amount")
    private String amount;
    @SerializedName("wx_id")
    private String wxId;
    
    @SerializedName("amount_used")
    private String amountUsed;
@@ -36,10 +39,10 @@
    @SerializedName("end_time")
    private String endTime; //到期时间 1590139325
    
    @SerializedName("wId")
    @SerializedName("remark")
    private String remark;
    
    @SerializedName("wId")
    @SerializedName("wc_id")
    private String wcId; //微信实例id
    
    @SerializedName("agent_uid")
@@ -47,6 +50,9 @@
    
    @SerializedName("is_enabled")
    private String isEnabled; //0 正常 1暂停
    @SerializedName("is_new")
    private String isNew; // 0 正常 1暂停
    public String getUid() {
        return uid;
@@ -160,13 +166,28 @@
        this.id = id;
    }
    public String getAmount() {
        return amount;
    public Integer getRobotType() {
        return robotType;
    }
    public void setAmount(String amount) {
        this.amount = amount;
    public void setRobotType(Integer robotType) {
        this.robotType = robotType;
    }
    public String getWxId() {
        return wxId;
    }
    public void setWxId(String wxId) {
        this.wxId = wxId;
    }
    public String getIsNew() {
        return isNew;
    }
    public void setIsNew(String isNew) {
        this.isNew = isNew;
    }
    
}
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/cloud/CloudOrderMenuEnum.java
@@ -3,20 +3,17 @@
import com.yeshi.fanli.util.StringUtil;
public enum CloudOrderMenuEnum {
    robotMonth(20.00, 1, 1, "机器人月套餐", "一个月"),
    robotMonth1(20.00, 1, 1, "机器人月套餐", "三个月"),
    robotMonth2(20.00, 1, 1, "机器人月套餐", "半年"),
    robotMonth3(20.00, 1, 1, "机器人月套餐", "一年");
    robotMonth(0.01, 4, 1, "全能机器人", "一个月");
    
    private double money;
    private Integer type;
    private Integer robotType;
    private Integer month;
    private String desc;
    private String descShow;
    private CloudOrderMenuEnum(double money, Integer type, Integer month, String desc, String descShow) {
    private CloudOrderMenuEnum(double money, Integer robotType, Integer month, String desc, String descShow) {
        this.money = money;
        this.type = type;
        this.robotType = robotType;
        this.month = month;
        this.desc = desc;
        this.descShow = descShow;
@@ -26,8 +23,8 @@
        return money;
    }
    public Integer getType() {
        return type;
    public Integer getRobotType() {
        return robotType;
    }
    public Integer getMonth() {
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/cloud/UserCloudGoods.java
@@ -19,6 +19,7 @@
    public static int STATE_NORMAL = 0;// 初始
    public static int STATE_SHARED = 1;// 1已分享
    public static int STATE_INVALID = 2;// 2已失效
    
    @Expose
    @Column(name = "ug_id")
fanli/src/main/java/com/yeshi/fanli/entity/config/AlipayWapConfig.java
New file
@@ -0,0 +1,80 @@
package com.yeshi.fanli.entity.config;
import org.yeshi.utils.annotation.Map;
public class AlipayWapConfig {
    @Map("appId")
    private String appId;
    @Map("sellerId")
    private String sellerId;
    @Map("private_key")
    private String privateKey;
    @Map("public_key")
    private String publicKey;
    @Map("app_cert_path")
    private String appCertPath;
    @Map("alipay_root_cert_path")
    private String alipayRootCertPath ;
    @Map("alipay_cert_path")
    private String alipayCertPath ;
    public String getAppCertPath() {
        return appCertPath;
    }
    public void setAppCertPath(String appCertPath) {
        this.appCertPath = appCertPath;
    }
    public String getAlipayRootCertPath() {
        return alipayRootCertPath;
    }
    public void setAlipayRootCertPath(String alipayRootCertPath) {
        this.alipayRootCertPath = alipayRootCertPath;
    }
    public String getAlipayCertPath() {
        return alipayCertPath;
    }
    public void setAlipayCertPath(String alipayCertPath) {
        this.alipayCertPath = alipayCertPath;
    }
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getPrivateKey() {
        return privateKey;
    }
    public void setPrivateKey(String privateKey) {
        this.privateKey = privateKey;
    }
    public String getSellerId() {
        return sellerId;
    }
    public void setSellerId(String sellerId) {
        this.sellerId = sellerId;
    }
    public String getPublicKey() {
        return publicKey;
    }
    public void setPublicKey(String publicKey) {
        this.publicKey = publicKey;
    }
}
fanli/src/main/java/com/yeshi/fanli/job/UserCloudJob.java
@@ -11,6 +11,7 @@
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudOrder;
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudOrderService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudService;
@@ -48,6 +49,7 @@
            try {
                userCloudAlipayManager.tradeQueryByOrderId(cloudOrder.getId());
            } catch (Exception e) {
                LogHelper.errorDetailInfo(e);
                e.printStackTrace();
            }
        }
fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml
@@ -307,15 +307,56 @@
    </select>
    
    
    <select id="countMyDirectOrderByCashNotArrival" resultType="Long">
    <select id="countOrderByCashArrival" resultType="Long">
        SELECT COUNT(0)  FROM (SELECT co.`co_order_no` FROM yeshi_ec_hongbao_v2 v2
        LEFT JOIN yeshi_ec_hongbao_order h ON v2.`hb_id` = h.`ho_hongbao_id`
        LEFT JOIN yeshi_ec_hongbao_order h ON h.`ho_hongbao_id` = IF(v2.hb_pid IS NULL,v2.hb_id,v2.hb_pid)
        LEFT JOIN yeshi_ec_common_order co ON h.`ho_order_id` = co.`co_id`
        WHERE  v2.`hb_uid` = #{uid} AND  v2.`hb_state` = 3
             <if test="type == 1"> <!-- 自购订单 -->
                 AND v2.`hb_type` = 1
             </if>
             <if test="type == 2">  <!-- 分享订单 -->
                 AND v2.`hb_type` = 20
             </if>
             <if test="type == 3"> <!-- 邀请订单 -->
                 AND (v2.`hb_type` = 5 OR v2.`hb_type` = 6 OR v2.`hb_type` = 7 OR v2.`hb_type` = 21 OR v2.`hb_type` = 22)
             </if>
             <if test="type == 4"> <!-- 直接相关订单 -->
                 AND (v2.`hb_type` = 1 OR v2.`hb_type` = 20)
             </if>
             <if test="payment != null"> <!-- 付款金额限制 -->
                 AND co.`co_payment` >=  #{payment}
             </if>
             <if test="dateType == 1"> <!-- 本月订单 -->
                 AND DATE_FORMAT(co.`co_third_create_time`,'%Y%m')=DATE_FORMAT(CURDATE(),'%Y%m')
             </if>
        GROUP BY co.`co_order_no`,co.`co_source_type`)A
    </select>
    <select id="countOrderByCashNotArrival" resultType="Long">
        SELECT COUNT(0)  FROM (SELECT co.`co_order_no` FROM yeshi_ec_hongbao_v2 v2
        LEFT JOIN yeshi_ec_hongbao_order h ON h.`ho_hongbao_id` = IF(v2.hb_pid IS NULL,v2.hb_id,v2.hb_pid)
        LEFT JOIN yeshi_ec_common_order co ON h.`ho_order_id` = co.`co_id`
        WHERE  v2.`hb_uid` = #{uid} AND (v2.`hb_state` = 1 or v2.`hb_state` = 2)
             <if test="type == 1">AND v2.`hb_type` = 1</if>
             <if test="type == 2">AND v2.`hb_type` = 20</if>
             <if test="type == null">AND (v2.`hb_type` = 1 OR v2.`hb_type` = 20)</if>
             <if test="payment != null">AND co.`co_payment` >=  #{payment}</if>
             <if test="type == 1"> <!-- 自购订单 -->
                 AND v2.`hb_type` = 1
             </if>
             <if test="type == 2">  <!-- 分享订单 -->
                 AND v2.`hb_type` = 20
             </if>
             <if test="type == 3"> <!-- 邀请订单 -->
                 AND (v2.`hb_type` = 5 OR v2.`hb_type` = 6 OR v2.`hb_type` = 7 OR v2.`hb_type` = 21 OR v2.`hb_type` = 22)
             </if>
             <if test="type == 4"> <!-- 直接相关订单 -->
                 AND (v2.`hb_type` = 1 OR v2.`hb_type` = 20)
             </if>
             <if test="payment != null"> <!-- 付款金额限制 -->
                 AND co.`co_payment` >=  #{payment}
             </if>
             <if test="dateType == 1"> <!-- 本月订单 -->
                 AND DATE_FORMAT(co.`co_third_create_time`,'%Y%m')=DATE_FORMAT(CURDATE(),'%Y%m')
             </if>
        GROUP BY co.`co_order_no`,co.`co_source_type`)A
    </select>
    
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserSystemCouponCountMapper.xml
@@ -292,4 +292,27 @@
  </select>
  
 
  <select id="countCouponNum" resultType="java.lang.Long">
    SELECT IFNULL(count(uc.`usc_id`),0)  FROM `yeshi_ec_user_system_coupon` uc
    LEFT JOIN yeshi_ec_system_coupon p  ON  p.`sc_id`= uc.`usc_coupon_id`
    WHERE 1=1
        <if test="uid != null">
            AND uc.`usc_uid` = #{uid}
        </if>
        <if test="state != null">
            AND uc.usc_state = #{state}
        </if>
        <if test="activated != null">
            AND uc.`usc_state_activate` = #{activated}
        </if>
        <if test="list != null">
            AND p.`sc_type` in
            <foreach collection="list" item="item" open="(" close=")" separator=",">#{item}</foreach>
        </if>
        <if test="listSource != null">
            AND uc.`usc_source` in
            <foreach collection="listSource" item="item" open="(" close=")" separator=",">#{item}</foreach>
        </if>
  </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/mapping/user/cloud/UserCloudMapper.xml
@@ -100,7 +100,7 @@
  <select id="listValidUid" resultType="Long">
    SELECT * FROM (SELECT DISTINCT d.`uc_uid` FROM yeshi_ec_user_cloud d
    WHERE d.`uc_end_time` > NOW() AND d.uc_wx_id IS NOT NULL)A
    LIMIT #{start},{count}
    LIMIT #{start},#{count}
  </select>
  
  <select id="query" resultMap="BaseResultMap">
fanli/src/main/java/com/yeshi/fanli/service/impl/count/HongBaoV2CountServiceImpl.java
@@ -159,14 +159,6 @@
        return count;
    }
    
    @Override
    public long countMyDirectOrderByCashNotArrival(Long uid, BigDecimal payment, Integer type) {
        Long count = hongBaoV2CountMapper.countMyDirectOrderByCashNotArrival(uid, payment, type);
        if (count == null) {
            count = 0L;
        }
        return count;
    }
    
    @Override
    public BigDecimal getRewardMoneyToCount(Long uid, Integer dateType, Integer hbType, List<Integer> listSource) {
@@ -218,6 +210,22 @@
         return money;
    }
    
    @Override
    public long countOrderByCashArrival(Long uid, BigDecimal payment, Integer type, Integer dateType) {
        Long count = hongBaoV2CountMapper.countOrderByCashArrival(uid, payment, type, dateType);
        if (count == null) {
            count = 0L;
        }
        return count;
    }
    
    @Override
    public long countOrderByCashNotArrival(Long uid, BigDecimal payment, Integer type, Integer dateType) {
        Long count = hongBaoV2CountMapper.countOrderByCashNotArrival(uid, payment, type, dateType);
        if (count == null) {
            count = 0L;
        }
        return count;
    }
    
}
fanli/src/main/java/com/yeshi/fanli/service/impl/count/UserSystemCouponCountServiceImpl.java
@@ -277,4 +277,13 @@
        return userSystemCouponCountMapper.countCouponNumByDay(typeEnum.name(), preDay);
    }
    
    @Override
    public long countCouponNum(Long uid, Integer state, Integer activated, List<String> list, List<String> listSource){
         Long count = userSystemCouponCountMapper.countCouponNum(uid, state, activated, list, listSource);
         if (count == null)
             count = 0L;
         return count;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java
@@ -314,6 +314,14 @@
            } else {
                userInfoVO.setBossName("上级:" + boss.getNickName());
            }
            // 微信号
            String wxId = userInfoVO.getWxId();
            if (StringUtil.isNullOrEmpty(wxId)) {
                userInfoVO.setWxId("");
            } else {
                userInfoVO.setWxId("微信号:" + wxId);
            }
        }
        return userList;
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudGoodsServiceImpl.java
@@ -5,6 +5,7 @@
import javax.annotation.Resource;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import com.aliyun.openservices.ons.api.Message;
@@ -178,6 +179,7 @@
        return result;
    }
    @Async
    @Override
    public void sendGoodsMQMsg(Long uid) {
        if (Constant.IS_TEST) {
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudGroupServiceImpl.java
@@ -12,6 +12,7 @@
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGroup;
import com.yeshi.fanli.exception.user.cloud.UserCloudGroupException;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudGroupService;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
@@ -49,6 +50,11 @@
        for (UserCloudGroup userCloudGroup: list) {
            if (groupId.equals(userCloudGroup.getGroupId())) {
                exist = true;
                // 群名为空
                if (StringUtil.isNullOrEmpty(groupName)) {
                    return;
                }
                // 群名字变化
                if (!groupName.equals(userCloudGroup.getGroupName())) {
                    UserCloudGroup update = new UserCloudGroup();
@@ -62,6 +68,11 @@
        
        if (exist) 
            return;
        // 群名为空
        if (StringUtil.isNullOrEmpty(groupName)) {
            groupName = "本群未命名名称";
        }
        
        UserCloudGroup cloudGroup = new UserCloudGroup();
        cloudGroup.setUid(uid);
@@ -103,6 +114,17 @@
        userCloudGroupMapper.updateByPrimaryKeySelective(update);
    }
    
    @Override
    public void deleteGroup(long uid, long id) throws UserCloudGroupException{
        UserCloudGroup cloudGroup = userCloudGroupMapper.selectByPrimaryKey(id);
        if (cloudGroup == null || cloudGroup.getUid() != uid)
            throw new UserCloudGroupException(1, "该记录已不存在");
        if (cloudGroup.getUid() != uid) {
            throw new UserCloudGroupException(1, "该群已不存在");
        }
        userCloudGroupMapper.deleteByPrimaryKey(id);
    }
    
    @Override
    public void deleteGroupByUid(Long uid){
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudManageServiceImpl.java
@@ -5,6 +5,7 @@
import javax.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import com.yeshi.fanli.dao.mybatis.user.cloud.UserCloudManageMapper;
@@ -23,6 +24,8 @@
    @Resource
    private UserCloudGoodsService userCloudGoodsService;
    
    @Async
    @Override
    public void save(Long uid, Boolean official, Boolean custom) {
        if (uid == null) 
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudOrderServiceImpl.java
@@ -60,7 +60,6 @@
    }
    
    
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void cloudPayCloudSuccess(Long orderId) throws UserCloudOrderException{
        UserCloudOrder cloudOrder = userCloudOrderMapper.selectForUpdate(orderId);
@@ -73,6 +72,7 @@
        UserCloudOrder updateOrder = new UserCloudOrder();
        updateOrder.setState(true);
        updateOrder.setId(cloudOrder.getId());
        updateOrder.setDesc("成功开通" + cloudOrder.getType().getDescShow());
        updateOrder.setUpdateTime(new Date());
        userCloudOrderMapper.updateByPrimaryKeySelective(updateOrder);
        
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudSendRecordServiceImpl.java
@@ -52,4 +52,10 @@
    public long count (String key, Integer sendOrigin){
        return userCloudSendRecordDao.count(key, sendOrigin);
    }
    @Override
    public long countRecordNum(Long uid, Integer sendOrigin){
        return userCloudSendRecordDao.countRecordNum(uid, sendOrigin);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java
@@ -15,6 +15,7 @@
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.yeshi.fanli.dao.mybatis.user.cloud.UserCloudMapper;
import com.yeshi.fanli.dto.aitaoker.RobotInfoDTO;
import com.yeshi.fanli.dto.aitaoker.WeiXinGroupDTO;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.jd.JDPingouInfo;
@@ -216,7 +217,6 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void openCloud(Long uid, Long orderId, CloudOrderMenuEnum menuEnum) throws UserCloudException {
        UserCloud existCloud = userCloudMapper.getByOrderId(orderId);
        if (existCloud != null) {
@@ -230,62 +230,61 @@
            if (userCloud.getEndTime().getTime() > java.lang.System.currentTimeMillis())
                renew = true;
            // 验证套餐是否相同
            if (renew && userCloud.getRobotType() != menuEnum.getType()) {
            if (renew && userCloud.getRobotType() != menuEnum.getRobotType()) {
                LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]已有其他云发单套餐还未结束");
                throw new UserCloudException(1, "已有其他云发单套餐还未结束");
            }
        }
//        RobotInfoDTO dto = null;
//        if (renew) { // 续费
//            dto = AitaokerApiUtil.robotRenewals(userCloud.getRobotId(), menuEnum.getMonth());
//        } else { // 创建机器人
//            dto = AitaokerApiUtil.robotCreate(menuEnum.getMonth(), menuEnum.getType(), "wechatrobot", null);
//        }
//
//        if (dto == null) {
//            LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 返回空值");
//            throw new UserCloudException(1, "机器人获取失败");
//        }
//
//        String endTimeStr = dto.getEndTime();
//        if (StringUtil.isNullOrEmpty(endTimeStr)) {
//            LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 返回时间为空");
//            throw new UserCloudException(1, "机器人返回时间为空");
//        }
//
//        long endTime = 0;
//        try {
//            endTime = Long.parseLong(endTimeStr);
//        } catch (Exception e) {
//            LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 返回时间格式不正确");
//            throw new UserCloudException(1, "机器人返回时间格式不正确");
//        }
//
//        Integer robotId = dto.getId();
//        if (robotId == null) {
//            LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 机器人ID返回为空");
//            throw new UserCloudException(1, "机器人ID返回为空");
//        }
//
//        Integer groupNum = dto.getGroupNum();
//        if (groupNum == null) {
//            LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: groupNum返回为空");
//            throw new UserCloudException(1, "groupNum返回为空");
//        }
        RobotInfoDTO dto = null;
        if (renew) { // 续费
            dto = AitaokerApiUtil.robotRenewals(userCloud.getRobotId(), menuEnum.getMonth());
        } else { // 创建机器人
            dto = AitaokerApiUtil.robotCreate(menuEnum.getMonth(), menuEnum.getRobotType(), "wechatrobot", null);
        }
        if (dto == null) {
            LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 机器人创建失败");
            throw new UserCloudException(1, "机器人创建失败");
        }
        Integer robotId = dto.getId();
        if (robotId == null) {
            LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 机器人ID返回为空");
        }
        String endTimeStr = dto.getEndTime();
        if (StringUtil.isNullOrEmpty(endTimeStr)) {
            LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 返回时间为空");
        }
        long endTime = 0;
        try {
            endTime = Long.parseLong(endTimeStr);
        } catch (Exception e) {
            LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 返回时间格式不正确");
        }
        Integer groupNum = dto.getGroupNum();
        if (groupNum == null) {
            LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: groupNum返回为空");
        }
        UserCloud newCloud = new UserCloud();
        newCloud.setUid(uid);
        newCloud.setOrderId(orderId);
//        newCloud.setGroupNum(groupNum);
//        newCloud.setRobotId(robotId);
        newCloud.setRobotType(menuEnum.getType());
//        if (renew) {
//            newCloud.setStartTime(userCloud.getStartTime());
//        } else {
//            newCloud.setStartTime(new Date());
//        }
//        newCloud.setEndTime(new Date(endTime * 1000)); // Unix 转换 普通时间
        newCloud.setGroupNum(groupNum);
        newCloud.setRobotId(robotId);
        newCloud.setRobotType(menuEnum.getRobotType());
        if (renew) {
            newCloud.setWxId(userCloud.getWxId());
            newCloud.setWxName(userCloud.getWxName());
            newCloud.setWxPortrait(userCloud.getPortrait());
            newCloud.setStartTime(userCloud.getStartTime());
        } else {
            newCloud.setStartTime(new Date());
        }
        newCloud.setEndTime(new Date(endTime * 1000)); // Unix 转换 普通时间
        newCloud.setCreateTime(new Date());
        userCloudMapper.insertSelective(newCloud);
        
@@ -511,7 +510,7 @@
        sendRecord.setWxId(wxId);
        sendRecord.setRobotId(robotId);
        sendRecord.setSendTime(new Date());
        sendRecord.setSendOrigin(UserCloudSendRecord.ORIGIN_STORE);
        sendRecord.setSendOrigin(UserCloudSendRecord.ORIGIN_EVALUATE);
        UserCloudSendRecord result = userCloudSendRecordService.save(sendRecord);
        String pid = result.getId();
        
@@ -605,7 +604,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void sendCustomGoods(Long uid, Long goodsId, Integer goodsType, Long sellerId) throws UserCloudException{
        sendCircleByGoods(uid, goodsId, goodsType, null, sellerId);
        sendCircleByGoods(uid, goodsId, goodsType, null, sellerId,  UserCloudSendRecord.SEND_WAY_MANUAL);
    }
    @Override
@@ -632,13 +631,14 @@
        
        try {
            // 发送商品
            sendCircleByGoods(uid, cgoods.getGoodsId(), cgoods.getGoodsType(), id, cgoods.getSellerId());
            sendCircleByGoods(uid, cgoods.getGoodsId(), cgoods.getGoodsType(), id, cgoods.getSellerId(), UserCloudSendRecord.SEND_WAY_AUTO);
        } catch (UserCloudException e) {
            LogHelper.cloudInfo("autoSendCustomGoods - [uid:" +uid + " 库id:"+  id +  "]原因:"+ e.getMsg());
        }
    }
    private void sendCircleByGoods(Long uid, Long goodsId, Integer goodsType, Long storeId, Long sellerId) throws UserCloudException {
    private void sendCircleByGoods(Long uid, Long goodsId, Integer goodsType, Long storeId,
            Long sellerId, int way) throws UserCloudException {
        // 验证是否授权
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user == null)
@@ -687,7 +687,7 @@
                custom = cloudManage.getCustom();
        }
        if (!custom) {
            throw new UserCloudException(0, "成功加入云发单库");
            return;
        }
                
        Integer robotId = userCloud.getRobotId();
@@ -742,6 +742,7 @@
        }
        UserCloudSendRecord result = userCloudSendRecordService.save(sendRecord);
        
        try {
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            sendTaoBaoGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId());
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
@@ -753,7 +754,6 @@
        } else if (goodsType == Constant.SOURCE_TYPE_SUNING) {
            sendSuNingGoods(user, robotId, wxId, goodsId, sellerId, relationId, listOpen, result.getId());
        }
        // 更新发单记录
        if (storeId != null) {
            UserCloudGoods record = new UserCloudGoods();
@@ -763,6 +763,22 @@
            record.setUpdateTime(new Date());
            userCloudGoodsService.updateByPrimaryKeySelective(record);
        }
        } catch (UserCloudException e) {
            LogHelper.cloudInfo("autoSendCustomGoods - [uid:" +uid + " 库id:"+  storeId +  "]原因:"+ e.getMsg());
            // 更新发单记录
            if (storeId != null) {
                UserCloudGoods record = new UserCloudGoods();
                record.setId(storeId);
                record.setState(UserCloudGoods.STATE_INVALID);
                record.setSendTime(new Date());
                record.setUpdateTime(new Date());
                userCloudGoodsService.updateByPrimaryKeySelective(record);
            }
        }
    }
    
    /**
@@ -1102,17 +1118,20 @@
        Date lastTime =  new Date(time);
        
        for (int i = 0; i < 1000; i ++) {
            List<Long> list = userCloudMapper.listValidUid((i-1)*1000, 1000);
            // 查询哪些用户开通
            List<Long> list = userCloudMapper.listValidUid(i*1000, 1000);
            if (list == null || list.size() == 0) {
                break;
            }
            
            for (Long uid: list) {
                try {
                    // 判断是否该 内容已发
                    UserCloudSendRecord record = userCloudSendRecordService.getByUidAndSendId(uid, id);
                    if (record != null) 
                        continue;
                    
                    // 是否在一个小时内已发送过
                    UserCloudSendRecord last = userCloudSendRecordService.getLastByUid(uid, lastTime);
                    if (last != null)
                        continue;
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleDetailSerivceImpl.java
@@ -57,6 +57,13 @@
    public long countByBossUidAndMinLevel(Long bossUid, int minLevel) {
        return threeSaleDetailDao.countByBossUidAndMinLevel(bossUid, minLevel);
    }
    @Override
    public long countByBossUidAndMaxLevel(Long bossUid, int minLevel) {
        return threeSaleDetailDao.countByBossUidAndMaxLevel(bossUid, minLevel);
    }
    @Override
    public void addByWorkerUid(Long workerUid) {
fanli/src/main/java/com/yeshi/fanli/service/inter/count/HongBaoV2CountService.java
@@ -239,13 +239,26 @@
     */
    public BigDecimal sumMoneyByANotSettleAndUid(Long uid);
    /**
     * 统计未到账的数量
     * 统计已到账订单数量
     * @param uid
     * @param payment
     * @param type
     * @param payment -付款金额
     * @param type -类型: 1自购 2分享 3邀请  4自购+分享
     * @param dateType 1本月
     * @return
     */
    public long countMyDirectOrderByCashNotArrival(Long uid, BigDecimal payment, Integer type);
    public long countOrderByCashArrival(Long uid, BigDecimal payment, Integer type, Integer dateType);
    /**
     * 统计未到账订单数量
     * @param uid
     * @param payment -付款金额
     * @param type -类型: 1自购 2分享 3邀请  4自购+分享
     * @param dateType 1本月
     * @return
     */
    public long countOrderByCashNotArrival(Long uid, BigDecimal payment, Integer type, Integer dateType);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/count/UserSystemCouponCountService.java
@@ -98,5 +98,15 @@
     * @return
     */
    public BigDecimal countCouponNumByDay(CouponTypeEnum typeEnum, String preDay);
    /**
     * 统计券数量
     * @param state
     * @param activated
     * @param list
     * @param listSource
     * @return
     */
    public long countCouponNum(Long uid, Integer state, Integer activated, List<String> list, List<String> listSource);
    
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/cloud/UserCloudGroupService.java
@@ -58,5 +58,13 @@
     */
    public List<UserCloudGroup> listGroupByUid(Long uid);
    /**
     * 删除群
     * @param uid
     * @param id
     * @throws UserCloudGroupException
     */
    public void deleteGroup(long uid, long id) throws UserCloudGroupException;
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/cloud/UserCloudSendRecordService.java
@@ -41,5 +41,13 @@
    public List<UserCloudSendRecord> query(int page, int count, String key, Integer sendOrigin);
    public long count(String key, Integer sendOrigin);
    /**
     * 统计记录
     * @param uid
     * @param sendOrigin
     * @return
     */
    public long countRecordNum(Long uid, Integer sendOrigin);
    
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/ThreeSaleDetailService.java
@@ -83,4 +83,13 @@
     */
    ThreeSaleDetail getByBossUidAndWorkerUid(Long bossUid, Long workerUid);
    /**
     * 统计粉丝代数内
     * @param bossUid
     * @param minLevel
     * @return
     */
    public long countByBossUidAndMaxLevel(Long bossUid, int minLevel);
}
fanli/src/main/java/com/yeshi/fanli/service/manger/alipay/UserCloudAlipayManager.java
@@ -1,24 +1,25 @@
package com.yeshi.fanli.service.manger.alipay;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.yeshi.fanli.dto.AlipayTradeWapPayDTO;
import com.yeshi.fanli.entity.bus.user.cloud.CloudOrderMenuEnum;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloud;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudOrder;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.exception.user.cloud.UserCloudException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudGroupService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudManageService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudOrderService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.alipay.AlipayApi;
import com.yeshi.fanli.util.alipay.AlipayWapConfig;
/**
 *  云发单支付管理
@@ -61,31 +62,36 @@
        if (menuEnum == null) 
            throw new UserCloudException(1, "套餐类型不匹配");
        
        UserCloud userCloud = userCloudService.getLastByUid(uid);
        if (userCloud != null) {
            // 续费
            boolean renew = false;
            if (userCloud.getEndTime().getTime() > java.lang.System.currentTimeMillis())
                renew = true;
            // 验证套餐是否相同
            if (renew && userCloud.getRobotType() != menuEnum.getRobotType()) {
                LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "]已有其他云发单套餐还未结束");
                throw new UserCloudException(1, "已有其他云发单套餐还未结束");
            }
        }
        // 订单信息
        UserCloudOrder cloudOrder = userCloudOrderService.addCloudOrder(uid, type); 
        if (cloudOrder == null || cloudOrder.getId() == null)
            throw new UserCloudException(1, "创建订单信息失败");
        
        // 待请求参数数组
        Map<String, String> map = new HashMap<String, String>();
        map.put("seller_id", AlipayWapConfig.SELLER_ID);// 收款方账号
        // 订单号
        map.put("out_trade_no", TRADE_INDEX + cloudOrder.getId());
        // 订单金额:0.01元,精准到分
        map.put("total_amount", menuEnum.getMoney() + "");
        // 订单标题
        map.put("subject", "云发单充值");
        // 销售产品码,商家和支付宝签约的产品码
        map.put("product_code", type);
        // 该笔订单允许的最晚付款时间,逾期将关闭交易  30分钟
        map.put("timeout_express", "30m");
        AlipayTradeWapPayDTO payDTO = new AlipayTradeWapPayDTO();
        payDTO.setSubject("云发单充值");
        payDTO.setSellerId(Constant.alipayWapConfig.getSellerId());
        payDTO.setOutTradeNo(TRADE_INDEX + cloudOrder.getId());
        payDTO.setProductCode(type);
        payDTO.setTotalAmount(menuEnum.getMoney() + "");
        payDTO.setTimeoutExpress("30m");
        payDTO.setReturnUrl(configService.get(ConfigKeyEnum.cloudAlipayReturnLink.getKey()) +"?id=" +cloudOrder.getId());
        payDTO.setNotifyUrl(configService.get(ConfigKeyEnum.cloudAlipayNotifyLink.getKey()) +"?id=" +cloudOrder.getId());
        
        // 支付成功后返回哪个前端页面
        String returnUrl = configService.get(ConfigKeyEnum.cloudAlipayReturnLink.getKey());
        // 支付成功后回调地址
        String notifyUrl = configService.get(ConfigKeyEnum.cloudAlipayNotifyLink.getKey()) +"?id=" +cloudOrder.getId();
        // 获取支付form
        return AlipayApi.tradeWapPayRequest(map, returnUrl, notifyUrl);
        return AlipayApi.tradeWapPayRequest(payDTO);
    }
    
@@ -95,7 +101,17 @@
     * @throws Exception
     */
    public void tradeQueryByOrderId(Long orderId) throws Exception {
        boolean result = AlipayApi.tradeQuery(TRADE_INDEX + orderId, null, null, null);
        boolean result = false;
        AlipayTradeQueryResponse response =  AlipayApi.tradeQuery(TRADE_INDEX + orderId, null, null, null);
        if(response != null && response.isSuccess()){
            // 相应成功
            if ("TRADE_SUCCESS".equals(response.getTradeStatus())) {
                result = true;
            } else if ("TRADE_FINISHED".equals(response.getTradeStatus())) {
                result = true; // (交易结束,不可退款)
            }
        }
        // 支付成功
        if (result) {
            userCloudOrderService.cloudPayCloudSuccess(orderId);
fanli/src/main/java/com/yeshi/fanli/util/Constant.java
@@ -10,6 +10,7 @@
import com.yeshi.fanli.dto.wx.WXAccountInfoDTO;
import com.yeshi.fanli.entity.config.AlipayConfig;
import com.yeshi.fanli.entity.config.AlipayWapConfig;
import com.yeshi.fanli.entity.config.ConstantConfig;
import com.yeshi.fanli.entity.config.SMSConfig;
import com.yeshi.fanli.entity.config.SystemCommonConfig;
@@ -94,7 +95,7 @@
    
    
    //优惠狗云发单群唤起关键词
    public static final String YHG_CLOUD_GROUP_AWAKEN_KEY="板栗快省领优惠";
    public static final String YHG_CLOUD_GROUP_AWAKEN_KEY="快省爆款推荐";
    // 奖励券最高比例
    public static final BigDecimal MAX_REWARD_RATE = new BigDecimal("0.31");
@@ -202,6 +203,8 @@
    public static AlipayConfig alipayConfig;
    public static AlipayWapConfig alipayWapConfig;
    public static ZNXConfig znxConfig;
    public static ConstantConfig constantConfig;
@@ -303,6 +306,13 @@
            alipayConfig = (AlipayConfig) MapUtil.parseMap(AlipayConfig.class, ps);
        }
        if (alipayWapConfig == null) {
            Properties ps = org.yeshi.utils.PropertiesUtil
                    .getProperties(TaoBaoUtil.class.getClassLoader().getResourceAsStream("alipay_wap.properties"));
            alipayWapConfig = (AlipayWapConfig) MapUtil.parseMap(AlipayWapConfig.class, ps);
        }
        if (znxConfig == null) {
            Properties ps = org.yeshi.utils.PropertiesUtil
                    .getProperties(TaoBaoUtil.class.getClassLoader().getResourceAsStream("push_msg.properties"));
fanli/src/main/java/com/yeshi/fanli/util/aitaoker/AitaokerApiUtil.java
@@ -194,8 +194,35 @@
        
        // 请求结果
        String result = baseRequest("itaoke.robot.create.get", map);
//        String result = "{\r\n" +
//                "    \"status\":\"0000\",\r\n" +
//                "    \"msg\":\"亲,添加成功\",\r\n" +
//                "    \"data\":{\r\n" +
//                "        \"id\":11770,\r\n" +
//                "        \"uid\":1625,\r\n" +
//                "        \"wechatrobot\":\"wechatrobot\",\r\n" +
//                "        \"wx_id\":\"\",\r\n" +
//                "        \"amount_used\":0,\r\n" +
//                "        \"group_num\":20,\r\n" +
//                "        \"passwd\":\"\",\r\n" +
//                "        \"nickname\":\"\",\r\n" +
//                "        \"c_uid\":1625,\r\n" +
//                "        \"login_status\":0,\r\n" +
//                "        \"end_time\":1594785534,\r\n" +
//                "        \"remark\":null,\r\n" +
//                "        \"wc_id\":\"\",\r\n" +
//                "        \"agent_uid\":null,\r\n" +
//                "        \"is_enabled\":0,\r\n" +
//                "        \"robot_type\":4,\r\n" +
//                "        \"ip\":\"http://49.234.36.129:10002/\",\r\n" +
//                "        \"is_new\":1\r\n" +
//                "    }\r\n" +
//                "}\r\n" +
//                "";
        JSONObject resultJson = JSONObject.fromObject(result);
        if ("0000".equals(resultJson.optString("code"))) {
        if ("0000".equals(resultJson.optString("status"))) {
            resultJson = resultJson.optJSONObject("data");
            Type type = new TypeToken<RobotInfoDTO>() {}.getType();
            return new Gson().fromJson(resultJson.toString(), type);
@@ -203,29 +230,6 @@
        return null;
    }
    
    /**
     * 机器人更换微信号
     * @param robotId 机器人id
     * @param wxid 微信号
     * @return
     */
    public static RobotInfoDTO robotChangeWeiXin(int robotId, String wxid) {
        // 请求参数
        Map<String, String> map = new HashMap<>();
        map.put("robot_id", robotId +"");
        map.put("wechatrobot", wxid);
        // 请求结果
        String result = baseRequest("itaoke.robot.change.get", map);
        JSONObject resultJson = JSONObject.fromObject(result);
        if ("0000".equals(resultJson.optString("code"))) {
            resultJson = resultJson.optJSONObject("data");
            Type type = new TypeToken<RobotInfoDTO>() {}.getType();
            return new Gson().fromJson(resultJson.toString(), type);
        }
        return null;
    }
    
    
    /**
@@ -241,8 +245,34 @@
        map.put("month", month +"");
        // 请求结果
        String result = baseRequest("itaoke.robot.change.get", map);
//        String result = "{\r\n" +
//                "    \"status\":\"0000\",\r\n" +
//                "    \"msg\":\"\\u4eb2,\\u6dfb\\u52a0\\u6210\\u529f\",\r\n" +
//                "    \"data\":{\r\n" +
//                "        \"id\":11770,\r\n" +
//                "        \"uid\":1625,\r\n" +
//                "        \"wechatrobot\":\"fxdaka\",\r\n" +
//                "        \"wx_id\":\"wxid_vm6eb5i0in0622\",\r\n" +
//                "        \"amount_used\":0,\r\n" +
//                "        \"group_num\":20,\r\n" +
//                "        \"passwd\":\"\",\r\n" +
//                "        \"nickname\":\"\\u5206\\u4eab\\u5927\\u5496??\",\r\n" +
//                "        \"c_uid\":1625,\r\n" +
//                "        \"login_status\":1,\r\n" +
//                "        \"end_time\":1597377534,\r\n" +
//                "        \"remark\":null,\r\n" +
//                "        \"wc_id\":\"246124e9-9a8c-4da6-a77e-7f7f88049731\",\r\n" +
//                "        \"agent_uid\":null,\r\n" +
//                "        \"is_enabled\":0,\r\n" +
//                "        \"robot_type\":4,\r\n" +
//                "        \"ip\":\"http:\\/\\/49.234.36.129:10002\\/\",\r\n" +
//                "        \"is_new\":1\r\n" +
//                "    }\r\n" +
//                "}";
//
        JSONObject resultJson = JSONObject.fromObject(result);
        if ("0000".equals(resultJson.optString("code"))) {
        if ("0000".equals(resultJson.optString("status"))) {
            resultJson = resultJson.optJSONObject("data");
            Type type = new TypeToken<RobotInfoDTO>() {}.getType();
            return new Gson().fromJson(resultJson.toString(), type);
@@ -263,7 +293,7 @@
        // 请求结果
        String result = baseRequest("itaoke.robot.delete.get", map);
        JSONObject resultJson = JSONObject.fromObject(result);
        if ("0000".equals(resultJson.optString("code"))) {
        if ("0000".equals(resultJson.optString("status"))) {
            return true;
        }
        return false;
@@ -340,9 +370,14 @@
        // 请求结果
        String result = baseRequest("itaoke.robot.macsend.videocircle", map);
        JSONObject resultJson = JSONObject.fromObject(result);
        if ("1000".equals(resultJson.optString("code"))) {
        if ("0000".equals(resultJson.optString("status"))) {
            resultJson = resultJson.optJSONObject("data");
            if (resultJson != null) {
                resultJson = resultJson.optJSONObject("object");
                if (resultJson != null) {
            return resultJson.optString("id");
                }
            }
        }
        return null;
    }
@@ -414,7 +449,7 @@
        // 请求结果
        String result = baseRequest("itaoke.robot.macsend.base64", map);
        JSONObject resultJson = JSONObject.fromObject(result);
        if (resultJson.optInt("code") == 1000) {
        if ("0000".equals(resultJson.optString("status"))) {
            return true;
        }
        return false;
@@ -443,7 +478,7 @@
        // 请求结果
        String result = baseRequest("itaoke.robot.macsend.card", map);
        JSONObject resultJson = JSONObject.fromObject(result);
        if (resultJson.optInt("code") == 1000) {
        if ("0000".equals(resultJson.optString("status"))) {
            return true;
        }
        return false;
fanli/src/main/java/com/yeshi/fanli/util/alipay/AlipayApi.java
@@ -1,18 +1,48 @@
package com.yeshi.fanli.util.alipay;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayApiException;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.yeshi.fanli.dto.AlipayTradeWapPayDTO;
import com.yeshi.fanli.entity.config.AlipayWapConfig;
import com.yeshi.fanli.util.AlipayUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import net.sf.json.JSONObject;
public class AlipayApi {
    private static DefaultAlipayClient alipayClient = null;
    static {
        AlipayWapConfig alipayWapConfig = Constant.alipayWapConfig;
        CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
        certAlipayRequest.setAppId(alipayWapConfig.getAppId());
        certAlipayRequest.setPrivateKey(alipayWapConfig.getPrivateKey());
        certAlipayRequest.setFormat("json");
        certAlipayRequest.setCharset("UTF-8");
        certAlipayRequest.setSignType("RSA2");
        certAlipayRequest.setCertPath(
                AlipayUtil.class.getClassLoader().getResource(alipayWapConfig.getAppCertPath()).getPath());
        certAlipayRequest.setAlipayPublicCertPath(
                AlipayUtil.class.getClassLoader().getResource(alipayWapConfig.getAlipayCertPath()).getPath());
        certAlipayRequest.setRootCertPath(
                AlipayUtil.class.getClassLoader().getResource(alipayWapConfig.getAlipayRootCertPath()).getPath());
        try {
            alipayClient = new DefaultAlipayClient(certAlipayRequest);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
    }
    /**
     * 创建支付请求
@@ -20,19 +50,33 @@
     * @return
     * @throws Exception
     */
    public static String tradeWapPayRequest(Map<String, String> map, String payNotify, String backUrl) throws Exception{
    public static String tradeWapPayRequest(AlipayTradeWapPayDTO payDTO) throws Exception{
        // 待请求参数数组
        JSONObject json = new JSONObject();
        // 收款方账号
        json.put("seller_id", payDTO.getSellerId());
        // 订单号
        json.put("out_trade_no", payDTO.getOutTradeNo());
        // 订单金额:0.01元,精准到分
        json.put("total_amount",payDTO.getTotalAmount());
        // 订单标题
        json.put("subject", payDTO.getSubject());
        // 销售产品码,商家和支付宝签约的产品码
        json.put("product_code", payDTO.getProductCode());
        // 该笔订单允许的最晚付款时间,逾期将关闭交易  30分钟
        json.put("timeout_express", payDTO.getTimeoutExpress());
        AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
        // 前台回调地址
        alipayRequest.setReturnUrl(backUrl);
        alipayRequest.setReturnUrl(payDTO.getReturnUrl());
        // 成功付款回调
        alipayRequest.setNotifyUrl(payNotify);
        alipayRequest.setNotifyUrl(payDTO.getNotifyUrl());
        
        alipayRequest.setBizContent(URLEncoder.encode(JSON.toJSONString(map), "UTF-8"));
        alipayRequest.setBizContent(URLEncoder.encode(json.toString(), "UTF-8"));
        
        return AlipayWapConfig.getInstance().pageExecute(alipayRequest).getBody();
        return alipayClient.pageExecute(alipayRequest).getBody();
    }
    
    /**
     * 查询是否交易完成
@@ -43,44 +87,27 @@
     * @return
     * @throws Exception
     */
    public static boolean tradeQuery (String outTradeNo, String tradeNo, String orgPid, String queryOptions) throws Exception {
    public static AlipayTradeQueryResponse tradeQuery(String outTradeNo, String tradeNo, String orgPid, String queryOptions) throws Exception {
        // 订单支付时传入的商户订单号,和支付宝交易号不能同时为空
        if (StringUtil.isNullOrEmpty(outTradeNo) || StringUtil.isNullOrEmpty(outTradeNo)) {
            return false;
            return null;
        }
        
        // 待请求参数数组
        Map<String, String> map = new HashMap<String, String>();
        JSONObject json = new JSONObject();
        if (!StringUtil.isNullOrEmpty(outTradeNo))
            map.put("out_trade_no", outTradeNo);
            json.put("out_trade_no", outTradeNo);
        if (!StringUtil.isNullOrEmpty(tradeNo))
            map.put("trade_no", tradeNo);
            json.put("trade_no", tradeNo);
        if (!StringUtil.isNullOrEmpty(orgPid))
            map.put("org_pid", orgPid);
            json.put("org_pid", orgPid);
        if (!StringUtil.isNullOrEmpty(queryOptions))
            map.put("query_options", queryOptions);
            json.put("query_options", queryOptions);
        
        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
        request.setBizContent(URLEncoder.encode(JSON.toJSONString(map), "UTF-8"));
        request.setBizContent(json.toString());
    
        // 支付宝查询
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayWapConfig.GATEWAY, AlipayWapConfig.APP_ID,
                AlipayWapConfig.APP_PRIVATE_KEY, AlipayWapConfig.PARAM_TYPE, AlipayWapConfig.CHARSET,
                AlipayWapConfig.ALIPAY_PUBLIC_KEY, AlipayWapConfig.SIGNTYPE);
        AlipayTradeQueryResponse response = alipayClient.execute(request);
        if(response.isSuccess()){
            // 相应成功
            if ("TRADE_SUCCESS".equals(response.getTradeStatus())) {
                return true; // 交易支付成功
            } else if ("TRADE_FINISHED".equals(response.getTradeStatus())) {
                return true; // (交易结束,不可退款)
        return alipayClient.certificateExecute(request);
            }            
        }
        return false;
    }
    
}
fanli/src/main/java/com/yeshi/fanli/util/alipay/AlipayWapConfig.java
File was deleted
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/user/UserCloudMessageListener.java
@@ -41,23 +41,18 @@
        String tag = message.getTag();
        if (tag == null)
            tag = "";
        if (java.lang.System.currentTimeMillis() <= Constant.NEW_ORDER_FANLI_RULE_TIME) {
            return Action.CommitMessage;
        }
        // 邀请相关
        if (MQTopicName.TOPIC_USER.name().equalsIgnoreCase(message.getTopic())) {
            if (tag.equalsIgnoreCase(UserTopicTagEnum.userCloud.name())) {// 用户等级发生变化
            if (tag.equalsIgnoreCase(UserTopicTagEnum.userCloud.name())) {
                UserCloudMQMsg msg = new Gson().fromJson(new String(message.getBody()),UserCloudMQMsg.class);
                if (msg.getType() == UserCloudMQMsg.TYPE_EVALUATE) {
                    LogHelper.cloudInfo("发圈中信息 -" + msg.getId()  );
                    userCloudService.autoSendByDynamic(msg.getUid(), msg.getId());
                } else {
                    LogHelper.cloudInfo("选品库信息 -" + msg.getId()  );
                    userCloudService.autoSendCustomGoods(msg.getUid(), Long.parseLong(msg.getId()));
                }
            }     
        }
        return Action.CommitMessage;
    }
}
fanli/src/main/java/com/yeshi/fanli/vo/user/cloud/UserCloudInfoVO.java
@@ -2,7 +2,9 @@
import java.util.List;
import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGroup;
import com.yeshi.fanli.entity.common.JumpDetailV2;
public class UserCloudInfoVO {
@@ -25,6 +27,9 @@
    private List<UserCloudGroup> listGroup;// 群信息
    
    private List<CloudOrderMenuVO> listMenu;// 菜单信息
    private SwiperPicture course; // 教程
    
    public String getNickName() {
@@ -107,4 +112,13 @@
        this.listMenu = listMenu;
    }
    public SwiperPicture getCourse() {
        return course;
    }
    public void setCourse(SwiperPicture course) {
        this.course = course;
    }
}
fanli/src/main/resource/alipay/web/alipayCertPublicKey_RSA2.crt
New file
@@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDrDCCApSgAwIBAgIQICAGCcf9EalgJMEEuqGAWDANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDIgUjEwHhcNMjAwNjA5MDMwMDU0WhcNMjIwNjA5MDMwMDU0WjCBjDELMAkGA1UEBhMCQ04x
JzAlBgNVBAoMHumHjeW6huW/q+ecgeenkeaKgOaciemZkOWFrOWPuDEPMA0GA1UECwwGQWxpcGF5
MUMwQQYDVQQDDDrmlK/ku5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZkOWFrOWPuC0yMDg4
MjMxMzUzNjU2NzQxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHWEgMOlGb/VbN5p
cSXv+DLX2EJ43p93zP9eyao8ghj1LcBSf5Sx4gYpuySKZ0oimILb+ErOAlDzcXwvMxcVTK0W2M6U
aUW0Vh71vOorqggOGqMJsSDpV1hvYrUSCYu1Qe5KtV85w+Kw4dImC3fayIaxUMhwySuniQ/uQtez
RHn/vwXrGigu3Y2tRgPMUptqA14EYEfhpm3KjLXsqWdJBO6ziiqILHJtow65QzkeoLM2ZHpYH6oY
y2rIj/iSIpos18MKWvr4XrqSptJYIQp+G3dwqjlt2kk4bpgAXQSR6wKAtGTkAYvlOSpkQXVqI3tI
GZO3ZM9bFQurMBoJFX790wIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJKoZIhvcNAQELBQAD
ggEBAEo++sORTzbqKf7CyLEcmg+RnX0Ez2aUOftQPkr2XGnDwNon4Air1c+j3snsRhWyTC2TMt18
qCPotlr63Zk67agPaGfrKGk7bDxc9QA/kRrctl4+0h4Jh28jgMLQ4ibNgjkGWmMMwSK4D+19k/vt
hjlGk9LtTc5lsqgm2GTvifC9C4E0ZDiK+rGz/Mo048TiKNhywO8EKWXvbT9n359rbgKoXMJmKWZQ
bWdMg8NsP/X+p6mgRAtIJNSLyl/ZzzD2J/NpnHlQxq8/OFnS2EFcs0gN71xDtX+KWp+BJHBMwPM4
asjhldpscYgoyx2c/D5CinNgMj7qfmORBQ37shpcKDw=
-----END CERTIFICATE-----
fanli/src/main/resource/alipay/web/alipayRootCert.crt
New file
@@ -0,0 +1,88 @@
-----BEGIN CERTIFICATE-----
MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
pDoiVhsLwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
kT9qhqn+lw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
Yf4Zr0fJsGuv
-----END CERTIFICATE-----
fanli/src/main/resource/alipay/web/appCertPublicKey_2021001164655513.crt
New file
@@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIEqzCCA5OgAwIBAgIQICAGFcNUAjZwqoMnIos18TANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDEgUjEwHhcNMjAwNjE1MDI1NzI1WhcNMjIwNjE1MDI1NzI1WjBzMQswCQYDVQQGEwJDTjEn
MCUGA1UECgwe6YeN5bqG5b+r55yB56eR5oqA5pyJ6ZmQ5YWs5Y+4MQ8wDQYDVQQLDAZBbGlwYXkx
KjAoBgNVBAMMITIwODgyMzEzNTM2NTY3NDEtMjAyMTAwMTE2NDY1NTUxMzCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAITMK2VIomFsH6n52BtBEhMV1Bq1u8HMMRWb1hu/6tq6V0j/RCWm
RSzv7fbm9bTUZvR3RFcD2URu6lfwShfQ44LI4QXQegiQ5Qlv/5SeDER7lzBYXMQCEDPYuLzVjXgB
Z8Huirmaq55IksHxWvYUN61ch7Ve3wLEB6+EW2vRycB+UNnkTJe41WAUovp2khw3SOBM+Ct+gVAA
b38O7rC92qRU5/he+18E56MD/c8fQRPVxfhbIfeEL9416cak51MCHNCX4W1P54/t+ToIwKzrvViQ
JHtg9XcrTYlHCayE7LE3VY7LKTsRciNYGsngn/Uc/EkSanuh8FVIttntkgfZ3/0CAwEAAaOCASkw
ggElMB8GA1UdIwQYMBaAFHEH4gRhFuTl8mXrMQ/J4PQ8mtWRMB0GA1UdDgQWBBTAC55Sk3N4W9D9
YVAA6Az4TevnFzBABgNVHSAEOTA3MDUGB2CBHAFuAQEwKjAoBggrBgEFBQcCARYcaHR0cDovL2Nh
LmFsaXBheS5jb20vY3BzLnBkZjAOBgNVHQ8BAf8EBAMCBsAwLwYDVR0fBCgwJjAkoCKgIIYeaHR0
cDovL2NhLmFsaXBheS5jb20vY3JsNDIuY3JsMGAGCCsGAQUFBwEBBFQwUjAoBggrBgEFBQcwAoYc
aHR0cDovL2NhLmFsaXBheS5jb20vY2E2LmNlcjAmBggrBgEFBQcwAYYaaHR0cDovL2NhLmFsaXBh
eS5jb206ODM0MC8wDQYJKoZIhvcNAQELBQADggEBAIiFS1WOH+mvCxERAzpyJNBgKerc0+CK0Z9j
WCRQHWB2c4Cn5dfXrRJLNM7D1FU4PlCafKUvH7x/pHOPFZmbuN9Jc0PfeiTR6n4r0oelu5iAW2mX
2p/aNY3bRZc3Q671DF0dwu0rixcWjcOoVV03EWYtQAvJ2cKwBnHQTqc5sU2Stjb49PAhItoSH+eL
J1eSIDDJ+4EzmnmKpFLPw+ghCI95A4eb/4Atpc7qM0upVuWrrHkLrLLENCegC72DAwI0a/2Lcs5p
xZBzG1WRIbynkjpJksQDCsN1/GmG55r0gKTe9z0KjLvQjSsk/7yrkjpjmq/AUW8cbVgni0YWg0Ok
1LM=
-----END CERTIFICATE-----
fanli/src/main/resource/alipay_wap.properties
New file
@@ -0,0 +1,7 @@
appId=2021001164655513
sellerId=2088231353656741
private_key=MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCEzCtlSKJhbB+p+dgbQRITFdQatbvBzDEVm9Ybv+rauldI/0QlpkUs7+325vW01Gb0d0RXA9lEbupX8EoX0OOCyOEF0HoIkOUJb/+UngxEe5cwWFzEAhAz2Li81Y14AWfB7oq5mqueSJLB8Vr2FDetXIe1Xt8CxAevhFtr0cnAflDZ5EyXuNVgFKL6dpIcN0jgTPgrfoFQAG9/Du6wvdqkVOf4XvtfBOejA/3PH0ET1cX4WyH3hC/eNenGpOdTAhzQl+FtT+eP7fk6CMCs671YkCR7YPV3K02JRwmshOyxN1WOyyk7EXIjWBrJ4J/1HPxJEmp7ofBVSLbZ7ZIH2d/9AgMBAAECggEAEjPGEvj0wPPIF01WsM2ng5QvYYXdeX/ajoKww1b4Awkdo7TRi3OR8cnlTT11Glcu0X1zkZXGdxnY5zrZfRA1zxxns5tSzs/FhRij6KQNPGnQXGEQPhGmVOT01XVUEcnnhe6Dd1NbCLQb4ZeKh0ZYJ1wSgerCGKf0AbvbqBi2VbsHy9HQbuFrUUibunI8K66Td/ayyrIJr8Lckb4yBAR63wQaD23DVqEqS7VAD1nrnUZgpFq6pCo8uwH/owBVPS6EB/WQvh2kVoaFGNJILP0zjKUMnrUiZ+34DBaoIeAPon+Vy6xzWHJ+9+1YkI9HxVNWWqKsS4G1q1zzthWSiYC1xQKBgQDOroX61gjcia+hv/qKaZGYPYpEH+icX3l0OZDekOvSw0lMPzIwhpIQWR5e+Hcb4KSSOqvstcz0NbG4oqj9fwlRotSYAMz+Vf6Hqa5biHibKIcUxZfzs7O/CBsKgWQpjdes3YFyOv9AGT3uj3FJozsD4hKnesRQr0nHAcQri5NNFwKBgQCkfFCMKINsb1jOpHh6jFpOySvlvCpqmilw1o4r4CQjMd4CRgS6/UEHMqfB384pucLjPbAmCqkZ0uap40Pr82JJyHaFXWV1mqJPPgLDUkrvhafYoT6zl0i0xrAF4P+aruUbpa6gbrwBPQUKoaj60rhmhTwmzJmJRnOxNEKTOcDwCwKBgBTPn/AE8zl5p7Sqxwh+3skskSqQ5/Qu7OTWEw9GGmjLfyrtRhl6w2RgBN3dOOkWspuCyuL3315Ltcx4nHmB/Cc7NRrlIb8OW6W/YS4YTMSazRc7WjSQyK2YnFhvdO12OdxPJYSiCiejIwhNa0PV6tBWSDiS9QeGzu/57o3P7RIbAoGANIPsQ5N7wlcah39DZ/z/qD/aYBLfiAGIUZpu8dsyLnpxY1BvmjPZWy71GJUYAYJpkpvTbZHhw3juZDdHLEIck2oJTTMwfYfNYndt8maHvklx+Vwh5LzcXbtB396iPQSx6U3QnzA7njmZLnfGt64nabQILGsOaiGwNld1GgRKcVkCgYAeukNSctBKhIrnG8SR/VoKUiutsVYOy6vDHR9rn+swXzqiz+WRiTggtLibquvwSdyvjh4DkUUastY+ninf9S13yjDISVk/9lMlfadStpzbDPnrJItTy6oC+9go3yR9CI9vH5BHa7VyAhKHK5KzryoqHykNpsljEhSVA1hzY4UaxQ==
public_key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhMwrZUiiYWwfqfnYG0ESExXUGrW7wcwxFZvWG7/q2rpXSP9EJaZFLO/t9ub1tNRm9HdEVwPZRG7qV/BKF9DjgsjhBdB6CJDlCW//lJ4MRHuXMFhcxAIQM9i4vNWNeAFnwe6KuZqrnkiSwfFa9hQ3rVyHtV7fAsQHr4Rba9HJwH5Q2eRMl7jVYBSi+naSHDdI4Ez4K36BUABvfw7usL3apFTn+F77XwTnowP9zx9BE9XF+Fsh94Qv3jXpxqTnUwIc0JfhbU/nj+35OgjArOu9WJAke2D1dytNiUcJrITssTdVjsspOxFyI1gayeCf9Rz8SRJqe6HwVUi22e2SB9nf/QIDAQAB
app_cert_path=alipay/web/appCertPublicKey_2021001164655513.crt
alipay_root_cert_path=alipay/web/alipayRootCert.crt
alipay_cert_path=alipay/web/alipayCertPublicKey_RSA2.crt
fanli/src/main/resource/log4j.properties
@@ -259,13 +259,13 @@
log4j.appender.teamLog.layout=org.apache.log4j.PatternLayout
log4j.appender.teamLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n  
log4j.logger.tljLog=info,cloudLog
log4j.appender.tljLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.tljLog.File=logs/request/cloudLog.log
log4j.appender.tljLog.MaxFileSize=20MB
log4j.appender.tljLog.MaxBackupIndex=100
log4j.appender.tljLog.layout=org.apache.log4j.PatternLayout
log4j.appender.tljLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
log4j.logger.cloudLog=info,cloudLog
log4j.appender.cloudLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.cloudLog.File=logs/cloud/cloudLog.log
log4j.appender.cloudLog.MaxFileSize=20MB
log4j.appender.cloudLog.MaxBackupIndex=100
log4j.appender.cloudLog.layout=org.apache.log4j.PatternLayout
log4j.appender.cloudLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
log4j.appender.mongodb=org.apache.log4j.ConsoleAppender