Ver código fonte

Merge branch 'ETA_2.0.5'

# Conflicts:
#	utils/common.go
#	utils/config.go
#	utils/constants.go
xiziwen 3 meses atrás
pai
commit
11c989cac5

+ 30 - 0
models/base_from_hisugar.go

@@ -0,0 +1,30 @@
+package models
+
+import "time"
+
+type BaseFromHisugarIndex struct {
+	BaseFromHisugarIndexId int       // 主键ID
+	IndexCode              string    // 指标编码
+	IndexName              string    // 指标名称
+	ClassifyId             uint      // 分类ID
+	Unit                   string    // 单位
+	Frequency              string    // 频度
+	Describe               string    // 指标描述
+	DataTime               string    // 数据日期
+	Sort                   int       // 排序
+	CreateTime             time.Time // 创建时间
+	ModifyTime             time.Time // 修改时间
+	IndexNameStr           string    // 指标名称字符串
+	MarketName             string    // 市场名称
+	Value                  string    // 值
+}
+
+type BaseFromHisugarData struct {
+	BaseFromHisugarDataId  int       // 主键ID
+	BaseFromHisugarIndexId int       // 主键ID
+	IndexCode              string    // 指标编码
+	DataTime               string    // 数据日期
+
+	CreateTime             time.Time // 创建时间
+	ModifyTime             time.Time // 修改时间
+}

+ 69 - 0
services/RystadLogin.go

@@ -0,0 +1,69 @@
+package services
+
+import (
+	"context"
+	"eta/eta_data_analysis/utils"
+	"fmt"
+	"github.com/chromedp/chromedp"
+	"log"
+	"time"
+)
+
+// 睿咨得网页登陆
+func RystadLogin() {
+	opts := append(
+		chromedp.DefaultExecAllocatorOptions[:],
+		chromedp.Flag("headless", false),
+	)
+
+	allocCtx, _ := chromedp.NewExecAllocator(context.Background(), opts...)
+	//defer cancel()
+
+	// 创建chrome实例
+	ctx, _ := chromedp.NewContext(
+		allocCtx,
+		chromedp.WithLogf(log.Printf),
+	)
+	//defer cancel()
+
+	var htmlContent string
+
+	err := chromedp.Run(ctx,
+		chromedp.Navigate(`https://clients.rystadenergy.com/clients/search/?query=oil%20demand%20signals%20weekly%20report`),
+		//chromedp.WaitVisible(`.tempo-logon-form`, chromedp.ByQuery), // 等待登录表单可见
+		chromedp.Sleep(1*time.Second),
+		chromedp.SetValue(`input[name="Username"]`, "chenmiao@htfutures.com", chromedp.ByQuery),
+		chromedp.SetValue(`input[name="Password"]`, "haitong123", chromedp.ByQuery),
+		chromedp.Sleep(1*time.Second),
+		chromedp.Click(`button[value="login"]`, chromedp.ByQuery),
+		chromedp.Sleep(5*time.Second),
+	)
+
+	//运行任务点击下载按钮
+	err = chromedp.Run(ctx,
+		chromedp.Navigate(`https://clients.rystadenergy.com/clients/search/?query=oil%20demand%20signals%20weekly%20report`),
+		chromedp.Sleep(2*time.Second),
+		//chromedp.OuterHTML("html", &htmlContent),
+		chromedp.Click(`a[class="text-muted text-decoration-none "]`, chromedp.ByQuery),
+		chromedp.Sleep(50*time.Second),
+	)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	// 运行任务点击下载按钮
+	err = chromedp.Run(ctx,
+		chromedp.Navigate(`https://clients.rystadenergy.com/clients/cube-dashboards/workflow/?did=159`),
+		chromedp.Sleep(10*time.Second),
+		chromedp.Click(`button[class="[ btn btn-link btn-sm ] [ dashboard-action dashboard-action--download-data ]"]`, chromedp.ByQuery),
+		chromedp.Sleep(10*time.Second),
+	)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	fmt.Println("htmlContent:" + htmlContent)
+
+	utils.FileLog.Info("htmlContent:" + htmlContent)
+
+}

+ 199 - 0
services/base_from_hisugar/base_from_hisugar.go

@@ -0,0 +1,199 @@
+package base_from_hisugar
+
+import (
+	"context"
+	"encoding/json"
+	"eta/eta_data_analysis/models"
+	"eta/eta_data_analysis/utils"
+	"fmt"
+	"github.com/chromedp/cdproto/network"
+	"github.com/chromedp/chromedp"
+	"io"
+	"log"
+	"net/http"
+	"strings"
+	"time"
+)
+
+// 泛糖科技
+func HisugarLogin() (cookie string, err error) {
+	opts := append(
+		chromedp.DefaultExecAllocatorOptions[:],
+		chromedp.Flag("headless", false),
+	)
+
+	allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), opts...)
+	defer cancel()
+
+	// 创建chrome实例
+	ctx, cancel := chromedp.NewContext(
+		allocCtx,
+		chromedp.WithLogf(log.Printf),
+	)
+	defer cancel()
+
+
+	err = chromedp.Run(ctx,
+		chromedp.Navigate(`http://222.84.157.44:12880/tempo/login.jsp`),
+		chromedp.WaitVisible(`.tempo-logon-form`, chromedp.ByQuery), // 等待登录表单可见
+		chromedp.SetValue(`input[name="userName"]`, utils.HisugarAccount, chromedp.ByQuery),
+		chromedp.SetValue(`input[name="password"]`, utils.HisugarPassword, chromedp.ByQuery),
+		chromedp.Sleep(1*time.Second),
+		chromedp.Click(`.login-button`, chromedp.ByQuery),
+		chromedp.Sleep(5*time.Second),
+	)
+	var cookies []*network.Cookie
+
+	// 运行任务以获取 cookies
+	err = chromedp.Run(ctx,
+		chromedp.Navigate(`http://222.84.157.44:12880/tempo/customportal/index.html#`),
+		chromedp.ActionFunc(func(ctx context.Context) error {
+			var err error
+			cookies, err = network.GetCookies().Do(ctx)
+			if err != nil {
+				return err
+			}
+			for _, c := range cookies {
+				cookie += fmt.Sprintf("%s=%s;", c.Name, c.Value)
+				log.Printf("Name: %s, Value: %s, Domain: %s\n", c.Name, c.Value, c.Domain)
+				fmt.Println(c)
+			}
+			return nil
+		}),
+	)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	return
+}
+
+type HisugarResponseData struct {
+	Userdata         map[string]interface{} `json:"userdata"`
+	Total            int                    `json:"total"`
+	Records          int                    `json:"records"`
+	DicData          interface{}            `json:"dicData"`
+	Page             int                    `json:"page"`
+	Rows             []Row1                 `json:"rows"`
+	_process         interface{}            `json:"_process"`
+	SQLDataSetParams interface{}            `json:"sqlDataSetParams"`
+}
+
+type Row struct {
+	C1357941685__tablecol_  string `json:"C1357941685__tablecol_"`
+	C1357941686__tablecol_  string `json:"C1357941686__tablecol_"`
+	C1357941687__tablecol_  string `json:"C1357941687__tablecol_"`
+	C1357941688__tablecol_  string `json:"C1357941688__tablecol_"`
+	C1357941689__tablecol_  string `json:"C1357941689__tablecol_"`
+	CC2034405405__tablecol_ string `json:"CC2034405405__tablecol_"`
+	CC2034405406__tablecol_ string `json:"CC2034405406__tablecol_"`
+	CC2034405407__tablecol_ string `json:"CC2034405407__tablecol_"`
+	CC2034405408__tablecol_ string `json:"CC2034405408__tablecol_"`
+	CC2034405409__tablecol_ string `json:"CC2034405409__tablecol_"`
+	CC2034405410__tablecol_ string `json:"CC2034405410__tablecol_"`
+	CC2034405411__tablecol_ string `json:"CC2034405411__tablecol_"`
+	CC2034405412__tablecol_ string `json:"CC2034405412__tablecol_"`
+	CC2034405413__tablecol_ string `json:"CC2034405413__tablecol_"`
+}
+
+type Process struct {
+	Label             string           `json:"label"`
+	ExecuteContent    string           `json:"executeContent"`
+	BeforeExecuteTime int64            `json:"beforeExecuteTime"`
+	AfterExecuteTime  int64            `json:"afterExecuteTime"`
+	InnerTimes        map[string]int64 `json:"innerTimes"`
+	ElapsedTime       int64            `json:"elapsedTime"`
+}
+
+type Row1 struct {
+	C1348804802__tablecol_ string `json:"C1348804802__tablecol_"`
+	C1348804803__tablecol_ string `json:"C1348804803__tablecol_"`
+	C1348804804__tablecol_ string `json:"C1348804804__tablecol_"`
+	C1348804805__tablecol_ string `json:"C1348804805__tablecol_"`
+	CC787774154__tablecol_ string `json:"CC787774154__tablecol_"`
+	CC787774155__tablecol_ string `json:"CC787774155__tablecol_"`
+	CC787774156__tablecol_ string `json:"CC787774156__tablecol_"`
+	CC787774157__tablecol_ string `json:"CC787774157__tablecol_"`
+	CC787774158__tablecol_ string `json:"CC787774158__tablecol_"`
+	CC787774159__tablecol_ string `json:"CC787774159__tablecol_"`
+	CC787774160__tablecol_ string `json:"CC787774160__tablecol_"`
+	CC787774161__tablecol_ string `json:"CC787774161__tablecol_"`
+	CC787774162__tablecol_ string `json:"CC787774162__tablecol_"`
+}
+
+type HisugarResponseDataSimple struct {
+	Total   int                 `json:"total"`
+	Records int                 `json:"records"`
+	Page    int                 `json:"page"`
+	Rows    []map[string]string `json:"rows"`
+}
+
+
+func PostHandleHisugar(indexList []*models.BaseFromHisugarIndex) (err error) {
+	params := make(map[string]interface{})
+	params["List"] = indexList
+	result, e := postEdbLib(params, utils.LIB_ROUTE_Hisugar_TABLE_HANDLE)
+	if e != nil {
+		b, _ := json.Marshal(params)
+		fmt.Printf("postEdbLib err: %v, params: %s\n", e, string(b))
+		utils.FileLog.Info(fmt.Sprintf("postEdbLib err: %v, params: %s", e, string(b)))
+		return
+	}
+	resp := new(models.BaseEdbLibResponse)
+	if e = json.Unmarshal(result, &resp); e != nil {
+		fmt.Printf("json.Unmarshal err: %v\n", e)
+		utils.FileLog.Info(fmt.Sprintf("json.Unmarshal err: %v", e))
+		return
+	}
+	if resp.Ret != 200 {
+		fmt.Printf("Msg: %s, ErrMsg: %s\n", resp.Msg, resp.ErrMsg)
+		utils.FileLog.Info(fmt.Sprintf("Msg: %s, ErrMsg: %s", resp.Msg, resp.ErrMsg))
+		return
+	}
+	return
+}
+
+
+// postEdbLib 调用指标接口
+func postEdbLib(param map[string]interface{}, method string) (result []byte, err error) {
+	postUrl := utils.EDB_LIB_URL + method
+	postData, err := json.Marshal(param)
+	if err != nil {
+		return
+	}
+	result, err = httpPost(postUrl, string(postData), "application/json")
+	if err != nil {
+		return
+	}
+	return
+}
+
+// httpPost HTTP请求
+func httpPost(url, postData string, params ...string) ([]byte, error) {
+	fmt.Println("httpPost Url:" + url)
+	body := io.NopCloser(strings.NewReader(postData))
+	client := &http.Client{}
+	req, err := http.NewRequest("POST", url, body)
+	if err != nil {
+		return nil, err
+	}
+	contentType := "application/x-www-form-urlencoded;charset=utf-8"
+	if len(params) > 0 && params[0] != "" {
+		contentType = params[0]
+	}
+	req.Header.Set("Content-Type", contentType)
+	req.Header.Set("authorization", utils.MD5(utils.APP_EDB_LIB_NAME_EN+utils.EDB_LIB_Md5_KEY))
+	resp, err := client.Do(req)
+	if err != nil {
+		fmt.Println("client.Do err:" + err.Error())
+		return nil, err
+	}
+	defer func() {
+		_ = resp.Body.Close()
+	}()
+	b, err := io.ReadAll(resp.Body)
+	if err != nil {
+		fmt.Println("httpPost:" + string(b))
+	}
+	return b, err
+}

