123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- package excel
- import (
- "eta/eta_chart_lib/models"
- "eta/eta_chart_lib/models/request"
- "eta/eta_chart_lib/utils"
- "strconv"
- "strings"
- "time"
- )
- // HandleRuleToTableCell 根据管理规则渲染单元格数据
- // func HandleRuleToTableCell(excelInfoId int, oldTableData TableData) (newTableData TableData, err error) {
- // newTableData = oldTableData
- // excelRuleMappingList, err := models.GetExcelRuleMappingByExcelInfoId(excelInfoId)
- // if err != nil {
- // return
- // }
- // if len(excelRuleMappingList) == 0 {
- // return
- // }
- // tableDataList := oldTableData.TableDataList
- // excelRuleMap := make(map[int]*models.ExcelInfoRuleMappingView)
- // for _, v := range excelRuleMappingList {
- // excelRuleMap[v.ExcelInfoRuleMappingId] = v
- // }
- // ruleScopeMap := generateRuleScopeIndexMap(excelRuleMappingList)
- // for row, scopeValues := range ruleScopeMap {
- // for col, ruleId := range scopeValues {
- // if v, ok := excelRuleMap[ruleId]; ok {
- // if len(tableDataList) > row && len(tableDataList[row]) > col {
- // // 符合管理规则要求,则进行字体和背景颜色的渲染
- // if checkCellRule(v, tableDataList[row][col].Monitor, tableDataList) {
- // tableDataList[row][col].Background = v.BackgroundColor
- // tableDataList[row][col].FontColor = v.FontColor
- // }
- // } else {
- // continue
- // }
- // } else {
- // continue
- // }
- // }
- // }
- // return
- // }
- func getCellValueByType(value string, valueType int, tableDataList [][]request.MixedTableCellDataReq) (float64, bool) {
- if valueType == 2 {
- coords := strings.Split(value, ",")
- var coordIntArr []int
- for _, v := range coords {
- t, _ := strconv.Atoi(v)
- coordIntArr = append(coordIntArr, t)
- }
- if len(coordIntArr) == 2 {
- x, y := coordIntArr[0]-1, coordIntArr[1]-1
- conditionValue, err := strconv.ParseFloat(tableDataList[y][x].ShowValue, 64)
- if err != nil {
- return 0, false
- }
- return conditionValue, true
- }
- } else {
- conditionValue, err := strconv.ParseFloat(value, 64)
- if err != nil {
- return 0, false
- }
- return conditionValue, true
- }
- return 0, false
- }
- func checkCellRule(ruleInfo *models.ExcelInfoRuleMappingView, value string, tableDataList [][]request.MixedTableCellDataReq) bool {
- var tableValue float64
- var tableTime time.Time
- var err error
- if ruleInfo.RuleType == 5 {
- tableTime, err = time.ParseInLocation(utils.FormatDate, value, time.Local)
- if err != nil {
- return false
- }
- } else {
- tableValue, err = strconv.ParseFloat(value, 64)
- if err != nil {
- return false
- }
- }
- switch ruleInfo.RuleType {
- // 大于
- case 1:
- conditionValue, ok := getCellValueByType(ruleInfo.LeftValueBack, ruleInfo.LeftValueType, tableDataList)
- if !ok {
- return false
- }
- if tableValue > conditionValue {
- return true
- }
- // 小于
- case 2:
- conditionValue, ok := getCellValueByType(ruleInfo.LeftValueBack, ruleInfo.LeftValueType, tableDataList)
- if !ok {
- return false
- }
- if tableValue < conditionValue {
- return true
- }
- // 介于
- case 3:
- leftcondValue, ok := getCellValueByType(ruleInfo.LeftValueBack, ruleInfo.LeftValueType, tableDataList)
- if !ok {
- return false
- }
- rightcondValue, ok := getCellValueByType(ruleInfo.RightValue, ruleInfo.RightValueType, tableDataList)
- if !ok {
- return false
- }
- if leftcondValue <= tableValue && tableValue <= rightcondValue {
- return true
- }
- // 等于
- case 4:
- conditionValue, ok := getCellValueByType(ruleInfo.LeftValueBack, ruleInfo.LeftValueType, tableDataList)
- if !ok {
- return false
- }
- if tableValue == conditionValue {
- return true
- }
- // 发生日期
- case 5:
- // 发生日期
- var dateStart, dataEnd time.Time
- switch ruleInfo.LeftValueBack {
- // 今天
- case "today":
- // 获得今天的零点零分零秒
- dateStart = utils.Today()
- if tableTime == dateStart {
- return true
- }
- // 明天
- case "tomorrow":
- dateStart = utils.Tomorrow()
- if tableTime == dateStart {
- return true
- }
- // 最近7天
- case "last7days":
- dateStart, dataEnd = utils.Last7Days()
- if tableTime.After(dateStart) && tableTime.Before(dataEnd) {
- return true
- }
- // 上周
- case "lastweek":
- dateStart, dataEnd = utils.LastWeek()
- if tableTime.After(dateStart) && tableTime.Before(dataEnd) {
- return true
- }
- // 本周
- case "thisweek":
- dateStart, dataEnd = utils.ThisWeek()
- if tableTime.After(dateStart) && tableTime.Before(dataEnd) {
- return true
- }
- // 下周
- case "nextweek":
- dateStart, dataEnd = utils.NextWeek()
- if tableTime.After(dateStart) && tableTime.Before(dataEnd) {
- return true
- }
- // 上月
- case "lastmonth":
- dateStart, dataEnd = utils.LastMonth()
- if tableTime.After(dateStart) && tableTime.Before(dataEnd) {
- return true
- }
- // 本月
- case "thismonth":
- dateStart, dataEnd = utils.ThisMonth()
- if tableTime.After(dateStart) && tableTime.Before(dataEnd) {
- return true
- }
- // 下月
- case "nextmonth":
- dateStart, dataEnd = utils.NextMonth()
- if tableTime.After(dateStart) && tableTime.Before(dataEnd) {
- return true
- }
- default:
- return false
- }
- }
- return false
- }
- func generateRuleScopeIndexMap(items []*models.ExcelInfoRuleMappingView) (ruleScopeMap map[int]map[int][]int) {
- ruleScopeMap = make(map[int]map[int][]int)
- for _, item := range items {
- coords := strings.Split(item.ScopeCoord, ",")
- var coordIntArr []int
- for _, v := range coords {
- t, _ := strconv.Atoi(v)
- coordIntArr = append(coordIntArr, t)
- }
- if len(coords) == 4 {
- xmin, ymin, xmax, ymax := coordIntArr[0]-1, coordIntArr[1]-1, coordIntArr[2]-1, coordIntArr[3]-1
- for i := ymin; i <= ymax; i++ {
- for j := xmin; j <= xmax; j++ {
- if _, ok := ruleScopeMap[i]; !ok {
- ruleScopeMap[i] = make(map[int][]int)
- }
- ruleScopeMap[i][j] = append(ruleScopeMap[i][j], item.ExcelInfoRuleMappingId)
- // ruleScopeMap[i][j] = item.ExcelInfoRuleMappingId
- }
- }
- }
- if len(coords) == 2 {
- x, y := coordIntArr[0]-1, coordIntArr[1]-1
- if _, ok := ruleScopeMap[y]; !ok {
- ruleScopeMap[y] = make(map[int][]int)
- }
- ruleScopeMap[y][x] = append(ruleScopeMap[y][x], item.ExcelInfoRuleMappingId)
- // ruleScopeMap[y][x] = item.ExcelInfoRuleMappingId
- }
- }
- return
- }
|