GoodsOrder.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. package controllers
  2. import (
  3. "Cold_Api/conf"
  4. "Cold_Api/controllers/lib"
  5. "Cold_Api/models/Device"
  6. "Cold_Api/models/Function"
  7. "fmt"
  8. beego "github.com/beego/beego/v2/server/web"
  9. "github.com/signintech/gopdf"
  10. "math"
  11. "strconv"
  12. "time"
  13. )
  14. //Handle
  15. type GoodsOrderController struct {
  16. beego.Controller
  17. }
  18. func (c *GoodsOrderController) GoodsOrder_html() {
  19. // 验证登录
  20. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  21. if !b_ {
  22. c.Ctx.Redirect(302, "Login")
  23. return
  24. }
  25. c.Data["Device_lite"] = Device.Read_Device_ALL_bind(admin_r)
  26. //c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
  27. Name := c.GetString("Name")
  28. c.Data["Name"] = Name
  29. page, _ := c.GetInt("page")
  30. println(page)
  31. if page < 1 {
  32. page = 1
  33. }
  34. page_z, _ := c.GetInt("Page_size")
  35. if page_z == 0 {
  36. page_z = conf.Page_size
  37. }
  38. List, cnt := Function.Read_GoodsOrder_List(admin_r.Admin_uuid, page, page_z, Name)
  39. page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
  40. c.Data["List"] = List
  41. c.Data["Page"] = page
  42. c.Data["Page_size"] = page_size
  43. c.Data["Pages"] = lib.Func_page(int64(page), int64(page_size))
  44. c.Data["cnt"] = cnt
  45. c.TplName = "GoodsOrder/GoodsOrder.html"
  46. }
  47. func (c *GoodsOrderController) GoodsOrder__html() {
  48. // 验证登录
  49. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  50. if !b_ {
  51. c.Ctx.Redirect(302, "Login")
  52. return
  53. }
  54. c.Data["Device_lite"] = Device.Read_Device_ALL_bind(admin_r)
  55. //c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
  56. id, _ := c.GetInt("id")
  57. c.Data["id"] = id
  58. if id > 0 {
  59. c.Data["Date"] = Function.Read_GoodsOrder_ById(id)
  60. }
  61. c.TplName = "GoodsOrder/GoodsOrder-.html"
  62. }
  63. //
  64. //func (c *GoodsOrderController) GoodsOrder_List() {
  65. // // 验证登录
  66. // b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  67. // if !b_ {
  68. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  69. // c.ServeJSON()
  70. // return
  71. // }
  72. //
  73. // type R_JSONS struct {
  74. // //必须的大写开头
  75. // DeviceSensor_lite []Device.DeviceSensor_R
  76. // Num int
  77. // Page int
  78. // Page_size int
  79. // Pages []lib.Page_T
  80. // }
  81. // var r_jsons R_JSONS
  82. // page, _ := c.GetInt("page")
  83. //
  84. // println(page)
  85. // if page < 1 {
  86. // page = 1
  87. // }
  88. //
  89. // page_z, _ := c.GetInt("page_z")
  90. // if page_z == 0 {
  91. // page_z = conf.Page_size
  92. // }
  93. //
  94. // T_sn := c.GetString("Sn")
  95. //
  96. // Device_r, err := Device.Read_Device_ByT_sn(T_sn)
  97. // if err != nil {
  98. // c.Data["json"] = lib.JSONS{Code: 206, Msg: "T_sn Err!"}
  99. // c.ServeJSON()
  100. // return
  101. // }
  102. // if admin_r.Admin_master > 1 {
  103. // if !strings.Contains(Device_r.T_Bind, "U"+strconv.Itoa(admin_r.Id)+"|") && admin_r.Admin_master != 0 {
  104. // c.Data["json"] = lib.JSONS{Code: 202, Msg: "! U" + strconv.Itoa(admin_r.Id)}
  105. // c.ServeJSON()
  106. // return
  107. // }
  108. // }
  109. //
  110. // //c.Data["Class_List"] = Device.Read_Class_All_1()
  111. //
  112. // var cnt int64
  113. // r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_ALL_T_sn(T_sn, page, page_z)
  114. //
  115. // page_size := math.Ceil(float64(cnt) / float64(page_z))
  116. // r_jsons.Page = int(page)
  117. // r_jsons.Page_size = int(page_size)
  118. // r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  119. // r_jsons.Num = int(cnt)
  120. //
  121. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  122. // c.ServeJSON()
  123. // return
  124. //
  125. //}
  126. //
  127. func (c *GoodsOrderController) List_Post() {
  128. // 验证登录
  129. b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  130. if !b_ {
  131. c.Ctx.Redirect(302, "Login")
  132. return
  133. }
  134. var id int64
  135. var err error
  136. id, _ = c.GetInt64("id")
  137. T_orderid := c.GetString("T_orderid")
  138. T_outorderid := c.GetString("T_outorderid")
  139. T_sn := c.GetString("T_sn")
  140. T_receiving := c.GetString("T_receiving")
  141. T_start_Ut := c.GetString("T_start_Ut")
  142. T_end_Ut := c.GetString("T_end_Ut")
  143. T_start_Ut_T, _ := c.GetFloat("T_start_Ut_T")
  144. T_end_Ut_T, _ := c.GetFloat("T_end_Ut_T")
  145. T_text := c.GetString("T_text")
  146. T_start_Ut_, err := time.Parse("2006-01-02 15:04:05", T_start_Ut)
  147. T_end_Ut_, err := time.Parse("2006-01-02 15:04:05", T_end_Ut)
  148. var_ := Function.GoodsOrder{
  149. T_uuid: admin_r.Admin_uuid,
  150. T_orderid: T_orderid,
  151. T_outorderid: T_outorderid,
  152. T_sn: T_sn,
  153. T_receiving: T_receiving,
  154. T_start_Ut: T_start_Ut_,
  155. T_end_Ut: T_end_Ut_,
  156. T_start_Ut_T: float32(T_start_Ut_T),
  157. T_end_Ut_T: float32(T_end_Ut_T),
  158. T_text: T_text,
  159. T_State: 1,
  160. }
  161. if id > 0 {
  162. var_.Id = int(id)
  163. 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")
  164. if !is {
  165. c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
  166. c.ServeJSON()
  167. return
  168. }
  169. } else {
  170. id, err = Function.Add_GoodsOrder(var_)
  171. if err != nil {
  172. c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
  173. c.ServeJSON()
  174. return
  175. }
  176. }
  177. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  178. c.ServeJSON()
  179. return
  180. }
  181. func (c *GoodsOrderController) List_Del() {
  182. Id, _ := c.GetInt("Id")
  183. if Id > 0 {
  184. GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
  185. Function.Delete_GoodsOrder_ById(GoodsOrder_r)
  186. } else {
  187. c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
  188. c.ServeJSON()
  189. return
  190. }
  191. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  192. c.ServeJSON()
  193. return
  194. }
  195. // 列表 - 接口
  196. func (c *GoodsOrderController) Data_PDF() {
  197. var err error
  198. // 验证登录
  199. b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  200. if !b_ {
  201. c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
  202. c.ServeJSON()
  203. return
  204. }
  205. Id, _ := c.GetInt("Id")
  206. if Id == 0 {
  207. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id e!"}
  208. c.ServeJSON()
  209. return
  210. }
  211. GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
  212. if GoodsOrder_r.Id == 0 {
  213. c.Data["json"] = lib.JSONS{Code: 207, Msg: "Id e!"}
  214. c.ServeJSON()
  215. return
  216. }
  217. Device_r, err := Device.Read_Device_ByT_sn(GoodsOrder_r.T_sn)
  218. if err != nil {
  219. c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_sn Err!"}
  220. c.ServeJSON()
  221. return
  222. }
  223. DeviceSensor_r := Device.Read_DeviceSensor_ALL_List_T_sn(GoodsOrder_r.T_sn)
  224. if len(DeviceSensor_r) == 0 {
  225. c.Data["json"] = lib.JSONS{Code: 202, Msg: GoodsOrder_r.T_sn + "设备没有数据!"}
  226. c.ServeJSON()
  227. return
  228. }
  229. var DeviceSensor_data []Device.DeviceData_
  230. DeviceSensor_data, _ = Device.Read_DeviceSensorData_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)
  231. pdf := &gopdf.GoPdf{}
  232. pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
  233. //err = GetFont(pdf, "LiberationSerif-Regular.ttf")
  234. //if err != nil {
  235. // log.Fatalln(err)
  236. //}
  237. //err = pdf.SetFont("Ubuntu-L", "", 14)
  238. //if err != nil {
  239. // log.Fatalln(err)
  240. //}
  241. err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
  242. if err != nil {
  243. c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
  244. c.ServeJSON()
  245. return
  246. }
  247. err = pdf.SetFont("simsun", "", 24)
  248. if err != nil {
  249. c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
  250. c.ServeJSON()
  251. return
  252. }
  253. pdf.SetGrayFill(0.5)
  254. pdf.SetMargins(0, 20, 0, 20)
  255. pdf.AddPage()
  256. //use path
  257. //pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
  258. textw, _ := pdf.MeasureTextWidth(user_r.Admin_name)
  259. pdf.SetX((595 / 2) - (textw / 2))
  260. pdf.SetY(40)
  261. pdf.Text(user_r.Admin_name)
  262. // 线
  263. pdf.SetLineWidth(2)
  264. pdf.SetLineType("dashed")
  265. pdf.Line(10, 60, 585, 60)
  266. err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
  267. if err != nil {
  268. c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
  269. c.ServeJSON()
  270. return
  271. }
  272. err = pdf.SetFont("wts", "", 10)
  273. if err != nil {
  274. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  275. c.ServeJSON()
  276. return
  277. }
  278. //fmt.Sprintf(" %.1f ", v.T_t)
  279. //lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  280. // -------------
  281. x := 22.0
  282. w1 := 80.0
  283. w2 := 195.0
  284. lib.RectFillColor(pdf, "订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  285. x += w1
  286. lib.RectFillColor(pdf, GoodsOrder_r.T_orderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  287. x += w2
  288. lib.RectFillColor(pdf, "出库订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  289. x += w1
  290. lib.RectFillColor(pdf, GoodsOrder_r.T_outorderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  291. x += w2
  292. // -------------
  293. x = 22.0
  294. w1 = 80.0
  295. w2 = 195.0
  296. lib.RectFillColor(pdf, "设备名称:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  297. x += w1
  298. lib.RectFillColor(pdf, Device_r.T_devName, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  299. x += w2
  300. lib.RectFillColor(pdf, "设备编号:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  301. x += w1
  302. lib.RectFillColor(pdf, Device_r.T_sn, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  303. x += w2
  304. // -------------
  305. x = 22.0
  306. w1 = 80.0
  307. w2 = 240.0
  308. 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"))
  309. lib.RectFillColor(pdf, "送货时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  310. x += w1
  311. lib.RectFillColor(pdf, T_time, 12, x, 120, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  312. x += w2
  313. T_time = fmt.Sprintf("%s", GoodsOrder_r.CreateTime.Format("2006-01-02 15:04:05"))
  314. lib.RectFillColor(pdf, "订单时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  315. x += w1
  316. lib.RectFillColor(pdf, T_time, 12, x, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  317. // -------------
  318. x = 22.0
  319. w1 = 80.0
  320. w2 = 195.0*2 + 80
  321. T_text := fmt.Sprintf("%s", GoodsOrder_r.T_receiving)
  322. lib.RectFillColor(pdf, "收货单位:", 12, x, 140, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  323. x += w1
  324. lib.RectFillColor(pdf, T_text, 12, x, 140, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  325. x += w2
  326. // -----------
  327. textw, _ = pdf.MeasureTextWidth("历史数据")
  328. pdf.SetX(20)
  329. pdf.SetY(210)
  330. pdf.Text("历史数据:")
  331. // 数据展示--------------------------------
  332. var y float64 = 220
  333. x = 22.0
  334. w1 = 94.0
  335. w2 = 43.0
  336. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  337. x += w1
  338. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  339. x += w2
  340. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  341. x += w1
  342. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  343. x += w2
  344. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  345. x += w1
  346. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  347. x += w2
  348. lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  349. x += w1
  350. lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  351. x += w2
  352. // 数据展示--------------------------------
  353. y = 240
  354. err = pdf.SetFont("wts", "", 8)
  355. if err != nil {
  356. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  357. c.ServeJSON()
  358. return
  359. }
  360. nln := 0
  361. x = 22.0
  362. var T_t_l float32 = 100.0
  363. var T_t_u float32 = 0.0
  364. var T_t_v float32 = 0.0
  365. for n := 0; len(DeviceSensor_data) > n; n++ {
  366. // -计算温度
  367. if DeviceSensor_data[n].T_t < T_t_l {
  368. T_t_l = DeviceSensor_data[n].T_t
  369. }
  370. if DeviceSensor_data[n].T_t > T_t_u {
  371. T_t_u = DeviceSensor_data[n].T_t
  372. }
  373. T_t_v += DeviceSensor_data[n].T_t
  374. //text := fmt.Sprintf(" %d ", i+1)
  375. var textH float64 = 25 // if text height is 25px.
  376. pdf.SetNewY(y, textH)
  377. y = pdf.GetY()
  378. nln++
  379. if nln > 4 {
  380. nln = 1
  381. x = 22.0
  382. y += 18
  383. }
  384. // ------------------
  385. T_t := fmt.Sprintf(" %.1f ", DeviceSensor_data[n].T_t)
  386. T_time = fmt.Sprintf("%s", DeviceSensor_data[n].T_time)
  387. lib.RectFillColor(pdf, T_time, 10, x, y, w1, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  388. x += w1
  389. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  390. x += w2
  391. }
  392. err = pdf.SetFont("wts", "", 10)
  393. if err != nil {
  394. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  395. c.ServeJSON()
  396. return
  397. }
  398. // 数据汇总--------------------------------
  399. y = 160
  400. x = 22.0
  401. w1 = 60.0
  402. w2 = 50.0
  403. T_t := fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[len(DeviceSensor_data)-1].T_t)
  404. lib.RectFillColor(pdf, "起送温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  405. x += w1
  406. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  407. x += w2
  408. T_t = fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[0].T_t)
  409. lib.RectFillColor(pdf, "送达温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  410. x += w1
  411. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  412. x += w2
  413. T_t = fmt.Sprintf(" %.1f℃ ", T_t_l)
  414. lib.RectFillColor(pdf, "最低温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  415. x += w1
  416. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  417. x += w2
  418. T_t = fmt.Sprintf(" %.1f℃ ", float32(T_t_v/float32(len(DeviceSensor_data)-1)))
  419. lib.RectFillColor(pdf, "平均温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  420. x += w1
  421. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  422. x += w2
  423. T_t = fmt.Sprintf(" %.1f℃ ", T_t_u)
  424. lib.RectFillColor(pdf, "最高温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  425. x += w1
  426. lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
  427. x += w2
  428. //----------------
  429. timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
  430. err = pdf.WritePdf(timeStr)
  431. if err != nil {
  432. c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
  433. c.ServeJSON()
  434. return
  435. }
  436. //// 上传 OSS
  437. //url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
  438. //if !is {
  439. // c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
  440. // c.ServeJSON()
  441. // return
  442. //}
  443. ////删除目录
  444. //err = os.Remove(timeStr)
  445. //if err != nil {
  446. // fmt.Println(err)
  447. //}
  448. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "url"}
  449. c.ServeJSON()
  450. return
  451. }