ソースを参照

新增公历转农历计算

hongze 3 年 前
コミット
c12dd04e30

+ 191 - 0
models/data_manage/edb_data_quarter.go

@@ -0,0 +1,191 @@
+package data_manage
+
+import (
+	"fmt"
+	"hongze/hongze_task/utils"
+	"rdluck_tools/orm"
+	"sort"
+	"strconv"
+	"strings"
+	"time"
+)
+
+func GetEdbDataQuarterCount(edbInfoId int) (count int, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	hsql := `SELECT COUNT(1) AS count FROM edb_data_quarter WHERE edb_info_id=? `
+	err = o.Raw(hsql, edbInfoId).QueryRow(&count)
+	return
+}
+
+//指标季度数据计算
+func RefreshCalculateQuarter(edbInfoId, source int, edbCode string) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	o.Begin()
+	defer func() {
+		if err != nil {
+			fmt.Println("Err:", err)
+			o.Rollback()
+		} else {
+			o.Commit()
+		}
+	}()
+
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+
+	startDate := time.Now().AddDate(-2, -2, 0).Format(utils.FormatDate)
+	//计算数据
+	var condition string
+	var pars []interface{}
+	condition += " AND edb_info_id=? "
+	pars = append(pars, edbInfoId)
+	condition += " AND data_time>=? "
+	pars = append(pars, startDate)
+
+	dataList, err := GetEdbDataListAll(condition, pars, source, 0)
+	if err != nil {
+		return err
+	}
+
+	//计算数据
+	var existCondition string
+	var existPars []interface{}
+	existCondition += " AND edb_info_id=? "
+	existPars = append(existPars, edbInfoId)
+	existCondition += " AND data_time>=? "
+	existPars = append(existPars, startDate)
+
+	existDataList, err := GetEdbDataListAll(existCondition, existPars, utils.DATA_SOURCE_QUARTER, 0)
+	if err != nil {
+		return err
+	}
+	existMap := make(map[string]float64)
+	for _, v := range existDataList {
+		existMap[v.DataTime] = v.Value
+	}
+
+	var yearArr []int
+	yearMap := make(map[int]int)
+	dataMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range dataList {
+		//日其中获取年
+		itemDate, err := time.Parse(utils.FormatDate, v.DataTime)
+		if err != nil {
+			return err
+		}
+		year := itemDate.Year()
+		if _, ok := yearMap[year]; !ok {
+			yearArr = append(yearArr, year)
+			yearMap[year] = year
+		}
+		dataMap[v.DataTime] = v
+	}
+	sort.Sort(sort.Reverse(sort.IntSlice(yearArr)))
+	addSql := ` INSERT INTO edb_data_quarter(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	var isAdd bool
+	yearLen := len(yearArr)
+
+	fmt.Println(yearArr)
+
+	for yk, yv := range yearArr {
+		currentYear := yv
+		hsql := `SELECT * FROM holiday WHERE year=? `
+		currentHolidayObj := new(Holiday)
+		err = o.Raw(hsql, currentYear).QueryRow(&currentHolidayObj)
+		if err != nil {
+			return err
+		}
+		nextIndex := yk + 1
+		if nextIndex < yearLen {
+			nextYear := yearArr[nextIndex]
+			fmt.Println("year:", currentYear, nextYear)
+			nextHolidayObj := new(Holiday)
+			hsql := `SELECT * FROM holiday WHERE year=? `
+			err = o.Raw(hsql, nextYear).QueryRow(&nextHolidayObj)
+			if err != nil {
+				return err
+			}
+			nextHolidayStr := nextHolidayObj.HolidayDate.Format(utils.FormatDate)
+			currentHolidayStr := currentHolidayObj.HolidayDate.Format(utils.FormatDate)
+
+			if findItem, ok := dataMap[nextHolidayStr]; ok {
+				timestamp := currentHolidayObj.HolidayDate.UnixNano() / 1e6
+				timestampStr := fmt.Sprintf("%d", timestamp)
+				if _, ok := existMap[currentHolidayStr]; !ok {
+					addSql += GetAddSql(edbInfoIdStr, edbCode, currentHolidayStr, timestampStr, findItem.Value)
+					isAdd = true
+				}
+			}
+
+			nextMinDate := strconv.Itoa(nextYear) + "-01-01"
+			nextMaxDate := strconv.Itoa(nextYear) + "-12-31"
+			currentMinDate := strconv.Itoa(currentYear) + "-01-01"
+			currentMaxDate := strconv.Itoa(currentYear) + "-12-31"
+
+			i := 0
+			for {
+				i--
+				nextHolidayFormat := nextHolidayObj.HolidayDate.AddDate(0, 0, i)
+				currentHolidayFormat := currentHolidayObj.HolidayDate.AddDate(0, 0, i)
+
+				nextHolidayStr := nextHolidayFormat.Format(utils.FormatDate)
+				currentHolidayStr := currentHolidayFormat.Format(utils.FormatDate)
+
+				fmt.Println("currentHolidayStr:", currentHolidayStr, nextHolidayStr)
+				if findItem, ok := dataMap[nextHolidayStr]; ok {
+					timestamp := currentHolidayFormat.UnixNano() / 1e6
+					timestampStr := fmt.Sprintf("%d", timestamp)
+					if _, ok := existMap[currentHolidayStr]; !ok {
+						addSql += GetAddSql(edbInfoIdStr, edbCode, currentHolidayStr, timestampStr, findItem.Value)
+						isAdd = true
+					}
+				}
+				//fmt.Println("nextHolidayStr:", nextHolidayStr,nextMinDate)
+				if nextHolidayStr == nextMinDate || currentHolidayStr == currentMinDate {
+					fmt.Println("min跳出循环:" + nextMinDate)
+					break
+				}
+			}
+
+			n := 0
+			for {
+				n++
+				nextHolidayFormat := nextHolidayObj.HolidayDate.AddDate(0, 0, n)
+				currentHolidayFormat := currentHolidayObj.HolidayDate.AddDate(0, 0, n)
+
+				nextHolidayStr := nextHolidayFormat.Format(utils.FormatDate)
+				currentHolidayStr := currentHolidayFormat.Format(utils.FormatDate)
+
+				fmt.Println("currentHolidayStr:", currentHolidayStr, nextHolidayStr)
+
+				if findItem, ok := dataMap[nextHolidayStr]; ok {
+					timestamp := currentHolidayFormat.UnixNano() / 1e6
+					timestampStr := fmt.Sprintf("%d", timestamp)
+
+					if _, ok := existMap[currentHolidayStr]; !ok {
+						addSql += GetAddSql(edbInfoIdStr, edbCode, currentHolidayStr, timestampStr, findItem.Value)
+						isAdd = true
+					}
+				}
+
+				//fmt.Println("nextHolidayStr:", nextHolidayStr,nextMaxDate)
+				if nextHolidayStr == nextMaxDate || currentHolidayStr == currentMaxDate {
+					fmt.Println("max跳出循环:" + nextMaxDate)
+					break
+				}
+			}
+		}
+	}
+	fmt.Println("isAdd", isAdd)
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		utils.FileLog.Info(addSql)
+		_, err = o.Raw(addSql).Exec()
+		fmt.Println("err:", err)
+		if err != nil {
+			return err
+		}
+	}
+	return
+}

+ 2 - 0
models/data_manage/edb_data_table.go

@@ -25,6 +25,8 @@ func GetEdbDataTableName(source int) (tableName string) {
 		tableName = "edb_data_calculate_tcz"
 	case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS:
 		tableName = "edb_data_calculate_nszydpjjs"
+	case utils.DATA_SOURCE_QUARTER:
+		tableName = "edb_data_quarter"
 	default:
 		tableName = ""
 		errors.New("无效的渠道:" + strconv.Itoa(source))

+ 15 - 2
models/data_manage/edb_info.go

@@ -58,7 +58,7 @@ func GetEdbInfoByCondition(condition string, pars []interface{}) (item []*EdbInf
 	if condition != "" {
 		sql += condition
 	}
-	sql+=` ORDER BY edb_info_id ASC `
+	sql += ` ORDER BY edb_info_id ASC `
 	_, err = o.Raw(sql, pars).QueryRows(&item)
 	return
 }
@@ -135,4 +135,17 @@ func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) {
 	sql := ` SELECT * FROM edb_info WHERE edb_info_id=? `
 	err = o.Raw(sql, edbInfoId).QueryRow(&item)
 	return
-}
+}
+
+func GetQuarterEdbInfo() (item []*EdbInfo, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT c.* FROM chart_info AS a
+			INNER JOIN chart_edb_mapping AS b ON a.chart_info_id=b.chart_info_id
+			INNER JOIN edb_info AS c ON b.edb_info_id=c.edb_info_id
+			WHERE a.chart_type=2
+			GROUP BY b.edb_info_id
+			ORDER BY b.edb_info_id ASC  `
+	_, err = o.Raw(sql).QueryRows(&item)
+	return
+}