+ 1542 - 0
services/base_from_hisugar/guochantang_edb.go

@@ -0,0 +1,1542 @@
+package base_from_hisugar
+
+import (
+	"context"
+	"encoding/json"
+	"eta/eta_data_analysis/models"
+	"eta/eta_data_analysis/utils"
+	"fmt"
+	"io/ioutil"
+	"log"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// 国产糖
+var GuochantangList = []string{
+	"国内食糖月度累计销售均价",
+	"国内食糖月度销售均价",
+	"全国食糖累计产销率",
+	"全国单月产糖量",
+	"全国单月销糖量",
+	"国内月度工业库存",
+	"全国月度累计糖产量",
+	"全国月度累计糖销量",
+	"国内白糖产区现货价格",
+	"国内制糖集团报价",
+	"国内加工糖集团报价",
+	"全国单月甘蔗糖产量",
+	"全国单月甘蔗糖销量",
+	"全国单月甜菜产糖量",
+	"全国单月甜菜糖销量",
+	"广西单月产糖量",
+	"广西单月销糖量",
+	"广西月度库存",
+	"云南单月产糖量",
+	"云南单月销糖量",
+	"云南月度库存",
+	"海南单月产糖量",
+	"海南单月销糖量",
+	"海南月度库存",
+	"广东单月产糖量",
+	"广东单月销糖量",
+	"广东月度库存",
+	"新疆单月产糖量",
+	"新疆单月销糖量",
+	"新疆月度库存",
+	"内蒙单月产糖量",
+	"内蒙单月销糖量",
+	"内蒙月度库存",
+	"食糖月度进口量",
+	"巴西港口等待船只数量",
+	"巴西港口最大等待天数",
+	"巴西港口待装运食糖数量",
+	"周度含水乙醇折糖价",
+	"巴西双周累计产糖量",
+	"巴西双周食糖库存",
+	"巴西食糖月度出口量",
+	"中南部双周累计产糖量",
+	"中南部双周糖库存",
+	"中南部双周乙醇产量",
+	"巴西双周甘蔗累计入榨量",
+	"中南部双周甘蔗压榨量",
+	"中南部双周制糖比",
+	"巴西双周甘蔗入榨量",
+	"巴西中南部乙醇月度销售情况",
+	"巴西中南部乙醇国内销售情况",
+	"巴西双周无水乙醇库存",
+	"巴西双周水合乙醇库存",
+
+	"印度食糖月度出口量",
+	"印度双周累计产糖量",
+	"泰国双周糖累计产量",
+	"泛糖副产品平台桔水成交价格指数",
+}
+
+var HisugarGuoChanTangParmsMap = map[string]string{
+	"国内食糖月度累计销售均价":  shiTangYueDuLeiJiXiaoShouJunJia,
+	"国内食糖月度销售均价":    shiTangYueDuXiaoShouJunJia,
+	"全国食糖累计产销率":     shiTangLeiJiChanXiaoLv,
+	"全国单月产糖量":       quanGuoDanYueChanTangLiang,
+	"全国单月销糖量":       quanGuoDanYueXiaoTangLiang,
+	"国内月度工业库存":      guoNeiYueDuGongYeKuCun,
+	"全国月度累计糖产量":     quanGuoYueDuLeiJiTangChanLiang,
+	"全国月度累计糖销量":     quanGuoYueDuLeiJiTangXiaoLiang,
+	"国内白糖产区现货价格":    guoNeiBaiTangChanQuXianHuoJiaGe,
+	"国内制糖集团报价":      guoNeiZhiTangJiTuanBaoJia,
+	"国内加工糖集团报价":     guoNeiJiaGongTangJiTuanBaoJia,
+	"广西单月产糖量":       guangXiDanYueChanTangLiang,
+	"广西单月销糖量":       guangXiDanYueXiaoTangLiang,
+	"广西月度库存":        guangXiYueDuKuCun,
+	"云南单月产糖量":       yunNanDanYueChanTangLiang,
+	"云南单月销糖量":       yunNanDanYueXiaoTangLiang,
+	"云南月度库存":        yunNanYueDukuCun,
+	"海南单月产糖量":       haiNanDanYueChanTangLiang,
+	"海南单月销糖量":       haiNanDanyueXiaoTangliang,
+	"海南月度库存":        haiNanYueduKuCun,
+	"广东单月产糖量":       guangDongDanYueChanTangLiang,
+	"广东单月销糖量":       guangDongDanYueXiaoTangLiang,
+	"广东月度库存":        guangDongYueDuKuCun,
+	"新疆单月产糖量":       xinJiangDanYueChanTangLiang,
+	"新疆单月销糖量":       xinJiangDanYueXiaoTangLiang,
+	"新疆月度库存":        xinJiangYueDuKuCun,
+	"内蒙单月产糖量":       neiMengDanYueChanTangLiang,
+	"内蒙单月销糖量":       neiMengDanYueXiaoTangLiang,
+	"内蒙月度库存":        neiMengYueDuKuCun,
+	"食糖月度进口量":       shiTangYueDuJinKouLiang,
+	"巴西港口等待船只数量":    baXiGangKouDengDaiChuanZhiShuLiang,
+	"巴西港口最大等待天数":    baXiGangKouZuiDaDengDaiTianShu,
+	"巴西港口待装运食糖数量":   baXiGangKouDaiZhuangYunShiTiaoShangShuLiang,
+	"周度含水乙醇折糖价":     zhouDuHanShuiYiChunZheTangJia,
+	"巴西双周累计产糖量":     baXiShuangZhouLeiJiChanTangLiang,
+	"巴西双周食糖库存":      baXiShuangZhouShiTangKuCun,
+	"巴西食糖月度出口量":     baXiShiTangYueDuChuKouLiang,
+	"中南部双周累计产糖量":    zhongNanShuangZhouLiJiChanTangLiang,
+	"中南部双周糖库存":      zhongNanShuangZhouTangKuCun,
+	"中南部双周乙醇产量":     zhongNanShuangZhouXianHuoChanLiang,
+	"巴西双周甘蔗累计入榨量":   baXiShuangZhouGanZheLeiJiRuZhaLiang,
+	"中南部双周甘蔗压榨量":    zhongNanBuShuangZhouGanZheYaZhaLiang,
+	"中南部双周制糖比":      zhongNanBuShuangZhouZHiTangBi,
+	"巴西双周甘蔗入榨量":     baXiShuangZhouGanZheRuZhaLiang,
+	"巴西中南部乙醇月度销售情况": baXiZhongNanBuYiChunYueDuXiaoShouQingKuang,
+	"巴西中南部乙醇国内销售情况": baXiZhongNanBuYiChunGuoNeiXiaoShouQingKuang,
+	"巴西双周无水乙醇库存":    baXiShuangZhouWuShuiYiChunKuCun,
+	"巴西双周水合乙醇库存":    baXiShuangZhouShuiHeYiChunKuCun,
+
+	"印度食糖月度出口量":       yinDuShiTangYueDuChuKouLiang,
+	"印度双周累计产糖量":       yinDuShuangZhouLeiJiChanTangLiang,
+	"泰国双周糖累计产量":       taiGuoShuangZhouTangLeiJiChanLiang,
+	"泛糖副产品平台桔水成交价格指数": JuShuiChengJIaoJiaGeZhiShu,
+	"全国单月甘蔗糖产量":       quanGuoDanYueGanZheTangChanLiang,
+	"全国单月甘蔗糖销量":       quanGuoDanYueGanZheTangXiaoLiang,
+	"全国单月甜菜产糖量":       quanGuoDanYueTianCaiChanLiang,
+	"全国单月甜菜糖销量":       quanGuoDanYueTianCaiXiaoLiang,
+}
+
+var HisugarGuoChanTangUnitMap = map[string]string{
+	"国内食糖月度累计销售均价":  "元/吨",
+	"国内食糖月度销售均价":    "元/吨",
+	"全国食糖累计产销率":     "%",
+	"全国单月产糖量":       "万吨",
+	"全国单月销糖量":       "万吨",
+	"国内月度工业库存":      "万吨",
+	"全国月度累计糖产量":     "万吨",
+	"全国月度累计糖销量":     "万吨",
+	"国内白糖产区现货价格":    "元/吨",
+	"国内制糖集团报价":      "元/吨",
+	"国内加工糖集团报价":     "元/吨",
+	"广西单月产糖量":       "万吨",
+	"广西单月销糖量":       "万吨",
+	"广西月度库存":        "万吨",
+	"云南单月产糖量":       "万吨",
+	"云南单月销糖量":       "万吨",
+	"云南月度库存":        "万吨",
+	"海南单月产糖量":       "万吨",
+	"海南单月销糖量":       "万吨",
+	"海南月度库存":        "万吨",
+	"广东单月产糖量":       "万吨",
+	"广东单月销糖量":       "万吨",
+	"广东月度库存":        "万吨",
+	"新疆单月产糖量":       "万吨",
+	"新疆单月销糖量":       "万吨",
+	"新疆月度库存":        "万吨",
+	"内蒙单月产糖量":       "万吨",
+	"内蒙单月销糖量":       "万吨",
+	"内蒙月度库存":        "万吨",
+	"食糖月度进口量":       "万吨",
+	"巴西港口等待船只数量":    "艘",
+	"巴西港口最大等待天数":    "天",
+	"巴西港口待装运食糖数量":   "万吨",
+	"周度含水乙醇折糖价":     "美分/磅",
+	"巴西双周累计产糖量":     "万吨",
+	"巴西双周食糖库存":      "万吨",
+	"巴西食糖月度出口量":     "万吨",
+	"中南部双周累计产糖量":    "万吨",
+	"中南部双周糖库存":      "万吨",
+	"中南部双周乙醇产量":     "立方米",
+	"巴西双周甘蔗累计入榨量":   "万吨",
+	"中南部双周甘蔗压榨量":    "吨",
+	"中南部双周制糖比":      "%",
+	"巴西双周甘蔗入榨量":     "万吨",
+	"巴西中南部乙醇月度销售情况": "万立方米",
+	"巴西中南部乙醇国内销售情况": "万立方米",
+	"巴西双周无水乙醇库存":    "万立方米",
+	"巴西双周水合乙醇库存":    "万立方米",
+
+	"印度食糖月度出口量":     "万吨",
+	"印度双周累计产糖量":     "万吨",
+	"泰国双周糖累计产量":     "万吨",
+	"全国单月甘蔗糖产量":     "万吨",
+	"全国单月甘蔗糖销量":     "万吨",
+	"全国单月甜菜产糖量":     "万吨",
+	"全国单月甜菜糖销量":     "万吨",
+}
+
+var HisugarTaskAnalysisHandlers = map[string]func(name, reqParam, body string) (err error){
+	"国内食糖月度累计销售均价":  AnalysisHiSugar,
+	"国内食糖月度销售均价":    AnalysisHiSugar,
+	"全国食糖累计产销率":     AnalysisHiSugar3,
+	"全国单月产糖量":       AnalysisHiSugar3,
+	"全国单月销糖量":       AnalysisHiSugar3,
+	"国内月度工业库存":      AnalysisHiSugar3,
+	"全国月度累计糖产量":     AnalysisHiSugar4,
+	"全国月度累计糖销量":     AnalysisHiSugar4,
+	"国内白糖产区现货价格":    AnalysisHiSugar5,
+	"国内制糖集团报价":      AnalysisHiSugar5,
+	"国内加工糖集团报价":     AnalysisHiSugar5,
+	"全国单月甘蔗糖产量":     AnalysisHiSugar3,
+	"全国单月甘蔗糖销量":     AnalysisHiSugar3,
+	"全国单月甜菜产糖量":     AnalysisHiSugar3,
+	"全国单月甜菜糖销量":     AnalysisHiSugar3,
+	"广西单月产糖量":       AnalysisHiSugar,
+	"广西单月销糖量":       AnalysisHiSugar,
+	"广西月度库存":        AnalysisHiSugar,
+	"云南单月产糖量":       AnalysisHiSugar,
+	"云南单月销糖量":       AnalysisHiSugar,
+	"云南月度库存":        AnalysisHiSugar,
+	"海南单月产糖量":       AnalysisHiSugar,
+	"海南单月销糖量":       AnalysisHiSugar,
+	"海南月度库存":        AnalysisHiSugar,
+	"广东单月产糖量":       AnalysisHiSugar,
+	"广东单月销糖量":       AnalysisHiSugar,
+	"广东月度库存":        AnalysisHiSugar,
+	"新疆单月产糖量":       AnalysisHiSugar,
+	"新疆单月销糖量":       AnalysisHiSugar,
+	"新疆月度库存":        AnalysisHiSugar,
+	"内蒙单月产糖量":       AnalysisHiSugar,
+	"内蒙单月销糖量":       AnalysisHiSugar,
+	"内蒙月度库存":        AnalysisHiSugar,
+	"食糖月度进口量":       AnalysisHiSugar6,
+	"巴西港口等待船只数量":    AnalysisHiSugar7,
+	"巴西港口最大等待天数":    AnalysisHiSugar7,
+	"巴西港口待装运食糖数量":   AnalysisHiSugar7,
+	"周度含水乙醇折糖价":     AnalysisHiSugar5,
+	"巴西双周累计产糖量":     AnalysisHiSugar11,
+	"巴西双周食糖库存":      AnalysisHiSugar12,
+	"巴西食糖月度出口量":     AnalysisHiSugar6,
+	"中南部双周累计产糖量":    AnalysisHiSugar12,
+	"中南部双周糖库存":      AnalysisHiSugar12,
+	"中南部双周乙醇产量":     AnalysisHiSugar12,
+	"巴西双周甘蔗累计入榨量":   AnalysisHiSugar12,
+	"中南部双周甘蔗压榨量":    AnalysisHiSugar12,
+	"中南部双周制糖比":      AnalysisHiSugar12,
+	"巴西双周甘蔗入榨量":     AnalysisHiSugar12,
+	"巴西中南部乙醇月度销售情况": AnalysisHiSugar13,
+	"巴西中南部乙醇国内销售情况": AnalysisHiSugar13,
+	"巴西双周无水乙醇库存":    AnalysisHiSugar12,
+	"巴西双周水合乙醇库存":    AnalysisHiSugar12,
+
+	"印度食糖月度出口量":       AnalysisHiSugar8,
+	"印度双周累计产糖量":       AnalysisHiSugar10,
+	"泰国双周糖累计产量":       AnalysisHiSugar9,
+	"泛糖副产品平台桔水成交价格指数": AnalysisHiSugar3,
+}
+
+var HisugarGuoChanTangClassifyMap = map[string]uint{
+	"国内食糖月度累计销售均价":    5,
+	"国内食糖月度销售均价":      5,
+	"全国食糖累计产销率":       5,
+	"全国单月产糖量":         5,
+	"全国单月销糖量":         5,
+	"国内月度工业库存":        5,
+	"全国月度累计糖产量":       5,
+	"全国月度累计糖销量":       5,
+	"国内白糖产区现货价格":      5,
+	"国内制糖集团报价":        5,
+	"国内加工糖集团报价":       5,
+	"全国单月甘蔗糖产量":       5,
+	"全国单月甘蔗糖销量":       5,
+	"全国单月甜菜产糖量":       5,
+	"全国单月甜菜糖销量":       5,
+	"广西单月产糖量":         6,
+	"广西单月销糖量":         6,
+	"广西月度库存":          6,
+	"云南单月产糖量":         8,
+	"云南单月销糖量":         8,
+	"云南月度库存":          8,
+	"海南单月产糖量":         9,
+	"海南单月销糖量":         9,
+	"海南月度库存":          9,
+	"广东单月产糖量":         7,
+	"广东单月销糖量":         7,
+	"广东月度库存":          7,
+	"新疆单月产糖量":         10,
+	"新疆单月销糖量":         10,
+	"新疆月度库存":          10,
+	"内蒙单月产糖量":         11,
+	"内蒙单月销糖量":         11,
+	"内蒙月度库存":          11,
+	"食糖月度进口量":         12,
+	"印度食糖月度出口量":       14,
+	"印度双周累计产糖量":       14,
+	"泰国双周糖累计产量":       15,
+	"泛糖副产品平台桔水成交价格指数": 16,
+	"巴西食糖月度出口量":       13,
+	"巴西中南部乙醇月度销售情况":   13,
+	"巴西中南部乙醇国内销售情况":   13,
+}
+
+var DescribeMap = map[string]string{
+	"国内食糖月度累计销售均价":  "中国糖业协会",
+	"国内食糖月度销售均价":    "中国糖业协会",
+	"全国食糖累计产销率":     "中国糖业协会",
+	"全国单月产糖量":       "中国糖业协会",
+	"全国单月销糖量":       "中国糖业协会",
+	"国内月度工业库存":      "中国糖业协会",
+	"全国月度累计糖产量":     "中国糖业协会",
+	"全国月度累计糖销量":     "中国糖业协会",
+	"广西单月产糖量":       "广西糖业协会",
+	"广西单月销糖量":       "广西糖业协会",
+	"广西月度库存":        "广西糖业协会",
+	"云南单月产糖量":       "云南省糖业协会",
+	"云南单月销糖量":       "云南省糖业协会",
+	"云南月度库存":        "云南省糖业协会",
+	"海南单月产糖量":       "海南省糖业协会",
+	"海南单月销糖量":       "海南省糖业协会",
+	"海南月度库存":        "海南省糖业协会",
+	"广东单月产糖量":       "广东省单月产糖量",
+	"广东单月销糖量":       "广东省单月产糖量",
+	"广东月度库存":        "广东省单月产糖量",
+	"新疆单月产糖量":       "中国糖业协会",
+	"新疆单月销糖量":       "中国糖业协会",
+	"新疆月度库存":        "中国糖业协会",
+	"内蒙单月产糖量":       "内蒙古糖业协会",
+	"内蒙单月销糖量":       "内蒙古糖业协会",
+	"内蒙月度库存":        "内蒙古糖业协会",
+	"食糖月度进口量":       "海关总署",
+	"巴西港口等待船只数量":    "泛糖科技",
+	"巴西港口最大等待天数":    "泛糖科技",
+	"巴西港口待装运食糖数量":   "泛糖科技",
+	"周度含水乙醇折糖价":     "泛糖科技",
+	"巴西双周累计产糖量":     "巴西农业部",
+	"巴西双周食糖库存":      "巴西农业部",
+	"巴西食糖月度出口量":     "巴西农业部",
+	"中南部双周累计产糖量":    "巴西农业部",
+	"中南部双周糖库存":      "巴西农业部",
+	"中南部双周乙醇产量":     "Unica",
+	"巴西双周甘蔗累计入榨量":   "巴西农业部",
+	"中南部双周甘蔗压榨量":    "Unica",
+	"中南部双周制糖比":      "Unica",
+	"巴西双周甘蔗入榨量":     "巴西农业部",
+	"巴西中南部乙醇月度销售情况": "巴西农业部",
+	"巴西中南部乙醇国内销售情况": "巴西农业部",
+	"巴西双周无水乙醇库存":    "巴西农业部",
+	"巴西双周水合乙醇库存":    "巴西农业部",
+
+	"印度食糖月度出口量":       "印度商务部",
+	"印度双周累计产糖量":       "ISMA",
+	"泰国双周糖累计产量":       "OCSB",
+	"全国单月甘蔗糖产量":       "中国糖业协会",
+	"全国单月甘蔗糖销量":       "中国糖业协会",
+	"全国单月甜菜产糖量":       "中国糖业协会",
+	"全国单月甜菜糖销量":       "中国糖业协会",
+	"泛糖副产品平台桔水成交价格指数": "泛糖科技",
+}
+
+// 爬虫主体
+func HiugarCrawler(context.Context) (err error) {
+	// 模拟登陆获取cookie
+	cookie, err := HisugarLogin()
+	if err != nil {
+		return
+	}
+	// 目标 URL
+	urlStr := "http://222.84.157.44:12880/tempo/gridController/loadData"
+
+	for _, name := range GuochantangList {
+		reqParam := HisugarGuoChanTangParmsMap[name]
+		// 构建表单数据
+		formData := url.Values{
+			"chartParams": {reqParam},
+			"isPager":     {"true"},
+			"isFooterrow": {"false"},
+			"subTotal":    {"false"},
+			//"colSubtotal": {"{\"CC787774162__tablecol_\":false,\"CC787774161__tablecol_\":false,\"CC787774160__tablecol_\":false,\"CC787774159__tablecol_\":false,\"CC787774158__tablecol_\":false,\"CC787774157__tablecol_\":false,\"CC787774156__tablecol_\":false,\"CC787774155__tablecol_\":false,\"CC787774154__tablecol_\":false,\"C1348804802__tablecol_\":false,\"C1348804803__tablecol_\":false,\"C1348804804__tablecol_\":false,\"C1348804805__tablecol_\":false}"},
+			"colToRow":    {"false"},
+			"subTotalTop": {"false"},
+			"dataLimit":   {"{\"enable\":false,\"max\":\"10000\"}"},
+			"_isSqlTrace": {"false"},
+			"_search":     {"false"},
+			"nd":          {"1723802570612"},
+			"rows":        {"1000"},
+			"page":        {"1"},
+			"sord":        {"desc}"},
+		}
+
+		// 创建请求
+		req, e := http.NewRequest("POST", urlStr, strings.NewReader(formData.Encode()))
+		if e != nil {
+			err = e
+			log.Fatal(err)
+		}
+		// 设置 Content-Type 为 application/x-www-form-urlencoded
+		req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
+		req.Header.Add("Cookie", cookie)
+
+		// 发送请求
+		client := &http.Client{}
+		resp, e := client.Do(req)
+		if e != nil {
+			err = e
+			log.Fatal(err)
+		}
+		defer resp.Body.Close()
+
+		// 读取响应
+		body, e := ioutil.ReadAll(resp.Body)
+		if e != nil {
+			err = e
+			log.Fatal(err)
+		}
+
+		// 打印响应体
+		//fmt.Println(string(body))
+
+		handler, ok := HisugarTaskAnalysisHandlers[name]
+		if !ok {
+			utils.FileLog.Info(fmt.Sprintf("%s无解析函数\n", name))
+			err = fmt.Errorf("%s无解析函数", name)
+			return
+		}
+
+		err = handler(name, reqParam, string(body))
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("%s解析失败\n", name))
+			return
+		}
+
+		time.Sleep(5 * time.Second)
+	}
+	return
+}
+
+// 11,12是上一年的
+func AnalysisHiSugar(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			columMap[column.AliasName] = column.Title
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			monthValueMap := make(map[int]string)
+			yearStrSlice := make([]string, 0)
+			year := 0
+			dataTime := time.Time{}
+			for k, v := range row {
+				columTitle := columMap[k]
+				yearSlice := strings.Split(v, "/")
+
+				monthStr := ""
+				month := 0
+				//value := ""
+
+				if strings.Contains(v, "/") && (columTitle == "榨季" || columTitle == "榨季_万吨") {
+					// 年份
+					for _, s := range yearSlice {
+						yearStrSlice = append(yearStrSlice, "20"+s)
+					}
+				} else if strings.Contains(columTitle, "月") {
+					monthStr = strings.TrimRight(columTitle, "月")
+					month, _ = strconv.Atoi(monthStr)
+					monthValueMap[month] = v
+				}
+			}
+			for month, value := range monthValueMap {
+				if value == "<NULL>" || value == "<Blank>" {
+					continue
+				}
+				if month == 11 || month == 12 {
+					year, _ = strconv.Atoi(yearStrSlice[0])
+					dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					dataTime = dataTime.AddDate(0, 1, -1)
+				} else {
+					year, _ = strconv.Atoi(yearStrSlice[1])
+					dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					dataTime = dataTime.AddDate(0, 1, -1)
+				}
+				item := models.BaseFromHisugarIndex{
+					DataTime:   dataTime.Format(utils.FormatDate),
+					Value:      value,
+					IndexName:  secName,
+					Unit:       HisugarGuoChanTangUnitMap[name],
+					CreateTime: time.Now(),
+					ModifyTime: time.Now(),
+					ClassifyId: HisugarGuoChanTangClassifyMap[name],
+					Frequency:  "月度",
+				}
+				fmt.Println(item.DataTime, value)
+				indexList = append(indexList, &item)
+			}
+		}
+		// 写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}
+
+// 10,11,12月是上一年的
+// 全国食糖累计产销率,全国单月产糖量,全国单月销糖量
+func AnalysisHiSugar3(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			columMap[column.AliasName] = column.Title
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			monthValueMap := make(map[int]string)
+			yearStrSlice := make([]string, 0)
+			year := 0
+			dataTime := time.Time{}
+			for k, v := range row {
+				columTitle := columMap[k]
+				yearSlice := strings.Split(v, "/")
+
+				monthStr := ""
+				month := 0
+				//value := ""
+
+				if strings.Contains(v, "/") && (columTitle == "榨季" || columTitle == "榨季_万吨") {
+					// 年份
+					for _, s := range yearSlice {
+						yearStrSlice = append(yearStrSlice, "20"+s)
+					}
+				} else if strings.Contains(columTitle, "月") {
+					monthStr = strings.TrimRight(columTitle, "月")
+					month, _ = strconv.Atoi(monthStr)
+					monthValueMap[month] = v
+				}
+			}
+			for month, value := range monthValueMap {
+				if value == "<NULL>" || value == "<Blank>" || value == "-" {
+					continue
+				}
+				value = strings.ReplaceAll(value, "%", "")
+				if month > 9 && month < 13 {
+					year, _ = strconv.Atoi(yearStrSlice[0])
+					dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					dataTime = dataTime.AddDate(0, 1, -1)
+				} else {
+					year, _ = strconv.Atoi(yearStrSlice[1])
+					dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					dataTime = dataTime.AddDate(0, 1, -1)
+				}
+				item := models.BaseFromHisugarIndex{
+					IndexName:  secName,
+					ClassifyId: HisugarGuoChanTangClassifyMap[name],
+					Unit:       HisugarGuoChanTangUnitMap[name],
+					Frequency:  "月度",
+					DataTime:   dataTime.Format(utils.FormatDate),
+					CreateTime: time.Now(),
+					ModifyTime: time.Now(),
+					Value:      value,
+					Describe:   DescribeMap[name],
+				}
+				fmt.Println(item.DataTime, value)
+				indexList = append(indexList, &item)
+			}
+		}
+		// 写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}
+
+// 分产地
+// 全国月度累计糖产量,全国月度累计糖销量
+func AnalysisHiSugar4(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	dateColum := ""
+
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			if column.AliasTitle == "" {
+				columMap[column.AliasName] = column.Title
+			} else {
+				columMap[column.AliasName] = column.AliasTitle
+			}
+			if columMap[column.AliasName] == "月份" {
+				dateColum = column.AliasName
+			}
+			//fmt.Println(columMap[column.AliasName])
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			//columTitleMap := make(map[string]string)
+			dataTime := time.Time{}
+
+			if date, ok := row[dateColum]; ok {
+				dataTime, err = time.Parse("200601", date)
+				if err != nil {
+					fmt.Println(err)
+					utils.FileLog.Error(fmt.Sprintf("时间解析错误:%v", err))
+					return
+				}
+			}
+
+			for k, v := range row {
+				columTitle := columMap[k]
+				//value := ""
+
+				if columTitle != "月份" && strings.Contains(columTitle, "量") {
+					if v == "<NULL>" || v == "<Blank>" || v == "-" {
+						continue
+					}
+					value := strings.ReplaceAll(v, "%", "")
+					item := models.BaseFromHisugarIndex{
+						IndexName:    "全国月度累计" + columTitle,
+						ClassifyId:   5,
+						Unit:         HisugarGuoChanTangUnitMap[name],
+						Frequency:    "月度",
+						Describe:     DescribeMap[name],
+						DataTime:     dataTime.AddDate(0, 1, -1).Format(utils.FormatDate),
+						CreateTime:   time.Now(),
+						ModifyTime:   time.Now(),
+						Value:        value,
+						IndexNameStr: "全国月度累计" + columTitle,
+						MarketName:   columTitle,
+					}
+					fmt.Println(item.DataTime, "全国月度累计"+columTitle, value)
+					indexList = append(indexList, &item)
+				}
+			}
+		}
+		//写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}
+
+// 分产地
+// 国内白糖产区现货价格5000条,国内制糖集团报价1000条,国内加工糖集团报价1000条,周度含水乙醇折糖价400条
+func AnalysisHiSugar5(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	dateColum := ""
+
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			if column.AliasTitle == "" {
+				columMap[column.AliasName] = column.Title
+			} else {
+				columMap[column.AliasName] = column.AliasTitle
+			}
+			if columMap[column.AliasName] == "日期" {
+				dateColum = column.AliasName
+			}
+			//fmt.Println(columMap[column.AliasName])
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(e)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			//columTitleMap := make(map[string]string)
+			dataTime := time.Time{}
+
+			classifyId := 5
+			frequency := "日度"
+			if date, ok := row[dateColum]; ok {
+				date = strings.ReplaceAll(date, " ", "")
+				if name == "周度含水乙醇折糖价" {
+					dataTime, err = time.Parse("2006/1/2", date)
+					if err != nil {
+						fmt.Println(err)
+						utils.FileLog.Error(fmt.Sprintf("时间解析错误:%v", err))
+						continue
+					}
+					classifyId = 13
+					frequency = "周度"
+				} else {
+					dataTime, err = time.Parse("20060102", date)
+					if err != nil {
+						fmt.Println(err)
+						utils.FileLog.Error(fmt.Sprintf("时间解析错误:%v", err))
+						continue
+					}
+				}
+			}
+
+			for k, v := range row {
+				columTitle := columMap[k]
+				//value := ""
+				indexName := secName + columTitle
+				if columTitle != "日期" {
+					if v == "<NULL>" || v == "<Blank>" || v == "-" {
+						continue
+					}
+					if strings.Contains(indexName, "日照凌云海") {
+						continue
+					}
+					value := strings.ReplaceAll(v, "%", "")
+					item := models.BaseFromHisugarIndex{
+						CreateTime:   time.Now(),
+						DataTime:     dataTime.Format(utils.FormatDate),
+						ModifyTime:   time.Now(),
+						Value:        value,
+						IndexName:    indexName,
+						Unit:         HisugarGuoChanTangUnitMap[name],
+						Frequency:    frequency,
+						ClassifyId:   uint(classifyId),
+						IndexNameStr: secName,
+						MarketName:   columTitle,
+						Describe:     DescribeMap[name],
+					}
+					if name == "周度含水乙醇折糖价" {
+						item.IndexName = secName
+						item.MarketName = ""
+					}
+					fmt.Println(item.DataTime, item.IndexName, value)
+					indexList = append(indexList, &item)
+				}
+			}
+		}
+		// 写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}
+
+// 一年一行,1-12月
+// 食糖月度进口量
+func AnalysisHiSugar6(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			columMap[column.AliasName] = column.Title
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			monthValueMap := make(map[int]string)
+			year := 0
+			dataTime := time.Time{}
+			for k, v := range row {
+				columTitle := columMap[k]
+				monthStr := ""
+				month := 0
+				//value := ""
+
+				if strings.Contains(columTitle, "年份") {
+					// 年份
+					year, _ = strconv.Atoi(v)
+				} else if strings.Contains(columTitle, "月") {
+					monthStr = strings.TrimRight(columTitle, "月")
+					month, _ = strconv.Atoi(monthStr)
+					monthValueMap[month] = v
+				}
+			}
+			for month, value := range monthValueMap {
+				if value == "<NULL>" || value == "<Blank>" {
+					continue
+				}
+				value = strings.ReplaceAll(value, "%", "")
+				dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+				dataTime = dataTime.AddDate(0, 1, -1)
+
+				item := models.BaseFromHisugarIndex{
+					IndexName:  secName,
+					ClassifyId: 12,
+					Unit:       HisugarGuoChanTangUnitMap[name],
+					Frequency:  "月度",
+					DataTime:   dataTime.Format(utils.FormatDate),
+					CreateTime: time.Now(),
+					ModifyTime: time.Now(),
+					Value:      value,
+					Describe:   DescribeMap[name],
+				}
+				if name == "巴西食糖月度出口量" {
+					item.ClassifyId = 13
+				}
+				fmt.Println(item.DataTime, secName, value)
+				indexList = append(indexList, &item)
+			}
+		}
+		// 写入数据库
+		//err = PostHandleHisugar(indexList)
+		//if err != nil {
+		//	utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+		//	fmt.Println("PostHandleHisugar err", err)
+		//	return
+		//}
+	}
+	return
+}
+
+// 第一列月日,后面每一列是年份
+// 巴西港口等待船只数量
+func AnalysisHiSugar7(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			columMap[column.AliasName] = column.Title
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			yeareMap := make(map[int]string)
+			year := 0
+			monthDay := time.Time{}
+			for k, v := range row {
+				columTitle := columMap[k]
+				yearStr := ""
+				//month := 0
+				//day := 0
+				//value := ""
+
+				if strings.Contains(columTitle, "日期") {
+					// 日期
+					//year, _ = strconv.Atoi(v)
+					v = strings.ReplaceAll(v, " ", "")
+					monthDay, err = utils.ParseTimeShort(v)
+					if err != nil {
+						fmt.Println(err)
+						utils.FileLog.Error(fmt.Sprintf("时间解析错误:%v", err))
+						return
+					}
+					//month = int(dataTime.Month())
+					//day = dataTime.Day()
+				} else if strings.Contains(columTitle, "年") {
+					yearStr = strings.TrimRight(columTitle, "年")
+					year, _ = strconv.Atoi(yearStr)
+					yeareMap[year] = v
+				}
+			}
+			for year, value := range yeareMap {
+				if value == "<NULL>" || value == "<Blank>" {
+					continue
+				}
+				value = strings.ReplaceAll(value, "%", "")
+				dataTime := time.Date(year, monthDay.Month(), monthDay.Day(), 0, 0, 0, 0, time.Local)
+				//dataTime = dataTime.AddDate(0, 1, -1)
+
+				item := models.BaseFromHisugarIndex{
+					IndexName:  secName,
+					ClassifyId: 13,
+					Unit:       HisugarGuoChanTangUnitMap[name],
+					Frequency:  "周度",
+					DataTime:   dataTime.Format(utils.FormatDate),
+					CreateTime: time.Now(),
+					ModifyTime: time.Now(),
+					Value:      value,
+					Describe:   DescribeMap[name],
+				}
+				fmt.Println(item.DataTime, secName, value)
+				indexList = append(indexList, &item)
+			}
+		}
+		// 写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}
+
+// 10,11,12月是上一年的,年份格式2023/24
+// 印度食糖月度出口量
+func AnalysisHiSugar8(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			columMap[column.AliasName] = column.Title
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			monthValueMap := make(map[int]string)
+			yearStrSlice := make([]string, 0)
+			year := 0
+			dataTime := time.Time{}
+			for k, v := range row {
+				columTitle := columMap[k]
+				yearSlice := strings.Split(v, "/")
+
+				monthStr := ""
+				month := 0
+				//value := ""
+
+				if strings.Contains(v, "/") && (columTitle == "榨季" || columTitle == "榨季_万吨") {
+					// 年份
+					for i, s := range yearSlice {
+						if i == 1 {
+							yearStrSlice = append(yearStrSlice, "20"+s)
+						} else {
+							yearStrSlice = append(yearStrSlice, s)
+						}
+					}
+				} else if strings.Contains(columTitle, "月") {
+					monthStr = strings.TrimRight(columTitle, "月")
+					month, _ = strconv.Atoi(monthStr)
+					monthValueMap[month] = v
+				}
+			}
+			for month, value := range monthValueMap {
+				if value == "<NULL>" || value == "<Blank>" {
+					continue
+				}
+				value = strings.ReplaceAll(value, "%", "")
+				if month > 9 && month < 13 {
+					year, _ = strconv.Atoi(yearStrSlice[0])
+					dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					dataTime = dataTime.AddDate(0, 1, -1)
+				} else {
+					year, _ = strconv.Atoi(yearStrSlice[1])
+					dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					dataTime = dataTime.AddDate(0, 1, -1)
+				}
+				item := models.BaseFromHisugarIndex{
+					IndexName:  secName,
+					ClassifyId: 14,
+					Unit:       HisugarGuoChanTangUnitMap[name],
+					Frequency:  "月度",
+					DataTime:   dataTime.Format(utils.FormatDate),
+					CreateTime: time.Now(),
+					ModifyTime: time.Now(),
+					Value:      value,
+					Describe:   DescribeMap[name],
+				}
+				fmt.Println(item.DataTime, secName, value)
+				indexList = append(indexList, &item)
+			}
+		}
+		// 写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}
+
+// 10,11,12月是上一年的,年份格式23/24,旬度
+// 泰国双周糖累计产量
+func AnalysisHiSugar9(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			columMap[column.AliasName] = column.Title
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			monthValueMap := make(map[int]string)
+			dayValueMap := make(map[int]int)
+			yearStrSlice := make([]string, 0)
+			year := 0
+			dataTime := time.Time{}
+			for k, v := range row {
+				columTitle := columMap[k]
+				yearSlice := strings.Split(v, "/")
+
+				monthStr := ""
+				month := 0
+				//value := ""
+
+				if strings.Contains(v, "/") && (columTitle == "榨季" || columTitle == "榨季_吨") {
+					// 年份
+					for _, s := range yearSlice {
+						yearStrSlice = append(yearStrSlice, "20"+s)
+					}
+				} else if strings.Contains(columTitle, "月") {
+					if strings.Contains(columTitle, "月上半月") {
+						monthStr = strings.TrimRight(columTitle, "月上半月")
+						month, _ = strconv.Atoi(monthStr)
+						dayValueMap[month] = 15
+					} else if strings.Contains(columTitle, "月下半月") {
+						monthStr = strings.TrimRight(columTitle, "月下半月")
+						month, _ = strconv.Atoi(monthStr)
+						dayValueMap[month] = 25
+					}
+					monthValueMap[month] = v
+				}
+			}
+			for month, value := range monthValueMap {
+				if value == "<NULL>" || value == "<Blank>" {
+					continue
+				}
+				value = strings.ReplaceAll(value, "%", "")
+				if month > 11 {
+					year, _ = strconv.Atoi(yearStrSlice[0])
+				} else {
+					year, _ = strconv.Atoi(yearStrSlice[1])
+				}
+				if dayValueMap[month] > 20 {
+					dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					dataTime = dataTime.AddDate(0, 1, -1)
+				} else {
+					dataTime = time.Date(year, time.Month(month), 15, 0, 0, 0, 0, time.Local)
+				}
+				item := models.BaseFromHisugarIndex{
+					IndexName:  secName,
+					ClassifyId: 15,
+					Unit:       HisugarGuoChanTangUnitMap[name],
+					Frequency:  "月度",
+					DataTime:   dataTime.Format(utils.FormatDate),
+					CreateTime: time.Now(),
+					ModifyTime: time.Now(),
+					Value:      value,
+					Describe:   DescribeMap[name],
+				}
+				fmt.Println(item.DataTime, secName, value)
+				indexList = append(indexList, &item)
+			}
+		}
+		// 写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}
+
+// 11,12是上一年的,年份23/24,横轴日期11月15,11月30
+// 印度双周累计产糖量
+func AnalysisHiSugar10(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			columMap[column.AliasName] = column.Title
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			//monthValueMap := make(map[int]string)
+			//dayValueMap := make(map[int]int)
+			dateValueMap := make(map[time.Time]string)
+			yearStrSlice := make([]string, 0)
+			year := 0
+			dataTime := time.Time{}
+			for k, v := range row {
+				columTitle := columMap[k]
+				yearSlice := strings.Split(v, "/")
+
+				//monthStr := ""
+				month := 0
+				day := 0
+				//value := ""
+
+				if strings.Contains(v, "/") && (columTitle == "榨季" || columTitle == "榨季_万吨") {
+					// 年份
+					for _, s := range yearSlice {
+						yearStrSlice = append(yearStrSlice, "20"+s)
+					}
+				} else if strings.Contains(columTitle, "月") {
+					dateSlice := strings.Split(columTitle, "月")
+					if len(dateSlice) == 2 {
+						month, _ = strconv.Atoi(dateSlice[0])
+						day, _ = strconv.Atoi(dateSlice[1])
+					}
+					// 这个时候不一定有年份,所以先搞个假的年份,后面赋值真年份
+					dataTime = time.Date(2000, time.Month(month), day, 0, 0, 0, 0, time.Local)
+					dateValueMap[dataTime] = v
+				}
+			}
+			for date, value := range dateValueMap {
+				if value == "<NULL>" || value == "<Blank>" || value == "-" {
+					continue
+				}
+				if date.Month() == 11 || date.Month() == 12 {
+					year, _ = strconv.Atoi(yearStrSlice[0])
+					//dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					//dataTime = dataTime.AddDate(0, 1, -1)
+				} else {
+					year, _ = strconv.Atoi(yearStrSlice[1])
+					//dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					//dataTime = dataTime.AddDate(0, 1, -1)
+				}
+				date = time.Date(year, date.Month(), date.Day(), 0, 0, 0, 0, time.Local)
+				item := models.BaseFromHisugarIndex{
+					DataTime:   date.Format(utils.FormatDate),
+					Value:      value,
+					IndexName:  secName,
+					Unit:       HisugarGuoChanTangUnitMap[name],
+					CreateTime: time.Now(),
+					ModifyTime: time.Now(),
+					ClassifyId: HisugarGuoChanTangClassifyMap[name],
+					Frequency:  "旬度",
+					Describe:   DescribeMap[name],
+				}
+				fmt.Println(item.DataTime, value)
+				indexList = append(indexList, &item)
+			}
+		}
+		// 写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}
+
+// 4月16到12月是上一年的,年份格式23/24,旬度
+// 巴西双周累计产糖量
+func AnalysisHiSugar11(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			columMap[column.AliasName] = column.Title
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			monthValueMap := make(map[int]string)
+			dayValueMap := make(map[int]int)
+			yearStrSlice := make([]string, 0)
+			year := 0
+			dataTime := time.Time{}
+			for k, v := range row {
+				columTitle := columMap[k]
+				yearSlice := strings.Split(v, "/")
+
+				monthStr := ""
+				month := 0
+				//value := ""
+
+				if strings.Contains(v, "/") && (columTitle == "榨季" || columTitle == "榨季_吨") {
+					// 年份
+					for _, s := range yearSlice {
+						yearStrSlice = append(yearStrSlice, "20"+s)
+					}
+				} else if strings.Contains(columTitle, "月") {
+					if strings.Contains(columTitle, "月16日") {
+						monthStr = strings.TrimRight(columTitle, "月16日")
+						month, _ = strconv.Atoi(monthStr)
+						dayValueMap[month] = 16
+					} else if strings.Contains(columTitle, "月1日") {
+						monthStr = strings.TrimRight(columTitle, "月1日")
+						month, _ = strconv.Atoi(monthStr)
+						dayValueMap[month] = 1
+					}
+					monthValueMap[month] = v
+				}
+			}
+			for month, value := range monthValueMap {
+				if value == "<NULL>" || value == "<Blank>" {
+					continue
+				}
+				value = strings.ReplaceAll(value, "%", "")
+				if month > 4 && dayValueMap[month] > 15 {
+					year, _ = strconv.Atoi(yearStrSlice[0])
+				} else {
+					year, _ = strconv.Atoi(yearStrSlice[1])
+				}
+				dataTime = time.Date(year, time.Month(month), dayValueMap[month], 0, 0, 0, 0, time.Local)
+				item := models.BaseFromHisugarIndex{
+					IndexName:  secName,
+					ClassifyId: 13,
+					Unit:       HisugarGuoChanTangUnitMap[name],
+					Frequency:  "旬度",
+					DataTime:   dataTime.Format(utils.FormatDate),
+					CreateTime: time.Now(),
+					ModifyTime: time.Now(),
+					Value:      value,
+					Describe:   DescribeMap[name],
+				}
+				fmt.Println(item.DataTime, secName, value)
+				indexList = append(indexList, &item)
+			}
+		}
+		//写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}
+
+// 4月16到12月是上一年的,年份格式23/24,旬度
+// 巴西双周食糖库存,中南部双周累计产糖量,中南部双周糖库存,中南部双周乙醇产量
+func AnalysisHiSugar12(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			columMap[column.AliasName] = column.Title
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			monthValueMap := make(map[int]string)
+			dayValueMap := make(map[int]int)
+			yearStrSlice := make([]string, 0)
+			year := 0
+			dataTime := time.Time{}
+			for k, v := range row {
+				columTitle := columMap[k]
+				yearSlice := strings.Split(v, "/")
+
+				//monthStr := ""
+				month := 0
+				//value := ""
+
+				if strings.Contains(v, "/") && (columTitle == "榨季" || columTitle == "榨季_万吨" ||
+					columTitle == "榨季_立方米" || columTitle == "榨季_吨" || columTitle == "榨季_百分比") {
+					// 年份
+					for _, s := range yearSlice {
+						yearStrSlice = append(yearStrSlice, "20"+s)
+					}
+				} else if strings.Contains(columTitle, "月") {
+					date, _ := time.Parse("1月2日", columTitle)
+					month = int(date.Month())
+					dayValueMap[month] = date.Day()
+					monthValueMap[month] = v
+					//if strings.Contains(columTitle, "月16日") {
+					//	monthStr = strings.TrimRight(columTitle, "月16日")
+					//	month, _ = strconv.Atoi(monthStr)
+					//	dayValueMap[month] = 16
+					//} else if strings.Contains(columTitle, "月1日") {
+					//	monthStr = strings.TrimRight(columTitle, "月1日")
+					//	month, _ = strconv.Atoi(monthStr)
+					//	dayValueMap[month] = 1
+					//}
+					//monthValueMap[month] = v
+				}
+			}
+			for month, value := range monthValueMap {
+				if value == "<NULL>" || value == "<Blank>" {
+					continue
+				}
+				value = strings.ReplaceAll(value, "%", "")
+				if month > 3 {
+					year, _ = strconv.Atoi(yearStrSlice[0])
+				} else {
+					year, _ = strconv.Atoi(yearStrSlice[1])
+				}
+				dataTime = time.Date(year, time.Month(month), dayValueMap[month], 0, 0, 0, 0, time.Local)
+				item := models.BaseFromHisugarIndex{
+					IndexName:  secName,
+					ClassifyId: 13,
+					Unit:       HisugarGuoChanTangUnitMap[name],
+					Frequency:  "旬度",
+					DataTime:   dataTime.Format(utils.FormatDate),
+					CreateTime: time.Now(),
+					ModifyTime: time.Now(),
+					Value:      value,
+					Describe:   DescribeMap[name],
+				}
+				fmt.Println(item.DataTime, secName, value)
+				indexList = append(indexList, &item)
+			}
+		}
+		//写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}
+
+// 4-12月是上一年的
+// 巴西中南部乙醇月度销售情况,巴西中南部乙醇国内销售情况
+func AnalysisHiSugar13(name, reqParam, body string) (err error) {
+	secName := ""
+	columMap := make(map[string]string)
+	var req ChartRequestSimple
+	if e := json.Unmarshal([]byte(reqParam), &req); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		secName = req.SceneName
+		fmt.Println(secName)
+		for _, column := range req.Columns {
+			columMap[column.AliasName] = column.Title
+		}
+	}
+
+	var resp HisugarResponseDataSimple
+	if e := json.Unmarshal([]byte(body), &resp); e != nil {
+		err = e
+		log.Println(err)
+		return
+	} else {
+		indexList := make([]*models.BaseFromHisugarIndex, 0)
+		for _, row := range resp.Rows {
+			monthValueMap := make(map[int]string)
+			yearStrSlice := make([]string, 0)
+			year := 0
+			dataTime := time.Time{}
+			for k, v := range row {
+				columTitle := columMap[k]
+				yearSlice := strings.Split(v, "/")
+
+				monthStr := ""
+				month := 0
+				//value := ""
+
+				if strings.Contains(v, "/") && (columTitle == "榨季" || columTitle == "榨季_万吨") {
+					// 年份
+					for _, s := range yearSlice {
+						yearStrSlice = append(yearStrSlice, "20"+s)
+					}
+				} else if strings.Contains(columTitle, "月") {
+					monthStr = strings.TrimRight(columTitle, "月")
+					month, _ = strconv.Atoi(monthStr)
+					monthValueMap[month] = v
+				}
+			}
+			for month, value := range monthValueMap {
+				if value == "<NULL>" || value == "<Blank>" || value == "-" {
+					continue
+				}
+				value = strings.ReplaceAll(value, "%", "")
+				if month > 3 && month < 13 {
+					year, _ = strconv.Atoi(yearStrSlice[0])
+					dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					dataTime = dataTime.AddDate(0, 1, -1)
+				} else {
+					year, _ = strconv.Atoi(yearStrSlice[1])
+					dataTime = time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.Local)
+					dataTime = dataTime.AddDate(0, 1, -1)
+				}
+				item := models.BaseFromHisugarIndex{
+					IndexName:  secName,
+					ClassifyId: HisugarGuoChanTangClassifyMap[name],
+					Unit:       HisugarGuoChanTangUnitMap[name],
+					Frequency:  "月度",
+					DataTime:   dataTime.Format(utils.FormatDate),
+					CreateTime: time.Now(),
+					ModifyTime: time.Now(),
+					Value:      value,
+					Describe:   DescribeMap[name],
+				}
+				fmt.Println(item.DataTime, value)
+				indexList = append(indexList, &item)
+			}
+		}
+		// 写入数据库
+		err = PostHandleHisugar(indexList)
+		if err != nil {
+			utils.FileLog.Error(fmt.Sprintf("PostHandleHisugar err:%v", err))
+			fmt.Println("PostHandleHisugar err", err)
+			return
+		}
+	}
+	return
+}

