DeviceClass.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984
  1. package controllers
  2. import (
  3. "ColdVerify_server/conf"
  4. "ColdVerify_server/lib"
  5. "ColdVerify_server/models/Account"
  6. "ColdVerify_server/models/Certificate"
  7. "ColdVerify_server/models/Device"
  8. "ColdVerify_server/models/System"
  9. "ColdVerify_server/models/Task"
  10. "ColdVerify_server/models/VerifyTemplate"
  11. "fmt"
  12. beego "github.com/beego/beego/v2/server/web"
  13. "math"
  14. "strconv"
  15. "strings"
  16. )
  17. type DeviceClassController struct {
  18. beego.Controller
  19. }
  20. // 列表 -
  21. func (c *DeviceClassController) List() {
  22. // 验证登录 User_is, User_r
  23. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  24. if !User_is {
  25. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  26. c.ServeJSON()
  27. return
  28. }
  29. var r_jsons lib.R_JSONS
  30. page, _ := c.GetInt("page")
  31. if page < 1 {
  32. page = 1
  33. }
  34. page_z, _ := c.GetInt("page_z")
  35. if page_z < 1 {
  36. page_z = conf.Page_size
  37. }
  38. T_name := c.GetString("T_name")
  39. var cnt int64
  40. List, cnt := Device.Read_DeviceClass_List(User_r.T_uuid, T_name, page, page_z)
  41. page_size := math.Ceil(float64(cnt) / float64(page_z))
  42. r_jsons.List = List
  43. r_jsons.Page = page
  44. r_jsons.Page_size = int(page_size)
  45. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  46. r_jsons.Num = int(cnt)
  47. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  48. c.ServeJSON()
  49. return
  50. }
  51. // 获取-
  52. func (c *DeviceClassController) Get() {
  53. // 验证登录 User_is, User_r
  54. _, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  55. if !User_is {
  56. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  57. c.ServeJSON()
  58. return
  59. }
  60. Id, err := c.GetInt("Id")
  61. if err != nil {
  62. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  63. c.ServeJSON()
  64. return
  65. }
  66. r, is := Device.Read_DeviceClass_ById(Id)
  67. if !is {
  68. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  69. c.ServeJSON()
  70. return
  71. }
  72. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r}
  73. c.ServeJSON()
  74. return
  75. }
  76. // 添加-
  77. func (c *DeviceClassController) Add() {
  78. // 验证登录 User_is, User_r
  79. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  80. if !User_is {
  81. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  82. c.ServeJSON()
  83. return
  84. }
  85. T_name := c.GetString("T_name")
  86. var_ := Device.DeviceClass{
  87. T_uuid: User_r.T_uuid,
  88. T_name: T_name,
  89. T_State: 1,
  90. }
  91. Id, is := Device.Add_DeviceClass(var_)
  92. if !is {
  93. c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  94. c.ServeJSON()
  95. return
  96. }
  97. System.Add_UserLogs_T(User_r.T_uuid, "分类管理", "添加", var_)
  98. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
  99. c.ServeJSON()
  100. return
  101. }
  102. // 修改-
  103. func (c *DeviceClassController) Up() {
  104. // 验证登录 User_is, User_r
  105. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  106. if !User_is {
  107. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  108. c.ServeJSON()
  109. return
  110. }
  111. T_name := c.GetString("T_name")
  112. Id, err := c.GetInt("Id")
  113. if err != nil {
  114. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  115. c.ServeJSON()
  116. return
  117. }
  118. r, is := Device.Read_DeviceClass_ById(Id)
  119. if !is {
  120. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  121. c.ServeJSON()
  122. return
  123. }
  124. // .......
  125. if len(T_name) > 0 {
  126. r.T_name = T_name
  127. }
  128. // .......
  129. if !Device.Update_DeviceClass(r, "T_name") {
  130. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  131. c.ServeJSON()
  132. return
  133. }
  134. System.Add_UserLogs_T(User_r.T_uuid, "分类管理", "修改", r)
  135. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  136. c.ServeJSON()
  137. return
  138. }
  139. // 删除-
  140. func (c *DeviceClassController) Del() {
  141. // 验证登录 User_is, User_r
  142. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  143. if !User_is {
  144. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  145. c.ServeJSON()
  146. return
  147. }
  148. Id, err := c.GetInt("Id")
  149. if err != nil {
  150. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  151. c.ServeJSON()
  152. return
  153. }
  154. if r, is := Device.Read_DeviceClass_ById(Id); is {
  155. if !Device.Delete_DeviceClass_(r) {
  156. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  157. c.ServeJSON()
  158. return
  159. }
  160. System.Add_UserLogs_T(User_r.T_uuid, "分类管理", "删除", r)
  161. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  162. c.ServeJSON()
  163. return
  164. }
  165. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  166. c.ServeJSON()
  167. return
  168. }
  169. //--------------------------
  170. // 列表 -
  171. func (c *DeviceClassController) List_List() {
  172. // 验证登录 User_is, User_r
  173. //_, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  174. //if !User_is {
  175. // c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  176. // c.ServeJSON()
  177. // return
  178. //}
  179. var r_jsons lib.R_JSONS
  180. page, _ := c.GetInt("page")
  181. if page < 1 {
  182. page = 1
  183. }
  184. page_z, _ := c.GetInt("page_z")
  185. if page_z < 1 {
  186. page_z = conf.Page_size
  187. }
  188. T_class, _ := c.GetInt("T_class")
  189. T_sn := c.GetString("T_sn")
  190. T_remark := c.GetString("T_remark")
  191. _, is := Device.Read_DeviceClass_ById(T_class)
  192. if !is {
  193. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class 错误!"}
  194. c.ServeJSON()
  195. return
  196. }
  197. var cnt int64
  198. //List, cnt := Device.Read_DeviceClassList_List(T_class, T_sn, page, 9999)
  199. List, cnt := Device.Read_DeviceClassList_OrderList(T_class, T_sn, "", T_remark, page, 9999)
  200. page_size := math.Ceil(float64(cnt) / float64(page_z))
  201. r_jsons.List = List
  202. r_jsons.Page = page
  203. r_jsons.Page_size = int(page_size)
  204. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  205. r_jsons.Num = int(cnt)
  206. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  207. c.ServeJSON()
  208. return
  209. }
  210. // 添加- 旧功能
  211. func (c *DeviceClassController) List_Add1() {
  212. // 验证登录 User_is, User_r
  213. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  214. if !User_is {
  215. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  216. c.ServeJSON()
  217. return
  218. }
  219. T_class, _ := c.GetInt("T_class")
  220. //方式1:001,002,003,004,005,008
  221. //方式2:001~005,008
  222. T_layout_no_list := c.GetString("T_layout_no_list")
  223. //T_sn := c.GetString("T_sn")
  224. T_remark := c.GetString("T_remark")
  225. _, is := Device.Read_DeviceClass_ById(T_class)
  226. if !is {
  227. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class 错误"}
  228. c.ServeJSON()
  229. return
  230. }
  231. list := strings.Split(strings.TrimRight(T_layout_no_list, ","), ",")
  232. snMap := make(map[string]string)
  233. excludeId := make(map[string]struct{})
  234. errList := []string{}
  235. var successNum int // 成功数量
  236. for _, v := range list {
  237. if strings.Contains(v, "!") {
  238. excludeId[fmt.Sprintf("%03d", lib.To_int(strings.TrimLeft(strings.Trim(v, "!"), "0")))] = struct{}{}
  239. continue
  240. }
  241. // 001~005
  242. if strings.Contains(v, "~") {
  243. vlist := strings.Split(v, "~")
  244. if len(vlist) != 2 {
  245. c.Data["json"] = lib.JSONS{Code: 202, Msg: "布局编号格式错误!"}
  246. c.ServeJSON()
  247. return
  248. }
  249. vstart, vend := lib.To_int(strings.TrimLeft(vlist[0], "0")), lib.To_int(strings.TrimLeft(vlist[1], "0"))
  250. for i := vstart; i < vend+1; i++ {
  251. T_id := fmt.Sprintf("%03d", i)
  252. cert, is := Certificate.Read_Certificate_ByT_layout_no(T_id)
  253. if !is {
  254. //c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("%s布局编号不存在!", T_id)}
  255. //c.ServeJSON()
  256. //return
  257. errList = append(errList, fmt.Sprintf("%s布局编号不存在!", T_id))
  258. continue
  259. }
  260. snMap[T_id] = cert.T_sn
  261. }
  262. } else {
  263. // 001,002
  264. cert, is := Certificate.Read_Certificate_ByT_layout_no(v)
  265. if !is {
  266. //c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("%s布局编号不存在!", v)}
  267. //c.ServeJSON()
  268. //return
  269. errList = append(errList, v)
  270. continue
  271. }
  272. snMap[v] = cert.T_sn
  273. }
  274. }
  275. errList2 := []string{}
  276. succesId := []string{}
  277. for T_id, T_sn := range snMap {
  278. if _, ok := excludeId[T_id]; ok {
  279. continue
  280. }
  281. //if _, is = Device.Read_Device(T_sn); !is {
  282. // c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_sn 不存在!"}
  283. // c.ServeJSON()
  284. // return
  285. //}
  286. if dc, is := Device.Read_DeviceClassList_T_class_T_sn(T_class, T_sn); is && dc.Id > 0 {
  287. successNum += 1
  288. continue
  289. }
  290. var pdf Certificate.CertificatePdf
  291. pdfList, _ := Certificate.Read_CertificatePdf_Newest(T_id)
  292. if len(pdfList) > 0 {
  293. pdf = pdfList[0]
  294. }
  295. var_ := Device.DeviceClassList{
  296. T_class: T_class,
  297. T_id: T_id,
  298. T_sn: T_sn,
  299. T_failure_time: pdf.T_failure_time,
  300. T_pdf: pdf.T_pdf,
  301. T_remark: T_remark,
  302. T_State: 1,
  303. }
  304. _, is = Device.Add_DeviceClassList(var_)
  305. if !is {
  306. //c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  307. //c.ServeJSON()
  308. //return
  309. errList2 = append(errList2, T_id)
  310. continue
  311. }
  312. successNum += 1
  313. succesId = append(succesId, T_id)
  314. System.Add_UserLogs_T(User_r.T_uuid, "分类设备管理", "添加", var_)
  315. }
  316. if len(errList) == 0 && len(errList2) == 0 {
  317. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: successNum}
  318. c.ServeJSON()
  319. return
  320. }
  321. var errStr string
  322. if len(errList) > 0 {
  323. errStr += strings.Join(errList, ",") + "编号不存在"
  324. }
  325. if len(errList2) > 0 {
  326. if len(errStr) > 0 {
  327. errStr += ","
  328. }
  329. errStr += strings.Join(errList2, ",") + "添加失败"
  330. }
  331. //if len(succesId) > 0 {
  332. // if len(errStr) > 0 {
  333. // errStr += ","
  334. // }
  335. // errStr += strings.Join(succesId, ",") + "添加成功"
  336. //}
  337. c.Data["json"] = lib.JSONS{Code: 210, Msg: errStr, Data: successNum}
  338. c.ServeJSON()
  339. return
  340. }
  341. func (c *DeviceClassController) List_Add() {
  342. // 验证登录 User_is, User_r
  343. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  344. if !User_is {
  345. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  346. c.ServeJSON()
  347. return
  348. }
  349. T_class, _ := c.GetInt("T_class")
  350. T_sn_id_list := c.GetString("T_sn_id_list")
  351. // 根据 | 分割数据
  352. items := strings.Split(T_sn_id_list, "|")
  353. // 创建一个 map 来去重
  354. uniqueItems := make(map[string]struct{})
  355. for _, item := range items {
  356. // 如果不为空,则添加到 map 中
  357. if item != "" {
  358. uniqueItems[item] = struct{}{}
  359. }
  360. }
  361. // 将唯一项拼接成字符串
  362. result := ""
  363. for item := range uniqueItems {
  364. result += item + "|"
  365. }
  366. // 移除最后的 | 字符
  367. if len(result) > 0 {
  368. result = result[:len(result)-1]
  369. }
  370. T_sn_id_list = result
  371. list := strings.Split(strings.TrimRight(T_sn_id_list, "|"), "|")
  372. T_remark := c.GetString("T_remark")
  373. _, is := Device.Read_DeviceClass_ById(T_class)
  374. if !is {
  375. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class 错误"}
  376. c.ServeJSON()
  377. return
  378. }
  379. var successNum int // 成功数量
  380. errList := []string{}
  381. errList2 := []string{}
  382. succesId := []string{}
  383. for _, sn_id := range list {
  384. T_sn := strings.Split(sn_id, ",")[0]
  385. T_id := strings.Split(sn_id, ",")[1]
  386. if len(T_sn) == 0 || len(T_id) == 0 {
  387. errList = append(errList, sn_id)
  388. continue
  389. }
  390. // 判断是否已存在sn
  391. dc, is := Device.Read_DeviceClassList_T_class_T_sn(T_class, T_sn)
  392. // 添加的id和数据库已存在id相同
  393. if is && dc.T_id == T_id {
  394. successNum += 1
  395. continue
  396. }
  397. // 添加的id和数据库已存在id不同
  398. if is && dc.T_id != T_id {
  399. _, is = Device.Read_DeviceClassList_T_class_T_id(T_class, T_id)
  400. if is {
  401. errList2 = append(errList2, sn_id)
  402. continue
  403. }
  404. dc.T_id = T_id
  405. dc.T_remark = T_remark
  406. if !Device.Update_DeviceClassList(dc, "T_id", "T_remark") {
  407. errList = append(errList, sn_id)
  408. } else {
  409. successNum += 1
  410. }
  411. continue
  412. }
  413. if !is {
  414. _, is = Device.Read_DeviceClassList_T_class_T_id(T_class, T_id)
  415. if is {
  416. errList2 = append(errList2, sn_id)
  417. continue
  418. }
  419. }
  420. var pdf Certificate.CertificatePdf
  421. //pdfList, _ := Certificate.Read_CertificatePdf_Newest(T_sn)
  422. pdfList, _ := Certificate.Read_CertificatePdf_T_layout_no(T_id, "")
  423. if len(pdfList) > 0 {
  424. pdf = pdfList[0]
  425. }
  426. var_ := Device.DeviceClassList{
  427. T_class: T_class,
  428. T_id: T_id,
  429. T_sn: T_sn,
  430. T_failure_time: pdf.T_failure_time,
  431. T_pdf: pdf.T_pdf,
  432. T_Certificate_sn: pdf.T_Certificate_sn,
  433. T_remark: T_remark,
  434. T_State: 1,
  435. }
  436. _, is = Device.Add_DeviceClassList(var_)
  437. if !is {
  438. errList = append(errList, sn_id)
  439. continue
  440. }
  441. successNum += 1
  442. succesId = append(succesId, sn_id)
  443. System.Add_UserLogs_T(User_r.T_uuid, "分类设备管理", "添加", var_)
  444. }
  445. if len(errList) == 0 && len(errList2) == 0 {
  446. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: successNum}
  447. c.ServeJSON()
  448. return
  449. }
  450. var errStr string
  451. if len(errList2) > 0 {
  452. errStr += strings.Join(errList2, ",") + "编号已存在"
  453. }
  454. if len(errList) > 0 {
  455. if len(errStr) > 0 {
  456. errStr += ","
  457. }
  458. errStr += strings.Join(errList, ",") + "添加失败"
  459. }
  460. c.Data["json"] = lib.JSONS{Code: 210, Msg: errStr, Data: successNum}
  461. c.ServeJSON()
  462. return
  463. }
  464. func (c *DeviceClassController) List_Copy() {
  465. // 验证登录 User_is, User_r
  466. _, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  467. if !User_is {
  468. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  469. c.ServeJSON()
  470. return
  471. }
  472. T_copy_task_id := c.GetString("T_copy_task_id")
  473. copy_task, is := Task.Read_Task(T_copy_task_id)
  474. if !is {
  475. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_copy_task_id 错误!"}
  476. c.ServeJSON()
  477. return
  478. }
  479. T_paste_task_id := c.GetString("T_paste_task_id")
  480. paste_task, is := Task.Read_Task(T_paste_task_id)
  481. if !is {
  482. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_paste_task_id 错误!"}
  483. c.ServeJSON()
  484. return
  485. }
  486. errList := []string{}
  487. pasteList, cnt := Device.Read_DeviceClassList_OrderList(paste_task.T_class, "", "", "", 0, 9999)
  488. for _, ds := range pasteList {
  489. if !Device.Delete_DeviceClassList_(ds) {
  490. errList = append(errList, ds.T_id)
  491. continue
  492. }
  493. }
  494. // 删除旧的设备列表
  495. copyList, cnt := Device.Read_DeviceClassList_OrderList(copy_task.T_class, "", "", "", 0, 9999)
  496. var successNum int // 成功数量
  497. for _, v := range copyList {
  498. // 不存在则添加
  499. var pdf Certificate.CertificatePdf
  500. pdfList, _ := Certificate.Read_CertificatePdf_T_layout_no(v.T_id, "")
  501. if len(pdfList) > 0 {
  502. pdf = pdfList[0]
  503. }
  504. var_ := Device.DeviceClassList{
  505. T_class: paste_task.T_class,
  506. T_id: v.T_id,
  507. T_sn: v.T_sn,
  508. T_failure_time: pdf.T_failure_time,
  509. T_pdf: pdf.T_pdf,
  510. T_Certificate_sn: pdf.T_Certificate_sn,
  511. T_remark: v.T_remark,
  512. T_terminal: v.T_terminal,
  513. T_State: 1,
  514. }
  515. _, is = Device.Add_DeviceClassList(var_)
  516. if !is {
  517. errList = append(errList, v.T_id)
  518. continue
  519. }
  520. }
  521. if len(errList) == 0 {
  522. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: cnt}
  523. c.ServeJSON()
  524. return
  525. }
  526. var errStr string
  527. if len(errList) > 0 {
  528. if len(errStr) > 0 {
  529. errStr += ","
  530. }
  531. errStr += strings.Join(errList, ",") + "粘贴失败"
  532. }
  533. c.Data["json"] = lib.JSONS{Code: 210, Msg: errStr, Data: successNum}
  534. c.ServeJSON()
  535. return
  536. }
  537. // 修改-
  538. func (c *DeviceClassController) List_Up() {
  539. // 验证登录 User_is, User_r
  540. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  541. if !User_is {
  542. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  543. c.ServeJSON()
  544. return
  545. }
  546. T_id := c.GetString("T_id")
  547. T_remark := c.GetString("T_remark")
  548. Id, err := c.GetInt("Id")
  549. if err != nil {
  550. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  551. c.ServeJSON()
  552. return
  553. }
  554. r, is := Device.Read_DeviceClassList_ById(Id)
  555. if !is {
  556. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  557. c.ServeJSON()
  558. return
  559. }
  560. _, is = Device.Read_DeviceClass_ById(r.T_class)
  561. if !is {
  562. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class 错误!"}
  563. c.ServeJSON()
  564. return
  565. }
  566. _, is = Device.Read_DeviceClassList_T_class_T_id(r.T_class, T_id)
  567. if is && T_id != r.T_id {
  568. c.Data["json"] = lib.JSONS{Code: 202, Msg: T_id + "编号已存在!"}
  569. c.ServeJSON()
  570. return
  571. }
  572. if len(T_id) > 0 {
  573. r.T_id = T_id
  574. // 修改布局编号对应的证书
  575. var pdf Certificate.CertificatePdf
  576. pdfList, _ := Certificate.Read_CertificatePdf_T_layout_no(T_id, r.CreateTime.Format("2006-01-02"))
  577. if len(pdfList) > 0 {
  578. pdf = pdfList[0]
  579. }
  580. r.T_failure_time = pdf.T_failure_time
  581. r.T_pdf = pdf.T_pdf
  582. r.T_Certificate_sn = pdf.T_Certificate_sn
  583. }
  584. if len(T_remark) > 0 {
  585. r.T_remark = T_remark
  586. }
  587. if !Device.Update_DeviceClassList(r, "T_id", "T_remark", "T_failure_time", "T_pdf", "T_Certificate_sn") {
  588. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  589. c.ServeJSON()
  590. return
  591. }
  592. System.Add_UserLogs_T(User_r.T_uuid, "分类设备管理", "修改", r)
  593. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  594. c.ServeJSON()
  595. return
  596. }
  597. // 修改终端
  598. func (c *DeviceClassController) List_Up_terminal() {
  599. // 验证登录 User_is, User_r
  600. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  601. if !User_is {
  602. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  603. c.ServeJSON()
  604. return
  605. }
  606. T_terminal, _ := c.GetInt("T_terminal")
  607. T_task_id := c.GetString("T_task_id")
  608. T_id := c.GetString("T_id")
  609. task, is := Task.Read_Task(T_task_id)
  610. if !is {
  611. c.Data["json"] = lib.JSONS{Code: 202, Msg: "获取任务失败!"}
  612. c.ServeJSON()
  613. return
  614. }
  615. r, is := Device.Read_DeviceClassList_T_class_T_id(task.T_class, T_id)
  616. if !is {
  617. c.Data["json"] = lib.JSONS{Code: 202, Msg: "获取设备失败!"}
  618. c.ServeJSON()
  619. return
  620. }
  621. if T_terminal > 0 {
  622. r.T_terminal = T_terminal
  623. }
  624. if !Device.Update_DeviceClassList(r, "T_terminal") {
  625. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  626. c.ServeJSON()
  627. return
  628. }
  629. System.Add_UserLogs_T(User_r.T_uuid, "分类设备管理", "修改终端标识", r)
  630. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  631. c.ServeJSON()
  632. return
  633. }
  634. // 删除-
  635. func (c *DeviceClassController) List_Del() {
  636. // 验证登录 User_is, User_r
  637. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  638. if !User_is {
  639. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  640. c.ServeJSON()
  641. return
  642. }
  643. Id, err := c.GetInt("Id")
  644. if err != nil {
  645. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  646. c.ServeJSON()
  647. return
  648. }
  649. if r, is := Device.Read_DeviceClassList_ById(Id); is {
  650. _, is = Device.Read_DeviceClass_ById(r.T_class)
  651. if !is {
  652. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class 错误!"}
  653. c.ServeJSON()
  654. return
  655. }
  656. if !Device.Delete_DeviceClassList_(r) {
  657. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  658. c.ServeJSON()
  659. return
  660. }
  661. System.Add_UserLogs_T(User_r.T_uuid, "分类设备管理", "删除", r)
  662. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  663. c.ServeJSON()
  664. return
  665. }
  666. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  667. c.ServeJSON()
  668. return
  669. }
  670. // 添加设备列表。模版下载
  671. func (c *DeviceClassController) List_Template_Download() {
  672. // 返回生成的 Excel 文件
  673. c.Ctx.Output.Download("static/添加设备列表模版.xlsx")
  674. }
  675. func (c *DeviceClassController) List_Del_Duplication() {
  676. // 验证登录 User_is, User_r
  677. _, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  678. if !User_is {
  679. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  680. c.ServeJSON()
  681. return
  682. }
  683. T_task_id := c.GetString("T_task_id")
  684. r, is := Task.Read_Task(T_task_id)
  685. if !is {
  686. c.Data["json"] = lib.JSONS{Code: 202, Msg: "任务id 错误!"}
  687. c.ServeJSON()
  688. return
  689. }
  690. Device.Del_DeviceClassList_Duplication(r.T_class)
  691. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  692. c.ServeJSON()
  693. return
  694. }
  695. // 同步证书到设备列表
  696. func (c *DeviceClassController) Sync_CertificatePdf_ToList() {
  697. // 验证登录 User_is, User_r
  698. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  699. if !User_is {
  700. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  701. c.ServeJSON()
  702. return
  703. }
  704. CreateTime := c.GetString("CreateTime")
  705. list := Device.Read_DeviceClassList_List_ByT_Certificate_sn_null(CreateTime)
  706. for _, v := range list {
  707. var pdf Certificate.CertificatePdf
  708. pdfList, _ := Certificate.Read_CertificatePdf_T_layout_no(v.T_id, v.CreateTime.Format("2006-01-02"))
  709. if len(pdfList) > 0 {
  710. pdf = pdfList[0]
  711. } else {
  712. continue
  713. }
  714. v.T_Certificate_sn = pdf.T_Certificate_sn
  715. v.T_failure_time = pdf.T_failure_time
  716. v.T_pdf = pdf.T_pdf
  717. if !Device.Update_DeviceClassList(v, "T_failure_time", "T_pdf", "T_Certificate_sn") {
  718. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  719. c.ServeJSON()
  720. return
  721. }
  722. }
  723. System.Add_UserLogs_T(User_r.T_uuid, "分类设备管理", "同步证书到设备列表", CreateTime)
  724. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  725. c.ServeJSON()
  726. return
  727. }
  728. // 自动填写设备备注
  729. func (c *DeviceClassController) Auto_fill_Remark() {
  730. // 验证登录 User_is, User_r
  731. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  732. if !User_is {
  733. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  734. c.ServeJSON()
  735. return
  736. }
  737. T_task_id := c.GetString("T_task_id")
  738. task, is := Task.Read_Task(T_task_id)
  739. if !is {
  740. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  741. c.ServeJSON()
  742. return
  743. }
  744. verifyTemplate, is := VerifyTemplate.Read_VerifyTemplate(task.T_VerifyTemplate_id)
  745. verifyTemplate_R := VerifyTemplate.VerifyTemplateToVerifyTemplate_R(verifyTemplate)
  746. T_deploy_list := verifyTemplate_R.T_deploy_list
  747. // 循环查询布点
  748. deviceClassRemarkMap := make(map[int][]string)
  749. deviceClassList := Device.Read_DeviceClassList_List_id_By_Terminal(task.T_class, false)
  750. for _, deploy := range T_deploy_list {
  751. if len(deploy.T_scope) > 0 {
  752. dcl := FilterByRange(deviceClassList, deploy.T_scope)
  753. for _, dc := range dcl {
  754. deviceClassRemarkMap[dc.Id] = append(deviceClassRemarkMap[dc.Id], deploy.T_name)
  755. }
  756. }
  757. }
  758. for _, deviceClass := range deviceClassList {
  759. if remark, ok := deviceClassRemarkMap[deviceClass.Id]; ok {
  760. deviceClass.T_remark = strings.Join(remark, "|")
  761. if !Device.Update_DeviceClassList(deviceClass, "T_remark") {
  762. c.Data["json"] = lib.JSONS{Code: 200, Msg: "修改备注失败!"}
  763. c.ServeJSON()
  764. return
  765. }
  766. }
  767. }
  768. System.Add_UserLogs_T(User_r.T_uuid, "设备备注", "自动填写", T_task_id)
  769. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  770. c.ServeJSON()
  771. return
  772. }
  773. func FilterByRange(data []Device.DeviceClassList, condition string) []Device.DeviceClassList {
  774. var result []Device.DeviceClassList
  775. parts := strings.Split(condition, ",")
  776. for _, part := range parts {
  777. if strings.Contains(part, "-") {
  778. // 处理范围 如1-16
  779. rangeParts := strings.Split(part, "-")
  780. if len(rangeParts) != 2 {
  781. continue
  782. }
  783. start, err1 := strconv.Atoi(rangeParts[0])
  784. end, err2 := strconv.Atoi(rangeParts[1])
  785. if err1 != nil || err2 != nil || start > end {
  786. continue
  787. }
  788. // 转换为0-based索引
  789. startIdx := start - 1
  790. endIdx := end - 1
  791. // 确保索引在有效范围内
  792. if startIdx < 0 {
  793. startIdx = 0
  794. }
  795. if endIdx >= len(data) {
  796. endIdx = len(data) - 1
  797. }
  798. for i := startIdx; i <= endIdx; i++ {
  799. result = append(result, data[i])
  800. }
  801. } else {
  802. // 处理单个数字 如2,5
  803. num, err := strconv.Atoi(part)
  804. if err != nil {
  805. continue
  806. }
  807. // 转换为0-based索引
  808. idx := num - 1
  809. // 确保索引在有效范围内
  810. if idx >= 0 && idx < len(data) {
  811. result = append(result, data[idx])
  812. }
  813. }
  814. }
  815. return result
  816. }
  817. // 验证工具统计
  818. func (c *DeviceClassController) Stat() {
  819. // 验证登录 User_is, User_r
  820. _, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  821. if !User_is {
  822. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  823. c.ServeJSON()
  824. return
  825. }
  826. var r_jsons lib.R_JSONS
  827. page, _ := c.GetInt("page")
  828. if page < 1 {
  829. page = 1
  830. }
  831. page_z, _ := c.GetInt("page_z")
  832. if page_z < 1 {
  833. page_z = conf.Page_size
  834. }
  835. T_company := c.GetString("T_company") // 公司名称
  836. var T_company_list []string
  837. if len(T_company) > 0 {
  838. T_company_list = Account.Read_User_T_uuid_ListByT_name(T_company)
  839. }
  840. Time_start := c.GetString("Time_start")
  841. Time_end := c.GetString("Time_end")
  842. T_name := c.GetString("T_name")
  843. T_sn := c.GetString("T_sn")
  844. T_distinct, _ := c.GetBool("T_distinct")
  845. UserMap := Account.UserListToMap(Account.Read_User_List_ALL_1())
  846. var cnt int64
  847. List, cnt := Device.Read_DeviceClass_Stat(T_company_list, T_name, T_sn, Time_start, Time_end, T_distinct, UserMap, page, page_z)
  848. page_size := math.Ceil(float64(cnt) / float64(page_z))
  849. r_jsons.List = List
  850. r_jsons.Page = page
  851. r_jsons.Page_size = int(page_size)
  852. r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
  853. r_jsons.Num = int(cnt)
  854. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  855. c.ServeJSON()
  856. return
  857. }