GoodsOrder.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860
  1. package controllers
  2. import (
  3. "Cold_Api/Nats/NatsServer"
  4. "Cold_Api/conf"
  5. "Cold_Api/controllers/lib"
  6. "Cold_Api/models/Device"
  7. "Cold_Api/models/Function"
  8. "fmt"
  9. beego "github.com/beego/beego/v2/server/web"
  10. "github.com/signintech/gopdf"
  11. "math"
  12. "os"
  13. "strconv"
  14. "strings"
  15. "time"
  16. )
  17. // Handle
  18. type GoodsOrderController struct {
  19. beego.Controller
  20. }
  21. func (c *GoodsOrderController) GoodsOrder_List() {
  22. // 验证登录
  23. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  24. if !b_ {
  25. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  26. c.ServeJSON()
  27. return
  28. }
  29. type R_JSONS struct {
  30. //必须的大写开头
  31. Data []Function.GoodsOrderR
  32. Num int64
  33. Page int
  34. Page_size int
  35. }
  36. var r_jsons R_JSONS
  37. page, _ := c.GetInt("page")
  38. println(page)
  39. if page < 1 {
  40. page = 1
  41. }
  42. page_z, _ := c.GetInt("page_z")
  43. if page_z < 1 {
  44. page_z = conf.Page_size
  45. }
  46. T_pid := admin_r.T_pid
  47. if T_pid == 0 {
  48. T_pid, _ = strconv.Atoi(c.Ctx.Request.Header.Get("T_pid"))
  49. }
  50. Name := c.GetString("T_name")
  51. c.Data["Name"] = Name
  52. r_jsons.Data, r_jsons.Num = Function.Read_GoodsOrder_List(T_pid, page, page_z, Name)
  53. r_jsons.Page = page
  54. r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
  55. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  56. c.ServeJSON()
  57. return
  58. }
  59. func (c *GoodsOrderController) GoodsOrder_Get() {
  60. // 验证登录
  61. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  62. if !b_ {
  63. c.Ctx.Redirect(302, "Login")
  64. return
  65. }
  66. Id, _ := c.GetInt("T_id")
  67. T_pid := admin_r.T_pid
  68. if T_pid == 0 {
  69. T_pid, _ = strconv.Atoi(c.Ctx.Request.Header.Get("T_pid"))
  70. }
  71. r := Function.Read_GoodsOrder_ById(Id)
  72. if r.Id == 0 {
  73. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  74. c.ServeJSON()
  75. return
  76. }
  77. if T_pid != r.T_pid {
  78. c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
  79. c.ServeJSON()
  80. return
  81. }
  82. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Function.GoodsOrderToGoodsOrderR(r)}
  83. c.ServeJSON()
  84. return
  85. }
  86. func (c *GoodsOrderController) GoodsOrder_Add() {
  87. // 验证登录
  88. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  89. if !b_ {
  90. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  91. c.ServeJSON()
  92. return
  93. }
  94. var id int64
  95. var err error
  96. id, _ = c.GetInt64("T_id")
  97. T_orderid := c.GetString("T_orderid")
  98. T_outorderid := c.GetString("T_outorderid")
  99. T_sn := c.GetString("T_sn")
  100. T_receiving := c.GetString("T_receiving")
  101. T_time := c.GetString("T_time")
  102. T_text := c.GetString("T_text")
  103. T_time_s := strings.Split(T_time, "|")
  104. if len(T_time_s) != 2 {
  105. c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
  106. c.ServeJSON()
  107. return
  108. }
  109. T_pid := admin_r.T_pid
  110. if T_pid == 0 {
  111. T_pid, _ = strconv.Atoi(c.Ctx.Request.Header.Get("T_pid"))
  112. }
  113. T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[0], time.Local)
  114. T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[1], time.Local)
  115. var_ := Function.GoodsOrder{
  116. T_pid: T_pid,
  117. T_orderid: T_orderid,
  118. T_outorderid: T_outorderid,
  119. T_sn: T_sn,
  120. T_receiving: T_receiving,
  121. T_start_Ut: T_start_Ut_,
  122. T_end_Ut: T_end_Ut_,
  123. T_text: T_text,
  124. T_State: 1,
  125. }
  126. if id > 0 {
  127. var_.Id = int(id)
  128. is := Function.Update_TGoodsOrder(var_, "T_orderid", "T_outorderid", "T_sn", "T_receiving", "T_start_Ut", "T_end_Ut", "T_start_Ut_T", "T_end_Ut_T", "T_text")
  129. if !is {
  130. c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
  131. c.ServeJSON()
  132. return
  133. }
  134. } else {
  135. id, err = Function.Add_GoodsOrder(var_)
  136. if err != nil {
  137. c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
  138. c.ServeJSON()
  139. return
  140. }
  141. }
  142. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  143. c.ServeJSON()
  144. return
  145. }
  146. func (c *GoodsOrderController) GoodsOrder_Edit() {
  147. // 验证登录
  148. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  149. if !b_ {
  150. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  151. c.ServeJSON()
  152. return
  153. }
  154. var id int64
  155. var err error
  156. id, _ = c.GetInt64("T_id")
  157. T_orderid := c.GetString("T_orderid")
  158. T_outorderid := c.GetString("T_outorderid")
  159. T_sn := c.GetString("T_sn")
  160. T_receiving := c.GetString("T_receiving")
  161. T_time := c.GetString("T_time")
  162. T_text := c.GetString("T_text")
  163. T_time_s := strings.Split(T_time, "|")
  164. if len(T_time_s) != 2 {
  165. c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
  166. c.ServeJSON()
  167. return
  168. }
  169. T_pid := admin_r.T_pid
  170. if T_pid == 0 {
  171. T_pid, _ = strconv.Atoi(c.Ctx.Request.Header.Get("T_pid"))
  172. }
  173. println("T_time_s:", T_time_s)
  174. T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[0], time.Local)
  175. T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_time_s[1], time.Local)
  176. var_ := Function.GoodsOrder{
  177. T_pid: T_pid,
  178. T_orderid: T_orderid,
  179. T_outorderid: T_outorderid,
  180. T_sn: T_sn,
  181. T_receiving: T_receiving,
  182. T_start_Ut: T_start_Ut_,
  183. T_end_Ut: T_end_Ut_,
  184. T_text: T_text,
  185. T_State: 1,
  186. }
  187. if id > 0 {
  188. var_.Id = int(id)
  189. is := Function.Update_TGoodsOrder(var_, "T_orderid", "T_outorderid", "T_sn", "T_receiving", "T_start_Ut", "T_end_Ut", "T_start_Ut_T", "T_end_Ut_T", "T_text")
  190. if !is {
  191. c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
  192. c.ServeJSON()
  193. return
  194. }
  195. } else {
  196. id, err = Function.Add_GoodsOrder(var_)
  197. if err != nil {
  198. c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
  199. c.ServeJSON()
  200. return
  201. }
  202. }
  203. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  204. c.ServeJSON()
  205. return
  206. }
  207. func (c *GoodsOrderController) GoodsOrder_Del() {
  208. // 验证登录
  209. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  210. if !b_ {
  211. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  212. c.ServeJSON()
  213. return
  214. }
  215. Id, _ := c.GetInt("T_id")
  216. T_pid := admin_r.T_pid
  217. if T_pid == 0 {
  218. T_pid, _ = strconv.Atoi(c.Ctx.Request.Header.Get("T_pid"))
  219. }
  220. r := Function.Read_GoodsOrder_ById(Id)
  221. if r.Id == 0 {
  222. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  223. c.ServeJSON()
  224. return
  225. }
  226. if T_pid != r.T_pid {
  227. c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
  228. c.ServeJSON()
  229. return
  230. }
  231. r.T_State = 0
  232. Function.Update_TGoodsOrder(r, "T_State")
  233. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  234. c.ServeJSON()
  235. return
  236. }
  237. // 数据列表pdf
  238. func (c *GoodsOrderController) Data_PDF() {
  239. var err error
  240. // 验证登录
  241. b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  242. if !b_ {
  243. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  244. c.ServeJSON()
  245. return
  246. }
  247. Id, _ := c.GetInt("Id")
  248. if Id == 0 {
  249. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id e!"}
  250. c.ServeJSON()
  251. return
  252. }
  253. GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
  254. if GoodsOrder_r.Id == 0 {
  255. c.Data["json"] = lib.JSONS{Code: 207, Msg: "Id e!"}
  256. c.ServeJSON()
  257. return
  258. }
  259. Device_r, err := Device.Read_Device_ByT_sn(GoodsOrder_r.T_sn)
  260. if err != nil {
  261. c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_sn Err!"}
  262. c.ServeJSON()
  263. return
  264. }
  265. DeviceSensor_r := Device.Read_DeviceSensor_ALL_List_T_sn(GoodsOrder_r.T_sn)
  266. if len(DeviceSensor_r) == 0 {
  267. c.Data["json"] = lib.JSONS{Code: 202, Msg: GoodsOrder_r.T_sn + "设备没有数据!"}
  268. c.ServeJSON()
  269. return
  270. }
  271. var DeviceSensor_data []Device.DeviceData_R
  272. DeviceSensor_data, _ = Device.Read_DeviceData_By_T_snid_List(GoodsOrder_r.T_sn+","+strconv.Itoa(DeviceSensor_r[0].T_id), GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05"), GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"), 0, 9999)
  273. pdf := &gopdf.GoPdf{}
  274. pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
  275. //err = GetFont(pdf, "LiberationSerif-Regular.ttf")
  276. //if err != nil {
  277. // log.Fatalln(err)
  278. //}
  279. //err = pdf.SetFont("Ubuntu-L", "", 14)
  280. //if err != nil {
  281. // log.Fatalln(err)
  282. //}
  283. err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
  284. if err != nil {
  285. c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
  286. c.ServeJSON()
  287. return
  288. }
  289. err = pdf.SetFont("simsun", "", 24)
  290. if err != nil {
  291. c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
  292. c.ServeJSON()
  293. return
  294. }
  295. pdf.SetGrayFill(0.5)
  296. pdf.SetMargins(0, 20, 0, 20)
  297. pdf.AddPage()
  298. //use path
  299. //pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
  300. textw, _ := pdf.MeasureTextWidth(user_r.T_name)
  301. pdf.SetX((595 / 2) - (textw / 2))
  302. pdf.SetY(40)
  303. pdf.Text(user_r.T_name)
  304. // 线
  305. pdf.SetLineWidth(2)
  306. pdf.SetLineType("dashed")
  307. pdf.Line(10, 60, 585, 60)
  308. err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
  309. if err != nil {
  310. c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
  311. c.ServeJSON()
  312. return
  313. }
  314. err = pdf.SetFont("wts", "", 10)
  315. if err != nil {
  316. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  317. c.ServeJSON()
  318. return
  319. }
  320. //fmt.Sprintf(" %.1f ", v.T_t)
  321. //lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  322. // -------------
  323. x := 22.0
  324. w1 := 80.0
  325. w2 := 195.0
  326. lib.RectFillColor(pdf, "订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  327. x += w1
  328. lib.RectFillColor(pdf, GoodsOrder_r.T_orderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  329. x += w2
  330. lib.RectFillColor(pdf, "出库订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  331. x += w1
  332. lib.RectFillColor(pdf, GoodsOrder_r.T_outorderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  333. x += w2
  334. // -------------
  335. x = 22.0
  336. w1 = 80.0
  337. w2 = 195.0
  338. lib.RectFillColor(pdf, "设备名称:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  339. x += w1
  340. lib.RectFillColor(pdf, Device_r.T_devName, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  341. x += w2
  342. lib.RectFillColor(pdf, "设备编号:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  343. x += w1
  344. lib.RectFillColor(pdf, Device_r.T_sn, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  345. x += w2
  346. // -------------
  347. x = 22.0
  348. w1 = 80.0
  349. w2 = 240.0
  350. T_time := fmt.Sprintf("%s", GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05")+" - "+GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"))
  351. lib.RectFillColor(pdf, "送货时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  352. x += w1
  353. lib.RectFillColor(pdf, T_time, 12, x, 120, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  354. x += w2
  355. T_time = fmt.Sprintf("%s", GoodsOrder_r.CreateTime.Format("2006-01-02 15:04:05"))
  356. lib.RectFillColor(pdf, "订单时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  357. x += w1
  358. lib.RectFillColor(pdf, T_time, 12, x, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  359. // -------------
  360. x = 22.0
  361. w1 = 80.0
  362. w2 = 195.0*2 + 80
  363. T_text := fmt.Sprintf("%s", GoodsOrder_r.T_receiving)
  364. lib.RectFillColor(pdf, "收货单位:", 12, x, 140, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  365. x += w1
  366. lib.RectFillColor(pdf, T_text, 12, x, 140, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  367. x += w2
  368. // -----------
  369. textw, _ = pdf.MeasureTextWidth("历史数据")
  370. pdf.SetX(20)
  371. pdf.SetY(210)
  372. pdf.Text("历史数据:")
  373. // 数据展示--------------------------------
  374. var y float64 = 220
  375. x = 22.0
  376. w1 = 94.0
  377. w2 = 43.0
  378. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  379. x += w1
  380. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  381. x += w2
  382. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  383. x += w1
  384. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  385. x += w2
  386. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  387. x += w1
  388. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  389. x += w2
  390. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  391. x += w1
  392. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  393. x += w2
  394. // 数据展示--------------------------------
  395. y = 240
  396. err = pdf.SetFont("wts", "", 8)
  397. if err != nil {
  398. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  399. c.ServeJSON()
  400. return
  401. }
  402. nln := 0
  403. x = 22.0
  404. var T_t_l float32 = 100.0
  405. var T_t_u float32 = 0.0
  406. var T_t_v float32 = 0.0
  407. for n := 0; len(DeviceSensor_data) > n; n++ {
  408. // -计算温度
  409. if DeviceSensor_data[n].T_t < T_t_l {
  410. T_t_l = DeviceSensor_data[n].T_t
  411. }
  412. if DeviceSensor_data[n].T_t > T_t_u {
  413. T_t_u = DeviceSensor_data[n].T_t
  414. }
  415. T_t_v += DeviceSensor_data[n].T_t
  416. //text := fmt.Sprintf(" %d ", i+1)
  417. var textH float64 = 25 // if text height is 25px.
  418. pdf.SetNewY(y, textH)
  419. y = pdf.GetY()
  420. nln++
  421. if nln > 4 {
  422. nln = 1
  423. x = 22.0
  424. y += 18
  425. }
  426. // ------------------
  427. T_t := fmt.Sprintf(" %.1f ", DeviceSensor_data[n].T_t)
  428. T_time = fmt.Sprintf("%s", DeviceSensor_data[n].T_time)
  429. lib.RectFillColor(pdf, T_time, 10, x, y, w1, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  430. x += w1
  431. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  432. x += w2
  433. }
  434. err = pdf.SetFont("wts", "", 10)
  435. if err != nil {
  436. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  437. c.ServeJSON()
  438. return
  439. }
  440. // 数据汇总--------------------------------
  441. y = 160
  442. x = 22.0
  443. w1 = 60.0
  444. w2 = 50.0
  445. T_t := fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[len(DeviceSensor_data)-1].T_t)
  446. lib.RectFillColor(pdf, "起送温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  447. x += w1
  448. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  449. x += w2
  450. T_t = fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[0].T_t)
  451. lib.RectFillColor(pdf, "送达温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  452. x += w1
  453. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  454. x += w2
  455. T_t = fmt.Sprintf(" %.1f℃ ", T_t_l)
  456. lib.RectFillColor(pdf, "最低温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  457. x += w1
  458. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  459. x += w2
  460. T_t = fmt.Sprintf(" %.1f℃ ", float32(T_t_v/float32(len(DeviceSensor_data)-1)))
  461. lib.RectFillColor(pdf, "平均温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  462. x += w1
  463. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  464. x += w2
  465. T_t = fmt.Sprintf(" %.1f℃ ", T_t_u)
  466. lib.RectFillColor(pdf, "最高温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  467. x += w1
  468. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  469. x += w2
  470. //----------------
  471. timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
  472. err = pdf.WritePdf(timeStr)
  473. if err != nil {
  474. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  475. c.ServeJSON()
  476. return
  477. }
  478. // 上传 OSS
  479. url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
  480. if !is {
  481. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  482. c.ServeJSON()
  483. return
  484. }
  485. //删除目录
  486. err = os.Remove(timeStr)
  487. if err != nil {
  488. fmt.Println(err)
  489. }
  490. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  491. c.ServeJSON()
  492. return
  493. }
  494. // 订单列表pdf
  495. func (c *GoodsOrderController) GoodsOrder_PDF() {
  496. var err error
  497. // 验证登录
  498. b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  499. if !b_ {
  500. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  501. c.ServeJSON()
  502. return
  503. }
  504. Id, _ := c.GetInt("T_id")
  505. if Id == 0 {
  506. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id e!"}
  507. c.ServeJSON()
  508. return
  509. }
  510. GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
  511. if GoodsOrder_r.Id == 0 {
  512. c.Data["json"] = lib.JSONS{Code: 207, Msg: "Id e!"}
  513. c.ServeJSON()
  514. return
  515. }
  516. Device_r, err := Device.Read_Device_ByT_sn(GoodsOrder_r.T_sn)
  517. if err != nil {
  518. c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_sn Err!"}
  519. c.ServeJSON()
  520. return
  521. }
  522. DeviceSensor_r := Device.Read_DeviceSensor_ALL_List_T_sn(GoodsOrder_r.T_sn)
  523. if len(DeviceSensor_r) == 0 {
  524. c.Data["json"] = lib.JSONS{Code: 202, Msg: GoodsOrder_r.T_sn + "设备没有数据!"}
  525. c.ServeJSON()
  526. return
  527. }
  528. var DeviceSensor_data []Device.DeviceData_R
  529. DeviceSensor_data, _ = Device.Read_DeviceData_By_T_snid_List(GoodsOrder_r.T_sn+","+strconv.Itoa(DeviceSensor_r[0].T_id), GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05"), GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"), 0, 9999)
  530. pdf := &gopdf.GoPdf{}
  531. pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
  532. //err = GetFont(pdf, "LiberationSerif-Regular.ttf")
  533. //if err != nil {
  534. // log.Fatalln(err)
  535. //}
  536. //err = pdf.SetFont("Ubuntu-L", "", 14)
  537. //if err != nil {
  538. // log.Fatalln(err)
  539. //}
  540. err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
  541. if err != nil {
  542. c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
  543. c.ServeJSON()
  544. return
  545. }
  546. err = pdf.SetFont("simsun", "", 24)
  547. if err != nil {
  548. c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
  549. c.ServeJSON()
  550. return
  551. }
  552. pdf.SetGrayFill(0.5)
  553. pdf.SetMargins(0, 20, 0, 20)
  554. pdf.AddPage()
  555. //use path
  556. //pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
  557. textw, _ := pdf.MeasureTextWidth(user_r.T_name)
  558. pdf.SetX((595 / 2) - (textw / 2))
  559. pdf.SetY(40)
  560. pdf.Text(user_r.T_name)
  561. // 线
  562. pdf.SetLineWidth(2)
  563. pdf.SetLineType("dashed")
  564. pdf.Line(10, 60, 585, 60)
  565. err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
  566. if err != nil {
  567. c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
  568. c.ServeJSON()
  569. return
  570. }
  571. err = pdf.SetFont("wts", "", 10)
  572. if err != nil {
  573. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  574. c.ServeJSON()
  575. return
  576. }
  577. //fmt.Sprintf(" %.1f ", v.T_t)
  578. //lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  579. // -------------
  580. x := 22.0
  581. w1 := 80.0
  582. w2 := 195.0
  583. lib.RectFillColor(pdf, "订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  584. x += w1
  585. lib.RectFillColor(pdf, GoodsOrder_r.T_orderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  586. x += w2
  587. lib.RectFillColor(pdf, "出库订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  588. x += w1
  589. lib.RectFillColor(pdf, GoodsOrder_r.T_outorderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  590. x += w2
  591. // -------------
  592. x = 22.0
  593. w1 = 80.0
  594. w2 = 195.0
  595. lib.RectFillColor(pdf, "设备名称:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  596. x += w1
  597. lib.RectFillColor(pdf, Device_r.T_devName, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  598. x += w2
  599. lib.RectFillColor(pdf, "设备编号:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  600. x += w1
  601. lib.RectFillColor(pdf, Device_r.T_sn, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  602. x += w2
  603. // -------------
  604. x = 22.0
  605. w1 = 80.0
  606. w2 = 240.0
  607. T_time := fmt.Sprintf("%s", GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05")+" - "+GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"))
  608. lib.RectFillColor(pdf, "送货时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  609. x += w1
  610. lib.RectFillColor(pdf, T_time, 12, x, 120, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  611. x += w2
  612. T_time = fmt.Sprintf("%s", GoodsOrder_r.CreateTime.Format("2006-01-02 15:04:05"))
  613. lib.RectFillColor(pdf, "订单时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  614. x += w1
  615. lib.RectFillColor(pdf, T_time, 12, x, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  616. // -------------
  617. x = 22.0
  618. w1 = 80.0
  619. w2 = 195.0*2 + 80
  620. T_text := fmt.Sprintf("%s", GoodsOrder_r.T_receiving)
  621. lib.RectFillColor(pdf, "收货单位:", 12, x, 140, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  622. x += w1
  623. lib.RectFillColor(pdf, T_text, 12, x, 140, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  624. x += w2
  625. // -----------
  626. textw, _ = pdf.MeasureTextWidth("历史数据")
  627. pdf.SetX(20)
  628. pdf.SetY(210)
  629. pdf.Text("历史数据:")
  630. // 数据展示--------------------------------
  631. var y float64 = 220
  632. x = 22.0
  633. w1 = 94.0
  634. w2 = 43.0
  635. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  636. x += w1
  637. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  638. x += w2
  639. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  640. x += w1
  641. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  642. x += w2
  643. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  644. x += w1
  645. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  646. x += w2
  647. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  648. x += w1
  649. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  650. x += w2
  651. // 数据展示--------------------------------
  652. y = 240
  653. err = pdf.SetFont("wts", "", 8)
  654. if err != nil {
  655. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  656. c.ServeJSON()
  657. return
  658. }
  659. nln := 0
  660. x = 22.0
  661. var T_t_l float32 = 100.0
  662. var T_t_u float32 = 0.0
  663. var T_t_v float32 = 0.0
  664. for n := 0; len(DeviceSensor_data) > n; n++ {
  665. // -计算温度
  666. if DeviceSensor_data[n].T_t < T_t_l {
  667. T_t_l = DeviceSensor_data[n].T_t
  668. }
  669. if DeviceSensor_data[n].T_t > T_t_u {
  670. T_t_u = DeviceSensor_data[n].T_t
  671. }
  672. T_t_v += DeviceSensor_data[n].T_t
  673. //text := fmt.Sprintf(" %d ", i+1)
  674. var textH float64 = 25 // if text height is 25px.
  675. pdf.SetNewY(y, textH)
  676. y = pdf.GetY()
  677. nln++
  678. if nln > 4 {
  679. nln = 1
  680. x = 22.0
  681. y += 18
  682. }
  683. // ------------------
  684. T_t := fmt.Sprintf(" %.1f ", DeviceSensor_data[n].T_t)
  685. T_time = fmt.Sprintf("%s", DeviceSensor_data[n].T_time)
  686. lib.RectFillColor(pdf, T_time, 10, x, y, w1, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  687. x += w1
  688. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  689. x += w2
  690. }
  691. err = pdf.SetFont("wts", "", 10)
  692. if err != nil {
  693. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  694. c.ServeJSON()
  695. return
  696. }
  697. // 数据汇总--------------------------------
  698. y = 160
  699. x = 22.0
  700. w1 = 60.0
  701. w2 = 50.0
  702. T_t := fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[len(DeviceSensor_data)-1].T_t)
  703. lib.RectFillColor(pdf, "起送温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  704. x += w1
  705. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  706. x += w2
  707. T_t = fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[0].T_t)
  708. lib.RectFillColor(pdf, "送达温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  709. x += w1
  710. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  711. x += w2
  712. T_t = fmt.Sprintf(" %.1f℃ ", T_t_l)
  713. lib.RectFillColor(pdf, "最低温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  714. x += w1
  715. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  716. x += w2
  717. T_t = fmt.Sprintf(" %.1f℃ ", float32(T_t_v/float32(len(DeviceSensor_data)-1)))
  718. lib.RectFillColor(pdf, "平均温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  719. x += w1
  720. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  721. x += w2
  722. T_t = fmt.Sprintf(" %.1f℃ ", T_t_u)
  723. lib.RectFillColor(pdf, "最高温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  724. x += w1
  725. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  726. x += w2
  727. //----------------
  728. timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
  729. err = pdf.WritePdf(timeStr)
  730. if err != nil {
  731. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  732. c.ServeJSON()
  733. return
  734. }
  735. // 上传 OSS
  736. url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
  737. if !is {
  738. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  739. c.ServeJSON()
  740. return
  741. }
  742. //删除目录
  743. err = os.Remove(timeStr)
  744. if err != nil {
  745. fmt.Println(err)
  746. }
  747. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  748. c.ServeJSON()
  749. return
  750. }