report.go 29 KB

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