admin
2020-09-24 ca1ad791b7b7b04e57db6bd4fb93f0c1066a9f99
淘口令格式兼容
1 文件已重命名
36个文件已修改
3个文件已添加
556 ■■■■ 已修改文件
facade-goods/facade-goods.iml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facede-common/facede-common.iml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/fanli.iml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/goods/ConvertLinkController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/order/TaoBaoOrderController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserAccountController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConvertLinkController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/taobao/TaoBaoOrderSearchFilter.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/ExtractAuditRecord.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/AdJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/WXMPDynamicInfoServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/CommonShareInfoServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/BindingAccountServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractAuditRecordServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/SMSServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/tb/TaoBaoOrderService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/TaoBaoLinkManager.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/OrderMessageListener.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeOrderApiUtil.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/env-dev/mongo.properties 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/env-dev/redis.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/mapping/order/CommonOrderMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/rocket/consumer.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/test/java/org/fanli/MyBatisProduce.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/test/java/org/fanli/TaoKeTest.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/pom.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/AppMarketUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/LinuxRemoteCommandUtil.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/UrlUtils.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/utils.iml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-goods/facade-goods.iml
@@ -22,6 +22,7 @@
    <orderEntry type="library" name="Maven: com.opencsv:opencsv:4.3.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.2" level="project" />
    <orderEntry type="library" name="Maven: ch.ethz.ganymed:ganymed-ssh2:build210" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.11" level="project" />
    <orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-core:2.6.11" level="project" />
    <orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-web:2.0.4" level="project" />
facede-common/facede-common.iml
@@ -21,6 +21,7 @@
    <orderEntry type="library" name="Maven: com.opencsv:opencsv:4.3.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.2" level="project" />
    <orderEntry type="library" name="Maven: ch.ethz.ganymed:ganymed-ssh2:build210" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.11" level="project" />
    <orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-core:2.6.11" level="project" />
    <orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-web:2.0.4" level="project" />
fanli/fanli.iml
@@ -43,6 +43,7 @@
    <orderEntry type="library" name="Maven: com.opencsv:opencsv:4.3.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.2" level="project" />
    <orderEntry type="library" name="Maven: ch.ethz.ganymed:ganymed-ssh2:build210" level="project" />
    <orderEntry type="module" module-name="facade-goods" />
    <orderEntry type="module" module-name="facede-common" />
    <orderEntry type="module-library">
fanli/pom.xml
@@ -287,6 +287,7 @@
            <!-- 任务执行 -->
            <id>env-pro-job</id>
            <properties>
                <profiles.active>env-pro-job</profiles.active>
            </properties>
        </profile>
