report.go 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426
  1. package api
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "math"
  6. "sort"
  7. "strconv"
  8. "strings"
  9. "time"
  10. "tmr-watch/http/handle/restful"
  11. "github.com/Anderson-Lu/gofasion/gofasion"
  12. "github.com/xormplus/xorm"
  13. )
  14. //包含报表模块前端需要的各种数据格式转换
  15. func praseReportform(sqlnamestr string, parammaps *gofasion.Fasion, tx *xorm.Session, checked string, offset, count, typea, mode int) (queryData map[string]interface{}, err error) {
  16. sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx)
  17. s_params := make([]interface{}, 0)
  18. if sql != "" {
  19. paramslist := strings.Split(p, ",")
  20. if len(paramslist) > 0 && p != "" {
  21. for _, value := range paramslist {
  22. s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr())
  23. }
  24. }
  25. }
  26. queryList, err := tx.SQL(sql, s_params...).Query().List()
  27. //############
  28. sql2, p2 := restful.GetSqlByNameDBT("getFeednameSort", tx)
  29. s_params2 := make([]interface{}, 0)
  30. if sql2 != "" {
  31. paramslist2 := strings.Split(p2, ",")
  32. if len(paramslist2) > 0 && p != "" {
  33. for _, value := range paramslist2 {
  34. s_params2 = append(s_params2, parammaps.Get(strings.Trim(value, " ")).ValueStr())
  35. }
  36. }
  37. }
  38. queryList2, err := tx.SQL(sql2, s_params2...).Query().List()
  39. var feednamesort []string
  40. var feedcodelist []string
  41. if len(queryList2) > 0 {
  42. for i := 0; i < len(queryList2); i++ {
  43. feednamesort = append(feednamesort, queryList2[i]["fname"].(string))
  44. feedcodelist = append(feednamesort, queryList2[i]["feedcode"].(string))
  45. }
  46. }
  47. // #########
  48. sql3, p3 := restful.GetSqlByNameDBT("getFeednameSort2", tx)
  49. s_params3 := make([]interface{}, 0)
  50. if sql3 != "" {
  51. paramslist3 := strings.Split(p3, ",")
  52. if len(paramslist3) > 0 && p != "" {
  53. for _, value := range paramslist3 {
  54. s_params3 = append(s_params3, parammaps.Get(strings.Trim(value, " ")).ValueStr())
  55. }
  56. }
  57. }
  58. // var queryList3 []map[string]interface{}
  59. feedDataList := make([]map[string]interface{}, 0)
  60. var feednamesort3 []string
  61. if sql3 != "" {
  62. queryList3, err := tx.SQL(sql3, s_params3...).Query().List()
  63. // fmt.Println()
  64. if err != nil {
  65. return nil, err
  66. }
  67. if len(queryList3) > 0 {
  68. for z := 0; z < len(queryList3); z++ {
  69. feednamesort3 = append(feednamesort3, queryList3[z]["feedname"].(string))
  70. feedcodelist = append(feedcodelist, queryList3[z]["feedcode"].(string))
  71. }
  72. feedDataList = append(feedDataList, queryList3...)
  73. }
  74. }
  75. if err != nil {
  76. return nil, err
  77. }
  78. // if len(queryList) == 0 {
  79. // return nil, nil
  80. // }
  81. temstr := ""
  82. //除特殊接口外,去接口名称的前10位做同一类型的转换
  83. switch sqlnamestr {
  84. case "getAccuracyAllHL", "getAccuracyAllQX", "getAccuracyAllJH", "getFeedEffMR", "getFeedEffHL", "getHomepageCB", "getAccuraa", "judgenurFTReportDetail":
  85. temstr = sqlnamestr
  86. default:
  87. temstr = sqlnamestr[:10]
  88. }
  89. // 根据名称选择不通类型的转换-(可自动扩展,不需要使用之前的)
  90. switch temstr {
  91. case "getAccurac", "getFeedEff":
  92. queryData, err = getAccuracy(queryList, "2006-01-02") // 不定参数
  93. case "getprocess":
  94. //queryData, err = getAccuracyV3v1(queryList)
  95. queryData, err = getAccuracyV3(queryList)
  96. // 统计分析 过程分析
  97. if sqlnamestr == "getprocessAnalysisTB" {
  98. quertDataList := queryData["list"]
  99. query := quertDataList.(map[string]interface{})
  100. querys, _ := GetprocessAnalysisTB(parammaps, tx, quertDataList, queryList)
  101. if len(querys) != 0 {
  102. query["data1"] = querys["WTime"]
  103. query["data2"] = querys["data2"]
  104. query["data3"] = querys["realWandT"]
  105. query["data5"] = querys["data5"]
  106. }
  107. }
  108. case "getHomepro":
  109. queryData, err = getAccuracyV3(queryList)
  110. case "getAccuracyAllHL", "getAccuracyAllQX", "getAccuracyAllJH", "getFeedEffMR", "getFeedEffHL", "getHomepageCB", "getAccuraa":
  111. queryData, err = getAccuracyV2(queryList) //固定维度 日期
  112. case "getMateria":
  113. sql1, p1 := restful.GetSqlByNameDBT(sqlnamestr+("sum"), tx)
  114. s_params1 := make([]interface{}, 0)
  115. if sql1 != "" {
  116. paramslist1 := strings.Split(p1, ",")
  117. if len(paramslist1) > 0 && p != "" {
  118. for _, value := range paramslist1 {
  119. s_params1 = append(s_params1, parammaps.Get(strings.Trim(value, " ")).ValueStr())
  120. }
  121. }
  122. }
  123. queryListSum, _ := tx.SQL(sql1, s_params1...).Query().List()
  124. if mode == 0 {
  125. queryData, err = getAccuracyV4(queryList, queryListSum, checked, feednamesort3, typea)
  126. } else {
  127. queryData, _ = getAccuracyV41(queryList, queryListSum, checked, feednamesort3, typea, feedDataList)
  128. }
  129. queryData["feedcode"] = feedcodelist
  130. case "getPriceAn":
  131. queryData, err = getAccuracyV5(queryList)
  132. case "getJT1Accu":
  133. queryData, err = getAccuracyV6(queryList) //固定维度 牧场
  134. case "judgenurFT":
  135. queryData, err = getAccuracyV7(queryList)
  136. case "judgenurFTReportDetail":
  137. queryData, err = getAccuracyV8(queryList)
  138. case "downloadPl":
  139. var sql2, p2 string
  140. s_params2 := make([]interface{}, 0)
  141. if sqlnamestr == "downloadPlanSFJD" {
  142. sql2, p2 = restful.GetSqlByNameDBT("countfl", tx)
  143. //s_params1 := make([]interface{}, 0)
  144. if sql2 != "" {
  145. paramslist1 := strings.Split(p2, ",")
  146. if len(paramslist1) > 0 && p != "" {
  147. for _, value := range paramslist1 {
  148. s_params2 = append(s_params2, parammaps.Get(strings.Trim(value, " ")).ValueStr())
  149. }
  150. }
  151. }
  152. }
  153. queryList2, _ := tx.SQL(sql2, s_params2...).Query().List()
  154. var flleight string
  155. if len(queryList2) > 0 {
  156. flleight, _ = queryList2[0]["flcount"].(string)
  157. // fmt.Println(flleight)
  158. }
  159. flleightint, _ := strconv.Atoi(flleight)
  160. if sqlnamestr == "downloadPlanTSLJD" {
  161. queryData, err = getAccuracyV9(queryList, sqlnamestr, flleightint, feednamesort3)
  162. } else {
  163. queryData, err = getAccuracyV9(queryList, sqlnamestr, flleightint, feednamesort) //投料简打、累加
  164. }
  165. default:
  166. queryData, err = nil, nil
  167. }
  168. return
  169. }
  170. func getAccuracyV9(queryList []map[string]interface{}, sqlnamestr string, flleightint int, feednamesort []string) (map[string]interface{}, error) {
  171. queryData := make(map[string]interface{})
  172. chartData := make(map[string]interface{})
  173. mapc3 := make(map[string]interface{})
  174. data2 := []interface{}{}
  175. data1 := []interface{}{}
  176. mapc3["label"] = "车次"
  177. mapc3["prop"] = "projname"
  178. data1 = append(data1, mapc3)
  179. mapc3 = make(map[string]interface{})
  180. mapc3["label"] = "TMR"
  181. mapc3["prop"] = "tmrtname"
  182. data1 = append(data1, mapc3)
  183. mapc3 = make(map[string]interface{})
  184. //if sqlnamestr == "downloadPlanSFJD":
  185. //mapc3["label"] = "时间"
  186. //mapc3["prop"] = "plantime"
  187. //data1 = append(data1, mapc3)
  188. //mapc3 = make(map[string]interface{})
  189. //
  190. //mapc3["label"] = "班组"
  191. //mapc3["prop"] = "times"
  192. //data1 = append(data1, mapc3)
  193. //mapc3 = make(map[string]interface{})
  194. //
  195. //mapc3["label"] = "驾驶员"
  196. //mapc3["prop"] = "driver"
  197. //data1 = append(data1, mapc3)
  198. //mapc3 = make(map[string]interface{})
  199. //
  200. //mapc3["label"] = "日系数比例"
  201. //mapc3["prop"] = "rate"
  202. //data1 = append(data1, mapc3)
  203. //mapc3 = make(map[string]interface{})
  204. //
  205. //mapc3["label"] = "牛头数"
  206. //mapc3["prop"] = "feedpcount"
  207. //data1 = append(data1, mapc3)
  208. //mapc3 = make(map[string]interface{})
  209. //
  210. //mapc3["label"] = "配方模板"
  211. //mapc3["prop"] = "templetname"
  212. //data1 = append(data1, mapc3)
  213. //mapc3 = make(map[string]interface{})
  214. //#######################################################################################
  215. mtem := make(map[interface{}]interface{})
  216. var stem, feedNames []string
  217. for _, feed := range feednamesort {
  218. feed = strings.ReplaceAll(feed, " ", "")
  219. mtem[feed] = struct{}{}
  220. // fmt.Println(feed)
  221. stem = append(stem, feed)
  222. }
  223. for i := 0; i < len(queryList); i++ { // 获取所有饲料种类
  224. // if _, ok := mtem[queryList[i]["fname"]]; ok {
  225. // continue
  226. // }
  227. // stem = append(stem, queryList[i]["fname"].(string))
  228. // mtem[queryList[i]["fname"]] = struct{}{}
  229. feedNames = append(feedNames, queryList[i]["fname"].(string))
  230. }
  231. sort.Strings(feedNames)
  232. for _, feed := range feedNames {
  233. if _, ok := mtem[feed]; ok {
  234. continue
  235. }
  236. // fmt.Println(feed)
  237. stem = append(stem, feed)
  238. mtem[feed] = struct{}{}
  239. }
  240. stemEnd := []string{}
  241. if sqlnamestr == "downloadPlanSFJD" {
  242. bb := stem[len(stem)-flleightint : len(stem) : len(stem)]
  243. //aa := stem[0 : len(stem)-flleightint : len(stem)]
  244. stemEnd = append(stemEnd, bb...)
  245. stemEnd = append(stemEnd, feednamesort...)
  246. //fmt.Println(stemEnd)
  247. } else {
  248. stemEnd = stem
  249. }
  250. //logging.Info("导出数据 ",stemEnd )
  251. for _, va := range stemEnd {
  252. mapc3["label"] = va
  253. mapc3["prop"] = va
  254. data1 = append(data1, mapc3)
  255. mapc3 = make(map[string]interface{})
  256. }
  257. if queryList[0]["sumlweight"] != nil {
  258. mapc3["label"] = "合计"
  259. mapc3["prop"] = "sumlweight"
  260. }
  261. data1 = append(data1, mapc3)
  262. mapc3 = make(map[string]interface{})
  263. var tem interface{}
  264. mapc2 := make(map[string]interface{})
  265. for i := 0; i < len(queryList); i++ { // 获取所有饲料种类
  266. if i == 0 {
  267. tem = queryList[i]["projname"]
  268. mapc2 = queryList[i]
  269. if mapc2["sumlweight"] != nil {
  270. var sumlweight float64
  271. sumlweight, _ = strconv.ParseFloat(mapc2["sumlweight"].(string), 64)
  272. mapc2["sumlweight"] = sumlweight
  273. }
  274. for key := range mtem {
  275. mapc2[xorm.String(key)] = 0
  276. }
  277. // var lweight float64
  278. if queryList[i]["lweight"] != nil {
  279. // var error errors.Error
  280. lweight, err := strconv.ParseFloat(queryList[i]["lweight"].(string), 64)
  281. if err == nil {
  282. mapc2[xorm.String(queryList[i]["fname"])] = lweight
  283. } else {
  284. mapc2[xorm.String(queryList[i]["fname"])] = queryList[i]["lweight"]
  285. }
  286. } else {
  287. mapc2[xorm.String(queryList[i]["fname"])] = queryList[i]["lweight"]
  288. }
  289. }
  290. if tem == queryList[i]["projname"] {
  291. // var lweight float64
  292. if queryList[i]["lweight"] != nil {
  293. lweight, err := strconv.ParseFloat(queryList[i]["lweight"].(string), 64)
  294. if err == nil {
  295. mapc2[xorm.String(queryList[i]["fname"])] = lweight
  296. } else {
  297. mapc2[xorm.String(queryList[i]["fname"])] = queryList[i]["lweight"]
  298. }
  299. } else {
  300. mapc2[xorm.String(queryList[i]["fname"])] = queryList[i]["lweight"]
  301. }
  302. } else {
  303. data2 = append(data2, mapc2)
  304. tem = queryList[i]["projname"]
  305. mapc2 = queryList[i]
  306. if mapc2["sumlweight"] != nil {
  307. var sumlweight float64
  308. sumlweight, _ = strconv.ParseFloat(mapc2["sumlweight"].(string), 64)
  309. mapc2["sumlweight"] = sumlweight
  310. }
  311. for key := range mtem {
  312. mapc2[xorm.String(key)] = 0
  313. }
  314. if queryList[i]["lweight"] != nil {
  315. lweight, err := strconv.ParseFloat(queryList[i]["lweight"].(string), 64)
  316. if err == nil {
  317. mapc2[xorm.String(queryList[i]["fname"])] = lweight
  318. } else {
  319. mapc2[xorm.String(queryList[i]["fname"])] = queryList[i]["lweight"]
  320. }
  321. } else {
  322. mapc2[xorm.String(queryList[i]["fname"])] = queryList[i]["lweight"]
  323. }
  324. }
  325. }
  326. data2 = append(data2, mapc2)
  327. chartData["data1"] = data1
  328. chartData["data2"] = data2
  329. queryData["list"] = chartData
  330. queryData["code"] = 0
  331. queryData["message"] = "ok"
  332. queryData["data"] = queryList
  333. return queryData, nil
  334. }
  335. func getAccuracyV8(queryList []map[string]interface{}) (map[string]interface{}, error) {
  336. queryData := make(map[string]interface{})
  337. chartData := make(map[string]interface{})
  338. //list := make(map[string]interface{})
  339. data := []interface{}{}
  340. for i := 0; i < len(queryList); i++ {
  341. dry, _ := strconv.ParseFloat(queryList[i]["dry"].(string), 64)
  342. Hrate, _ := strconv.ParseFloat(queryList[i]["Hrate"].(string), 64)
  343. Srate, _ := strconv.ParseFloat(queryList[i]["Srate"].(string), 64)
  344. trans35f, _ := strconv.ParseFloat(queryList[i]["trans35f"].(string), 64)
  345. jcrate, _ := strconv.ParseFloat(queryList[i]["jcrate"].(string), 64)
  346. uprice, _ := strconv.ParseFloat(queryList[i]["uprice"].(string), 64)
  347. kprice, _ := strconv.ParseFloat(queryList[i]["dry"].(string), 64)
  348. adf, _ := strconv.ParseFloat(queryList[i]["adf"].(string), 64)
  349. ca, _ := strconv.ParseFloat(queryList[i]["ca"].(string), 64)
  350. cdry, _ := strconv.ParseFloat(queryList[i]["cdry"].(string), 64)
  351. cad, _ := strconv.ParseFloat(queryList[i]["cad"].(string), 64)
  352. cndf, _ := strconv.ParseFloat(queryList[i]["cndf"].(string), 64)
  353. cp, _ := strconv.ParseFloat(queryList[i]["cp"].(string), 64)
  354. cpd, _ := strconv.ParseFloat(queryList[i]["cpd"].(string), 64)
  355. fat, _ := strconv.ParseFloat(queryList[i]["fat"].(string), 64)
  356. ndf, _ := strconv.ParseFloat(queryList[i]["ndf"].(string), 64)
  357. nm, _ := strconv.ParseFloat(queryList[i]["nm"].(string), 64)
  358. nmd, _ := strconv.ParseFloat(queryList[i]["nmd"].(string), 64)
  359. nuint, _ := strconv.ParseFloat(queryList[i]["nuint"].(string), 64)
  360. p, _ := strconv.ParseFloat(queryList[i]["p"].(string), 64)
  361. pd, _ := strconv.ParseFloat(queryList[i]["pd"].(string), 64)
  362. starch, _ := strconv.ParseFloat(queryList[i]["starch"].(string), 64)
  363. trans4f, _ := strconv.ParseFloat(queryList[i]["trans4f"].(string), 64)
  364. list := make(map[string]interface{})
  365. list["ft"] = dry
  366. list["index"] = "干物质(kg)"
  367. list["tmr"] = TransFloat(dry * Hrate)
  368. list["cyl"] = TransFloat(dry * Srate)
  369. data = append(data, list)
  370. list = make(map[string]interface{})
  371. list["ft"] = jcrate
  372. list["index"] = "粗精比(%)"
  373. list["tmr"] = TransFloat(jcrate * Hrate)
  374. list["cyl"] = TransFloat(jcrate * Srate)
  375. data = append(data, list)
  376. list = make(map[string]interface{})
  377. list["ft"] = uprice
  378. list["index"] = "日粮成本(元)"
  379. list["tmr"] = TransFloat(uprice * Hrate)
  380. list["cyl"] = TransFloat(uprice * Srate)
  381. data = append(data, list)
  382. list = make(map[string]interface{})
  383. list["ft"] = kprice
  384. list["index"] = "公斤奶成本"
  385. list["tmr"] = TransFloat(kprice * Hrate)
  386. list["cyl"] = TransFloat(kprice * Srate)
  387. data = append(data, list)
  388. list = make(map[string]interface{})
  389. list["ft"] = cdry
  390. list["index"] = "粗料中的干物质"
  391. list["tmr"] = TransFloat(cdry * Hrate)
  392. list["cyl"] = TransFloat(cdry * Srate)
  393. data = append(data, list)
  394. list = make(map[string]interface{})
  395. list["ft"] = nm
  396. list["index"] = " 产奶净能(MJ)"
  397. list["tmr"] = TransFloat(nm * Hrate)
  398. list["cyl"] = TransFloat(nm * Srate)
  399. data = append(data, list)
  400. list = make(map[string]interface{})
  401. list["ft"] = nuint
  402. list["index"] = "奶牛能量单位(NND)"
  403. list["tmr"] = TransFloat(nuint * Hrate)
  404. list["cyl"] = TransFloat(nuint * Srate)
  405. data = append(data, list)
  406. list = make(map[string]interface{})
  407. list["ft"] = cp
  408. list["index"] = "粗蛋白(g)"
  409. list["tmr"] = TransFloat(cp * Hrate)
  410. list["cyl"] = TransFloat(cp * Srate)
  411. data = append(data, list)
  412. list = make(map[string]interface{})
  413. list["ft"] = cpd
  414. list["index"] = "粗蛋白(%DM)"
  415. list["tmr"] = TransFloat(cpd * Hrate)
  416. list["cyl"] = TransFloat(cpd * Srate)
  417. data = append(data, list)
  418. list = make(map[string]interface{})
  419. list["ft"] = ca
  420. list["index"] = "钙(g)"
  421. list["tmr"] = TransFloat(ca * Hrate)
  422. list["cyl"] = TransFloat(ca * Srate)
  423. data = append(data, list)
  424. list = make(map[string]interface{})
  425. list["ft"] = p
  426. list["index"] = "磷(g)"
  427. list["tmr"] = TransFloat(p * Hrate)
  428. list["cyl"] = TransFloat(p * Srate)
  429. data = append(data, list)
  430. list = make(map[string]interface{})
  431. list["ft"] = nmd
  432. list["index"] = "产奶净能(Mcal/DM)"
  433. list["tmr"] = TransFloat(nmd * Hrate)
  434. list["cyl"] = TransFloat(nmd * Srate)
  435. data = append(data, list)
  436. list = make(map[string]interface{})
  437. list["ft"] = fat
  438. list["index"] = "脂肪"
  439. list["tmr"] = TransFloat(fat * Hrate)
  440. list["cyl"] = TransFloat(fat * Srate)
  441. data = append(data, list)
  442. list = make(map[string]interface{})
  443. list["ft"] = starch
  444. list["index"] = "淀粉"
  445. list["tmr"] = TransFloat(starch * Hrate)
  446. list["cyl"] = TransFloat(starch * Srate)
  447. data = append(data, list)
  448. list = make(map[string]interface{})
  449. list["ft"] = ndf
  450. list["index"] = "NDF(%DM)"
  451. list["tmr"] = TransFloat(ndf * Hrate)
  452. list["cyl"] = TransFloat(ndf * Srate)
  453. data = append(data, list)
  454. list = make(map[string]interface{})
  455. list["ft"] = cndf
  456. list["index"] = "粗料中的NDF(%DM)"
  457. list["tmr"] = TransFloat(cndf * Hrate)
  458. list["cyl"] = TransFloat(cndf * Srate)
  459. data = append(data, list)
  460. list = make(map[string]interface{})
  461. list["ft"] = adf
  462. list["index"] = " ADF(%DM)"
  463. list["tmr"] = TransFloat(adf * Hrate)
  464. list["cyl"] = TransFloat(adf * Srate)
  465. data = append(data, list)
  466. list = make(map[string]interface{})
  467. list["ft"] = cad
  468. list["index"] = "钙(%DM)"
  469. list["tmr"] = TransFloat(cad * Hrate)
  470. list["cyl"] = TransFloat(cad * Srate)
  471. data = append(data, list)
  472. list = make(map[string]interface{})
  473. list["ft"] = pd
  474. list["index"] = " 磷(%DM)"
  475. list["tmr"] = TransFloat(pd * Hrate)
  476. list["cyl"] = TransFloat(pd * Srate)
  477. data = append(data, list)
  478. list = make(map[string]interface{})
  479. list["ft"] = trans35f
  480. list["index"] = "(3.5)FCR(kg/DM)"
  481. list["tmr"] = TransFloat(trans35f * Hrate)
  482. list["cyl"] = TransFloat(trans35f * Srate)
  483. data = append(data, list)
  484. list = make(map[string]interface{})
  485. list["ft"] = trans4f
  486. list["index"] = "(4.0)FCR(kg/DM)"
  487. list["tmr"] = TransFloat(trans4f * Hrate)
  488. list["cyl"] = TransFloat(trans4f * Srate)
  489. data = append(data, list)
  490. }
  491. chartData["data"] = data
  492. queryData["list"] = chartData
  493. queryData["code"] = 0
  494. queryData["message"] = "ok"
  495. queryData["data"] = queryList
  496. return queryData, nil
  497. }
  498. func TransFloat(flo float64) float64 {
  499. hf, _ := strconv.ParseFloat(fmt.Sprintf("%.3f", float64(flo)), 64)
  500. return hf
  501. }
  502. func getAccuracyV7(queryList []map[string]interface{}) (map[string]interface{}, error) {
  503. queryData := make(map[string]interface{})
  504. chartData := make(map[string]interface{})
  505. //list := make(map[string]interface{})
  506. data := []interface{}{}
  507. for i := 0; i < len(queryList); i++ {
  508. dry, _ := strconv.ParseFloat(queryList[i]["dry"].(string), 64)
  509. Hrate, _ := strconv.ParseFloat(queryList[i]["Hrate"].(string), 64)
  510. Srate, _ := strconv.ParseFloat(queryList[i]["Srate"].(string), 64)
  511. trans35f, _ := strconv.ParseFloat(queryList[i]["trans35f"].(string), 64)
  512. jcrate, _ := strconv.ParseFloat(queryList[i]["jcrate"].(string), 64)
  513. uprice, _ := strconv.ParseFloat(queryList[i]["uprice"].(string), 64)
  514. kprice, _ := strconv.ParseFloat(queryList[i]["dry"].(string), 64)
  515. list := make(map[string]interface{})
  516. list["tname"] = queryList[i]["tname"]
  517. list["ftid"] = queryList[i]["ftid"]
  518. list["ft"] = dry
  519. list["index"] = "干物质(kg)"
  520. list["tmr"] = TransFloat(dry * Hrate)
  521. list["cyl"] = TransFloat(dry * Srate)
  522. data = append(data, list)
  523. list = make(map[string]interface{})
  524. list["tname"] = queryList[i]["tname"]
  525. list["ftid"] = queryList[i]["ftid"]
  526. list["ft"] = trans35f
  527. list["index"] = "(3.5)FCR(kg/DM)"
  528. list["tmr"] = TransFloat(trans35f * Hrate)
  529. list["cyl"] = TransFloat(trans35f * Srate)
  530. data = append(data, list)
  531. list = make(map[string]interface{})
  532. list["tname"] = queryList[i]["tname"]
  533. list["ftid"] = queryList[i]["ftid"]
  534. list["ft"] = jcrate
  535. list["index"] = "粗精比(%)"
  536. list["tmr"] = TransFloat(jcrate * Hrate)
  537. list["cyl"] = TransFloat(jcrate * Srate)
  538. data = append(data, list)
  539. list = make(map[string]interface{})
  540. list["tname"] = queryList[i]["tname"]
  541. list["ftid"] = queryList[i]["ftid"]
  542. list["ft"] = uprice
  543. list["index"] = "日粮成本(元)"
  544. list["tmr"] = TransFloat(uprice * Hrate)
  545. list["cyl"] = TransFloat(uprice * Srate)
  546. data = append(data, list)
  547. list = make(map[string]interface{})
  548. list["tname"] = queryList[i]["tname"]
  549. list["ftid"] = queryList[i]["ftid"]
  550. list["ft"] = kprice
  551. list["index"] = "公斤奶成本"
  552. list["tmr"] = TransFloat(kprice * Hrate)
  553. list["cyl"] = TransFloat(kprice * Srate)
  554. data = append(data, list)
  555. }
  556. chartData["data"] = data
  557. queryData["list"] = chartData
  558. queryData["code"] = 0
  559. queryData["message"] = "ok"
  560. queryData["data"] = queryList
  561. return queryData, nil
  562. }
  563. func getAccuracyV6(queryList []map[string]interface{}) (map[string]interface{}, error) {
  564. queryData := make(map[string]interface{})
  565. chartData := make(map[string]interface{})
  566. data := []interface{}{}
  567. data1 := []interface{}{}
  568. data2 := []interface{}{}
  569. data3 := []interface{}{}
  570. data4 := []interface{}{}
  571. for i := 0; i < len(queryList); i++ {
  572. data = append(data, queryList[i]["牧场"])
  573. data1 = append(data1, queryList[i]["field1"])
  574. data2 = append(data2, queryList[i]["field2"])
  575. data3 = append(data3, queryList[i]["field3"])
  576. data4 = append(data4, queryList[i]["field4"])
  577. }
  578. chartData["data1"] = data
  579. chartData["data2"] = data1
  580. chartData["data3"] = data2
  581. chartData["data4"] = data3
  582. chartData["data5"] = data4
  583. queryData["list"] = chartData
  584. queryData["code"] = 0
  585. queryData["message"] = "ok"
  586. queryData["data"] = queryList
  587. return queryData, nil
  588. }
  589. func getAccuracyV5(queryList []map[string]interface{}) (map[string]interface{}, error) {
  590. queryData := make(map[string]interface{})
  591. chartData := make(map[string]interface{})
  592. datamap1 := make(map[string]interface{})
  593. datamap2 := make(map[string]interface{})
  594. temsmap := make(map[interface{}]interface{})
  595. mapc2 := make(map[interface{}]interface{})
  596. data3 := []interface{}{}
  597. datamap2child := make(map[string]interface{})
  598. data2 := []interface{}{}
  599. data1 := []interface{}{}
  600. var dtem interface{}
  601. var temstr interface{}
  602. var typestr interface{}
  603. count2 := 0
  604. a := 0
  605. for i := 0; i < len(queryList); i++ {
  606. if i == 0 {
  607. temstr = queryList[i]["fname"]
  608. typestr = queryList[i]["typestr"]
  609. }
  610. if temstr == queryList[i]["fname"] {
  611. temsmap[queryList[i]["feedname"]] = 1
  612. }
  613. if _, ok := mapc2[queryList[i]["feedname"]]; !ok {
  614. mapc2[queryList[i]["feedname"]] = count2
  615. mapc2[count2] = queryList[i]["feedname"]
  616. count2++
  617. }
  618. }
  619. //for i := 0; i<count2 ; i++ {
  620. // reslist := make([]map[string]interface{},1)
  621. // res := make(map[string]interface{})
  622. // res["fname"] = "分界线"
  623. // res["feedname"] = mapc2[i]
  624. // res["饲料名称"] = mapc2[i]
  625. // reslist[0] = res
  626. // queryList = append(reslist,queryList...)
  627. //}
  628. for i := 0; i < count2; i++ { // 将所有饲料种类新增为第一行 测试
  629. if _, ok := temsmap[mapc2[i]]; !ok {
  630. reslist := make([]map[string]interface{}, 1)
  631. res := make(map[string]interface{})
  632. res["fname"] = temstr
  633. res["feedname"] = mapc2[i]
  634. res["饲料名称"] = mapc2[i]
  635. res["typestr"] = typestr
  636. reslist[0] = res
  637. queryList = append(reslist, queryList...)
  638. }
  639. }
  640. for i := 0; i < len(queryList); i++ {
  641. a = mapc2[queryList[i]["feedname"]].(int) * 2
  642. if i == 0 {
  643. datamap2["label"] = "饲料名称"
  644. switch queryList[i]["typestr"].(type) {
  645. case string:
  646. datamap2child["label"] = queryList[i]["typestr"].(string) + "/饲料参数"
  647. default:
  648. datamap2child["label"] = "/饲料参数"
  649. }
  650. datamap2child["prop"] = "A"
  651. data3 = append(data3, datamap2child)
  652. datamap2["children"] = data3
  653. data2 = append(data2, datamap2)
  654. data3 = []interface{}{}
  655. datamap2child = make(map[string]interface{})
  656. datamap2 = make(map[string]interface{})
  657. dtem = queryList[i]["fname"]
  658. }
  659. if dtem != queryList[i]["fname"] && i != 0 {
  660. data1 = append(data1, datamap1)
  661. dtem = queryList[i]["fname"]
  662. datamap1 = make(map[string]interface{})
  663. }
  664. if queryList[i]["fname"] == temstr {
  665. datamap2["label"] = queryList[i]["feedname"]
  666. datamap2child["label"] = "理论"
  667. datamap2child["prop"] = "a" + strconv.Itoa(a)
  668. data3 = append(data3, datamap2child)
  669. datamap2child = make(map[string]interface{})
  670. datamap2child["label"] = "实际"
  671. datamap2child["prop"] = "a" + strconv.Itoa(a+1)
  672. data3 = append(data3, datamap2child)
  673. datamap2child = make(map[string]interface{})
  674. datamap2["children"] = data3
  675. data2 = append(data2, datamap2)
  676. data3 = []interface{}{}
  677. datamap2 = make(map[string]interface{})
  678. datamap2child = make(map[string]interface{})
  679. }
  680. datamap1["A"] = queryList[i]["fname"]
  681. datamap1["a"+strconv.Itoa(a)] = queryList[i]["lweight"]
  682. datamap1["a"+strconv.Itoa(a+1)] = queryList[i]["actualweightminus"]
  683. datamap2["label"] = queryList[i]["饲料名称"]
  684. a = a + 2
  685. }
  686. data1 = append(data1, datamap1)
  687. chartData["data1"] = data1
  688. chartData["data2"] = data2
  689. queryData["list"] = chartData
  690. queryData["code"] = 0
  691. queryData["message"] = "ok"
  692. queryData["data"] = queryList
  693. return queryData, nil
  694. }
  695. func getAccuracyV4(queryList []map[string]interface{}, queryListSum []map[string]interface{}, checked string, feednamesort3 []string, typea int) (map[string]interface{}, error) {
  696. queryData := make(map[string]interface{})
  697. chartData := make(map[string]interface{})
  698. datamap1 := make(map[string]interface{})
  699. datamap2 := make(map[string]interface{})
  700. temsmap := make(map[interface{}]interface{})
  701. mapc2 := make(map[interface{}]interface{})
  702. mapc3 := make(map[interface{}]interface{})
  703. data3 := []interface{}{}
  704. datamap2child := make(map[string]interface{})
  705. data2 := []interface{}{}
  706. data1 := []interface{}{}
  707. a := 0
  708. //ss := 0
  709. var dtem interface{}
  710. count2 := 0
  711. var tem interface{}
  712. var temstr interface{}
  713. var typestr interface{}
  714. //var sort interface{}
  715. for i := 0; i < len(queryList); i++ { // 获取所有饲料种类
  716. if i == 0 {
  717. temstr = queryList[i]["fname"]
  718. typestr = queryList[i]["typestr"]
  719. //sort = queryList[i]["sort"]
  720. }
  721. if temstr == queryList[i]["fname"] {
  722. temsmap[queryList[i]["feedname"]] = 1
  723. }
  724. //if i == len(queryList)-1{
  725. // temstr = "合计"
  726. // typestr = queryList[i]["typestr"]
  727. //}
  728. if _, ok := mapc2[queryList[i]["feedname"]]; !ok {
  729. mapc2[queryList[i]["feedname"]] = count2 // 编号
  730. mapc2[count2] = queryList[i]["feedname"]
  731. count2++
  732. }
  733. }
  734. for i := 0; i < count2; i++ { // 将所有饲料种类新增为第一行 测试
  735. if _, ok := temsmap[mapc2[i]]; !ok {
  736. reslist := make([]map[string]interface{}, 1)
  737. res := make(map[string]interface{})
  738. res["fname"] = temstr
  739. res["feedname"] = mapc2[i]
  740. res["饲料名称"] = mapc2[i]
  741. res["typestr"] = typestr
  742. reslist[0] = res
  743. queryList = append(reslist, queryList...)
  744. }
  745. }
  746. //for i := 0; i<count2 ; i++ {
  747. // reslist := make([]map[string]interface{},1)
  748. // res := make(map[string]interface{})
  749. // res["fname"] = "分界线"
  750. // res["feedname"] = mapc2[i]
  751. // res["饲料名称"] = mapc2[i]
  752. // res["typestr"] =typestr
  753. // reslist[0] = res
  754. // queryList = append(reslist,queryList...)
  755. //}
  756. for i := 0; i < len(queryList); i++ {
  757. if i == 0 {
  758. tem = queryList[i]["fname"]
  759. }
  760. if queryList[i]["fname"] == tem {
  761. mapc3[queryList[i]["feedname"]] = i
  762. }
  763. }
  764. for i := 0; i < len(queryList); i++ {
  765. a = mapc2[queryList[i]["feedname"]].(int) * 4
  766. if i == 0 {
  767. datamap2["label"] = "饲料名称"
  768. switch queryList[i]["typestr"].(type) {
  769. case string:
  770. // datamap2child["label"] = queryList[i]["typestr"].(string) + "/饲料参数"
  771. datamap2child["label"] = queryList[i]["typestr"].(string)
  772. default:
  773. datamap2child["label"] = "/饲料参数"
  774. }
  775. datamap2child["prop"] = "A"
  776. data3 = append(data3, datamap2child)
  777. datamap2["children"] = data3
  778. data2 = append(data2, datamap2)
  779. data3 = []interface{}{}
  780. datamap2child = make(map[string]interface{})
  781. datamap2 = make(map[string]interface{})
  782. dtem = queryList[i]["fname"]
  783. }
  784. if dtem != queryList[i]["fname"] && i != 0 {
  785. data1 = append(data1, datamap1)
  786. dtem = queryList[i]["fname"]
  787. datamap1 = make(map[string]interface{})
  788. }
  789. if queryList[i]["fname"] == temstr {
  790. datamap2["label"] = queryList[i]["feedname"]
  791. if typea == 0 || typea == 1 {
  792. datamap2child["label"] = "理论"
  793. datamap2child["prop"] = "a" + strconv.Itoa(a)
  794. data3 = append(data3, datamap2child)
  795. datamap2child = make(map[string]interface{})
  796. }
  797. if typea == 0 || typea == 2 {
  798. datamap2child["label"] = "实际"
  799. datamap2child["prop"] = "a" + strconv.Itoa(a+1)
  800. data3 = append(data3, datamap2child)
  801. datamap2child = make(map[string]interface{})
  802. }
  803. if checked == "1" {
  804. datamap2child["label"] = "误差值"
  805. datamap2child["prop"] = "a" + strconv.Itoa(a+2)
  806. data3 = append(data3, datamap2child)
  807. datamap2child = make(map[string]interface{})
  808. datamap2child["label"] = "误差率"
  809. datamap2child["prop"] = "a" + strconv.Itoa(a+3)
  810. data3 = append(data3, datamap2child)
  811. datamap2child = make(map[string]interface{})
  812. }
  813. // datamap2 = make(map[string]interface{})
  814. if i != len(queryList)-1 {
  815. datamap2["children"] = data3
  816. data2 = append(data2, datamap2)
  817. datamap2 = make(map[string]interface{})
  818. data3 = []interface{}{}
  819. }
  820. }
  821. datamap1["A"] = queryList[i]["fname"]
  822. if queryList[i]["lweight"] != nil {
  823. var lweight float64
  824. lweight, _ = strconv.ParseFloat(queryList[i]["lweight"].(string), 64)
  825. datamap1["a"+strconv.Itoa(a)] = lweight
  826. } else {
  827. datamap1["a"+strconv.Itoa(a)] = queryList[i]["lweight"]
  828. }
  829. if queryList[i]["actualweightminus"] != nil {
  830. var actualweightminus float64
  831. actualweightminus, _ = strconv.ParseFloat(queryList[i]["actualweightminus"].(string), 64)
  832. datamap1["a"+strconv.Itoa(a+1)] = actualweightminus
  833. } else {
  834. datamap1["a"+strconv.Itoa(a+1)] = queryList[i]["actualweightminus"]
  835. }
  836. if checked == "1" {
  837. datamap1["a"+strconv.Itoa(a+2)] = queryList[i]["diff"]
  838. datamap1["a"+strconv.Itoa(a+3)] = queryList[i]["diffrate"]
  839. }
  840. datamap2["label"] = queryList[i]["饲料名称"]
  841. for z := 0; z < len(queryListSum); z++ {
  842. if queryListSum[z]["fname"] == queryList[i]["fname"] {
  843. if queryListSum[z]["lweight"] != nil {
  844. var lweight float64
  845. lweight, _ = strconv.ParseFloat(queryListSum[z]["lweight"].(string), 64)
  846. datamap1["B"] = lweight
  847. } else {
  848. datamap1["B"] = queryListSum[z]["lweight"]
  849. }
  850. if queryListSum[z]["actualweightminus"] != nil {
  851. var actualweightminus float64
  852. actualweightminus, _ = strconv.ParseFloat(queryListSum[z]["actualweightminus"].(string), 64)
  853. datamap1["C"] = actualweightminus
  854. } else {
  855. datamap1["B"] = queryListSum[z]["actualweightminus"]
  856. }
  857. }
  858. }
  859. if queryList[i]["fname"] == "合计" {
  860. var lweightSum, actualweightminusSum float64
  861. for z := 0; z < len(queryListSum); z++ {
  862. if queryListSum[z]["lweight"] != nil {
  863. var lweight float64
  864. lweight, _ = strconv.ParseFloat(queryListSum[z]["lweight"].(string), 64)
  865. lweightSum += lweight
  866. }
  867. if queryListSum[z]["actualweightminus"] != nil {
  868. var actualweightminus float64
  869. actualweightminus, _ = strconv.ParseFloat(queryListSum[z]["actualweightminus"].(string), 64)
  870. actualweightminusSum += actualweightminus
  871. }
  872. datamap1["B"] = lweightSum
  873. datamap1["C"] = actualweightminusSum
  874. }
  875. }
  876. if i == len(queryList)-1 {
  877. datamap2["label"] = "合计"
  878. if typea == 0 || typea == 1 {
  879. datamap2child = make(map[string]interface{})
  880. datamap2child["label"] = "理论"
  881. datamap2child["prop"] = "B"
  882. data3 = append(data3, datamap2child)
  883. }
  884. if typea == 0 || typea == 2 {
  885. datamap2child = make(map[string]interface{})
  886. datamap2child["label"] = "实际"
  887. datamap2child["prop"] = "C"
  888. data3 = append(data3, datamap2child)
  889. }
  890. // ###########################
  891. datamap2["children"] = data3
  892. data2 = append(data2, datamap2)
  893. datamap2 = make(map[string]interface{})
  894. data3 = []interface{}{}
  895. }
  896. }
  897. //var sortSum []string
  898. //for z := 0; z < len(data2); z++ {
  899. // ss := data2[z].(map[string]interface{})
  900. // bb := ss["label"].(string)
  901. // if bb != "合计" {
  902. // sortSum = append(sortSum, bb)
  903. // }
  904. //}
  905. //sort.Strings(sortSum)
  906. //fmt.Println(sortSum)
  907. theEndSort := []interface{}{}
  908. for ii := 0; ii < len(data2); ii++ {
  909. ss := data2[ii].(map[string]interface{})
  910. bb := ss["label"].(string)
  911. if "饲料名称" == bb {
  912. theEndSort = append(theEndSort, data2[ii])
  913. }
  914. }
  915. for _, v := range feednamesort3 {
  916. for ii := 0; ii < len(data2); ii++ {
  917. ss := data2[ii].(map[string]interface{})
  918. bb := ss["label"].(string)
  919. // fmt.Println(bb)
  920. if v == bb && "饲料名称" != bb {
  921. theEndSort = append(theEndSort, data2[ii])
  922. }
  923. }
  924. }
  925. for ii := 0; ii < len(data2); ii++ {
  926. ss := data2[ii].(map[string]interface{})
  927. bb := ss["label"].(string)
  928. if "合计" == bb {
  929. theEndSort = append(theEndSort, data2[ii])
  930. }
  931. }
  932. data1 = append(data1, datamap1)
  933. chartData["data1"] = data1
  934. chartData["data2"] = theEndSort
  935. queryData["list"] = chartData
  936. queryData["code"] = 0
  937. queryData["message"] = "ok"
  938. queryData["data"] = queryList
  939. return queryData, nil
  940. }
  941. func getAccuracyV3(queryList []map[string]interface{}) (map[string]interface{}, error) {
  942. queryData := make(map[string]interface{})
  943. chartData := make(map[string]interface{})
  944. data := []interface{}{}
  945. data1 := []interface{}{}
  946. data2 := []interface{}{}
  947. data3 := []interface{}{}
  948. data4 := []interface{}{}
  949. //
  950. t1 := make(map[interface{}]string, 0)
  951. for i := 0; i < len(queryList); i++ {
  952. data = append(data, queryList[i]["mtime"])
  953. data1 = append(data1, queryList[i]["lweight"])
  954. data2 = append(data2, queryList[i]["weight"])
  955. //data3 = append(data3, queryList[i]["field3"])
  956. //data4 = append(data4, queryList[i]["field4"])
  957. if _, ok := t1[queryList[i]["id"]]; !ok {
  958. datatem := []interface{}{}
  959. datatem = append(datatem, queryList[i]["startstime"], queryList[i]["lastactualweight"])
  960. data3 = append(data3, datatem)
  961. datatem2 := []interface{}{}
  962. datatem2 = append(datatem2, queryList[i]["intime"], queryList[i]["actualweight"])
  963. data4 = append(data4, datatem2)
  964. //datatem = []interface{}{}
  965. }
  966. t1[queryList[i]["id"]] = "1"
  967. }
  968. //
  969. chartData["data1"] = data
  970. chartData["data2"] = data1
  971. chartData["data3"] = data2
  972. chartData["data4"] = data3
  973. chartData["data5"] = data4
  974. queryData["list"] = chartData
  975. queryData["code"] = 0
  976. queryData["message"] = "ok"
  977. queryData["data"] = queryList
  978. return queryData, nil
  979. }
  980. func getAccuracyV2(queryList []map[string]interface{}) (map[string]interface{}, error) {
  981. queryData := make(map[string]interface{})
  982. chartData := make(map[string]interface{})
  983. data := []interface{}{}
  984. data1 := []interface{}{}
  985. data2 := []interface{}{}
  986. data3 := []interface{}{}
  987. data4 := []interface{}{}
  988. for i := 0; i < len(queryList); i++ {
  989. data = append(data, queryList[i]["日期"])
  990. data1 = append(data1, queryList[i]["field1"])
  991. data2 = append(data2, queryList[i]["field2"])
  992. data3 = append(data3, queryList[i]["field3"])
  993. data4 = append(data4, queryList[i]["field4"])
  994. }
  995. chartData["data1"] = data
  996. chartData["data2"] = data1
  997. chartData["data3"] = data2
  998. chartData["data4"] = data3
  999. chartData["data5"] = data4
  1000. queryData["list"] = chartData
  1001. queryData["code"] = 0
  1002. queryData["message"] = "ok"
  1003. queryData["data"] = queryList
  1004. return queryData, nil
  1005. }
  1006. func getAccuracy(queryList []map[string]interface{}, layout string) (map[string]interface{}, error) {
  1007. queryData := make(map[string]interface{})
  1008. chartData := make(map[string]interface{})
  1009. t1 := make(map[interface{}]interface{}, 0)
  1010. t2 := make(map[interface{}]interface{}, 0)
  1011. data := make(map[string][]interface{}, 0)
  1012. t := make([]map[string][]interface{}, 0)
  1013. e1 := []interface{}{}
  1014. e2 := []string{}
  1015. for _, value := range queryList {
  1016. if _, ok := t1[value["名称"]]; !ok {
  1017. e1 = append(e1, value["名称"])
  1018. }
  1019. if _, ok := t2[value["日期"]]; !ok {
  1020. switch value["日期"].(type) {
  1021. case string:
  1022. e2 = append(e2, value["日期"].(string))
  1023. }
  1024. }
  1025. t1[value["名称"]] = value["名称"]
  1026. t2[value["日期"]] = value["日期"]
  1027. }
  1028. sort.Strings(e2)
  1029. var b interface{}
  1030. a := 0
  1031. for i := 0; i < len(queryList); i++ {
  1032. if i == 0 {
  1033. b = queryList[i]["名称"]
  1034. }
  1035. if b != queryList[i]["名称"] {
  1036. if a < len(e2)-1 {
  1037. eee := len(e2) - a
  1038. fmt.Println(eee)
  1039. for k := 0; k < len(e2)-a; k++ {
  1040. data["data"] = append(data["data"], "")
  1041. }
  1042. }
  1043. t = append(t, data)
  1044. data = make(map[string][]interface{}, 0)
  1045. b = queryList[i]["名称"]
  1046. a = 0
  1047. }
  1048. switch queryList[i]["日期"].(type) {
  1049. case string:
  1050. dates, _ := time.Parse(layout, queryList[i]["日期"].(string))
  1051. dates1 := ""
  1052. if a < len(e2)-1 {
  1053. dates1 = e2[a]
  1054. } else {
  1055. dates1 = e2[len(e2)-1]
  1056. }
  1057. if a < len(e2)-1 {
  1058. if e2[a] != queryList[i]["日期"].(string) {
  1059. if e2[a] < queryList[i]["日期"].(string) {
  1060. dates1 = queryList[i]["日期"].(string)
  1061. dates, _ = time.Parse(layout, e2[a])
  1062. for ; a < len(e2)-1; a++ {
  1063. if e2[a] >= queryList[i]["日期"].(string) {
  1064. break
  1065. }
  1066. }
  1067. }
  1068. if layout == "2006-01-02" {
  1069. for ; dates.Format(layout) < dates1; dates = dates.Add(24 * time.Hour) {
  1070. data["data"] = append(data["data"], "")
  1071. }
  1072. } else if layout == "2006-01" {
  1073. for ; dates.Format(layout) < dates1; dates = dates.AddDate(0, 1, 0) {
  1074. data["data"] = append(data["data"], "")
  1075. }
  1076. }
  1077. }
  1078. }
  1079. }
  1080. data["data"] = append(data["data"], queryList[i]["准确率"])
  1081. a++
  1082. }
  1083. if a < len(e2)-1 {
  1084. for k := 0; k < len(e2)-a; k++ {
  1085. data["data"] = append(data["data"], "")
  1086. }
  1087. }
  1088. t = append(t, data)
  1089. chartData["data1"] = e1
  1090. chartData["data2"] = e2
  1091. chartData["data3"] = t
  1092. queryData["list"] = chartData
  1093. queryData["code"] = 0
  1094. queryData["message"] = "ok"
  1095. queryData["data"] = queryList
  1096. return queryData, nil
  1097. }
  1098. //统计分析过程分析data值拆分
  1099. func GetprocessAnalysisTB(parammaps *gofasion.Fasion, tx *xorm.Session, quertDataList interface{}, queryList []map[string]interface{}) (query map[string]interface{}, err error) {
  1100. sql1, p1 := restful.GetSqlByNameDBT("getweightjson", tx)
  1101. query1 := make(map[string]interface{}, 0)
  1102. s_params1 := make([]interface{}, 0)
  1103. if sql1 != "" {
  1104. paramslist := strings.Split(p1, ",")
  1105. if len(paramslist) > 0 && p1 != "" {
  1106. for _, value := range paramslist {
  1107. s_params1 = append(s_params1, parammaps.Get(strings.Trim(value, " ")).ValueStr())
  1108. }
  1109. }
  1110. }
  1111. queryList2, err := tx.SQL(sql1, s_params1...).Query().List()
  1112. if len(queryList2) == 0 {
  1113. return query1, nil
  1114. }
  1115. if err != nil {
  1116. fmt.Println("查询配料出错")
  1117. return nil, err
  1118. }
  1119. //fmt.Printf("%T\n",queryList2[0]["weightjson"])
  1120. b, _ := json.Marshal(&quertDataList)
  1121. var m map[string]interface{}
  1122. _ = json.Unmarshal(b, &m)
  1123. msg := queryList2[0]["weightjson"].(string)
  1124. weightjson := make([]map[string]string, 0)
  1125. json.Unmarshal([]byte(msg), &weightjson)
  1126. //fmt.Println(len(weightjson))
  1127. realWandT := make([]interface{}, 0)
  1128. for i := 0; i < len(weightjson); i++ {
  1129. oneSlice := make([]interface{}, 0)
  1130. oneSlice = append(oneSlice, weightjson[i]["mt"])
  1131. oneSlice = append(oneSlice, weightjson[i]["w"])
  1132. realWandT = append(realWandT, oneSlice)
  1133. }
  1134. WTime := make([]interface{}, 0)
  1135. for z := 0; z < len(weightjson); z++ {
  1136. WTime = append(WTime, weightjson[z]["mt"])
  1137. }
  1138. data2 := make([]interface{}, 0)
  1139. for i := 0; i < len(queryList); i++ {
  1140. querySlice := make([]interface{}, 0)
  1141. querySlice = append(querySlice, queryList[i]["timedate"], queryList[i]["lweight"])
  1142. data2 = append(data2, querySlice)
  1143. }
  1144. data5 := make([]interface{}, 0)
  1145. for i := 0; i < len(queryList); i++ {
  1146. querySlice := make([]interface{}, 0)
  1147. querySlice = append(querySlice, queryList[i]["intime"], queryList[i]["actualweight"], queryList[i]["allname"], queryList[i]["fname"])
  1148. data5 = append(data5, querySlice)
  1149. }
  1150. query1["WTime"] = WTime
  1151. query1["data2"] = data2
  1152. query1["data5"] = data5
  1153. query1["realWandT"] = realWandT
  1154. return query1, nil
  1155. }
  1156. type Columns struct {
  1157. Prop string `json:"prop"`
  1158. Label string `json:"label"`
  1159. }
  1160. func getAccuracyV41(queryList []map[string]interface{}, queryListSum []map[string]interface{}, checked string, feednamesort3 []string, typea int, feednameCodes []map[string]interface{}) (map[string]interface{}, error) {
  1161. columns := make([]*Columns, 0)
  1162. columns = append(columns, &Columns{
  1163. Prop: "A",
  1164. Label: "饲料编码",
  1165. })
  1166. columns = append(columns, &Columns{
  1167. Prop: "B",
  1168. Label: "饲料名称",
  1169. })
  1170. label := "类别"
  1171. // column1 := new(Columns)
  1172. columns1 := make([]*Columns, 0)
  1173. dataList := make([]map[string]interface{}, 0)
  1174. for i := 0; i < len(queryList); i++ {
  1175. label = queryList[i]["typestr"].(string)
  1176. exist1 := false
  1177. for _, data := range dataList {
  1178. if data["B"].(string) == queryList[i]["feedname"].(string) {
  1179. exist1 = true
  1180. }
  1181. }
  1182. if !exist1 {
  1183. data1 := make(map[string]interface{}, 0)
  1184. data2 := make(map[string]interface{}, 0)
  1185. for _, v := range feednameCodes {
  1186. if v["feedname"].(string) == queryList[i]["feedname"].(string) {
  1187. data1["A"] = v["feedcode"]
  1188. data2["A"] = v["feedcode"]
  1189. break
  1190. }
  1191. }
  1192. data1["B"] = queryList[i]["feedname"]
  1193. data1["C"] = "理论"
  1194. // data1[queryList[i]["fname"].(string)] = 0
  1195. dataList = append(dataList, data1)
  1196. data2["B"] = queryList[i]["feedname"]
  1197. data2["C"] = "实际"
  1198. // data2[queryList[i]["fname"].(string)] = 0
  1199. dataList = append(dataList, data2)
  1200. }
  1201. column := new(Columns)
  1202. column.Prop = queryList[i]["fname"].(string)
  1203. column.Label = queryList[i]["fname"].(string)
  1204. exist := false
  1205. for _, c := range columns1 {
  1206. if c.Prop == queryList[i]["fname"].(string) {
  1207. exist = true
  1208. }
  1209. }
  1210. if exist {
  1211. continue
  1212. }
  1213. columns1 = append(columns1, column)
  1214. }
  1215. for _, data := range dataList {
  1216. for _, c := range columns1 {
  1217. data[c.Prop] = 0
  1218. }
  1219. }
  1220. data1 := make(map[string]interface{}, 0)
  1221. data2 := make(map[string]interface{}, 0)
  1222. data1["B"] = "合计"
  1223. data1["C"] = "理论"
  1224. data2["B"] = "合计"
  1225. data2["C"] = "实际"
  1226. for _, c := range columns1 {
  1227. if c.Prop != "合计" {
  1228. data1[c.Prop] = 0.0
  1229. data2[c.Prop] = 0.0
  1230. }
  1231. }
  1232. columns = append(columns, &Columns{
  1233. Prop: "C",
  1234. Label: label,
  1235. })
  1236. columns = append(columns, columns1...)
  1237. for _, data := range dataList {
  1238. for i := 0; i < len(queryList); i++ {
  1239. if queryList[i]["feedname"].(string) == data["B"] {
  1240. if data["C"].(string) == "理论" {
  1241. f1, _ := strconv.ParseFloat(fmt.Sprintf("%v", queryList[i]["lweight"]), 64)
  1242. data[queryList[i]["fname"].(string)] = Round(f1, 2)
  1243. } else {
  1244. if queryList[i]["actualweightminus"] == nil {
  1245. data[queryList[i]["fname"].(string)] = 0.0
  1246. } else {
  1247. f1, _ := strconv.ParseFloat(fmt.Sprintf("%v", queryList[i]["actualweightminus"]), 64)
  1248. data[queryList[i]["fname"].(string)] = Round(f1, 2)
  1249. }
  1250. }
  1251. }
  1252. }
  1253. }
  1254. for _, data := range dataList {
  1255. for _, c := range columns1 {
  1256. if c.Prop != "合计" {
  1257. if data["C"].(string) == "理论" {
  1258. f1, _ := strconv.ParseFloat(fmt.Sprintf("%v", data1[c.Prop]), 64)
  1259. f2, _ := strconv.ParseFloat(fmt.Sprintf("%v", data[c.Prop]), 64)
  1260. data1[c.Prop] = Round(f1+f2, 2)
  1261. } else {
  1262. f1, _ := strconv.ParseFloat(fmt.Sprintf("%v", data2[c.Prop]), 64)
  1263. f2, _ := strconv.ParseFloat(fmt.Sprintf("%v", data[c.Prop]), 64)
  1264. data2[c.Prop] = Round(f1+f2, 2)
  1265. }
  1266. }
  1267. }
  1268. }
  1269. dataList = append(dataList, data1)
  1270. dataList = append(dataList, data2)
  1271. respData := make(map[string]interface{})
  1272. respData["data"] = dataList
  1273. respData["columns"] = columns
  1274. return respData, nil
  1275. }
  1276. func Round(number float64, size int) float64 {
  1277. return math.Round(number*100) / 100
  1278. }