admin
2020-12-05 145a6efab30d7a0acb76eee6cd512eba93665efe
大淘客编码问题解决,mybatis优化
7个文件已修改
1个文件已添加
476 ■■■■■ 已修改文件
facade-goods/src/main/java/com/yeshi/goods/facade/utils/taobao/DaTaoKeApiUtil.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/CMQUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/mongo/MongoDaoUtil.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/mybatis/ColumnParseUtil.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/test/java/com/yeshi/utils/MyBatisTest.java 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-goods/src/main/java/com/yeshi/goods/facade/utils/taobao/DaTaoKeApiUtil.java
@@ -109,6 +109,25 @@
        }
    }
    private static InputStream baseGetForStream(String url, Map<String, String> params) {
        HttpClient client = new HttpClient();
        try {
            Iterator<String> keys = params.keySet().iterator();
            String key;
            for (url = url + "?"; keys.hasNext(); url = url + String.format("%s=%s&", key, URLEncoder.encode((String) params.get(key), "UTF-8"))) {
                key = keys.next();
            }
            GetMethod method = new GetMethod(url);
            client.executeMethod(method);
            InputStream inputStream = method.getResponseBodyAsStream();
            return inputStream;
        } catch (Exception var7) {
            var7.printStackTrace();
            return null;
        }
    }
    private static String request(String url) {
        String result = null;
@@ -625,7 +644,7 @@
        TaoKeAppInfo app = getRandomApp();
        DaTaoKeGoodsResult daTaoKeGoodsResult = new DaTaoKeGoodsResult();
        Map<String, String> params = new TreeMap<>();
        params.put("version", "v1.1.0");
        params.put("version", "v1.3.0");
        params.put("appKey", app.getAppKey());
        params.put("rankType", type + "");
        if (cid != null)
@@ -637,17 +656,6 @@
            result = baseGet("https://openapi.dataoke.com/api/goods/get-ranking-list", params);
        } catch (Exception e) {
            result = baseGet("https://openapi.dataoke.com/api/goods/get-ranking-list", params);
        }
        try {
//            System.out.println("GBK:"+new String(result.getBytes("GBK"),"UTF-8"));
//            System.out.println("ISO-8859-1:"+new String(result.getBytes("ISO-8859-1"),"UTF-8"));
//            System.out.println("GB2312:"+new String(result.getBytes("GB2312"),"UTF-8"));
            result = new String(result.getBytes("ISO-8859-1"), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        JSONObject json = JSONObject.fromObject(result);
@@ -836,4 +844,30 @@
        }
        return daTaoKeGoodsResult;
    }
    /**
     * 解析淘口令
     *
     * @param content
     * @return
     */
    public static Long parseTaoBaoToken(String content) {
        TaoKeAppInfo app = getRandomApp();
        Map<String, String> params = new TreeMap<>();
        params.put("version", "v1.0.0");
        params.put("appKey", app.getAppKey());
        params.put("content", content);
        params.put("sign", getSign(params, app.getAppSecret()));
        String result = baseGet("https://openapi.dataoke.com/api/tb-service/parse-taokouling", params);
        System.out.println(result);
        JSONObject resultObj = JSONObject.fromObject(result);
        if (resultObj.optInt("code") == 0) {
            String goodsId = resultObj.optJSONObject("data").optString("goodsId");
            if (!StringUtil.isNullOrEmpty(goodsId)) {
                return Long.parseLong(goodsId);
            }
        }
        return null;
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java
@@ -41,9 +41,9 @@
    /**
     * 获取超级红包分享口令
     *
     * @param acceptData
     * @param sign
     * @param uid
     * @param callback
     * @param out
     */
    @RequestMapping(value = "getSuperHongBaoToken")
@@ -70,7 +70,7 @@
        if (StringUtil.isNullOrEmpty(token)) {
            try {
                TaoKeOfficialActivityConvertResultDTO dto = TaoKeApiUtil.officialActivityConvert("19507100253",
                        "20150318020001156", info.getRelationId());
                        "20150318020002508", info.getRelationId());
                String link = dto.getClick_url();
                if (!StringUtil.isNullOrEmpty(link)) {
@@ -125,7 +125,7 @@
        if (StringUtil.isNullOrEmpty(token)) {
            try {
                TaoKeOfficialActivityConvertResultDTO dto = TaoKeApiUtil.officialActivityConvert("19507100253",
                        "20150318020001158", info.getRelationId());
                        "20150318020002508", info.getRelationId());
                String link = dto.getClick_url();
                if (!StringUtil.isNullOrEmpty(link)) {
                    token = TaoKeApiUtil.getTKToken("http://img.flqapp.com/resource/s11/banner.jpg", "预售商品付定金,得奖金!",
fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java
@@ -11,6 +11,7 @@
import javax.annotation.Resource;
import com.yeshi.goods.facade.utils.taobao.DaTaoKeApiUtil;
import org.springframework.stereotype.Component;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.NumberUtil;
@@ -54,7 +55,6 @@
 * 粘贴板解析
 * 
 * @author Administrator
 *
 */
@Component
public class ClipboardAnalysisManager {
@@ -119,7 +119,6 @@
    }
    /**
     *
     * @Title: parse @Description: 解析 @param text @param typeSet void
     *         返回类型 @throws
     */
@@ -144,6 +143,18 @@
            }
            return;
        }
        //优先解析淘口令
        Long goodsId = DaTaoKeApiUtil.parseTaoBaoToken(text);
        if (goodsId != null) {
            CommonGoods commonGoods = getTaoBaoGoods(goodsId);
            if (commonGoods != null)
                resultListener.onResult(commonGoods);
            else
                resultListener.onResult(text);
            return;
        }
        // 只有链接 淘宝链接/京东链接/拼多多链接
        if (typeSet.size() == 1) {
@@ -335,7 +346,6 @@
    }
    /**
     *
     * @Title: parseLink @Description: 解析单链接 @param link @return CommonGoods
     *         返回类型 @throws
     */
@@ -537,6 +547,13 @@
    private CommonGoods parseTaoBaoToken(String token) throws TaoBaoTokenParseException {
        Long auctionId = taoBaoTokenAuctionIdMapManager.getAuctionIdByToken(token);
        if (auctionId != null) {//
            return getTaoBaoGoods(auctionId);
        } else {
            return null;
        }
    }
    private CommonGoods getTaoBaoGoods(Long auctionId) {
            TaoBaoGoodsBrief goods = TaoBaoUtil.isAlimama(auctionId + "");
            if (goods == null) {
                goods = TaoBaoUtil.getTaoBaoGoodsBriefNotInPub(auctionId);
@@ -546,13 +563,9 @@
                return commonGoods;
            } else
                return null;
        } else {
            return null;
        }
    }
    /**
     *
     * @Title: analysisDouYin @Description: 抖音解析 @param link @return CommonGoods
     *         返回类型 @throws
     */
@@ -622,5 +635,4 @@
 * 粘贴板解析结果
 * 
 * @author Administrator
 *
 */
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java
@@ -2021,6 +2021,8 @@
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            System.out.println(json.toString());
            try {
                return json.optJSONObject("tbk_tpwd_convert_response").optJSONObject("data").optLong("num_iid");
            } catch (Exception e) {
utils/src/main/java/org/yeshi/utils/CMQUtil.java
@@ -8,6 +8,7 @@
import com.qcloud.cmq.Queue;
import com.qcloud.cmq.QueueMeta;
import com.qcloud.cmq.Topic;
import org.springframework.data.annotation.Transient;
//腾讯CMQ消息
public class CMQUtil {
utils/src/main/java/org/yeshi/utils/mongo/MongoDaoUtil.java
@@ -1,6 +1,8 @@
package org.yeshi.utils.mongo;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.yeshi.utils.entity.wx.WXAPPInfo;
@@ -41,19 +43,31 @@
        List<Field> fields = getValidField(clz);
        StringBuilder builder = new StringBuilder();
        builder.append(String.format("void updateSelective(%s bean){\r\n", clz.getSimpleName()));
        builder.append(String.format("public void updateSelective(%s bean) {\r\n", clz.getSimpleName()));
        builder.append("    Query query = new Query();\r\n");
        builder.append("    query.addCriteria(Criteria.where(\"id\").is(bean.getId()));\r\n");
        builder.append("    Update update=new Update();\r\n");
        for (Field f : fields) {
            if ("id".equalsIgnoreCase(f.getName()) || "createTime".equalsIgnoreCase(f.getName()))
                continue;
            if (f.getModifiers() == 25) {//public final static修饰
                continue;
            }
            String getMethod = String.format("bean.get%s()", f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1));
            if (f.getName().equalsIgnoreCase("updateTime")) {
                builder.append(String.format("    update.set(\"%s\", %s);\r\n", f.getName(), "new Date()"));
            } else {
            builder.append(String.format("  if(%s!=null){\r\n", getMethod));
            builder.append(String.format("      update.set(\"%s\",%s)\r\n", f.getName(), getMethod));
                builder.append(String.format("        update.set(\"%s\", %s);\r\n", f.getName(), f.getName().equalsIgnoreCase("updateTime") ? "new Date()" : getMethod));
            builder.append("    }\r\n");
        }
        }
        builder.append("    update(query, update);\r\n");
        builder.append("}");
        System.out.println(builder.toString());
        return builder.toString();
    }
utils/src/main/java/org/yeshi/utils/mybatis/ColumnParseUtil.java
@@ -1,21 +1,69 @@
package org.yeshi.utils.mybatis;
import org.springframework.data.annotation.Transient;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
public class ColumnParseUtil {
    /**
     * 将属性转为数据库字段
     *
     * @param fieldName
     * @return
     */
    private static String convertFieldToColumn(String fieldName) {
        String column = "";
        for (int i = 0; i < fieldName.length(); i++) {
            //大写字母
            if (fieldName.charAt(i) >= 65 && fieldName.charAt(i) <= 90) {
                //前面一个为非大写
                if (i > 0 && (fieldName.charAt(i - 1) < 65 || fieldName.charAt(i - 1) > 90)) {
                    column += "_" + fieldName.charAt(i);
                } else {
                    column += fieldName.charAt(i);
                }
            } else {
                column += fieldName.charAt(i);
            }
        }
        return column.toLowerCase();
    }
    public static void parseColumn(Class<?> clz, String path) {
        Field[] fields = clz.getDeclaredFields();
        for (Field fd : fields) {
            //private/public 非final,static属性才会参与解析
            if (fd.getModifiers() != 1 && fd.getModifiers() != 2) {
                continue;
            }
            String columName = convertFieldToColumn(fd.getName());
            Annotation[] as = fd.getAnnotations();
            for (Annotation a : as) {
                //不参与解析
                if (a instanceof Column) {
                    Column c = (Column) a;
                    System.out.println(c.name());
                    ColumnUtil.addColumnToMapper(path, c.name(), fd.getName(), getJDBCType(fd.getType().getName()));
                    columName = c.name();
                }
            }
            for (Annotation a : as) {
                //不参与解析
                if (a instanceof Transient || a instanceof java.beans.Transient) {
                    columName = null;
                    break;
                }
            }
            if (columName != null) {
                ColumnUtil.addColumnToMapper(path, columName, fd.getName(), getJDBCType(fd.getType().getName()));
            }
        }
    }
utils/src/test/java/com/yeshi/utils/MyBatisTest.java
New file
@@ -0,0 +1,305 @@
package com.yeshi.utils;
import org.springframework.data.annotation.Transient;
import org.yeshi.utils.mybatis.Column;
import org.yeshi.utils.mybatis.MyBatisMapperUtil;
import org.yeshi.utils.mybatis.Table;
import java.util.Date;
public class MyBatisTest {
    public static void main(String[] args) {
        MyBatisMapperUtil.createMapper(TestBean.class);
    }
    @Table("test")
    class TestBean {
        //未提交审核
        public final static int STATE_NOT_SUBMIT_VERIFY = -2;
        //审核被拒绝
        public final static int STATE_VERIFY_REJECT = -1;
        //等待审核
        public final static int STATE_WAITING_VERIFY = 0;
        //审核通过,未发布
        public final static int STATE_NOT_PUBLISH = 1;
        //已经开始,强制结束
        public final static int STATE_FOUCE_FINISH = 2;
        //已发布,未开始
        public final static int STATE_NOT_STARTED = 10;
        //已经开始
        public final static int STATE_STARTED = 20;
        //已经结束,等待预开奖
        public final static int STATE_FINISH = 30;
        //已开奖,等待显示
        public final static int STATE_PRE_OPENED = 40;
        //已开奖,已经显示
        public final static int STATE_OPENED = 41;
        private Long id;
        private Long appId;
        private Long sponsorId;
        private String name;
        private String materialPoster;
        private String materialTagImage;
        private String material;
        private String desc;
        /**
         * 最大人数
         */
        private Integer maxPersonCount;
        /**
         * 现有人数
         */
        @Column(name = "current_person_count")
        private Integer currentPersonCount;
        @Column(name = "`state`")
        private Integer state;
        @Column(name = "state_remarks")
        private String stateRemarks;
        @Column(name = "pre_start_time")
        private Date preStartTime;
        @Column(name = "actual_start_time")
        private Date actualStartTime;
        @Column(name = "pre_finish_time")
        private Date preFinishTime;
        @Column(name = "actual_finish_time")
        private Date actualFinishTime;
        @Column(name = "pre_open_time")
        private Date preOpenTime;
        @Column(name = "actual_open_time")
        private Date actualOpenTime;
        @Column(name = "create_time")
        private Date createTime;
        @Column(name = "update_time")
        private Date updateTime;
        @Transient
        //奖项列表
        private String awardsList;
        @Transient
        //赞助信息
        private String sponsorInfo;
        @Transient
        //开奖信息
        private String openInfo;
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public Long getAppId() {
            return appId;
        }
        public void setAppId(Long appId) {
            this.appId = appId;
        }
        public Long getSponsorId() {
            return sponsorId;
        }
        public void setSponsorId(Long sponsorId) {
            this.sponsorId = sponsorId;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getMaterialPoster() {
            return materialPoster;
        }
        public void setMaterialPoster(String materialPoster) {
            this.materialPoster = materialPoster;
        }
        public String getMaterialTagImage() {
            return materialTagImage;
        }
        public void setMaterialTagImage(String materialTagImage) {
            this.materialTagImage = materialTagImage;
        }
        public String getMaterial() {
            return material;
        }
        public void setMaterial(String material) {
            this.material = material;
        }
        public String getDesc() {
            return desc;
        }
        public void setDesc(String desc) {
            this.desc = desc;
        }
        public Integer getMaxPersonCount() {
            return maxPersonCount;
        }
        public void setMaxPersonCount(Integer maxPersonCount) {
            this.maxPersonCount = maxPersonCount;
        }
        public Integer getCurrentPersonCount() {
            return currentPersonCount;
        }
        public void setCurrentPersonCount(Integer currentPersonCount) {
            this.currentPersonCount = currentPersonCount;
        }
        public Integer getState() {
            return state;
        }
        public void setState(Integer state) {
            this.state = state;
        }
        public String getStateRemarks() {
            return stateRemarks;
        }
        public void setStateRemarks(String stateRemarks) {
            this.stateRemarks = stateRemarks;
        }
        public Date getPreStartTime() {
            return preStartTime;
        }
        public void setPreStartTime(Date preStartTime) {
            this.preStartTime = preStartTime;
        }
        public Date getActualStartTime() {
            return actualStartTime;
        }
        public void setActualStartTime(Date actualStartTime) {
            this.actualStartTime = actualStartTime;
        }
        public Date getPreFinishTime() {
            return preFinishTime;
        }
        public void setPreFinishTime(Date preFinishTime) {
            this.preFinishTime = preFinishTime;
        }
        public Date getActualFinishTime() {
            return actualFinishTime;
        }
        public void setActualFinishTime(Date actualFinishTime) {
            this.actualFinishTime = actualFinishTime;
        }
        public Date getPreOpenTime() {
            return preOpenTime;
        }
        public void setPreOpenTime(Date preOpenTime) {
            this.preOpenTime = preOpenTime;
        }
        public Date getActualOpenTime() {
            return actualOpenTime;
        }
        public void setActualOpenTime(Date actualOpenTime) {
            this.actualOpenTime = actualOpenTime;
        }
        public Date getCreateTime() {
            return createTime;
        }
        public void setCreateTime(Date createTime) {
            this.createTime = createTime;
        }
        public Date getUpdateTime() {
            return updateTime;
        }
        public void setUpdateTime(Date updateTime) {
            this.updateTime = updateTime;
        }
        public String getAwardsList() {
            return awardsList;
        }
        public void setAwardsList(String awardsList) {
            this.awardsList = awardsList;
        }
        public String getSponsorInfo() {
            return sponsorInfo;
        }
        public void setSponsorInfo(String sponsorInfo) {
            this.sponsorInfo = sponsorInfo;
        }
        public String getOpenInfo() {
            return openInfo;
        }
        public void setOpenInfo(String openInfo) {
            this.openInfo = openInfo;
        }
    }
}