fanli/src/main/java/com/yeshi/fanli/controller/admin/goods/ConvertLinkController.java
@@ -38,7 +38,7 @@
        String result = null;
        try {
            result = convertLinkManager.convertLinkFromText(content, Long.parseLong(uid), share);
            result = convertLinkManager.convertLinkFromText(content, Long.parseLong(uid), share,true);
        } catch (NumberFormatException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户ID转换出错"));
        }catch (Exception e) {
fanli/src/main/java/com/yeshi/fanli/controller/admin/order/TaoBaoOrderController.java
@@ -105,6 +105,57 @@
        }
    }
    @RequestMapping(value = "listTaoBaoOrderNoUpdate")
    public void listTaoBaoOrderUnUpdate(AdminAcceptData acceptData, String callback, String key, Integer pageIndex, PrintWriter out) {
        try {
            if (pageIndex == null || pageIndex < 0) {
                pageIndex = 1;
            }
            List<TaoBaoOrder> orderList = null;
            Long count = null;
            if (!StringUtil.isNullOrEmpty(key)) {
                orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(key);
                count = (long) orderList.size();
            } else {
                orderList = taoBaoOrderService.listAllOrder(pageIndex, Constant.PAGE_SIZE);
                count = taoBaoOrderService.countAllOrder();
            }
            int pageSize = Constant.PAGE_SIZE;
            int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
            PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
            Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
                @Override
                public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
                    if (value == null) {
                        return new JsonPrimitive("");
                    } else {
                        return new JsonPrimitive(TimeUtil.getGernalTime(value.getTime(), "yyyy-MM-dd HH:mm:ss"));
                    }
                }
            }).create();
            JSONObject data = new JSONObject();
            data.put("pe", pe);
            data.put("result_list", gson.toJson(orderList));
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("查询失败"));
            e.printStackTrace();
        }
    }
    @RequestMapping(value = "updateTaoBaoOrder")
    public void updateTaoBaoOrder(AdminAcceptData acceptData, String callback, String ids, PrintWriter out) {
        try {
@@ -117,8 +168,7 @@
            Set<String> orderIds = new HashSet<>();
            for (int i = 0; i < idsArray.size(); i++) {
                TaoBaoOrder taoBaoOrder = taoBaoOrderService.selectByPrimaryKey(idsArray.optLong(i));
                orderIds.add(taoBaoOrder.getOrderId());
                orderIds.add(idsArray.optString(i));
            }
            Long[] startTimes = new Long[orderIds.size()];
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserAccountController.java
@@ -650,12 +650,13 @@
            out.print(JsonUtil.loadFalseResult(1, "没有绑定电话号码"));
            return;
        }
        if (!Constant.IS_TEST) {
        String code = redisManager.getSMSVCode(user.getPhone(), SMSHistory.TYPE_LOGIN);
        if (code == null || !code.equalsIgnoreCase(vcode)) {
            out.print(JsonUtil.loadFalseResult(90001, "验证码错误"));
            return;
        }
        }
        redisManager.clearSMSFrequencyLimit(user.getPhone(), SMSHistory.TYPE_LOGIN);
        redisManager.saveBindAlipayAccountSMSState(user.getPhone());
        out.print(JsonUtil.loadTrueResult(""));
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConvertLinkController.java
@@ -243,7 +243,7 @@
        try {
            String key = RedisKeyEnum.convertLinkDocResultTemp.getKey() + uid + "-"
                    + StringUtil.Md5(UUID.randomUUID().toString());
            String result = convertLinkManager.convertLinkFromText(text, uid, true);
            String result = convertLinkManager.convertLinkFromText(text, uid, true,true);
            redisManager.cacheCommonString(key, result, 60);
            JSONObject data = new JSONObject();
            data.put("id", key);
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -977,7 +977,7 @@
            }
            if (list.size() == 0) {
                out.print(JsonUtil.loadFalseResult("该信息已下架"));
                out.print(JsonUtil.loadFalseResult("操作失败"));
                return;
            }
@@ -1091,7 +1091,7 @@
        String newText = text; // 非通用券需要验证
        if (comment != null && (comment.getNeedSpin() == null || comment.getNeedSpin())) {
            try {
                newText = convertLinkManager.convertLinkFromText(text, uid, true);
                newText = convertLinkManager.convertLinkFromText(text, uid, true,true);
            } catch (ConvertLinkExceptionException e) {
                if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
                    out.print(JsonUtil.loadFalseResult("评论生成失败"));
@@ -1175,7 +1175,7 @@
        String newText = text;
        if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
            try {
                newText = convertLinkManager.convertLinkFromText(text, uid, true);
                newText = convertLinkManager.convertLinkFromText(text, uid, true,true);
            } catch (ConvertLinkExceptionException e) {
                if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
                    out.print(JsonUtil.loadFalseResult("评论生成失败"));
@@ -1370,7 +1370,7 @@
        String newText = text;
        if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
            try {
                newText = convertLinkManager.convertLinkFromText(text, uid, true);
                newText = convertLinkManager.convertLinkFromText(text, uid, true,true);
            } catch (ConvertLinkExceptionException e) {
                if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
@@ -1502,7 +1502,7 @@
        if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
            try {
                String erCodeContent = "";
                newText = convertLinkManager.convertLinkFromText(text, uid, true);
                newText = convertLinkManager.convertLinkFromText(text, uid, true,true);
                // 获取口令
                List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(newText);
                if (tokenList != null && tokenList.size() > 0) {
@@ -1599,7 +1599,7 @@
        String newText = text; // 非通用券需要验证
        if (comment != null && (comment.getNeedSpin() == null || comment.getNeedSpin())) {
            try {
                newText = convertLinkManager.convertLinkFromText(text, uid, true);
                newText = convertLinkManager.convertLinkFromText(text, uid, true,true);
            } catch (ConvertLinkExceptionException e) {
                if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java
@@ -15,6 +15,8 @@
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.exception.user.UserExtraTaoBaoInfoException;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.*;
import com.yeshi.fanli.vo.taobao.TaoBaoUser;
import org.springframework.stereotype.Controller;
@@ -172,6 +174,8 @@
    @Resource
    private OrderMoneyDailyCountService orderMoneyDailyCountService;
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
    /**
@@ -991,4 +995,17 @@
        }
        return money;
    }
    @RequestMapping("getTaoBaoShareParams")
    public void getTaoBaoShareParams(AcceptData acceptData, Long uid, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        String relationId = userExtraTaoBaoInfoService.getRelationIdByUid(uid);
        JSONObject data = new JSONObject();
        data.put("relationId", relationId);
        out.print(JsonUtil.loadTrueResult(data));
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java
@@ -138,6 +138,7 @@
        // VIP数据预览
        MoneyStatisticVO vo = null;
        String redisContent = previewInfoService.getRedisContent(uid, PreviewEnum.moneyInfo);
        //数据预览,填的假数据
        if (!StringUtil.isNullOrEmpty(redisContent)) {
            vo = new Gson().fromJson(redisContent, MoneyStatisticVO.class);
            if (vo != null) {
@@ -160,14 +161,14 @@
        }
        if (vo == null) {
            vo = createMoneyStatistic(uid, acceptData);
            vo = getMoneyStatisticInfo(uid, acceptData);
        }
        Gson gson = getGson();
        out.print(JsonUtil.loadTrueResult(gson.toJson(vo)));
    }
    private MoneyStatisticVO createMoneyStatistic(Long uid, AcceptData acceptData) {
    private MoneyStatisticVO getMoneyStatisticInfo(Long uid, AcceptData acceptData) {
        UserInfo user = userInfoService.getUserById(uid);
        MoneyStatisticVO vo = new MoneyStatisticVO();
fanli/src/main/java/com/yeshi/fanli/dto/taobao/TaoBaoOrderSearchFilter.java
New file
@@ -0,0 +1,13 @@
package com.yeshi.fanli.dto.taobao;
import java.util.Date;
public class TaoBaoOrderSearchFilter {
    private String orderId;//订单号
    private String state;//状态
    private Date minCreateTime;
    private Date maxCreateTime;
    private Date minSettleTime;
    private Date maxSettleTime;
}
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/ExtractAuditRecord.java
@@ -2,6 +2,7 @@
import java.math.BigDecimal;
import org.springframework.data.annotation.Transient;
import org.yeshi.utils.mybatis.Column;
import org.yeshi.utils.mybatis.Table;
@@ -69,6 +70,18 @@
    @Column(name = "extraInfo")
    private String extraInfoStr;//附加信息JSON格式
    
    @Transient
    @Expose
    private String system;//系统名称
    public String getSystem() {
        return system;
    }
    public void setSystem(String system) {
        this.system = system;
    }
    public ExtractOrderStatisticDTO getExtraInfo() {
        return extraInfo;
    }
fanli/src/main/java/com/yeshi/fanli/job/AdJob.java
@@ -8,9 +8,9 @@
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.service.inter.config.AppVersionService;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.util.AppMarketUtil;
import com.yeshi.fanli.util.StringUtil;
import org.springframework.stereotype.Component;
import org.yeshi.utils.AppMarketUtil;
import javax.annotation.Resource;
fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java
@@ -320,7 +320,7 @@
                desc = desc.replaceFirst("\\[链接\\]", link);
            }
            desc = convertLinkManager.convertJDLinkFromText(desc, 0L, true);
            desc = convertLinkManager.convertJDLinkFromText(desc, 0L, true,false);
            info.setContent(desc);
            List<JDGoods> goodsList = JDApiUtil.queryGoodsDetail(goods.getSkuList());
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -907,7 +907,7 @@
                }
            } else if (i == 0 && kind == 1) {
                try {
                    convertLinkManager.convertLinkFromText(content, Constant.LINK_TOKEN_VERIFY_UID, true);
                    convertLinkManager.convertLinkFromText(content, Constant.LINK_TOKEN_VERIFY_UID, true,false);
                } catch (Exception e) {
                    throw new GoodsEvaluateException(1, "不包含可转链的口令与链接");
                }
@@ -977,7 +977,7 @@
        String content = commentInfo.getContent();
        if (!StringUtil.isNullOrEmpty(content) && commentInfo.getNeedSpin()) {
            try {
                convertLinkManager.convertLinkFromText(content, Constant.LINK_TOKEN_VERIFY_UID, true);
                convertLinkManager.convertLinkFromText(content, Constant.LINK_TOKEN_VERIFY_UID, true,false);
            } catch (ConvertLinkExceptionException e) {
                if (ConvertLinkExceptionException.CODE_NONE != e.getCode()) {
                    throw new GoodsEvaluateException(1, "包含不可转链的口令与链接");
@@ -1700,7 +1700,7 @@
                                List<String> activityIdList = convertLinkManager.getTaoBaoOfficialActivityId(content);
                                for (String st : activityIdList)
                                    content = content.replace(st, "");
                                content=content.replace("{relationId}","");
                                commentInfoNew.setContent(content);
                            }
                        }
@@ -1711,6 +1711,8 @@
                        List<String> activityIdList = convertLinkManager.getTaoBaoOfficialActivityId(content);
                        for (String st : activityIdList)
                            content = content.replace(st, "");
                        content=content.replace("{relationId}","");
                        commentInfoNew.setContent(content);
                    }
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/WXMPDynamicInfoServiceImpl.java
@@ -65,7 +65,7 @@
        // 转链
        String convertContent = null;
        try {
            convertContent = convertLinkManager.convertLinkFromText(info.getContent(), uid, true);
            convertContent = convertLinkManager.convertLinkFromText(info.getContent(), uid, true,false);
        } catch (Exception e) {
            e.printStackTrace();
            LogHelper.errorDetailInfo(e);
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java
@@ -367,10 +367,10 @@
        String quanToken = "";
        if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) {// 通过立即推广方式获取淘口令成功
            quanToken = convertLinkManager.createTaoBaoToken(uid, goods.getPictUrl(), goods.getTitle(),
                    goods.getCouponLink());
                    goods.getCouponLink(),false);
        } else if (!StringUtil.isNullOrEmpty(goods.getAuctionUrl())) {
            quanToken = convertLinkManager.createTaoBaoToken(uid, goods.getPictUrl(), goods.getTitle(),
                    goods.getAuctionUrl());
                    goods.getAuctionUrl(),false);
        }
        return quanToken;
    }
fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/CommonShareInfoServiceImpl.java
@@ -33,7 +33,7 @@
            
            if (record.getNeedSpin()) {
                try {
                    convertLinkManager.convertLinkFromText(record.getComment(), Constant.LINK_TOKEN_VERIFY_UID, true);
                    convertLinkManager.convertLinkFromText(record.getComment(), Constant.LINK_TOKEN_VERIFY_UID, true,false);
                } catch (ConvertLinkExceptionException e) {
                    if (ConvertLinkExceptionException.CODE_NONE != e.getCode()) {
                        throw new SpecialException(1, "包含不可转链的口令与链接");
fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/BindingAccountServiceImpl.java
@@ -7,6 +7,7 @@
import javax.annotation.Resource;
import com.yeshi.fanli.entity.SystemEnum;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -121,13 +122,22 @@
            throw new AlipayAccountException(AlipayAccountException.CODE_NO_PARAMS, "账号不能为空");
        if (StringUtil.isNullOrEmpty(name))
            throw new AlipayAccountException(AlipayAccountException.CODE_NO_PARAMS, "真实姓名不能为空");
        //
        List<BindingAccount> bindingAccountList = bindingAccountMapper.selectByAccount(account);
        if (bindingAccountList != null && bindingAccountList.size() > 0) {
            if (bindingAccountList.get(0).getUserInfo().getId().longValue() != uid)
            UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
            SystemEnum systemEnum = user.getSystem();
            for (int i = 0; i < bindingAccountList.size(); i++) {
                UserInfo u = userInfoMapper.selectByPrimaryKey(bindingAccountList.get(i).getUserInfo().getId());
                //同一系统下绑定账号不能重复
                if (u.getSystem() == systemEnum && bindingAccountList.get(i).getUserInfo().getId().longValue() != uid) {
                throw new AlipayAccountException(AlipayAccountException.CODE_ALREADY_BIND,
                        "该支付宝账号已被其他账号绑定,请更换其他的支付宝账号来绑定");
        }
            }
        }
        AlipayAccountValidNormalHistory latest = alipayAccountValidNormalHistoryMapper.selectLatestByUid(uid);
        if (latest != null) {
fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractAuditRecordServiceImpl.java
@@ -5,6 +5,8 @@
import javax.annotation.Resource;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import org.springframework.stereotype.Service;
import com.google.gson.Gson;
@@ -22,7 +24,7 @@
    private ExtractAuditRecordMapper extractAuditRecordMapper;
    
    @Resource
    private CountUserInfoDao countUserInfoDao;
    private UserInfoService userInfoService;
    @Override
    public List<ExtractAuditRecord> getList(int pageIndex, int pageSize, String key, String startTime, String endTime) {
@@ -55,6 +57,8 @@
            for (ExtractAuditRecord record : list) {
                if (!StringUtil.isNullOrEmpty(record.getExtraInfoStr())) {
                    record.setExtraInfo(gson.fromJson(record.getExtraInfoStr(), ExtractOrderStatisticDTO.class));
                    SystemEnum system = userInfoService.getUserSystem(record.getExtract().getUserInfo().getId());
                    record.setSystem(system.getName());
                }
            }
        return list;
fanli/src/main/java/com/yeshi/fanli/service/impl/user/SMSServiceImpl.java
@@ -31,9 +31,12 @@
        String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, StringUtil.Md5("sms-login-tencent-latest-" + phone));
        String msgCode = StringUtil.getVerifyCode(codeLength);
        // 验证码模板
        String msg = Constant.smsConfig.getSmsLogin().replace("[签名]", system.getSmsAlias()).replace("[验证码]",
                msgCode);
        if (Constant.IS_TEST)
            System.out.println(msg);
        // 发送短信
        // 发送间隔2分钟内的采用阿里云短信发送
        String cacheString = redisManager.getCommonString(key);
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java
@@ -485,7 +485,7 @@
        for (CommentInfo commentInfo : comments) {
            String comment = null;
            try {
                comment = convertLinkManager.convertLinkFromText(commentInfo.getContent(), uid, true);
                comment = convertLinkManager.convertLinkFromText(commentInfo.getContent(), uid, true,false);
                hasToken = true;
            } catch (ConvertLinkExceptionException e) {
                if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
fanli/src/main/java/com/yeshi/fanli/service/inter/order/tb/TaoBaoOrderService.java
@@ -39,6 +39,9 @@
     */
    public List<TaoBaoOrder> getTaoBaoOrderByOrderId(String orderId);
    /**
     * 统计当日预估收益
     * 
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java
@@ -32,12 +32,12 @@
import com.yeshi.goods.facade.utils.taobao.HaoDanKuApiUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import org.yeshi.utils.UrlUtils;
/**
 * 转链组件
 * 
 * @author Administrator
 *
 */
@Component
public class ConvertLinkManager {
@@ -55,12 +55,11 @@
    private TaoBaoTokenAuctionIdMapManager taoBaoTokenAuctionIdMapManager;
    /**
     *
     * @Title: convertJDLinkFromText @Description:转链文本中的京东短链 @param text @param
     *         uid @param share @return @throws Exception String 返回类型 @throws
     */
    public String convertJDLinkFromText(String text, Long uid, boolean share) throws Exception {
    public String convertJDLinkFromText(String text, Long uid, boolean share, boolean simpleTKToken) throws Exception {
        StringBuilder builder = new StringBuilder(text);
        String newText = builder.toString();
@@ -148,7 +147,15 @@
     * @Title: convertTBLinkFromText @Description: 转链文本中的淘口令 @param text @param
     *         uid @param share @return @throws Exception String 返回类型 @throws
     */
    private String convertTBLinkFromText(String text, Long uid, boolean share) throws Exception {
    /**
     * @param text
     * @param uid
     * @param share
     * @param simpleToken -是否采用简版淘口令
     * @return
     * @throws Exception
     */
    private String convertTBLinkFromText(String text, Long uid, boolean share, boolean simpleToken) throws Exception {
        StringBuilder builder = new StringBuilder(text);
        String newText = builder.toString();
@@ -231,7 +238,7 @@
                    throw new Exception("商品转链失败");
                }
                String newToken = TaoKeApiUtil.getTKToken(simpleGoods.getPictUrl(), simpleGoods.getTitle(), link);
                String newToken = TaoKeApiUtil.getTKToken(simpleGoods.getPictUrl(), simpleGoods.getTitle(), link, simpleToken);
                if (StringUtil.isNullOrEmpty(newToken)) {
                    throw new Exception("口令转链失败");
                }
@@ -265,7 +272,7 @@
                        link = dto.getClick_url();
                    }
                    String token = TaoKeApiUtil.getTKToken("http://", "淘宝官方活动", link);
                    String token = TaoKeApiUtil.getTKToken("http://", "淘宝官方活动", link, simpleToken);
                    newText = newText.replace(st, TaoBaoUtil.filterTaoToken(token));
                }
            }
@@ -275,15 +282,26 @@
    }
    /**
     *
     * @Title: convertLinkFromText @Description: 从文本转链 @param text @return
     *         String 返回类型 @throws
     */
    public String convertLinkFromText(String text, Long uid, boolean share)
    public String convertLinkFromText(String text, Long uid, boolean share, boolean simpleToken)
            throws ConvertLinkExceptionException, Exception {
        String newText = convertJDLinkFromText(text, uid, share);
        String newText = convertJDLinkFromText(text, uid, share, simpleToken);
        newText = convertPDDLinkFromText(newText, uid, share);
        newText = convertTBLinkFromText(newText, uid, share);
        newText = convertTBLinkFromText(newText, uid, share, simpleToken);
        List<String> urls = UrlUtils.parseUrlsFromText(text);
        if (urls != null)
            for (String url : urls) {
                if (url.contains("{relationId}")) {
                    String relationId = userExtraTaoBaoInfoService.getRelationIdByUid(uid);
                    if (StringUtil.isNullOrEmpty(relationId)) {
                        throw new Exception("淘宝未授权");
                    }
                    newText = newText.replace(url, url.replace("{relationId}", relationId));
                }
            }
        if (text.equalsIgnoreCase(newText))
            throw new ConvertLinkExceptionException(ConvertLinkExceptionException.CODE_NONE, "不包含可转链的口令与链接");
        return newText;
@@ -293,9 +311,8 @@
     * 创建口令 @Title: createTaoBaoToken @Description: @param uid 用户ID @param
     * picturl @param title @param link @return String 返回类型 @throws
     */
    public String createTaoBaoToken(Long uid, String picturl, String title, String link) {
        String token = TaoKeApiUtil.getTKToken(picturl, title, link);
    public String createTaoBaoToken(Long uid, String picturl, String title, String link, boolean simpleToken) {
        String token = TaoKeApiUtil.getTKToken(picturl, title, link, simpleToken);
        if (!StringUtil.isNullOrEmpty(token)) {
            // 缓存30分钟
            redisManager.cacheCommonString(
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/TaoBaoLinkManager.java
@@ -331,13 +331,13 @@
        if (!StringUtil.isNullOrEmpty(tbLink.getCouponLink())) {// 通过立即推广方式获取淘口令成功
            String quanToken = convertLinkManager.createTaoBaoToken(uid, goods.getPictUrl(), goods.getTitle(),
                    tbLink.getCouponLink());
                    tbLink.getCouponLink(),false);
            if (!StringUtil.isNullOrEmpty(quanToken)) {
                tbLink.setTaoToken(quanToken);
            }
        } else if (!StringUtil.isNullOrEmpty(tbLink.getClickUrl())) {
            String quanToken = convertLinkManager.createTaoBaoToken(uid, goods.getPictUrl(), goods.getTitle(),
                    tbLink.getClickUrl());
                    tbLink.getClickUrl(),false);
            if (!StringUtil.isNullOrEmpty(quanToken)) {
                tbLink.setTaoToken(quanToken);
            }
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/OrderMessageListener.java
@@ -2,6 +2,11 @@
import javax.annotation.Resource;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.mq.order.body.OrderWeiQuanMQMsg;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.service.inter.order.OrderProcessService;
import com.yeshi.fanli.service.inter.order.tb.TaoBaoWeiQuanOrderService;
import org.springframework.stereotype.Component;
import com.aliyun.openservices.ons.api.Action;
@@ -22,37 +27,15 @@
 * 订单到账消费
 * 
 * @author Administrator
 *
 */
@Component
public class OrderMessageListener implements MessageListener {
    @Resource
    private HongBaoV2SettleTempService hongBaoV2SettleTempService;
    private OrderProcessService orderProcessService;
    @Resource
    private HongBaoV2Service hongBaoV2Service;
    @Resource
    private HongBaoOrderService hongBaoOrderService;
    @Resource
    private Producer producer;
    private int getHongBaoType(int type) {
        switch (type) {
        case HongBaoV2.TYPE_YIJI:
        case HongBaoV2.TYPE_ERJI:
        case HongBaoV2.TYPE_SHARE_YIJI:
        case HongBaoV2.TYPE_SHARE_ERJI:
            return OrderMoneyRecievedMQMsg.TYPE_INVITE;
        case HongBaoV2.TYPE_SHARE_GOODS:
            return OrderMoneyRecievedMQMsg.TYPE_SHARE;
        case HongBaoV2.TYPE_ZIGOU:
            return OrderMoneyRecievedMQMsg.TYPE_ZIGOU;
        }
        return 0;
    }
    private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
    @Override
    public Action consume(Message message, ConsumeContext context) {
@@ -60,10 +43,11 @@
                new String(message.getBody()));
        if (MQTopicName.TOPIC_ORDER.name().equalsIgnoreCase(message.getTopic())) {
            if (OrderTopicTagEnum.taoBaoOrderWeiQuan.name().equalsIgnoreCase(message.getTag())) {
                String key = message.getKey();
                // 订单维权
                //TODO 维权增加
                OrderWeiQuanMQMsg dto = new Gson().fromJson(new String(message.getBody()), OrderWeiQuanMQMsg.class);
                if (dto != null) {
                    TaoBaoWeiQuanOrder taoBaoWeiQuanOrder = taoBaoWeiQuanOrderService.selectByTradeId(dto.getTradeId());
                    orderProcessService.weiQuanOrder(taoBaoWeiQuanOrder);
                }
                return Action.CommitMessage;
            }
        }
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java
@@ -1059,6 +1059,34 @@
        JSONObject data = JSONObject.fromObject(resultStr);
        if (data.optJSONObject("tbk_tpwd_create_response").optJSONObject("data") != null)
            return data.optJSONObject("tbk_tpwd_create_response").optJSONObject("data").optString("model");
        return null;
    }
    public static String getTKToken(String logo, String text, String url, boolean simpleToken) {
        if (simpleToken) {
            return getSimpleTKToken(logo, text, url);
        } else {
            return getTKToken(logo, text, url);
        }
    }
    public static String getSimpleTKToken(String logo, String text, String url) {
        if (text == null)
            return null;
        if (text.length() < 5)
            text = "好货:" + text;
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.tpwd.create");
        map.put("url", url);
        map.put("text", text);
        map.put("logo", logo);
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        JSONObject data = JSONObject.fromObject(resultStr);
        if (data.optJSONObject("tbk_tpwd_create_response").optJSONObject("data") != null)
            return data.optJSONObject("tbk_tpwd_create_response").optJSONObject("data").optString("password_simple");
        return null;
    }
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeOrderApiUtil.java
@@ -7,6 +7,7 @@
import java.util.List;
import java.util.Map;
import com.yeshi.fanli.dto.order.OrderQuery;
import com.yeshi.fanli.dto.taobao.TaoBaoOrderResultDTO;
import com.yeshi.fanli.dto.taobao.WeiQuanOrderResult;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
@@ -411,4 +412,48 @@
        }
        return null;
    }
    @Deprecated
    public static List<TaoBaoOrder> queryTaoBaoOrder(OrderQuery orderQuery, String appKey, String appSecret) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.order.get");
        map.put("fields",
                "tb_trade_parent_id,tb_trade_id,num_iid,item_title,item_num,price,pay_price,seller_nick,seller_shop_title,commission,commission_rate,unid,create_time,earning_time,tk_status,tk3rd_pub_id,tk3rd_site_id,tk3rd_adzone_id,relation_id,tb_trade_parent_id,tb_trade_id,num_iid,item_title,item_num,price,pay_price,seller_nick,seller_shop_title,commission,commission_rate,unid,create_time,earning_time,tk3rd_pub_id,tk3rd_site_id,tk3rd_adzone_id,special_id,click_time,relation_id,special_id");
        if (orderQuery.startTime != null)
            map.put("start_time", orderQuery.startTime);
        if (orderQuery.span != null)
            map.put("span", orderQuery.span + "");
        map.put("page_no", orderQuery.pageNo + "");
        map.put("page_size", orderQuery.pageSize + "");
        if (orderQuery.tkStatus != null)
            map.put("tk_status", orderQuery.tkStatus + "");
        if (orderQuery.orderQueryType != null)
            map.put("order_query_type", orderQuery.orderQueryType);
        if (orderQuery.orderScene != null)
            map.put("order_scene", orderQuery.orderScene + "");
        if (orderQuery.orderCountType != null)
            map.put("order_count_type", orderQuery.orderCountType + "");
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(appKey);
        app.setAppSecret(appSecret);
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(json);
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return null;
    }
}
fanli/src/main/resource/env-dev/mongo.properties
@@ -1,13 +1,13 @@
mongo.dbname=flq
mongo.port=27017
mongo.port=27016
#开发环境
mongo.host=192.168.1.253
mongo.username=admin
mongo.password=123456
#mongo.host=192.168.1.253
#mongo.username=admin
#mongo.password=123456
#mongo.host=193.112.35.168
#mongo.username=yeshi
#mongo.password=Yeshi2016@
mongo.host=193.112.35.168
mongo.username=yeshi
mongo.password=Yeshi2016@
mongo.connectionsPerHost=8
mongo.threadsAllowedToBlockForConnectionMultiplier=4
fanli/src/main/resource/env-dev/redis.properties
@@ -1,4 +1,4 @@
redis.addr=192.168.1.253
redis.addr=192.168.3.253
redis.port=6379
redis.auth=123456
#redis.addr=193.112.34.40
fanli/src/main/resource/mapping/order/CommonOrderMapper.xml
@@ -916,6 +916,12 @@
            AND co.`co_third_create_time`&gt;#{minTime} AND
            <![CDATA[ (co.`co_estimate`>=  ${money} OR co.`co_eIncome`> ${money})]]>
        </if>
        <if test="payment != null">AND
            co.co_payment <![CDATA[<]]>
            #{payment}
        </if>
        ORDER BY co.co_third_create_time DESC LIMIT ${start},${count} ) A LEFT
        JOIN yeshi_ec_user u ON u.id = A.hb_uid
    </select>
fanli/src/main/resource/rocket/consumer.xml
@@ -368,6 +368,35 @@
        </property>
    </bean>
    <!-- 红包消息订阅 -->
    <bean id="orderMessageListener"
          class="com.yeshi.fanli.util.rocketmq.consumer.order.OrderMessageListener"></bean>
    <!-- Group ID 订阅同一个 Topic,可以创建多个 ConsumerBean -->
    <bean id="orderConsumer" class="com.aliyun.openservices.ons.api.bean.ConsumerBean"
          init-method="start" destroy-method="shutdown">
        <property name="properties"> <!--消费者配置信息 -->
            <props>
                <prop key="AccessKey">${rocketmq.AccessKey}</prop>
                <prop key="SecretKey">${rocketmq.SecretKey}</prop>
                <prop key="GROUP_ID">GID_ORDER</prop>
                <prop key="NAMESRV_ADDR">${rocketmq.NAMESRV_ADDR}</prop>
                <prop key="ConsumeThreadNums">50</prop>
            </props>
        </property>
        <property name="subscriptionTable">
            <map>
                <entry value-ref="orderMessageListener">
                    <key>
                        <bean class="com.aliyun.openservices.ons.api.bean.Subscription">
                            <property name="topic" value="TOPIC_ORDER" />
                            <property name="expression" value="taoBaoOrderWeiQuan" />
                        </bean>
                    </key>
                </entry>
            </map>
        </property>
    </bean>
    <!-- 测试消息订阅 -->
    <bean id="testRocketMQCosumerListener"
fanli/src/test/java/org/fanli/MyBatisProduce.java
@@ -2,8 +2,10 @@
import com.yeshi.fanli.entity.brand.BrandClassSystemMap;
import com.yeshi.fanli.entity.bus.user.HongBaoManage;
import com.yeshi.fanli.entity.bus.user.Order;
import com.yeshi.fanli.entity.common.Config;
import com.yeshi.fanli.entity.config.CommonConfig;
import com.yeshi.fanli.entity.pdd.PDDOrder;
import com.yeshi.fanli.entity.push.PushGoods;
import com.yeshi.fanli.entity.system.BusinessSystem;
import org.junit.Test;
@@ -28,8 +30,8 @@
    @Test
    public void test1() {
        ColumnParseUtil.parseColumn(HongBaoManage.class,
                "D:\\workspace\\fanli\\fanli-server\\fanli\\src\\main\\resource\\mapping\\HongBaoManageMapper.xml");
        ColumnParseUtil.parseColumn(Order.class,
                "D:\\workspace\\fanli\\fanli-server\\fanli\\src\\main\\resource\\mapping\\order\\OrderMapper.xml");
    }
}
fanli/src/test/java/org/fanli/TaoKeTest.java
@@ -13,6 +13,8 @@
import java.util.List;
import java.util.Map;
import com.yeshi.fanli.dto.order.OrderQuery;
import com.yeshi.fanli.util.taobao.TaoKeOrderApiUtil;
import org.junit.Test;
import org.yeshi.utils.HttpUtil;
@@ -225,7 +227,7 @@
                + "https://u.jd.com/d9fcGr\n" + "⚡京东秒杀\n" + "https://u.jd.com/WSIi1z\n" + "【记得与更多好友分享[愉快]】";
        ConvertLinkManager convertLinkManager = BeanUtil.getBean(ConvertLinkManager.class);
        try {
            System.out.println(convertLinkManager.convertLinkFromText(text, 437032L, true));
            System.out.println(convertLinkManager.convertLinkFromText(text, 437032L, true,false));
        } catch (Exception e) {
            e.printStackTrace();
        }
@@ -260,9 +262,7 @@
    @Test
    public void test12() {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    new FileInputStream(new File("C:/Users/Administrator/Desktop/新建文本文档 (2).txt"))));
            String text = "";
@@ -346,4 +346,15 @@
        }
    }
    @Test
    public void test18(){
        OrderQuery q=new OrderQuery();
        q.startTime="2020-01-01";
        q.pageNo=1;
        q.pageSize=20;
        TaoKeOrderApiUtil.queryTaoBaoOrder(q,TaoBaoConstant.TAOBAO_AUTH_APPKEY,TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
    }
}
utils/pom.xml
@@ -30,5 +30,13 @@
        <version>4.3.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 -->
    <dependency>
      <groupId>ch.ethz.ganymed</groupId>
      <artifactId>ganymed-ssh2</artifactId>
      <version>build210</version>
    </dependency>
  </dependencies>
</project>
utils/src/main/java/org/yeshi/utils/AppMarketUtil.java
File was renamed from fanli/src/main/java/com/yeshi/fanli/util/AppMarketUtil.java
@@ -1,12 +1,8 @@
package com.yeshi.fanli.util;
package org.yeshi.utils;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.yeshi.utils.HttpUtil;
import java.io.IOException;
import java.net.URLEncoder;
/**
utils/src/main/java/org/yeshi/utils/LinuxRemoteCommandUtil.java
New file
@@ -0,0 +1,105 @@
package org.yeshi.utils;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import java.io.*;
/**
 * 远程Linux系统命令执行
 */
public class LinuxRemoteCommandUtil {
    private static String DEFAULTCHART = "UTF-8";
    /**
     * 登录主机
     *
     * @return 登录成功返回true,否则返回false
     */
    public static Connection login(String ip,
                                   String userName,
                                   String userPwd) {
        boolean flg = false;
        Connection conn = null;
        try {
            conn = new Connection(ip);
            conn.connect();//连接
            flg = conn.authenticateWithPassword(userName, userPwd);//认证
            if (flg) {
                return conn;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return conn;
    }
    /**
     * 远程执行shll脚本或者命令
     *
     * @param cmd 即将执行的命令
     * @return 命令执行完后返回的结果值
     */
    public static String execute(Connection conn, String cmd) {
        String result = "";
        try {
            if (conn != null) {
                Session session = conn.openSession();//打开一个会话
                session.execCommand(cmd);//执行命令
                result = processStdout(session.getStdout(), DEFAULTCHART);
                //如果为得到标准输出为空,说明脚本执行出错了
                if (StringUtil.isNullOrEmpty(result)) {
                    result = processStdout(session.getStderr(), DEFAULTCHART);
                }
                conn.close();
                session.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
    /**
     * 解析脚本执行返回的结果集
     *
     * @param in      输入流对象
     * @param charset 编码
     * @return 以纯文本的格式返回
     */
    private static String processStdout(InputStream in, String charset) {
        InputStream stdout = new StreamGobbler(in);
        StringBuffer buffer = new StringBuffer();
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout, charset));
            String line = null;
            while ((line = br.readLine()) != null) {
                buffer.append(line + "\n");
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return buffer.toString();
    }
    /**
     *
     * @param ip
     * @param userName
     * @param pwd
     * @param cmd
     * @throws Exception
     */
    public static void execute(String ip, String userName, String pwd, String cmd) throws Exception {
        Connection connection = login(ip, userName, pwd);
        if (connection == null)
            throw new Exception("登录失败");
        execute(connection, cmd);
    }
}
utils/src/main/java/org/yeshi/utils/UrlUtils.java
New file
@@ -0,0 +1,29 @@
package org.yeshi.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UrlUtils {
    /**
     * 解析文本中的链接
     *
     * @param text
     * @return
     */
    public static List<String> parseUrlsFromText(String text) {
        List<String> urlList = new ArrayList<>();
        String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?";
        Pattern p = Pattern.compile(URL_REGEX);
        Matcher matcher = p.matcher(text);
        while (matcher.find()) {
            String url = matcher.group();
            if (!StringUtil.isNullOrEmpty(url)) {
                urlList.add(url);
            }
        }
        return urlList;
    }
}
utils/utils.iml
@@ -29,6 +29,7 @@
    <orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.3" level="project" />
    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.2" level="project" />
    <orderEntry type="library" name="Maven: ch.ethz.ganymed:ganymed-ssh2:build210" level="project" />
    <orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-core:2.6.11" level="project" />
    <orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-web:2.0.4" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.0.RELEASE" level="project" />