admin
2020-06-04 707fe882db81a134a8c9fe4314c7a6a0b1c103e3
初始化导入
1 文件已重命名
5个文件已修改
6个文件已添加
428 ■■■■ 已修改文件
src/main/java/com/ks/tool/bkz/controller/ParseController.java 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ks/tool/bkz/dao/FirstOrderSubInfoDao.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ks/tool/bkz/dao/MongodbBaseDao.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ks/tool/bkz/dto/FirstOrderSubParseResult.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ks/tool/bkz/entity/FirstOrderSubInfo.java 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ks/tool/bkz/service/FirstOrderSubInfoService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ks/tool/bkz/service/impl/FirstOrderSubInfoServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ks/tool/bkz/util/FirstOrderSubDataUtil.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ks/tool/bkz/util/JsonUtil.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ks/tool/bkz/util/UrlUtil.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/ks/tool/bkz/BkzApplicationTests.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ks/tool/bkz/controller/ParseController.java
@@ -1,19 +1,35 @@
package com.ks.tool.bkz.controller;
import com.alibaba.fastjson.JSONObject;
import com.ks.tool.bkz.dto.FirstOrderSubParseResult;
import com.ks.tool.bkz.entity.FirstOrderSubInfo;
import com.ks.tool.bkz.service.FirstOrderSubInfoService;
import com.ks.tool.bkz.service.manager.RedisManager;
import com.ks.tool.bkz.util.FirstOrderSubDataUtil;
import com.ks.tool.bkz.util.JsonUtil;
import com.ks.tool.bkz.util.UrlUtil;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("parse")
public class ParseController {
    String cookie = null;
    @Resource
    private RedisManager redisManager;
    @Resource
    private FirstOrderSubInfoService firstOrderSubInfoService;
    @RequestMapping("getRequestUrl")
    @ResponseBody
@@ -21,24 +37,35 @@
        String host = UrlUtil.getHost(baseUrl);
        Map<String, String> params = UrlUtil.getParamsMap(baseUrl);
        params.put("t", System.currentTimeMillis() + "");
        cookie = redisManager.get("cookie");
        String token = FirstOrderSubDataUtil.getTokenFromCookie(cookie);
        String data = params.get("data");
        try {
            data = URLDecoder.decode(data, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        JSONObject dataJSON = JSONObject.parseObject(data);
        String paramsStr = dataJSON.getString("params");
        dataJSON = JSONObject.parseObject(paramsStr);
        int pageNo = dataJSON.getInteger("pageNo");
        dataJSON.put("pageNo", pageNo + 1);
        JSONObject paramsJSON = new JSONObject();
        paramsJSON.put("params", dataJSON.toJSONString());
        data = paramsJSON.toJSONString();
        String sign = FirstOrderSubDataUtil.getSign(token, params.get("t"), params.get("appKey"), data);
        params.put("data", data);
        params.put("sign", sign);
        String requestUrl = UrlUtil.getRequestUrl(host, params);
        return requestUrl;
        if (pageNo < 30) {
            dataJSON.put("pageNo", pageNo + 1);
            JSONObject paramsJSON = new JSONObject();
            paramsJSON.put("params", dataJSON.toJSONString());
            data = paramsJSON.toJSONString();
            String sign = FirstOrderSubDataUtil.getSign(token, params.get("t"), params.get("appKey"), data);
            params.put("data", data);
            params.put("sign", sign);
            String requestUrl = UrlUtil.getRequestUrl(host, params);
            JSONObject root = new JSONObject();
            root.put("url", requestUrl);
            System.out.println(requestUrl);
            return JsonUtil.loadTrueResult(root);
        } else {
            return JsonUtil.loadFalseResult(1, "");
        }
    }
@@ -52,8 +79,40 @@
    @ResponseBody
    public String uploadCookie(String cookies) {
        this.cookie = cookies;
        redisManager.save("cookie", cookies, 60 * 60);
        return cookies;
    }
    @RequestMapping("getLoginUrl")
    public void getLoginUrl(PrintWriter out) {
        JSONObject data = new JSONObject();
        data.put("loginUrl", String.format("http://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&redirectURL=%s&full_redirect=true&disableQuickLogin=true", URLEncoder.encode("https://m.tb.cn/h.VN61jro?sm=9ed9c4")));
        out.print(JsonUtil.loadTrueResult(data));
    }
    @RequestMapping("getCookie")
    @ResponseBody
    public String getCookie() {
        return redisManager.get("cookie");
    }
    @RequestMapping("uploadContent")
    @ResponseBody
    public String uploadContent(String content) {
        FirstOrderSubParseResult result = FirstOrderSubDataUtil.parseOrderSubData(content);
        if (result != null && result.isHasNextPage()) {
            if (result.getGoodsList() != null)
                for (FirstOrderSubInfo info : result.getGoodsList()) {
                    firstOrderSubInfoService.add(info);
                    System.out.println(info.getId() + "-" + info.getTitle());
                }
            System.out.println("----------------------------");
            return JsonUtil.loadTrueResult(null);
        } else {
            return JsonUtil.loadFalseResult(1, "无更多数据");
        }
    }
}
src/main/java/com/ks/tool/bkz/dao/FirstOrderSubInfoDao.java
New file
@@ -0,0 +1,19 @@
package com.ks.tool.bkz.dao;
import com.ks.tool.bkz.entity.FirstOrderSubInfo;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
@Repository
public class FirstOrderSubInfoDao {
    @Resource
    private MongoTemplate mongoTemplate;
    public void save(FirstOrderSubInfo info) {
        mongoTemplate.save(info);
    }
}
src/main/java/com/ks/tool/bkz/dao/MongodbBaseDao.java
New file
@@ -0,0 +1,102 @@
package com.ks.tool.bkz.dao;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.data.mongodb.core.MongoTemplate;
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.springframework.stereotype.Repository;
@Repository
public abstract class MongodbBaseDao<T> {
    @Resource
    protected MongoTemplate mongoTemplate;
    /**
     * 插入数据
     *
     * @param bean
     * @return
     */
    public T save(T bean) {
        mongoTemplate.save(bean);
        return bean;
    }
    /**
     * 根据主键更新数据
     *
     * @param query
     * @param update
     */
    public void update(Query query, Update update) {
        mongoTemplate.upsert(query, update, this.getEntityClass());
    }
    /**
     * 查询一个数据
     *
     * @param query
     * @return
     */
    public T findOne(Query query) {
        return (T) mongoTemplate.findOne(query, this.getEntityClass());
    }
    /**
     * 查询多个数据
     *
     * @param query
     * @return
     */
    public List<T> findList(Query query) {
        return mongoTemplate.find(query, this.getEntityClass());
    }
    /**
     * 统计数量
     *
     * @param query
     * @return
     */
    public long count(Query query) {
        return mongoTemplate.count(query, this.getEntityClass());
    }
    /**
     * 主键查询
     *
     * @param id
     * @return
     */
    public T get(Object id) {
        return (T) mongoTemplate.findById(id, this.getEntityClass());
    }
    /**
     * 通过主键删除
     *
     * @param id
     */
    public void delete(Object id) {
        Query query = Query.query(Criteria.where("id").is(id));
        mongoTemplate.remove(query, getEntityClass());
    }
    public void delete(Query query) {
        mongoTemplate.remove(query, getEntityClass());
    }
    @SuppressWarnings("unchecked")
    protected Class<T> getEntityClass() {
        Class<T> tClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
                .getActualTypeArguments()[0];
        return tClass;
    }
}
src/main/java/com/ks/tool/bkz/dto/FirstOrderSubParseResult.java
New file
@@ -0,0 +1,33 @@
package com.ks.tool.bkz.dto;
import com.ks.tool.bkz.entity.FirstOrderSubInfo;
import java.util.List;
public class FirstOrderSubParseResult {
    private boolean hasNextPage;//是否有下一页
    private List<FirstOrderSubInfo> goodsList;//商品列表
    public FirstOrderSubParseResult(boolean hasNextPage, List<FirstOrderSubInfo> goodsList) {
        this.hasNextPage = hasNextPage;
        this.goodsList = goodsList;
    }
    public boolean isHasNextPage() {
        return hasNextPage;
    }
    public void setHasNextPage(boolean hasNextPage) {
        this.hasNextPage = hasNextPage;
    }
    public List<FirstOrderSubInfo> getGoodsList() {
        return goodsList;
    }
    public void setGoodsList(List<FirstOrderSubInfo> goodsList) {
        this.goodsList = goodsList;
    }
}
src/main/java/com/ks/tool/bkz/entity/FirstOrderSubInfo.java
File was renamed from src/main/java/com/ks/tool/bkz/dto/FirstOrderSubInfoDTO.java
@@ -1,39 +1,92 @@
package com.ks.tool.bkz.dto;
package com.ks.tool.bkz.entity;
public class FirstOrderSubInfoDTO {
    private String activityPrice;
import com.ks.tool.bkz.dto.FirstOrderSubInfoRecommendTitleDTO;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.math.BigDecimal;
import java.util.Date;
@Document(collation = "tbFirstOrderSubInfo")
public class FirstOrderSubInfo {
    @Field
    private Integer activityPrice;
    @Field
    private String brandLogo;
    @Field
    private String brandName;
    @Field
    private String entitySource;
    @Id
    private String id;
    private String itemActPrice;
    @Field
    private BigDecimal itemActPrice;
    @Field
    private String itemDesc;
    @Field
    private String itemId;
    @Field
    private String itemImg;
    @Field
    private String itemPrice;
    @Field
    private String itemType;
    @Field
    private String itemUrl;
    private String materials;
    @Field
    private String monthSellNum;
    @Field
    private String npcCnt;
    @Field
    private String promotionAmount;
    private String promotionDisplayAmount;
    private String promotionPrice;
    @Field
    private int promotionDisplayAmount;
    @Field
    private BigDecimal promotionPrice;
    @Field
    private String promotionTag;
    @Field
    private String promotionValue;
    @Field
    private String remainStock;
    @Field
    private String sellerUrl;
    @Field
    private String shopTitle;
    @Field
    private String shortTitle;
    @Field
    private String title;
    @Field
    private Date createTime;
    @Field
    private Date updateTime;
    @Field
    private FirstOrderSubInfoRecommendTitleDTO recommendTitle;
    public Date getCreateTime() {
        return createTime;
    }
    public String getActivityPrice() {
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public Integer getActivityPrice() {
        return activityPrice;
    }
    public void setActivityPrice(String activityPrice) {
    public void setActivityPrice(Integer activityPrice) {
        this.activityPrice = activityPrice;
    }
@@ -69,11 +122,11 @@
        this.id = id;
    }
    public String getItemActPrice() {
    public BigDecimal getItemActPrice() {
        return itemActPrice;
    }
    public void setItemActPrice(String itemActPrice) {
    public void setItemActPrice(BigDecimal itemActPrice) {
        this.itemActPrice = itemActPrice;
    }
@@ -125,14 +178,6 @@
        this.itemUrl = itemUrl;
    }
    public String getMaterials() {
        return materials;
    }
    public void setMaterials(String materials) {
        this.materials = materials;
    }
    public String getMonthSellNum() {
        return monthSellNum;
    }
@@ -157,19 +202,19 @@
        this.promotionAmount = promotionAmount;
    }
    public String getPromotionDisplayAmount() {
    public int getPromotionDisplayAmount() {
        return promotionDisplayAmount;
    }
    public void setPromotionDisplayAmount(String promotionDisplayAmount) {
    public void setPromotionDisplayAmount(int promotionDisplayAmount) {
        this.promotionDisplayAmount = promotionDisplayAmount;
    }
    public String getPromotionPrice() {
    public BigDecimal getPromotionPrice() {
        return promotionPrice;
    }
    public void setPromotionPrice(String promotionPrice) {
    public void setPromotionPrice(BigDecimal promotionPrice) {
        this.promotionPrice = promotionPrice;
    }
src/main/java/com/ks/tool/bkz/service/FirstOrderSubInfoService.java
New file
@@ -0,0 +1,7 @@
package com.ks.tool.bkz.service;
import com.ks.tool.bkz.entity.FirstOrderSubInfo;
public interface FirstOrderSubInfoService {
    public void add(FirstOrderSubInfo info);
}
src/main/java/com/ks/tool/bkz/service/impl/FirstOrderSubInfoServiceImpl.java
New file
@@ -0,0 +1,24 @@
package com.ks.tool.bkz.service.impl;
import com.ks.tool.bkz.dao.FirstOrderSubInfoDao;
import com.ks.tool.bkz.entity.FirstOrderSubInfo;
import com.ks.tool.bkz.service.FirstOrderSubInfoService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
@Service
public class FirstOrderSubInfoServiceImpl implements FirstOrderSubInfoService {
    @Resource
    private FirstOrderSubInfoDao firstOrderSubInfoDao;
    @Override
    public void add(FirstOrderSubInfo info) {
        if (info.getCreateTime() == null)
            info.setCreateTime(new Date());
        if (info.getUpdateTime() == null)
            info.setUpdateTime(new Date());
        firstOrderSubInfoDao.save(info);
    }
}
src/main/java/com/ks/tool/bkz/util/FirstOrderSubDataUtil.java
@@ -4,7 +4,8 @@
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ks.tool.bkz.dto.FirstOrderSubInfoDTO;
import com.ks.tool.bkz.dto.FirstOrderSubParseResult;
import com.ks.tool.bkz.entity.FirstOrderSubInfo;
import java.lang.reflect.Type;
import java.util.HashMap;
@@ -20,18 +21,24 @@
     * @param data
     * @return
     */
    public static List<FirstOrderSubInfoDTO> parseOrderSubData(String data) {
    public static FirstOrderSubParseResult parseOrderSubData(String data) {
        data = data.trim().substring(data.indexOf("("));
        if (data.endsWith(")"))
            data = data.substring(0, data.length() - 1);
        JSONObject dataJSON = JSONObject.parseObject(data);
        JSONObject resultValue = dataJSON.getJSONObject("data").getJSONObject("resultValue");
        for (Iterator<String> its = resultValue.keySet().iterator(); its.hasNext(); ) {
            String key = its.next();
            if (NumberUtil.isNumeric(key)) {
                JSONArray array = resultValue.getJSONObject(key).getJSONObject("data").getJSONArray("entity").getJSONObject(0).getJSONArray("model");
                Type type = new TypeToken<List<FirstOrderSubInfoDTO>>() {
                JSONObject entity = resultValue.getJSONObject(key).getJSONObject("data").getJSONArray("entity").getJSONObject(0);
                boolean hasNextPage = entity.getBoolean("hasNextPage");
                JSONArray array = entity.getJSONArray("model");
                Type type = new TypeToken<List<FirstOrderSubInfo>>() {
                }.getType();
                List<FirstOrderSubInfoDTO> list = new Gson().fromJson(array.toString(), type);
                return list;
                List<FirstOrderSubInfo> list = new Gson().fromJson(array.toString(), type);
                return new FirstOrderSubParseResult(hasNextPage, list);
            }
        }
        return null;
@@ -53,6 +60,7 @@
    /**
     * 获取token
     *
     * @param cookie
     * @return
     */
src/main/java/com/ks/tool/bkz/util/JsonUtil.java
New file
@@ -0,0 +1,22 @@
package com.ks.tool.bkz.util;
import com.alibaba.fastjson.JSONObject;
public class JsonUtil {
    public static String loadTrueResult(JSONObject data) {
        JSONObject root = new JSONObject();
        root.put("code", 0);
        root.put("data", data);
        return root.toJSONString();
    }
    public static String loadFalseResult(int code, String msg) {
        JSONObject root = new JSONObject();
        root.put("code", code);
        root.put("msg", msg);
        return root.toJSONString();
    }
}
src/main/java/com/ks/tool/bkz/util/UrlUtil.java
@@ -29,7 +29,7 @@
     */
    public static Map<String, String> getParamsMap(String url) {
        if (url.indexOf("?") > -1) {
            String params = url.substring(url.indexOf("?"), url.length());
            String params = url.substring(url.indexOf("?")+1, url.length());
            String[] sts = params.split("&");
            Map<String, String> paramsMap = new HashMap<>();
            for (String st : sts) {
@@ -49,7 +49,7 @@
     * @return
     */
    public static String getRequestUrl(String url, Map<String, String> params) {
        String URL = url;
        String URL = url+"?";
        for (Iterator<String> its = params.keySet().iterator(); its.hasNext(); ) {
            String key = its.next();
src/main/resources/application.yml
@@ -1,7 +1,14 @@
server:
  port: 8082
  tomcat:
    uri-encoding: UTF-8
spring:
  http:
    encoding:
      force: true
      charset: UTF-8
      enabled: true
  datasource:
    url: jdbc:mysql://gz-cdb-r13d0yi9.sql.tencentcdb.com:62929/test
    username: root
@@ -28,12 +35,13 @@
  data:
    mongodb:
      username: admin
      password: Yeshi2016@
      host: 193.112.35.168
      port: 27016
      database: flq
      password: '123456'
      host: 192.168.1.253
      port: 27017
      database: tbtool
      authentication-database: admin
  redis:
    host: 127.0.0.1
    host: 192.168.1.253
    port: 6379
    password: 123456
    timeout: 5000
@@ -42,6 +50,7 @@
        max-wait: 10000
        max-idle: 200
        max-active: 1024
    database: 2
mybatis:
  mapper-locations: classpath:mapper/*.xml
src/test/java/com/ks/tool/bkz/BkzApplicationTests.java
@@ -12,7 +12,7 @@
    @Resource
    private RedisManager redisManager;
    @Test
//    @Test
    void contextLoads() {
        redisManager.save("test","123",10);
        System.out.println(redisManager.get("test"));