Diferenças do arquivo suprimidas por serem muito extensas
+ 4 - 0
services/base_from_hisugar/hisugar_params.go


+ 175 - 0
services/base_from_hisugar/request.go

@@ -0,0 +1,175 @@
+package base_from_hisugar
+
+type ChartResponse struct {
+	Columns      []Column    `json:"columns"`
+	Dataset      interface{} `json:"dataset"`
+	IsCache      bool        `json:"isCache"`
+	Status       string      `json:"status"`
+	AppId        string      `json:"appId"`
+	ResourceCode string      `json:"resourceCode"`
+	ChartId      string      `json:"chartId"`
+	NodeType     string      `json:"nodeType"`
+	_Paramset    interface{} `json:"paramset"`
+	WebapiParams interface{} `json:"webapiParams"`
+	SceneName    string      `json:"sceneName"`
+}
+
+type Column struct {
+	Name          string      `json:"name"`
+	AliasName     string      `json:"aliasName"`
+	Title         string      `json:"title"`
+	FinalId       string      `json:"finalId"`
+	TargetColumn  interface{} `json:"targetColumn"`
+	AliasTitle    interface{} `json:"aliasTitle"`
+	SuffixTitle   string      `json:"suffixTitle"`
+	Index         int         `json:"index"`
+	Expression    interface{} `json:"expression"`
+	TableName     []string    `json:"tableName"`
+	DsId          string      `json:"dsId"`
+	AreaType      string      `json:"areaType"`
+	AreaCode      string      `json:"areaCode"`
+	DateFormatter interface{} `json:"dateFormatter"`
+	Type          string      `json:"type"`
+	IsAggExpr     bool        `json:"isAggExpr"`
+	IsCalculate   bool        `json:"isCalculate"`
+	IsEncrypt     bool        `json:"isEncrypt"`
+	DataPackageId interface{} `json:"dataPackageId"`
+	Fid           string      `json:"fid"`
+	PanelId       string      `json:"panelId"`
+	Sync          interface{} `json:"sync"`
+}
+
+type TargetColumn struct {
+	Id            string        `json:"id"`
+	Name          string        `json:"name"`
+	OriName       string        `json:"oriName"`
+	Alias         string        `json:"alias"`
+	Title         string        `json:"title"`
+	PinyinTitle   string        `json:"pinyinTitle"`
+	Type          string        `json:"type"`
+	Length        int           `json:"length"`
+	Digits        int           `json:"digits"`
+	Hide          bool          `json:"hide"`
+	Expression    string        `json:"expression"`
+	Index         int           `json:"index"`
+	Dynamic       bool          `json:"dynamic"`
+	RuleIds       interface{}   `json:"ruleIds"`
+	Params        interface{}   `json:"params"`
+	Sync          interface{}   `json:"sync"`
+	ColDirs       []interface{} `json:"colDirs"`
+	OriColAlias   interface{}   `json:"oriColAlias"`
+	Description   interface{}   `json:"description"`
+	CalColumn     bool          `json:"calColumn"`
+	Position      bool          `json:"position"`
+	DsId          string        `json:"dsId"`
+	TableName     string        `json:"tableName"`
+	TableType     string        `json:"tableType"`
+	IsColumn      bool          `json:"isColumn"`
+	ShowButton    bool          `json:"showButton"`
+	DataPackageId interface{}   `json:"dataPackageId"`
+	OriginName    string        `json:"originName"`
+	Icon          string        `json:"icon"`
+	GroupType     string        `json:"groupType"`
+}
+
+type Expression struct {
+	IsGroup bool `json:"isGroup"`
+}
+
+type Dataset struct {
+	DatasetId     string        `json:"datasetId"`
+	DsId          string        `json:"dsId"`
+	AppId         string        `json:"appId"`
+	Tables        []Table       `json:"tables"`
+	Relations     []interface{} `json:"relations"`
+	Flow          Flow          `json:"flow"`
+	Flowrelations []interface{} `json:"flowrelations"`
+	Links         []interface{} `json:"links"`
+}
+
+type Table struct {
+	Id                          string      `json:"id"`
+	Name                        string      `json:"name"`
+	Title                       string      `json:"title"`
+	PinyinTitle                 interface{} `json:"pinyinTitle"`
+	Type                        string      `json:"type"`
+	Catalog                     interface{} `json:"catalog"`
+	Schema                      interface{} `json:"schema"`
+	OriginName                  interface{} `json:"originName"`
+	Column                      interface{} `json:"column"`
+	MetaColumn                  interface{} `json:"metaColumn"`
+	Rownum                      int         `json:"rownum"`
+	HideColumns                 interface{} `json:"hideColumns"`
+	ColumnNames                 interface{} `json:"columnNames"`
+	ColumnSync                  interface{} `json:"columnSync"`
+	DataSqlSet                  interface{} `json:"dataSqlSet"`
+	RefTables                   interface{} `json:"refTables"`
+	ColumnFormatter             interface{} `json:"columnFormatter"`
+	Rules                       interface{} `json:"rules"`
+	Params                      interface{} `json:"params"`
+	DataPrivileges              interface{} `json:"dataPrivileges"`
+	DataPrivilegeRuleId         interface{} `json:"dataPrivilegeRuleId"`
+	Sync                        interface{} `json:"sync"`
+	FilterGroup                 interface{} `json:"filterGroup"`
+	CollectPara                 interface{} `json:"collectPara"`
+	CreateTime                  interface{} `json:"createTime"`
+	DataPackageId               interface{} `json:"dataPackageId"`
+	DataParamMappers            interface{} `json:"dataParamMappers"`
+	ApiParams                   interface{} `json:"apiParams"`
+	ExteralParams               interface{} `json:"exteralParams"`
+	IsGlobalFusion              string      `json:"isGlobalFusion"`
+	GlobalFusionSourceDsId      interface{} `json:"globalFusionSourceDsId"`
+	GlobalFusionSourceTableName interface{} `json:"globalFusionSourceTableName"`
+	GlobalFusionSourceShcema    interface{} `json:"globalFusionSourceShcema"`
+	GlobalFusionSourceCatalog   interface{} `json:"globalFusionSourceCatalog"`
+	ModelId                     interface{} `json:"modelId"`
+	DsId                        interface{} `json:"dsId"`
+	FilterNest                  bool        `json:"filterNest"`
+	Etl                         bool        `json:"etl"`
+}
+
+type Flow struct {
+	DsId     string  `json:"dsId"`
+	Children []Child `json:"children"`
+}
+
+type Child struct {
+	Eid   string `json:"eid"`
+	Style Style  `json:"style"`
+	Table Table  `json:"table"`
+}
+
+type Style struct {
+	Top  string `json:"top"`
+	Left string `json:"left"`
+}
+
+type WebapiParam struct {
+	ParamName string `json:"paramName"`
+	Type      string `json:"type"`
+	Value     string `json:"value"`
+}
+
+type ParamSet struct {
+	Search []Search      `json:"search"`
+	Param  []interface{} `json:"param"`
+}
+
+type Search struct {
+	Key       string `json:"key"`
+	Value     string `json:"value"`
+	Type      string `json:"type"`
+	Separator string `json:"seperator"`
+}
+
+type ChartRequestSimple struct {
+	Columns   []ColumnSimple `json:"columns"`
+	SceneName string         `json:"sceneName"`
+}
+
+type ColumnSimple struct {
+	Name       string `json:"name"`
+	AliasName  string `json:"aliasName"`
+	AliasTitle string `json:"aliasTitle"`
+	Title      string `json:"title"`
+}