+ 8 - 0
models/data_manage/holiday.go

@@ -0,0 +1,8 @@
+package data_manage
+
+import "time"
+
+type Holiday struct {
+	Year        int
+	HolidayDate time.Time
+}

+ 21 - 0
services/data/edb_info.go

@@ -215,6 +215,7 @@ func RefreshDataFromCalculate() (err error) {
 	return err
 }
 
+//刷新所有计算指标
 func RefreshDataFromCalculateAll() (err error) {
 	defer func() {
 		if err != nil {
@@ -322,3 +323,23 @@ func RefreshDataFromCalculateAll() (err error) {
 	}
 	return err
 }
+
+//刷新指标农历数据
+func RefreshDataFromQuarterAll() (err error) {
+	defer func() {
+		if err != nil {
+			utils.FileLog.Info("RefreshDataFromQuarterAll Err:" + err.Error())
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromQuarterAll ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+
+	items, err := data_manage.GetQuarterEdbInfo()
+	if err != nil {
+		return err
+	}
+
+	for _, v := range items {
+		data_manage.RefreshCalculateQuarter(v.EdbInfoId, v.Source, v.EdbCode)
+	}
+	return err
+}

+ 8 - 7
services/task.go

@@ -11,7 +11,7 @@ import (
 func Task() {
 	fmt.Println("task start")
 	//如果是生产环境,才需要走这些任务
-	if utils.RunMode == "release"{
+	if utils.RunMode == "release" {
 		releaseTask()
 	}
 	//每日定时合同处理
@@ -38,7 +38,6 @@ func Task() {
 	//deleteReportSaveLog := toolbox.NewTask("deleteReportSaveLog", "0 30 08 * * *", DeleteReportSaveLog)
 	//toolbox.AddTask("deleteReportSaveLog", deleteReportSaveLog)
 
-
 	// 存量客户数据统计
 	stackCompanyStatistic := toolbox.NewTask("stackCompanyStatistic", "0 35 0 * * *", StackCompanyStatistic)
 	toolbox.AddTask("存量客户数据统计", stackCompanyStatistic)
@@ -53,7 +52,7 @@ func Task() {
 }
 
 //生产环境需要走的任务
-func releaseTask(){
+func releaseTask() {
 
 	//隆众指标获取
 	getLzProductList := toolbox.NewTask("getLzProductList", "0 0 11-19/1 * * * ", GetLzProductList)
@@ -96,7 +95,7 @@ func releaseTask(){
 	toolbox.AddTask("checkPbDataInterface", checkPbDataInterface)
 }
 
-func TaskTest(){
+func TaskTest() {
 	fmt.Println("The task is start")
 	//companyReportPermissionClose := toolbox.NewTask("companyTryOut", "0 5 0 * * *", CompanyReportPermissionClose)
 	companyReportPermissionClose := toolbox.NewTask("companyReportPermissionClose", "0/30 * * * * *", CompanyReportPermissionClose)
@@ -133,7 +132,7 @@ func OneMinute() (err error) {
 	return
 }
 
-func RefreshData() (err error){
+func RefreshData() (err error) {
 	//wind
 	go data.RefreshDataFromWind()
 	//同花顺
@@ -143,8 +142,10 @@ func RefreshData() (err error){
 	return
 }
 
-func RefreshCalculateData() (err error){
+func RefreshCalculateData() (err error) {
 	//计算指标
 	go data.RefreshDataFromCalculateAll()
+	//刷新公历转农历数据
+	go data.RefreshDataFromQuarterAll()
 	return
-}
+}

+ 1 - 0
utils/constants.go

@@ -71,6 +71,7 @@ const (
 	DATA_SOURCE_CALCULATE_TBZ                  //同比值
 	DATA_SOURCE_CALCULATE_TCZ                  //同差值
 	DATA_SOURCE_CALCULATE_NSZYDPJJS            //N数值移动平均计算
+	DATA_SOURCE_QUARTER                        //公历转农历
 )
 
 //http://datawind.hzinsights.com:8040/hz_server