|
@@ -0,0 +1,304 @@
|
|
|
+package controllers
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "eta/eta_index_lib/models"
|
|
|
+ "eta/eta_index_lib/services/sci99"
|
|
|
+ "eta/eta_index_lib/utils"
|
|
|
+ "fmt"
|
|
|
+ "github.com/mozillazg/go-pinyin"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+// 卓创资讯爬虫
|
|
|
+type Sci99Crawler struct {
|
|
|
+ BaseAuthController
|
|
|
+}
|
|
|
+
|
|
|
+var IndexCodeMap = make(map[string]string)
|
|
|
+var IndexMap = make(map[string]*models.BaseFromSci99Index)
|
|
|
+var ClassifyMap = make(map[string]*models.BaseFromSci99Classify)
|
|
|
+
|
|
|
+// @Title 刷新数据
|
|
|
+// @Description 刷新数据接口
|
|
|
+// @Param request body models.AddEdbClassifyReq true "type json string"
|
|
|
+// @Success 200 {object} models.EdbClassify
|
|
|
+// @router /refresh/list [post]
|
|
|
+func (this *Sci99Crawler) RefreshSci99Classify() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ var req sci99.RefreshSci99CrawlerReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ allClassify, err := models.GetBaseFromSci99Classify()
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("select Code err:", err)
|
|
|
+ utils.FileLog.Info("GetBaseFromSci99Index err:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, item := range allClassify {
|
|
|
+ ClassifyMap[item.ClassifyName] = item
|
|
|
+ }
|
|
|
+
|
|
|
+ if _, ok := ClassifyMap[req.ClassifyName]; !ok {
|
|
|
+ classifyItem := models.BaseFromSci99Classify{
|
|
|
+ ClassifyName: req.ClassifyName,
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ ModifyTime: time.Now(),
|
|
|
+ }
|
|
|
+
|
|
|
+ id, e := models.AddBaseFromSci99Classify(&classifyItem)
|
|
|
+ if e != nil {
|
|
|
+ err = e
|
|
|
+ fmt.Println("Error inserting into database:", err)
|
|
|
+ utils.FileLog.Info("Error inserting into database:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("新增分类:", classifyItem.ClassifyName)
|
|
|
+ classifyItem.BaseFromSciClassifyId = int(id)
|
|
|
+ ClassifyMap[req.ClassifyName] = &classifyItem
|
|
|
+ }
|
|
|
+
|
|
|
+ allCode, e := models.GetBaseFromSci99Index()
|
|
|
+ if e != nil {
|
|
|
+ err = e
|
|
|
+ fmt.Println("select Code err:", err)
|
|
|
+ utils.FileLog.Info("GetBaseFromSci99Index err:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, item := range allCode {
|
|
|
+ IndexCodeMap[item.IndexName] = item.IndexCode
|
|
|
+ IndexMap[item.IndexName] = item
|
|
|
+ }
|
|
|
+
|
|
|
+ v := req.ListData
|
|
|
+ // 组成指标
|
|
|
+ indexName := req.IndexName
|
|
|
+ fmt.Println("indexName:", indexName)
|
|
|
+ indexCodeStr := "卓创资讯" + v.ProductName + v.PriceType
|
|
|
+ indexCode, needAdd := Sci99IndexCodeGenerator(indexName, indexCodeStr, v.MarketSampleName, v.FactorySampleName+v.Model)
|
|
|
+ if needAdd {
|
|
|
+ index := models.BaseFromSci99Index{
|
|
|
+ IndexCode: indexCode,
|
|
|
+ IndexName: indexName,
|
|
|
+ ClassifyId: ClassifyMap[req.ClassifyName].BaseFromSciClassifyId,
|
|
|
+ Unit: v.Unit,
|
|
|
+ Frequency: "日度",
|
|
|
+ Describe: v.DataItemName,
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ ModifyTime: time.Now(),
|
|
|
+ }
|
|
|
+ id, e := models.AddBaseFromSci99Index(&index)
|
|
|
+ if e != nil {
|
|
|
+ err = e
|
|
|
+ fmt.Println("Error inserting into database:", err)
|
|
|
+ utils.FileLog.Info("Error inserting into database:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("新增指标:", index.IndexName)
|
|
|
+ index.BaseFromSciIndexId = int(id)
|
|
|
+ IndexMap[indexName] = &index
|
|
|
+ }
|
|
|
+
|
|
|
+ detailResponse := req.DetailData
|
|
|
+
|
|
|
+ existDataMap := make(map[string]*models.BaseFromSci99Data)
|
|
|
+
|
|
|
+ //获取所有指标信息
|
|
|
+ allData, e := models.GetBaseFromTradeSci99DataAll(indexCode)
|
|
|
+ if e != nil {
|
|
|
+ err = e
|
|
|
+ fmt.Println("select err:", err)
|
|
|
+ utils.FileLog.Info("GetBaseFromTradeSci99IndexAll err:", err)
|
|
|
+ }
|
|
|
+ for _, vv := range allData {
|
|
|
+ indexKey := vv.IndexCode + vv.DataTime
|
|
|
+ existDataMap[indexKey] = vv
|
|
|
+ }
|
|
|
+
|
|
|
+ // 新增data数据
|
|
|
+ addList := make([]*models.BaseFromSci99Data, 0)
|
|
|
+ for _, v := range detailResponse.Data.List {
|
|
|
+ if dataItem, ok := existDataMap[indexCode+v.RealDate]; ok {
|
|
|
+ if dataItem.Value != v.MDataValue {
|
|
|
+ // 更新
|
|
|
+ fmt.Println("更新指标:", indexCode+v.RealDate)
|
|
|
+ e = models.UpdateBaseFromSci99Data(dataItem.Value, indexCode, v.RealDate)
|
|
|
+ if e != nil {
|
|
|
+ err = e
|
|
|
+ fmt.Println("Error update into database:", err)
|
|
|
+ utils.FileLog.Info("Error update into database:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 新增
|
|
|
+ dataItem := models.BaseFromSci99Data{
|
|
|
+ BaseFromSciIndexId: IndexMap[indexName].BaseFromSciIndexId,
|
|
|
+ IndexCode: indexCode,
|
|
|
+ DataTime: v.RealDate,
|
|
|
+ Value: v.MDataValue,
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ ModifyTime: time.Now(),
|
|
|
+ }
|
|
|
+ addList = append(addList, &dataItem)
|
|
|
+ fmt.Println("新增数据:", indexCode+v.RealDate)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(addList) > 0 {
|
|
|
+ e = models.AddBaseFromSci99DataMulti(addList)
|
|
|
+ if e != nil {
|
|
|
+ err = e
|
|
|
+ fmt.Println("Error inserting into database:", err)
|
|
|
+ utils.FileLog.Info("Error inserting into database:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ time.Sleep(1 * time.Second)
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Success = true
|
|
|
+}
|
|
|
+
|
|
|
+func Sci99IndexCodeGenerator(indexName, indexCodeStr, marketSampleName, model string) (indexCode string, needAdd bool) {
|
|
|
+ strResult := ""
|
|
|
+ indexCode, _ = IndexCodeMap[indexName]
|
|
|
+ if indexCode == "" {
|
|
|
+ //首字母
|
|
|
+ a := pinyin.NewArgs()
|
|
|
+ a.Fallback = func(r rune, a pinyin.Args) []string {
|
|
|
+ return []string{string(r)}
|
|
|
+ }
|
|
|
+ rows := pinyin.Pinyin(indexCodeStr, a)
|
|
|
+ for i := 0; i < len(rows); i++ {
|
|
|
+ //strResult += rows[i][0]
|
|
|
+ if len(rows[i]) != 0 {
|
|
|
+ str := rows[i][0]
|
|
|
+ pi := str[0:1]
|
|
|
+ strResult += pi
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理市场名称
|
|
|
+ if province, ok := ProvinceMap[marketSampleName]; ok {
|
|
|
+ strResult += province
|
|
|
+ } else {
|
|
|
+ a := pinyin.NewArgs()
|
|
|
+ rows := pinyin.LazyPinyin(marketSampleName, a)
|
|
|
+ for i := 0; i < len(rows); i++ {
|
|
|
+ strResult += rows[i]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 去除特殊符号
|
|
|
+ model = strings.Replace(model, " ", "", -1)
|
|
|
+ model = strings.Replace(model, "-", "", -1)
|
|
|
+ model = strings.Replace(model, "/", "", -1)
|
|
|
+ model = strings.Replace(model, "#", "", -1)
|
|
|
+ model = strings.Replace(model, ":", "", -1)
|
|
|
+ model = strings.Replace(model, "(", "", -1)
|
|
|
+ model = strings.Replace(model, ")", "", -1)
|
|
|
+
|
|
|
+ // 拼接型号
|
|
|
+ modelRows := pinyin.Pinyin(model, a)
|
|
|
+ for i := 0; i < len(modelRows); i++ {
|
|
|
+ if len(modelRows[i]) != 0 {
|
|
|
+ str := modelRows[i][0]
|
|
|
+ pi := str[0:1]
|
|
|
+ strResult += pi
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ needAdd = true
|
|
|
+ indexCode = strings.Replace(strResult, " ", "", -1)
|
|
|
+ IndexCodeMap[indexName] = indexCode
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+var ProvinceMap = map[string]string{
|
|
|
+ "上海": "shanghai",
|
|
|
+ "云南": "yunnan",
|
|
|
+ "内蒙古": "innermongolia",
|
|
|
+ "北京": "beijing",
|
|
|
+ "台湾": "taiwan",
|
|
|
+ "吉林": "jilin",
|
|
|
+ "四川": "sichuan",
|
|
|
+ "天津": "tianjin",
|
|
|
+ "宁夏": "ningxia",
|
|
|
+ "安徽": "anhui",
|
|
|
+ "山东": "shandong",
|
|
|
+ "山西": "shanxi",
|
|
|
+ "广东": "guangdong",
|
|
|
+ "广西": "guangxi",
|
|
|
+ "新疆": "xinjiang",
|
|
|
+ "江苏": "jiangsu",
|
|
|
+ "江西": "jiangxi",
|
|
|
+ "河北": "hebei",
|
|
|
+ "河南": "henan",
|
|
|
+ "浙江": "zhejiang",
|
|
|
+ "海南": "hainan",
|
|
|
+ "湖北": "hubei",
|
|
|
+ "湖南": "hunan",
|
|
|
+ "澳门": "macao",
|
|
|
+ "甘肃": "gansu",
|
|
|
+ "福建": "fujian",
|
|
|
+ "西藏": "tibet",
|
|
|
+ "贵州": "guizhou",
|
|
|
+ "辽宁": "liaoning",
|
|
|
+ "重庆": "chongqing",
|
|
|
+ "陕西": "shaanxi",
|
|
|
+ "青海": "qinhai",
|
|
|
+ "香港": "hongkong",
|
|
|
+ "黑龙江": "heilongjiang",
|
|
|
+}
|
|
|
+
|
|
|
+var requestList = []sci99.ListRequestBody{
|
|
|
+ {
|
|
|
+ Ppname: "天然橡胶原料",
|
|
|
+ PPIDs: "13676",
|
|
|
+ Navid: "593",
|
|
|
+ }, {
|
|
|
+ Ppname: "混合胶",
|
|
|
+ PPIDs: "12973",
|
|
|
+ Navid: "591",
|
|
|
+ }, {
|
|
|
+ Ppname: "标准胶",
|
|
|
+ PPIDs: "12960",
|
|
|
+ Navid: "590",
|
|
|
+ }, {
|
|
|
+ Ppname: "烟片胶",
|
|
|
+ PPIDs: "12985",
|
|
|
+ Navid: "592",
|
|
|
+ }, {
|
|
|
+ Ppname: "天然乳胶",
|
|
|
+ PPIDs: "12947",
|
|
|
+ Navid: "595",
|
|
|
+ }, {
|
|
|
+ Ppname: "丁苯橡胶",
|
|
|
+ PPIDs: "12951",
|
|
|
+ Navid: "596",
|
|
|
+ }, {
|
|
|
+ Ppname: "顺丁橡胶",
|
|
|
+ PPIDs: "12964",
|
|
|
+ Navid: "597",
|
|
|
+ }, {
|
|
|
+ Ppname: "SBS",
|
|
|
+ PPIDs: "12948",
|
|
|
+ Navid: "598",
|
|
|
+ }, {
|
|
|
+ Ppname: "丁腈橡胶",
|
|
|
+ PPIDs: "12945",
|
|
|
+ Navid: "605",
|
|
|
+ },
|
|
|
+}
|