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