+ 6 - 0
services/task.go

@@ -2,6 +2,7 @@ package services
 
 import (
 	ccfService "eta/eta_data_analysis/services/base_from_ccf"
+	hisugarService "eta/eta_data_analysis/services/base_from_hisugar"
 	oilchemService "eta/eta_data_analysis/services/base_from_oilchem"
 	"eta/eta_data_analysis/services/fenwei"
 	"eta/eta_data_analysis/services/liangyou"
@@ -130,6 +131,11 @@ func Task() {
 		task.AddTask("卓创资讯", oilchemData)
 	}
 
+	if utils.HisugarOpen == "1" {
+		hisugarData := task.NewTask("hisugarData", "0 30 16 * * *", hisugarService.HiugarCrawler)
+		task.AddTask("泛糖科技", hisugarData)
+	}
+
 	task.StartTask()
 
 	fmt.Println("task end")

+ 33 - 0
utils/common.go

@@ -1347,3 +1347,36 @@ func IsNumeric(s string) bool {
 	_, err := strconv.ParseFloat(s, 64) // 或者使用 ParseInt(s, 10, 64) 判断整数
 	return err == nil
 }
+
+// ParseTimeShort is a custom function to parse a short time format like "1/4".
+func ParseTimeShort(s string) (time.Time, error) {
+	parts := splitTwoParts(s, "/")
+	if len(parts) != 2 {
+		return time.Time{}, errors.New("invalid format")
+	}
+
+	month, err := strconv.Atoi(parts[0])
+	if err != nil {
+		return time.Time{}, err
+	}
+	day, err := strconv.Atoi(parts[1])
+	if err != nil {
+		return time.Time{}, err
+	}
+
+	// Assuming the year is the current year for this example.
+	year := time.Now().Year()
+
+	// Create the time object.
+	t := time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.Local)
+	return t, nil
+}
+
+// splitTwoParts splits a string into two parts using the given delimiter.
+func splitTwoParts(s, delimiter string) []string {
+	parts := strings.Split(s, delimiter)
+	if len(parts) != 2 {
+		return nil
+	}
+	return parts
+}

