report.go 49 KB

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