report.go 33 KB

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