report.go 34 KB

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