report.go 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197
  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. if mapc2["sumlweight"] != nil {
  256. var sumlweight float64
  257. sumlweight, _ = strconv.ParseFloat(mapc2["sumlweight"].(string), 64)
  258. mapc2["sumlweight"] = sumlweight
  259. }
  260. for key := range mtem {
  261. mapc2[xorm.String(key)] = 0
  262. }
  263. var lweight float64
  264. if queryList[i]["lweight"] != nil {
  265. lweight, _ = strconv.ParseFloat(queryList[i]["lweight"].(string), 64)
  266. }
  267. mapc2[xorm.String(queryList[i]["fname"])] = lweight
  268. }
  269. if tem == queryList[i]["projname"] {
  270. var lweight float64
  271. if queryList[i]["lweight"] != nil {
  272. lweight, _ = strconv.ParseFloat(queryList[i]["lweight"].(string), 64)
  273. }
  274. mapc2[xorm.String(queryList[i]["fname"])] = lweight
  275. } else {
  276. data2 = append(data2, mapc2)
  277. tem = queryList[i]["projname"]
  278. mapc2 = queryList[i]
  279. if mapc2["sumlweight"] != nil {
  280. var sumlweight float64
  281. sumlweight, _ = strconv.ParseFloat(mapc2["sumlweight"].(string), 64)
  282. mapc2["sumlweight"] = sumlweight
  283. }
  284. for key := range mtem {
  285. mapc2[xorm.String(key)] = 0
  286. }
  287. var lweight float64
  288. if queryList[i]["lweight"] != nil {
  289. lweight, _ = strconv.ParseFloat(queryList[i]["lweight"].(string), 64)
  290. }
  291. mapc2[xorm.String(queryList[i]["fname"])] = lweight
  292. }
  293. }
  294. data2 = append(data2, mapc2)
  295. chartData["data1"] = data1
  296. chartData["data2"] = data2
  297. queryData["list"] = chartData
  298. queryData["code"] = 0
  299. queryData["message"] = "ok"
  300. queryData["data"] = queryList
  301. return queryData, nil
  302. }
  303. func getAccuracyV8(queryList []map[string]interface{}) (map[string]interface{}, error) {
  304. queryData := make(map[string]interface{})
  305. chartData := make(map[string]interface{})
  306. //list := make(map[string]interface{})
  307. data := []interface{}{}
  308. for i := 0; i < len(queryList); i++ {
  309. dry, _ := strconv.ParseFloat(queryList[i]["dry"].(string), 64)
  310. Hrate, _ := strconv.ParseFloat(queryList[i]["Hrate"].(string), 64)
  311. Srate, _ := strconv.ParseFloat(queryList[i]["Srate"].(string), 64)
  312. trans35f, _ := strconv.ParseFloat(queryList[i]["trans35f"].(string), 64)
  313. jcrate, _ := strconv.ParseFloat(queryList[i]["jcrate"].(string), 64)
  314. uprice, _ := strconv.ParseFloat(queryList[i]["uprice"].(string), 64)
  315. kprice, _ := strconv.ParseFloat(queryList[i]["dry"].(string), 64)
  316. adf, _ := strconv.ParseFloat(queryList[i]["adf"].(string), 64)
  317. ca, _ := strconv.ParseFloat(queryList[i]["ca"].(string), 64)
  318. cdry, _ := strconv.ParseFloat(queryList[i]["cdry"].(string), 64)
  319. cad, _ := strconv.ParseFloat(queryList[i]["cad"].(string), 64)
  320. cndf, _ := strconv.ParseFloat(queryList[i]["cndf"].(string), 64)
  321. cp, _ := strconv.ParseFloat(queryList[i]["cp"].(string), 64)
  322. cpd, _ := strconv.ParseFloat(queryList[i]["cpd"].(string), 64)
  323. fat, _ := strconv.ParseFloat(queryList[i]["fat"].(string), 64)
  324. ndf, _ := strconv.ParseFloat(queryList[i]["ndf"].(string), 64)
  325. nm, _ := strconv.ParseFloat(queryList[i]["nm"].(string), 64)
  326. nmd, _ := strconv.ParseFloat(queryList[i]["nmd"].(string), 64)
  327. nuint, _ := strconv.ParseFloat(queryList[i]["nuint"].(string), 64)
  328. p, _ := strconv.ParseFloat(queryList[i]["p"].(string), 64)
  329. pd, _ := strconv.ParseFloat(queryList[i]["pd"].(string), 64)
  330. starch, _ := strconv.ParseFloat(queryList[i]["starch"].(string), 64)
  331. trans4f, _ := strconv.ParseFloat(queryList[i]["trans4f"].(string), 64)
  332. list := make(map[string]interface{})
  333. list["ft"] = dry
  334. list["index"] = "干物质(kg)"
  335. list["tmr"] = TransFloat(dry * Hrate)
  336. list["cyl"] = TransFloat(dry * Srate)
  337. data = append(data, list)
  338. list = make(map[string]interface{})
  339. list["ft"] = jcrate
  340. list["index"] = "粗精比(%)"
  341. list["tmr"] = TransFloat(jcrate * Hrate)
  342. list["cyl"] = TransFloat(jcrate * Srate)
  343. data = append(data, list)
  344. list = make(map[string]interface{})
  345. list["ft"] = uprice
  346. list["index"] = "日粮成本(元)"
  347. list["tmr"] = TransFloat(uprice * Hrate)
  348. list["cyl"] = TransFloat(uprice * Srate)
  349. data = append(data, list)
  350. list = make(map[string]interface{})
  351. list["ft"] = kprice
  352. list["index"] = "公斤奶成本"
  353. list["tmr"] = TransFloat(kprice * Hrate)
  354. list["cyl"] = TransFloat(kprice * Srate)
  355. data = append(data, list)
  356. list = make(map[string]interface{})
  357. list["ft"] = cdry
  358. list["index"] = "粗料中的干物质"
  359. list["tmr"] = TransFloat(cdry * Hrate)
  360. list["cyl"] = TransFloat(cdry * Srate)
  361. data = append(data, list)
  362. list = make(map[string]interface{})
  363. list["ft"] = nm
  364. list["index"] = " 产奶净能(MJ)"
  365. list["tmr"] = TransFloat(nm * Hrate)
  366. list["cyl"] = TransFloat(nm * Srate)
  367. data = append(data, list)
  368. list = make(map[string]interface{})
  369. list["ft"] = nuint
  370. list["index"] = "奶牛能量单位(NND)"
  371. list["tmr"] = TransFloat(nuint * Hrate)
  372. list["cyl"] = TransFloat(nuint * Srate)
  373. data = append(data, list)
  374. list = make(map[string]interface{})
  375. list["ft"] = cp
  376. list["index"] = "粗蛋白(g)"
  377. list["tmr"] = TransFloat(cp * Hrate)
  378. list["cyl"] = TransFloat(cp * Srate)
  379. data = append(data, list)
  380. list = make(map[string]interface{})
  381. list["ft"] = cpd
  382. list["index"] = "粗蛋白(%DM)"
  383. list["tmr"] = TransFloat(cpd * Hrate)
  384. list["cyl"] = TransFloat(cpd * Srate)
  385. data = append(data, list)
  386. list = make(map[string]interface{})
  387. list["ft"] = ca
  388. list["index"] = "钙(g)"
  389. list["tmr"] = TransFloat(ca * Hrate)
  390. list["cyl"] = TransFloat(ca * Srate)
  391. data = append(data, list)
  392. list = make(map[string]interface{})
  393. list["ft"] = p
  394. list["index"] = "磷(g)"
  395. list["tmr"] = TransFloat(p * Hrate)
  396. list["cyl"] = TransFloat(p * Srate)
  397. data = append(data, list)
  398. list = make(map[string]interface{})
  399. list["ft"] = nmd
  400. list["index"] = "产奶净能(Mcal/DM)"
  401. list["tmr"] = TransFloat(nmd * Hrate)
  402. list["cyl"] = TransFloat(nmd * Srate)
  403. data = append(data, list)
  404. list = make(map[string]interface{})
  405. list["ft"] = fat
  406. list["index"] = "脂肪"
  407. list["tmr"] = TransFloat(fat * Hrate)
  408. list["cyl"] = TransFloat(fat * Srate)
  409. data = append(data, list)
  410. list = make(map[string]interface{})
  411. list["ft"] = starch
  412. list["index"] = "淀粉"
  413. list["tmr"] = TransFloat(starch * Hrate)
  414. list["cyl"] = TransFloat(starch * Srate)
  415. data = append(data, list)
  416. list = make(map[string]interface{})
  417. list["ft"] = ndf
  418. list["index"] = "NDF(%DM)"
  419. list["tmr"] = TransFloat(ndf * Hrate)
  420. list["cyl"] = TransFloat(ndf * Srate)
  421. data = append(data, list)
  422. list = make(map[string]interface{})
  423. list["ft"] = cndf
  424. list["index"] = "粗料中的NDF(%DM)"
  425. list["tmr"] = TransFloat(cndf * Hrate)
  426. list["cyl"] = TransFloat(cndf * Srate)
  427. data = append(data, list)
  428. list = make(map[string]interface{})
  429. list["ft"] = adf
  430. list["index"] = " ADF(%DM)"
  431. list["tmr"] = TransFloat(adf * Hrate)
  432. list["cyl"] = TransFloat(adf * Srate)
  433. data = append(data, list)
  434. list = make(map[string]interface{})
  435. list["ft"] = cad
  436. list["index"] = "钙(%DM)"
  437. list["tmr"] = TransFloat(cad * Hrate)
  438. list["cyl"] = TransFloat(cad * Srate)
  439. data = append(data, list)
  440. list = make(map[string]interface{})
  441. list["ft"] = pd
  442. list["index"] = " 磷(%DM)"
  443. list["tmr"] = TransFloat(pd * Hrate)
  444. list["cyl"] = TransFloat(pd * Srate)
  445. data = append(data, list)
  446. list = make(map[string]interface{})
  447. list["ft"] = trans35f
  448. list["index"] = "(3.5)FCR(kg/DM)"
  449. list["tmr"] = TransFloat(trans35f * Hrate)
  450. list["cyl"] = TransFloat(trans35f * Srate)
  451. data = append(data, list)
  452. list = make(map[string]interface{})
  453. list["ft"] = trans4f
  454. list["index"] = "(4.0)FCR(kg/DM)"
  455. list["tmr"] = TransFloat(trans4f * Hrate)
  456. list["cyl"] = TransFloat(trans4f * Srate)
  457. data = append(data, list)
  458. }
  459. chartData["data"] = data
  460. queryData["list"] = chartData
  461. queryData["code"] = 0
  462. queryData["message"] = "ok"
  463. queryData["data"] = queryList
  464. return queryData, nil
  465. }
  466. func TransFloat(flo float64) float64 {
  467. hf, _ := strconv.ParseFloat(fmt.Sprintf("%.3f", float64(flo)), 64)
  468. return hf
  469. }
  470. func getAccuracyV7(queryList []map[string]interface{}) (map[string]interface{}, error) {
  471. queryData := make(map[string]interface{})
  472. chartData := make(map[string]interface{})
  473. //list := make(map[string]interface{})
  474. data := []interface{}{}
  475. for i := 0; i < len(queryList); i++ {
  476. dry, _ := strconv.ParseFloat(queryList[i]["dry"].(string), 64)
  477. Hrate, _ := strconv.ParseFloat(queryList[i]["Hrate"].(string), 64)
  478. Srate, _ := strconv.ParseFloat(queryList[i]["Srate"].(string), 64)
  479. trans35f, _ := strconv.ParseFloat(queryList[i]["trans35f"].(string), 64)
  480. jcrate, _ := strconv.ParseFloat(queryList[i]["jcrate"].(string), 64)
  481. uprice, _ := strconv.ParseFloat(queryList[i]["uprice"].(string), 64)
  482. kprice, _ := strconv.ParseFloat(queryList[i]["dry"].(string), 64)
  483. list := make(map[string]interface{})
  484. list["tname"] = queryList[i]["tname"]
  485. list["ftid"] = queryList[i]["ftid"]
  486. list["ft"] = dry
  487. list["index"] = "干物质(kg)"
  488. list["tmr"] = TransFloat(dry * Hrate)
  489. list["cyl"] = TransFloat(dry * Srate)
  490. data = append(data, list)
  491. list = make(map[string]interface{})
  492. list["tname"] = queryList[i]["tname"]
  493. list["ftid"] = queryList[i]["ftid"]
  494. list["ft"] = trans35f
  495. list["index"] = "(3.5)FCR(kg/DM)"
  496. list["tmr"] = TransFloat(trans35f * Hrate)
  497. list["cyl"] = TransFloat(trans35f * Srate)
  498. data = append(data, list)
  499. list = make(map[string]interface{})
  500. list["tname"] = queryList[i]["tname"]
  501. list["ftid"] = queryList[i]["ftid"]
  502. list["ft"] = jcrate
  503. list["index"] = "粗精比(%)"
  504. list["tmr"] = TransFloat(jcrate * Hrate)
  505. list["cyl"] = TransFloat(jcrate * Srate)
  506. data = append(data, list)
  507. list = make(map[string]interface{})
  508. list["tname"] = queryList[i]["tname"]
  509. list["ftid"] = queryList[i]["ftid"]
  510. list["ft"] = uprice
  511. list["index"] = "日粮成本(元)"
  512. list["tmr"] = TransFloat(uprice * Hrate)
  513. list["cyl"] = TransFloat(uprice * Srate)
  514. data = append(data, list)
  515. list = make(map[string]interface{})
  516. list["tname"] = queryList[i]["tname"]
  517. list["ftid"] = queryList[i]["ftid"]
  518. list["ft"] = kprice
  519. list["index"] = "公斤奶成本"
  520. list["tmr"] = TransFloat(kprice * Hrate)
  521. list["cyl"] = TransFloat(kprice * Srate)
  522. data = append(data, list)
  523. }
  524. chartData["data"] = data
  525. queryData["list"] = chartData
  526. queryData["code"] = 0
  527. queryData["message"] = "ok"
  528. queryData["data"] = queryList
  529. return queryData, nil
  530. }
  531. func getAccuracyV6(queryList []map[string]interface{}) (map[string]interface{}, error) {
  532. queryData := make(map[string]interface{})
  533. chartData := make(map[string]interface{})
  534. data := []interface{}{}
  535. data1 := []interface{}{}
  536. data2 := []interface{}{}
  537. data3 := []interface{}{}
  538. data4 := []interface{}{}
  539. for i := 0; i < len(queryList); i++ {
  540. data = append(data, queryList[i]["牧场"])
  541. data1 = append(data1, queryList[i]["field1"])
  542. data2 = append(data2, queryList[i]["field2"])
  543. data3 = append(data3, queryList[i]["field3"])
  544. data4 = append(data4, queryList[i]["field4"])
  545. }
  546. chartData["data1"] = data
  547. chartData["data2"] = data1
  548. chartData["data3"] = data2
  549. chartData["data4"] = data3
  550. chartData["data5"] = data4
  551. queryData["list"] = chartData
  552. queryData["code"] = 0
  553. queryData["message"] = "ok"
  554. queryData["data"] = queryList
  555. return queryData, nil
  556. }
  557. func getAccuracyV5(queryList []map[string]interface{}) (map[string]interface{}, error) {
  558. queryData := make(map[string]interface{})
  559. chartData := make(map[string]interface{})
  560. datamap1 := make(map[string]interface{})
  561. datamap2 := make(map[string]interface{})
  562. temsmap := make(map[interface{}]interface{})
  563. mapc2 := make(map[interface{}]interface{})
  564. data3 := []interface{}{}
  565. datamap2child := make(map[string]interface{})
  566. data2 := []interface{}{}
  567. data1 := []interface{}{}
  568. var dtem interface{}
  569. var temstr interface{}
  570. var typestr interface{}
  571. count2 := 0
  572. a := 0
  573. for i := 0; i < len(queryList); i++ {
  574. if i == 0 {
  575. temstr = queryList[i]["fname"]
  576. typestr = queryList[i]["typestr"]
  577. }
  578. if temstr == queryList[i]["fname"] {
  579. temsmap[queryList[i]["feedname"]] = 1
  580. }
  581. if _, ok := mapc2[queryList[i]["feedname"]]; !ok {
  582. mapc2[queryList[i]["feedname"]] = count2
  583. mapc2[count2] = queryList[i]["feedname"]
  584. count2++
  585. }
  586. }
  587. //for i := 0; i<count2 ; i++ {
  588. // reslist := make([]map[string]interface{},1)
  589. // res := make(map[string]interface{})
  590. // res["fname"] = "分界线"
  591. // res["feedname"] = mapc2[i]
  592. // res["饲料名称"] = mapc2[i]
  593. // reslist[0] = res
  594. // queryList = append(reslist,queryList...)
  595. //}
  596. for i := 0; i < count2; i++ { // 将所有饲料种类新增为第一行 测试
  597. if _, ok := temsmap[mapc2[i]]; !ok {
  598. reslist := make([]map[string]interface{}, 1)
  599. res := make(map[string]interface{})
  600. res["fname"] = temstr
  601. res["feedname"] = mapc2[i]
  602. res["饲料名称"] = mapc2[i]
  603. res["typestr"] = typestr
  604. reslist[0] = res
  605. queryList = append(reslist, queryList...)
  606. }
  607. }
  608. for i := 0; i < len(queryList); i++ {
  609. a = mapc2[queryList[i]["feedname"]].(int) * 2
  610. if i == 0 {
  611. datamap2["label"] = "饲料名称"
  612. switch queryList[i]["typestr"].(type) {
  613. case string:
  614. datamap2child["label"] = queryList[i]["typestr"].(string) + "/饲料参数"
  615. default:
  616. datamap2child["label"] = "/饲料参数"
  617. }
  618. datamap2child["prop"] = "A"
  619. data3 = append(data3, datamap2child)
  620. datamap2["children"] = data3
  621. data2 = append(data2, datamap2)
  622. data3 = []interface{}{}
  623. datamap2child = make(map[string]interface{})
  624. datamap2 = make(map[string]interface{})
  625. dtem = queryList[i]["fname"]
  626. }
  627. if dtem != queryList[i]["fname"] && i != 0 {
  628. data1 = append(data1, datamap1)
  629. dtem = queryList[i]["fname"]
  630. datamap1 = make(map[string]interface{})
  631. }
  632. if queryList[i]["fname"] == temstr {
  633. datamap2["label"] = queryList[i]["feedname"]
  634. datamap2child["label"] = "理论"
  635. datamap2child["prop"] = "a" + strconv.Itoa(a)
  636. data3 = append(data3, datamap2child)
  637. datamap2child = make(map[string]interface{})
  638. datamap2child["label"] = "实际"
  639. datamap2child["prop"] = "a" + strconv.Itoa(a+1)
  640. data3 = append(data3, datamap2child)
  641. datamap2child = make(map[string]interface{})
  642. datamap2["children"] = data3
  643. data2 = append(data2, datamap2)
  644. data3 = []interface{}{}
  645. datamap2 = make(map[string]interface{})
  646. datamap2child = make(map[string]interface{})
  647. }
  648. datamap1["A"] = queryList[i]["fname"]
  649. datamap1["a"+strconv.Itoa(a)] = queryList[i]["lweight"]
  650. datamap1["a"+strconv.Itoa(a+1)] = queryList[i]["actualweightminus"]
  651. datamap2["label"] = queryList[i]["饲料名称"]
  652. a = a + 2
  653. }
  654. data1 = append(data1, datamap1)
  655. chartData["data1"] = data1
  656. chartData["data2"] = data2
  657. queryData["list"] = chartData
  658. queryData["code"] = 0
  659. queryData["message"] = "ok"
  660. queryData["data"] = queryList
  661. return queryData, nil
  662. }
  663. func getAccuracyV4(queryList []map[string]interface{}, queryListSum []map[string]interface{}, checked string, feednamesort3 []string) (map[string]interface{}, error) {
  664. queryData := make(map[string]interface{})
  665. chartData := make(map[string]interface{})
  666. datamap1 := make(map[string]interface{})
  667. datamap2 := make(map[string]interface{})
  668. temsmap := make(map[interface{}]interface{})
  669. mapc2 := make(map[interface{}]interface{})
  670. mapc3 := make(map[interface{}]interface{})
  671. data3 := []interface{}{}
  672. datamap2child := make(map[string]interface{})
  673. data2 := []interface{}{}
  674. data1 := []interface{}{}
  675. a := 0
  676. //ss := 0
  677. var dtem interface{}
  678. count2 := 0
  679. var tem interface{}
  680. var temstr interface{}
  681. var typestr interface{}
  682. //var sort interface{}
  683. for i := 0; i < len(queryList); i++ { // 获取所有饲料种类
  684. if i == 0 {
  685. temstr = queryList[i]["fname"]
  686. typestr = queryList[i]["typestr"]
  687. //sort = queryList[i]["sort"]
  688. }
  689. if temstr == queryList[i]["fname"] {
  690. temsmap[queryList[i]["feedname"]] = 1
  691. }
  692. //if i == len(queryList)-1{
  693. // temstr = "合计"
  694. // typestr = queryList[i]["typestr"]
  695. //}
  696. if _, ok := mapc2[queryList[i]["feedname"]]; !ok {
  697. mapc2[queryList[i]["feedname"]] = count2 // 编号
  698. mapc2[count2] = queryList[i]["feedname"]
  699. count2++
  700. }
  701. }
  702. for i := 0; i < count2; i++ { // 将所有饲料种类新增为第一行 测试
  703. if _, ok := temsmap[mapc2[i]]; !ok {
  704. reslist := make([]map[string]interface{}, 1)
  705. res := make(map[string]interface{})
  706. res["fname"] = temstr
  707. res["feedname"] = mapc2[i]
  708. res["饲料名称"] = mapc2[i]
  709. res["typestr"] = typestr
  710. reslist[0] = res
  711. queryList = append(reslist, queryList...)
  712. }
  713. }
  714. //for i := 0; i<count2 ; i++ {
  715. // reslist := make([]map[string]interface{},1)
  716. // res := make(map[string]interface{})
  717. // res["fname"] = "分界线"
  718. // res["feedname"] = mapc2[i]
  719. // res["饲料名称"] = mapc2[i]
  720. // res["typestr"] =typestr
  721. // reslist[0] = res
  722. // queryList = append(reslist,queryList...)
  723. //}
  724. for i := 0; i < len(queryList); i++ {
  725. if i == 0 {
  726. tem = queryList[i]["fname"]
  727. }
  728. if queryList[i]["fname"] == tem {
  729. mapc3[queryList[i]["feedname"]] = i
  730. }
  731. }
  732. for i := 0; i < len(queryList); i++ {
  733. a = mapc2[queryList[i]["feedname"]].(int) * 4
  734. if i == 0 {
  735. datamap2["label"] = "饲料名称"
  736. switch queryList[i]["typestr"].(type) {
  737. case string:
  738. // datamap2child["label"] = queryList[i]["typestr"].(string) + "/饲料参数"
  739. datamap2child["label"] = queryList[i]["typestr"].(string)
  740. default:
  741. datamap2child["label"] = "/饲料参数"
  742. }
  743. datamap2child["prop"] = "A"
  744. data3 = append(data3, datamap2child)
  745. datamap2["children"] = data3
  746. data2 = append(data2, datamap2)
  747. data3 = []interface{}{}
  748. datamap2child = make(map[string]interface{})
  749. datamap2 = make(map[string]interface{})
  750. dtem = queryList[i]["fname"]
  751. }
  752. if dtem != queryList[i]["fname"] && i != 0 {
  753. data1 = append(data1, datamap1)
  754. dtem = queryList[i]["fname"]
  755. datamap1 = make(map[string]interface{})
  756. }
  757. if queryList[i]["fname"] == temstr {
  758. datamap2["label"] = queryList[i]["feedname"]
  759. datamap2child["label"] = "理论"
  760. datamap2child["prop"] = "a" + strconv.Itoa(a)
  761. data3 = append(data3, datamap2child)
  762. datamap2child = make(map[string]interface{})
  763. datamap2child["label"] = "实际"
  764. datamap2child["prop"] = "a" + strconv.Itoa(a+1)
  765. data3 = append(data3, datamap2child)
  766. datamap2child = make(map[string]interface{})
  767. if checked == "1" {
  768. datamap2child["label"] = "误差值"
  769. datamap2child["prop"] = "a" + strconv.Itoa(a+2)
  770. data3 = append(data3, datamap2child)
  771. datamap2child = make(map[string]interface{})
  772. datamap2child["label"] = "误差率"
  773. datamap2child["prop"] = "a" + strconv.Itoa(a+3)
  774. data3 = append(data3, datamap2child)
  775. datamap2child = make(map[string]interface{})
  776. }
  777. // datamap2 = make(map[string]interface{})
  778. if i != len(queryList)-1 {
  779. datamap2["children"] = data3
  780. data2 = append(data2, datamap2)
  781. datamap2 = make(map[string]interface{})
  782. data3 = []interface{}{}
  783. }
  784. }
  785. datamap1["A"] = queryList[i]["fname"]
  786. datamap1["a"+strconv.Itoa(a)] = queryList[i]["lweight"]
  787. datamap1["a"+strconv.Itoa(a+1)] = queryList[i]["actualweightminus"]
  788. if checked == "1" {
  789. datamap1["a"+strconv.Itoa(a+2)] = queryList[i]["diff"]
  790. datamap1["a"+strconv.Itoa(a+3)] = queryList[i]["diffrate"]
  791. }
  792. datamap2["label"] = queryList[i]["饲料名称"]
  793. for z := 0; z < len(queryListSum); z++ {
  794. if queryListSum[z]["fname"] == queryList[i]["fname"] {
  795. datamap1["B"] = queryListSum[z]["lweight"]
  796. datamap1["C"] = queryListSum[z]["actualweightminus"]
  797. }
  798. }
  799. if i == len(queryList)-1 {
  800. datamap2["label"] = "合计"
  801. datamap2child = make(map[string]interface{})
  802. datamap2child["label"] = "理论"
  803. datamap2child["prop"] = "B"
  804. data3 = append(data3, datamap2child)
  805. datamap2child = make(map[string]interface{})
  806. datamap2child["label"] = "实际"
  807. datamap2child["prop"] = "C"
  808. data3 = append(data3, datamap2child)
  809. // ###########################
  810. datamap2["children"] = data3
  811. data2 = append(data2, datamap2)
  812. datamap2 = make(map[string]interface{})
  813. data3 = []interface{}{}
  814. }
  815. }
  816. //var sortSum []string
  817. //for z := 0; z < len(data2); z++ {
  818. // ss := data2[z].(map[string]interface{})
  819. // bb := ss["label"].(string)
  820. // if bb != "合计" {
  821. // sortSum = append(sortSum, bb)
  822. // }
  823. //}
  824. //sort.Strings(sortSum)
  825. //fmt.Println(sortSum)
  826. theEndSort := []interface{}{}
  827. for ii := 0; ii < len(data2); ii++ {
  828. ss := data2[ii].(map[string]interface{})
  829. bb := ss["label"].(string)
  830. if "饲料名称" == bb {
  831. theEndSort = append(theEndSort, data2[ii])
  832. }
  833. }
  834. for _, v := range feednamesort3 {
  835. for ii := 0; ii < len(data2); ii++ {
  836. ss := data2[ii].(map[string]interface{})
  837. bb := ss["label"].(string)
  838. // fmt.Println(bb)
  839. if v == bb && "饲料名称" != bb {
  840. theEndSort = append(theEndSort, data2[ii])
  841. }
  842. }
  843. }
  844. for ii := 0; ii < len(data2); ii++ {
  845. ss := data2[ii].(map[string]interface{})
  846. bb := ss["label"].(string)
  847. if "合计" == bb {
  848. theEndSort = append(theEndSort, data2[ii])
  849. }
  850. }
  851. data1 = append(data1, datamap1)
  852. chartData["data1"] = data1
  853. chartData["data2"] = theEndSort
  854. queryData["list"] = chartData
  855. queryData["code"] = 0
  856. queryData["message"] = "ok"
  857. queryData["data"] = queryList
  858. return queryData, nil
  859. }
  860. func getAccuracyV3(queryList []map[string]interface{}) (map[string]interface{}, error) {
  861. queryData := make(map[string]interface{})
  862. chartData := make(map[string]interface{})
  863. data := []interface{}{}
  864. data1 := []interface{}{}
  865. data2 := []interface{}{}
  866. data3 := []interface{}{}
  867. data4 := []interface{}{}
  868. //
  869. t1 := make(map[interface{}]string, 0)
  870. for i := 0; i < len(queryList); i++ {
  871. data = append(data, queryList[i]["mtime"])
  872. data1 = append(data1, queryList[i]["lweight"])
  873. data2 = append(data2, queryList[i]["weight"])
  874. //data3 = append(data3, queryList[i]["field3"])
  875. //data4 = append(data4, queryList[i]["field4"])
  876. if _, ok := t1[queryList[i]["id"]]; !ok {
  877. datatem := []interface{}{}
  878. datatem = append(datatem, queryList[i]["startstime"], queryList[i]["lastactualweight"])
  879. data3 = append(data3, datatem)
  880. datatem2 := []interface{}{}
  881. datatem2 = append(datatem2, queryList[i]["intime"], queryList[i]["actualweight"])
  882. data4 = append(data4, datatem2)
  883. //datatem = []interface{}{}
  884. }
  885. t1[queryList[i]["id"]] = "1"
  886. }
  887. //
  888. chartData["data1"] = data
  889. chartData["data2"] = data1
  890. chartData["data3"] = data2
  891. chartData["data4"] = data3
  892. chartData["data5"] = data4
  893. queryData["list"] = chartData
  894. queryData["code"] = 0
  895. queryData["message"] = "ok"
  896. queryData["data"] = queryList
  897. return queryData, nil
  898. }
  899. func getAccuracyV2(queryList []map[string]interface{}) (map[string]interface{}, error) {
  900. queryData := make(map[string]interface{})
  901. chartData := make(map[string]interface{})
  902. data := []interface{}{}
  903. data1 := []interface{}{}
  904. data2 := []interface{}{}
  905. data3 := []interface{}{}
  906. data4 := []interface{}{}
  907. for i := 0; i < len(queryList); i++ {
  908. data = append(data, queryList[i]["日期"])
  909. data1 = append(data1, queryList[i]["field1"])
  910. data2 = append(data2, queryList[i]["field2"])
  911. data3 = append(data3, queryList[i]["field3"])
  912. data4 = append(data4, queryList[i]["field4"])
  913. }
  914. chartData["data1"] = data
  915. chartData["data2"] = data1
  916. chartData["data3"] = data2
  917. chartData["data4"] = data3
  918. chartData["data5"] = data4
  919. queryData["list"] = chartData
  920. queryData["code"] = 0
  921. queryData["message"] = "ok"
  922. queryData["data"] = queryList
  923. return queryData, nil
  924. }
  925. func getAccuracy(queryList []map[string]interface{}) (map[string]interface{}, error) {
  926. queryData := make(map[string]interface{})
  927. chartData := make(map[string]interface{})
  928. t1 := make(map[interface{}]interface{}, 0)
  929. t2 := make(map[interface{}]interface{}, 0)
  930. data := make(map[string][]interface{}, 0)
  931. t := make([]map[string][]interface{}, 0)
  932. e1 := []interface{}{}
  933. e2 := []string{}
  934. for _, value := range queryList {
  935. if _, ok := t1[value["名称"]]; !ok {
  936. e1 = append(e1, value["名称"])
  937. }
  938. if _, ok := t2[value["日期"]]; !ok {
  939. switch value["日期"].(type) {
  940. case string:
  941. e2 = append(e2, value["日期"].(string))
  942. }
  943. }
  944. t1[value["名称"]] = value["名称"]
  945. t2[value["日期"]] = value["日期"]
  946. }
  947. sort.Strings(e2)
  948. var b interface{}
  949. a := 0
  950. for i := 0; i < len(queryList); i++ {
  951. if i == 0 {
  952. b = queryList[i]["名称"]
  953. }
  954. if b != queryList[i]["名称"] {
  955. if a < len(e2)-1 {
  956. for k := 0; k < len(e2)-a; k++ {
  957. data["data"] = append(data["data"], "")
  958. }
  959. }
  960. t = append(t, data)
  961. data = make(map[string][]interface{}, 0)
  962. b = queryList[i]["名称"]
  963. a = 0
  964. }
  965. switch queryList[i]["日期"].(type) {
  966. case string:
  967. dates, _ := time.Parse("2006-01-02", queryList[i]["日期"].(string))
  968. dates1 := ""
  969. if a < len(e2)-1 {
  970. dates1 = e2[a]
  971. } else {
  972. dates1 = e2[len(e2)-1]
  973. }
  974. if a < len(e2)-1 {
  975. if e2[a] != queryList[i]["日期"].(string) {
  976. if e2[a] < queryList[i]["日期"].(string) {
  977. dates1 = queryList[i]["日期"].(string)
  978. dates, _ = time.Parse("2006-01-02", e2[a])
  979. for ; a < len(e2)-1; a++ {
  980. if e2[a] >= queryList[i]["日期"].(string) {
  981. break
  982. }
  983. }
  984. }
  985. for ; dates.Format("2006-01-02") < dates1; dates = dates.Add(24 * time.Hour) {
  986. data["data"] = append(data["data"], "")
  987. }
  988. }
  989. }
  990. }
  991. data["data"] = append(data["data"], queryList[i]["准确率"])
  992. a++
  993. }
  994. if a < len(e2)-1 {
  995. for k := 0; k < len(e2)-a; k++ {
  996. data["data"] = append(data["data"], "")
  997. }
  998. }
  999. t = append(t, data)
  1000. chartData["data1"] = e1
  1001. chartData["data2"] = e2
  1002. chartData["data3"] = t
  1003. queryData["list"] = chartData
  1004. queryData["code"] = 0
  1005. queryData["message"] = "ok"
  1006. queryData["data"] = queryList
  1007. return queryData, nil
  1008. }
  1009. //统计分析过程分析data值拆分
  1010. func GetprocessAnalysisTB(parammaps *gofasion.Fasion, tx *xorm.Session, quertDataList interface{}, queryList []map[string]interface{}) (query map[string]interface{}, err error) {
  1011. sql1, p1 := restful.GetSqlByNameDBT("getweightjson", tx)
  1012. query1 := make(map[string]interface{}, 0)
  1013. s_params1 := make([]interface{}, 0)
  1014. if sql1 != "" {
  1015. paramslist := strings.Split(p1, ",")
  1016. if len(paramslist) > 0 && p1 != "" {
  1017. for _, value := range paramslist {
  1018. s_params1 = append(s_params1, parammaps.Get(strings.Trim(value, " ")).ValueStr())
  1019. }
  1020. }
  1021. }
  1022. queryList2, err := tx.SQL(sql1, s_params1...).Query().List()
  1023. if len(queryList2) == 0 {
  1024. return query1, nil
  1025. }
  1026. if err != nil {
  1027. fmt.Println("查询配料出错")
  1028. return nil, err
  1029. }
  1030. //fmt.Printf("%T\n",queryList2[0]["weightjson"])
  1031. b, _ := json.Marshal(&quertDataList)
  1032. var m map[string]interface{}
  1033. _ = json.Unmarshal(b, &m)
  1034. msg := queryList2[0]["weightjson"].(string)
  1035. weightjson := make([]map[string]string, 0)
  1036. json.Unmarshal([]byte(msg), &weightjson)
  1037. //fmt.Println(len(weightjson))
  1038. realWandT := make([]interface{}, 0)
  1039. for i := 0; i < len(weightjson); i++ {
  1040. oneSlice := make([]interface{}, 0)
  1041. oneSlice = append(oneSlice, weightjson[i]["mt"])
  1042. oneSlice = append(oneSlice, weightjson[i]["w"])
  1043. realWandT = append(realWandT, oneSlice)
  1044. }
  1045. WTime := make([]interface{}, 0)
  1046. for z := 0; z < len(weightjson); z++ {
  1047. WTime = append(WTime, weightjson[z]["mt"])
  1048. }
  1049. data2 := make([]interface{}, 0)
  1050. for i := 0; i < len(queryList); i++ {
  1051. querySlice := make([]interface{}, 0)
  1052. querySlice = append(querySlice, queryList[i]["timedate"], queryList[i]["lweight"])
  1053. data2 = append(data2, querySlice)
  1054. }
  1055. data5 := make([]interface{}, 0)
  1056. for i := 0; i < len(queryList); i++ {
  1057. querySlice := make([]interface{}, 0)
  1058. querySlice = append(querySlice, queryList[i]["intime"], queryList[i]["actualweight"], queryList[i]["allname"], queryList[i]["fname"])
  1059. data5 = append(data5, querySlice)
  1060. }
  1061. query1["WTime"] = WTime
  1062. query1["data2"] = data2
  1063. query1["data5"] = data5
  1064. query1["realWandT"] = realWandT
  1065. return query1, nil
  1066. }