+ 13 - 0
utils/config.go

@@ -114,6 +114,12 @@ var (
 	OilchemDataInit   string
 )
 
+var (
+	HisugarAccount  string
+	HisugarPassword string
+	HisugarOpen     string
+)
+
 var TerminalCode string
 
 func init() {
@@ -246,6 +252,13 @@ func init() {
 		OilchemOpen = config["oilchem_open"]
 		OilchemDataInit = config["oilchem_data_init"]
 	}
+
+	// 泛糖科技
+	{
+		HisugarAccount = config["hisugar_account"]
+		HisugarPassword = config["hisugar_password"]
+		HisugarOpen = config["hisugar_open"]
+	}
 }
 
 //修改接口文档

+ 1 - 0
utils/constants.go

@@ -250,6 +250,7 @@ const (
 	LIB_ROUTE_CCF_EDB_HANDLE                          = "ccf/handle/edb_data"                                   // CCF化纤信息指标入库接口地址
 	LIB_ROUTE_CCF_TABLE_HANDLE                        = "ccf/handle/table_data"                                 // CCF化纤信息装置表格入库接口地址
 	LIB_ROUTE_OILCHEM_TABLE_HANDLE                    = "oilchem/handle/edb_data"                               // 隆众资讯入库接口地址
+	LIB_ROUTE_Hisugar_TABLE_HANDLE                    = "hisugar/handle/edb_data"                               // 泛糖科技入库接口地址
 	LIB_ROUTE_FENWEI_NET_DATA_HANDLE                  = "/fenwei/net/data/handle"                               // 汾渭网页数据处理
 	GET_LY_CLASSIFY_BY_NAME                           = "/ly/get/ly/classify/by/name"                           // 获取分类
 	GET_LY_INDEX_RECORD_BY_URL                        = "/ly/get/ly/index/record/by/url"                        // 根据url获取指标已读取记录

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff