Order.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741
  1. package controllers
  2. import (
  3. "Cold_GoodsOrder/Nats/NatsServer"
  4. "Cold_GoodsOrder/conf"
  5. "Cold_GoodsOrder/lib"
  6. "Cold_GoodsOrder/models/Account"
  7. "Cold_GoodsOrder/models/Device"
  8. "Cold_GoodsOrder/models/Function"
  9. "encoding/base64"
  10. "fmt"
  11. "image"
  12. "log"
  13. "math"
  14. "net/url"
  15. "os"
  16. "strconv"
  17. "strings"
  18. "time"
  19. beego "github.com/beego/beego/v2/server/web"
  20. "github.com/qiniu/go-sdk/v7/sms/bytes"
  21. "github.com/signintech/gopdf"
  22. )
  23. // Handle
  24. type OrderController struct {
  25. beego.Controller
  26. User_r Account.User // 登陆的用户
  27. T_pid int // 公司id
  28. }
  29. func (c *OrderController) Prepare() {
  30. c.User_r = *Account.User_r
  31. c.T_pid = *Account.T_pid
  32. }
  33. func (c *OrderController) Order_List() {
  34. type R_JSONS struct {
  35. //必须的大写开头
  36. Data []Function.OrderR
  37. Num int64
  38. Page int
  39. Page_size int
  40. }
  41. var r_jsons R_JSONS
  42. page, _ := c.GetInt("page")
  43. if page < 1 {
  44. page = 1
  45. }
  46. page_z, _ := c.GetInt("page_z")
  47. if page_z < 1 {
  48. page_z = conf.Page_size
  49. }
  50. t_sn := c.GetString("t_sn")
  51. orderid := c.GetString("t_orderid")
  52. startTime := c.GetString("startTime")
  53. endTime := c.GetString("endTime")
  54. c.Data["Name"] = t_sn
  55. r_jsons.Data, r_jsons.Num = Function.Read_Order_List(c.User_r.T_pid, page, page_z, orderid, t_sn, startTime, endTime)
  56. r_jsons.Page = page
  57. r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
  58. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  59. c.ServeJSON()
  60. return
  61. }
  62. func (c *OrderController) CreateOrderNo() {
  63. format := time.Now().Format("20060102")
  64. unix := time.Now().Unix()
  65. OrderNo := fmt.Sprintf("%v%v", format, unix)
  66. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: OrderNo}
  67. c.ServeJSON()
  68. return
  69. }
  70. func (c *OrderController) Order_Add() {
  71. T_orderid := c.GetString("T_orderid")
  72. WaybillNo := c.GetString("WaybillNo")
  73. T_sn := c.GetString("T_sn")
  74. T_receiving := c.GetString("T_receiving")
  75. ShippingUnit := c.GetString("ShippingUnit")
  76. EstimateStartTime := c.GetString("EstimateStartTime")
  77. EstimateEndTime := c.GetString("EstimateEndTime")
  78. T_text := c.GetString("T_text")
  79. PeerList := c.GetString("PeerList")
  80. DeviceType := c.GetString("DeviceType")
  81. IsExpatriate, _ := c.GetInt("IsExpatriate")
  82. Phone := c.GetString("Phone")
  83. ChildPid := c.GetString("ChildPid")
  84. CouriesName := c.GetString("CouriesName")
  85. CouriesId := c.GetString("CouriesId")
  86. if len(EstimateStartTime) <= 0 || len(EstimateEndTime) <= 0 {
  87. c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
  88. c.ServeJSON()
  89. return
  90. }
  91. start, err := time.Parse("2006-01-02", EstimateStartTime)
  92. endtime, err := time.Parse("2006-01-02", EstimateEndTime)
  93. if err != nil {
  94. c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
  95. c.ServeJSON()
  96. return
  97. }
  98. if len(CouriesId) != 0 {
  99. atoi, _ := strconv.Atoi(CouriesId)
  100. r := Function.Read_Couriers_ById(atoi)
  101. CouriesName = r.Name
  102. }
  103. var_ := Function.Order{
  104. T_pid: c.User_r.T_pid,
  105. T_orderid: T_orderid,
  106. WaybillNo: WaybillNo,
  107. ShippingUnit: ShippingUnit,
  108. T_sn: T_sn,
  109. T_receiving: T_receiving,
  110. EstimateStartTime: start,
  111. EstimateEndTime: endtime,
  112. T_text: T_text,
  113. T_State: 1,
  114. PeerList: PeerList,
  115. DeviceType: DeviceType,
  116. IsExpatriate: IsExpatriate,
  117. Phone: Phone,
  118. ChildPid: ChildPid,
  119. CouriesName: CouriesName,
  120. CouriesId: CouriesId,
  121. }
  122. if var_.IsExpatriate == 2 {
  123. if len(var_.Phone) < 0 {
  124. c.Data["json"] = lib.JSONS{Code: 203, Msg: "电话号码不能为空!"}
  125. c.ServeJSON()
  126. return
  127. }
  128. var_.ExpatriateReceiving = T_receiving
  129. }
  130. defer func() {
  131. s, _ := beego.AppConfig.String("orderUrl")
  132. addr := s + url.QueryEscape(lib.AesEncryptCBC(var_.T_orderid, lib.AesKey))
  133. sprintf := fmt.Sprintf("【冷链订单配送】您的订单正在配送中点击下方链接查看%v", addr)
  134. err = lib.SendModel(Phone, sprintf)
  135. if err != nil {
  136. c.Data["json"] = lib.JSONS{Code: 203, Msg: "发送短信失败!"}
  137. c.ServeJSON()
  138. return
  139. }
  140. }()
  141. id, err := Function.Add_Order(var_)
  142. if err != nil {
  143. c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
  144. c.ServeJSON()
  145. return
  146. }
  147. NatsServer.AddUserLogs(Account.User_r.T_uuid, "订单系统", "添加", var_)
  148. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: id}
  149. c.ServeJSON()
  150. }
  151. func (c *OrderController) Order_Get() {
  152. id, _ := c.GetInt("T_id")
  153. r := Function.Read_Order_ById(id)
  154. // 记录不存在
  155. if r.Id == 0 {
  156. c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id Err!"}
  157. c.ServeJSON()
  158. return
  159. }
  160. if c.User_r.T_pid != r.T_pid {
  161. c.Data["json"] = lib.JSONS{Code: 205, Msg: "没有权限!"}
  162. c.ServeJSON()
  163. return
  164. }
  165. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Function.OrderToOrderR(r)}
  166. c.ServeJSON()
  167. }
  168. func (c *OrderController) Order_Edit() {
  169. id, _ := c.GetInt("T_id")
  170. r := Function.Read_Order_ById(id)
  171. if r.Id == 0 {
  172. c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id !"}
  173. c.ServeJSON()
  174. return
  175. }
  176. if c.User_r.T_pid != r.T_pid {
  177. c.Data["json"] = lib.JSONS{Code: 205, Msg: "没有权限!"}
  178. c.ServeJSON()
  179. return
  180. }
  181. WaybillNo := c.GetString("WaybillNo")
  182. T_sn := c.GetString("T_sn")
  183. T_receiving := c.GetString("T_receiving")
  184. ShippingUnit := c.GetString("ShippingUnit")
  185. EstimateStartTime := c.GetString("EstimateStartTime")
  186. EstimateEndTime := c.GetString("EstimateEndTime")
  187. T_text := c.GetString("T_text")
  188. PeerList := c.GetString("PeerList")
  189. DeviceType := c.GetString("DeviceType")
  190. IsExpatriate, _ := c.GetInt("IsExpatriate")
  191. Phone := c.GetString("Phone")
  192. ChildPid := c.GetString("ChildPid")
  193. T_State, _ := c.GetInt("T_State")
  194. CouriesName := c.GetString("CouriesName")
  195. CouriesId := c.GetString("CouriesId")
  196. if len(EstimateStartTime) <= 0 || len(EstimateEndTime) <= 0 {
  197. c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
  198. c.ServeJSON()
  199. return
  200. }
  201. start, err := time.Parse("2006-01-02", EstimateStartTime)
  202. endtime, err := time.Parse("2006-01-02", EstimateEndTime)
  203. if err != nil {
  204. c.Data["json"] = lib.JSONS{Code: 207, Msg: "时间参数异常!"}
  205. c.ServeJSON()
  206. return
  207. }
  208. if len(WaybillNo) > 0 {
  209. r.WaybillNo = WaybillNo
  210. }
  211. if len(T_sn) > 0 {
  212. r.T_sn = T_sn
  213. }
  214. if len(T_receiving) > 0 {
  215. r.T_receiving = T_receiving
  216. }
  217. if len(T_text) > 0 {
  218. r.T_text = T_text
  219. }
  220. if len(ShippingUnit) > 0 {
  221. r.ShippingUnit = ShippingUnit
  222. }
  223. if len(EstimateStartTime) > 0 {
  224. r.EstimateStartTime = start
  225. }
  226. if len(EstimateEndTime) > 0 {
  227. r.EstimateEndTime = endtime
  228. }
  229. if len(PeerList) > 0 {
  230. r.PeerList = PeerList
  231. }
  232. if len(DeviceType) > 0 {
  233. r.DeviceType = DeviceType
  234. }
  235. if IsExpatriate != r.IsExpatriate {
  236. r.IsExpatriate = IsExpatriate
  237. }
  238. if len(Phone) > 0 {
  239. r.Phone = Phone
  240. }
  241. if len(ChildPid) > 0 {
  242. r.ChildPid = ChildPid
  243. }
  244. if len(CouriesName) > 0 {
  245. r.CouriesName = CouriesName
  246. }
  247. if len(CouriesId) > 0 {
  248. r.CouriesId = CouriesId
  249. }
  250. if T_State != 0 {
  251. r.T_State = T_State
  252. }
  253. is := Function.Update_Order(r, "waybill_no", "t_sn", "t_receiving", "shipping_unit", "estimate_start_time", "estimate_end_time", "peer_list", "device_type", "is_expatriate", "phone", "child_pid", "t__state", "t_text", "couries_name", "couries_id")
  254. if !is {
  255. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  256. c.ServeJSON()
  257. return
  258. }
  259. NatsServer.AddUserLogs(Account.User_r.T_uuid, "订单系统", "修改", r)
  260. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  261. c.ServeJSON()
  262. return
  263. }
  264. func (c *OrderController) GetDeviceData() {
  265. var err error
  266. Id, _ := c.GetInt("T_id")
  267. if Id == 0 {
  268. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
  269. c.ServeJSON()
  270. return
  271. }
  272. Order_r := Function.Read_Order_ById(Id)
  273. if Order_r.Id == 0 {
  274. c.Data["json"] = lib.JSONS{Code: 207, Msg: "Id Err!"}
  275. c.ServeJSON()
  276. return
  277. }
  278. _, err = NatsServer.ReadDeviceByT_sn(Order_r.T_sn)
  279. if err != nil {
  280. c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_sn Err!"}
  281. c.ServeJSON()
  282. return
  283. }
  284. DeviceSensor_r := NatsServer.ReadDeviceSensorALLByT_sn(Order_r.T_sn)
  285. if len(DeviceSensor_r) == 0 {
  286. c.Data["json"] = lib.JSONS{Code: 202, Msg: Order_r.T_sn + "设备没有数据!"}
  287. c.ServeJSON()
  288. return
  289. }
  290. var DeviceSensor_data []Device.DeviceData_R
  291. if Order_r.T_start_Ut.IsZero() {
  292. c.Data["json"] = lib.JSONS{Code: 202, Msg: Order_r.T_sn + "未开启配送"}
  293. c.ServeJSON()
  294. return
  295. }
  296. if Order_r.T_end_Ut.IsZero() {
  297. Order_r.T_end_Ut = time.Now()
  298. }
  299. DeviceSensor_data, _ = NatsServer.ReadDeviceDataListBy_T_snid(Order_r.T_sn+","+strconv.Itoa(DeviceSensor_r[0].T_id), Order_r.T_start_Ut.Format("2006-01-02 15:04:05"), Order_r.T_end_Ut.Format("2006-01-02 15:04:05"), 0, 9999)
  300. if len(DeviceSensor_data) == 0 {
  301. c.Data["json"] = lib.JSONS{Code: 202, Msg: Order_r.T_sn + "设备没有数据!"}
  302. c.ServeJSON()
  303. return
  304. }
  305. lastValidTsite := ""
  306. for i, sensor := range DeviceSensor_data {
  307. if len(sensor.T_site) <= 0 || sensor.T_site == "0,0" {
  308. DeviceSensor_data[i].T_site = lastValidTsite
  309. } else {
  310. lastValidTsite = sensor.T_site
  311. }
  312. }
  313. c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功", Data: DeviceSensor_data}
  314. c.ServeJSON()
  315. }
  316. func (c *OrderController) Order_Del() {
  317. Id, _ := c.GetInt("T_id")
  318. r := Function.Read_Order_ById(Id)
  319. if r.Id == 0 {
  320. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  321. c.ServeJSON()
  322. return
  323. }
  324. if c.User_r.T_pid != r.T_pid {
  325. c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
  326. c.ServeJSON()
  327. return
  328. }
  329. if is := Function.Delete_Order(r); !is {
  330. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  331. c.ServeJSON()
  332. return
  333. }
  334. NatsServer.AddUserLogs(Account.User_r.T_uuid, "订单系统", "删除", r)
  335. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  336. c.ServeJSON()
  337. return
  338. }
  339. // Order_PDF 列表 - 接口
  340. func (c *OrderController) Order_PDF() {
  341. var err error
  342. Id, _ := c.GetInt("T_id")
  343. if Id == 0 {
  344. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
  345. c.ServeJSON()
  346. return
  347. }
  348. Order_r := Function.Read_Order_ById(Id)
  349. if Order_r.Id == 0 {
  350. c.Data["json"] = lib.JSONS{Code: 207, Msg: "Id Err!"}
  351. c.ServeJSON()
  352. return
  353. }
  354. Device_r, err := NatsServer.ReadDeviceByT_sn(Order_r.T_sn)
  355. if err != nil {
  356. c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_sn Err!"}
  357. c.ServeJSON()
  358. return
  359. }
  360. DeviceSensor_r := NatsServer.ReadDeviceSensorALLByT_sn(Order_r.T_sn)
  361. if len(DeviceSensor_r) == 0 {
  362. c.Data["json"] = lib.JSONS{Code: 202, Msg: Order_r.T_sn + "设备没有数据!"}
  363. c.ServeJSON()
  364. return
  365. }
  366. var DeviceSensor_data []Device.DeviceData_R
  367. DeviceSensor_data, _ = NatsServer.ReadDeviceDataListBy_T_snid(Order_r.T_sn+","+strconv.Itoa(DeviceSensor_r[0].T_id), Order_r.T_start_Ut.Format("2006-01-02 15:04:05"), Order_r.T_end_Ut.Format("2006-01-02 15:04:05"), 0, 9999)
  368. if len(DeviceSensor_data) == 0 {
  369. c.Data["json"] = lib.JSONS{Code: 202, Msg: Order_r.T_sn + "设备没有数据!"}
  370. c.ServeJSON()
  371. return
  372. }
  373. pdf := &gopdf.GoPdf{}
  374. pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
  375. err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
  376. if err != nil {
  377. c.Data["json"] = lib.JSONS{Code: 204, Msg: err.Error()}
  378. c.ServeJSON()
  379. return
  380. }
  381. err = pdf.SetFont("simsun", "", 24)
  382. if err != nil {
  383. c.Data["json"] = lib.JSONS{Code: 205, Msg: err.Error()}
  384. c.ServeJSON()
  385. return
  386. }
  387. pdf.SetGrayFill(0.5)
  388. pdf.SetMargins(0, 20, 0, 20)
  389. pdf.AddPage()
  390. company, _ := NatsServer.Read_Company_ById(c.T_pid)
  391. log.Println(c.T_pid, c.User_r.T_pid)
  392. textw, _ := pdf.MeasureTextWidth(company.T_name + "-货单详情")
  393. pdf.SetX((595 / 2) - (textw / 2))
  394. pdf.SetY(40)
  395. pdf.Text(company.T_name + "-货单详情")
  396. // 线
  397. pdf.SetLineWidth(2)
  398. pdf.SetLineType("dashed")
  399. pdf.Line(10, 60, 585, 60)
  400. err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
  401. if err != nil {
  402. c.Data["json"] = lib.JSONS{Code: 206, Msg: err.Error()}
  403. c.ServeJSON()
  404. return
  405. }
  406. err = pdf.SetFont("wts", "", 10)
  407. if err != nil {
  408. c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
  409. c.ServeJSON()
  410. return
  411. }
  412. pages := pdf.GetNumberOfPages()
  413. pagenums := fmt.Sprintf("第 %d 页", pages)
  414. pagenum, _ := pdf.MeasureTextWidth(pagenums)
  415. pdf.SetX((595 / 2) - (pagenum / 2))
  416. pdf.SetY(830) // 设置页码位置
  417. pdf.Cell(nil, pagenums)
  418. // -------------
  419. x := 22.0
  420. w1 := 80.0
  421. w2 := 195.0
  422. lib.RectFillColor(pdf, "订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  423. x += w1
  424. lib.RectFillColor(pdf, Order_r.T_orderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  425. x += w2
  426. lib.RectFillColor(pdf, "运单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  427. x += w1
  428. lib.RectFillColor(pdf, Order_r.T_outorderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  429. x += w2
  430. // -------------
  431. x = 22.0
  432. w1 = 80.0
  433. w2 = 195.0
  434. lib.RectFillColor(pdf, "设备名称:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  435. x += w1
  436. lib.RectFillColor(pdf, Device_r.T_devName, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  437. x += w2
  438. lib.RectFillColor(pdf, "设备编号:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  439. x += w1
  440. lib.RectFillColor(pdf, Device_r.T_sn, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  441. x += w2
  442. // -------------
  443. x = 22.0
  444. w1 = 80.0
  445. w2 = 240.0
  446. T_time := fmt.Sprintf("%s", Order_r.T_start_Ut.Format("2006-01-02 15:04:05")+" - "+Order_r.T_end_Ut.Format("2006-01-02 15:04:05"))
  447. lib.RectFillColor(pdf, "送货时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  448. x += w1
  449. lib.RectFillColor(pdf, T_time, 12, x, 120, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  450. x += w2
  451. T_time = fmt.Sprintf("%s", Order_r.CreateTime.Format("2006-01-02 15:04:05"))
  452. lib.RectFillColor(pdf, "订单时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  453. x += w1
  454. lib.RectFillColor(pdf, T_time, 12, x, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  455. // -------------
  456. x = 22.0
  457. w1 = 80.0
  458. w2 = 195.0*2 + 80
  459. ShippingUnit := fmt.Sprintf("%s", Order_r.ShippingUnit)
  460. lib.RectFillColor(pdf, "发货单位:", 12, x, 140, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  461. x += w1
  462. lib.RectFillColor(pdf, ShippingUnit, 12, x, 140, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  463. x += w2
  464. x = 22.0
  465. T_text := fmt.Sprintf("%s", Order_r.T_receiving)
  466. lib.RectFillColor(pdf, "收货单位:", 12, x, 160, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  467. x += w1
  468. lib.RectFillColor(pdf, T_text, 12, x, 160, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  469. x += w2
  470. // 数据汇总--------------------------------
  471. // 最低温度
  472. var T_t_l float32 = 100.0
  473. // 最高温度
  474. var T_t_u float32 = 0.0
  475. var T_t_v float32 = 0.0
  476. for n := 0; len(DeviceSensor_data) > n; n++ {
  477. // -计算温度
  478. if DeviceSensor_data[n].T_t < T_t_l {
  479. T_t_l = DeviceSensor_data[n].T_t
  480. }
  481. if DeviceSensor_data[n].T_t > T_t_u {
  482. T_t_u = DeviceSensor_data[n].T_t
  483. }
  484. T_t_v += DeviceSensor_data[n].T_t
  485. }
  486. var y float64 = 180
  487. x = 22.0
  488. w1 = 60.0
  489. w2 = 50.0
  490. err = pdf.SetFont("wts", "", 10)
  491. if err != nil {
  492. c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
  493. c.ServeJSON()
  494. return
  495. }
  496. T_t := fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[len(DeviceSensor_data)-1].T_t)
  497. lib.RectFillColor(pdf, "起送温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  498. x += w1
  499. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  500. x += w2
  501. T_t = fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[0].T_t)
  502. lib.RectFillColor(pdf, "送达温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  503. x += w1
  504. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  505. x += w2
  506. T_t = fmt.Sprintf(" %.1f℃ ", T_t_l)
  507. lib.RectFillColor(pdf, "最低温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  508. x += w1
  509. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  510. x += w2
  511. T_t = fmt.Sprintf(" %.1f℃ ", T_t_v/float32(len(DeviceSensor_data)))
  512. lib.RectFillColor(pdf, "平均温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  513. x += w1
  514. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  515. x += w2
  516. T_t = fmt.Sprintf(" %.1f℃ ", T_t_u)
  517. lib.RectFillColor(pdf, "最高温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  518. x += w1
  519. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  520. x += w2
  521. var height int
  522. getString := c.GetString("images")
  523. split := strings.Split(getString, ",")
  524. if len(split) >= 2 {
  525. imageBytes, err := base64.StdEncoding.DecodeString(split[1])
  526. if err != nil {
  527. c.Data["json"] = lib.JSONS{Code: 207, Msg: "无效的图像数据"}
  528. c.ServeJSON()
  529. return
  530. }
  531. decode, _, err := image.Decode(bytes.NewReader(imageBytes))
  532. // 获取图片的高度
  533. bounds := decode.Bounds()
  534. height = bounds.Dy()
  535. if height >= 500 {
  536. height = 500
  537. }
  538. with := bounds.Dx()
  539. log.Println("图片宽高", with, height)
  540. y = 220
  541. imgH, err := gopdf.ImageHolderByBytes(imageBytes)
  542. err = pdf.ImageByHolder(imgH, 10, y, &gopdf.Rect{W: 575, H: float64(height)})
  543. if err != nil {
  544. c.Data["json"] = lib.JSONS{Code: 207, Msg: "添加图片失败"}
  545. c.ServeJSON()
  546. return
  547. }
  548. } else {
  549. c.Data["json"] = lib.JSONS{Code: 207, Msg: "无效的图像数据"}
  550. c.ServeJSON()
  551. return
  552. }
  553. // -----------
  554. textw, _ = pdf.MeasureTextWidth("历史数据")
  555. pdf.SetX(20)
  556. pdf.SetY(float64(230 + height))
  557. pdf.Text("历史数据:")
  558. // 数据展示--------------------------------
  559. //var y float64 = 220
  560. y = float64(240 + height)
  561. x = 22.0
  562. w1 = 94.0
  563. w2 = 43.0
  564. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  565. x += w1
  566. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  567. x += w2
  568. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  569. x += w1
  570. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  571. x += w2
  572. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  573. x += w1
  574. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  575. x += w2
  576. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  577. x += w1
  578. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  579. x += w2
  580. // 数据展示--------------------------------
  581. y = float64(260 + height)
  582. err = pdf.SetFont("wts", "", 8)
  583. if err != nil {
  584. c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
  585. c.ServeJSON()
  586. return
  587. }
  588. nln := 0
  589. x = 22.0
  590. for n := 0; len(DeviceSensor_data) > n; n++ {
  591. var textH float64 = 25 // if text height is 25px.
  592. pdf.SetNewY(y, textH)
  593. y = pdf.GetY()
  594. nln++
  595. if nln > 4 {
  596. nln = 1
  597. x = 22.0
  598. y += 18
  599. }
  600. if y >= 794 {
  601. err = pdf.SetFont("wts", "", 10)
  602. if err != nil {
  603. c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
  604. c.ServeJSON()
  605. return
  606. }
  607. pdf.AddPage()
  608. pages := pdf.GetNumberOfPages()
  609. pagenums := fmt.Sprintf("第 %d 页", pages)
  610. pagenum, _ := pdf.MeasureTextWidth(pagenums)
  611. pdf.SetX((595 / 2) - (pagenum / 2))
  612. pdf.SetY(830) // 设置页码位置
  613. pdf.Cell(nil, pagenums)
  614. x = 22.0
  615. y = 20
  616. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  617. x += w1
  618. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  619. x += w2
  620. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  621. x += w1
  622. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  623. x += w2
  624. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  625. x += w1
  626. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  627. x += w2
  628. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  629. x += w1
  630. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  631. x += w2
  632. x = 22.0
  633. y += 20
  634. }
  635. err = pdf.SetFont("wts", "", 8)
  636. // ------------------
  637. T_t = fmt.Sprintf(" %.1f ", DeviceSensor_data[n].T_t)
  638. T_time = fmt.Sprintf("%s", DeviceSensor_data[n].T_time)
  639. lib.RectFillColor(pdf, T_time, 10, x, y, w1, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  640. x += w1
  641. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  642. x += w2
  643. }
  644. err = pdf.SetFont("wts", "", 10)
  645. if err != nil {
  646. c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
  647. c.ServeJSON()
  648. return
  649. }
  650. //----------------
  651. timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
  652. err = pdf.WritePdf(timeStr)
  653. if err != nil {
  654. c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
  655. c.ServeJSON()
  656. return
  657. }
  658. //上传 OSS
  659. //url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
  660. url, is := NatsServer.Qiniu_UploadFile(timeStr, timeStr)
  661. if !is {
  662. c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  663. c.ServeJSON()
  664. return
  665. }
  666. //删除目录
  667. err = os.Remove(timeStr)
  668. if err != nil {
  669. fmt.Println(err)
  670. }
  671. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
  672. c.ServeJSON()
  673. return
  674. }