DeviceClass.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946
  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. copyList, cnt := Device.Read_DeviceClassList_OrderList(copy_task.T_class, "", "", "", 0, 9999)
  487. var successNum int // 成功数量
  488. errList := []string{}
  489. for _, v := range copyList {
  490. ds, is2 := Device.Read_DeviceClassList_T_class_T_id(paste_task.T_class, v.T_id)
  491. // id存在 更新
  492. if is2 {
  493. ds.T_sn = v.T_sn
  494. ds.T_remark = v.T_remark
  495. if !Device.Update_DeviceClassList(ds, "T_sn", "T_remark") {
  496. errList = append(errList, v.T_id)
  497. continue
  498. }
  499. } else {
  500. // 判断是否已存在sn
  501. _, is3 := Device.Read_DeviceClassList_T_class_T_sn(paste_task.T_class, v.T_sn)
  502. // 删除要粘贴的任务里重复的sn
  503. if is3 {
  504. if !Device.Delete_DeviceClassList_(ds) {
  505. errList = append(errList, v.T_id)
  506. continue
  507. }
  508. }
  509. // 不存在则添加
  510. var pdf Certificate.CertificatePdf
  511. pdfList, _ := Certificate.Read_CertificatePdf_T_layout_no(v.T_id, "")
  512. if len(pdfList) > 0 {
  513. pdf = pdfList[0]
  514. }
  515. var_ := Device.DeviceClassList{
  516. T_class: paste_task.T_class,
  517. T_id: v.T_id,
  518. T_sn: v.T_sn,
  519. T_failure_time: pdf.T_failure_time,
  520. T_pdf: pdf.T_pdf,
  521. T_Certificate_sn: pdf.T_Certificate_sn,
  522. T_remark: v.T_remark,
  523. T_State: 1,
  524. }
  525. _, is = Device.Add_DeviceClassList(var_)
  526. if !is {
  527. errList = append(errList, v.T_id)
  528. continue
  529. }
  530. }
  531. }
  532. if len(errList) == 0 {
  533. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: cnt}
  534. c.ServeJSON()
  535. return
  536. }
  537. var errStr string
  538. if len(errList) > 0 {
  539. if len(errStr) > 0 {
  540. errStr += ","
  541. }
  542. errStr += strings.Join(errList, ",") + "粘贴失败"
  543. }
  544. c.Data["json"] = lib.JSONS{Code: 210, Msg: errStr, Data: successNum}
  545. c.ServeJSON()
  546. return
  547. }
  548. // 修改-
  549. func (c *DeviceClassController) List_Up() {
  550. // 验证登录 User_is, User_r
  551. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  552. if !User_is {
  553. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  554. c.ServeJSON()
  555. return
  556. }
  557. T_id := c.GetString("T_id")
  558. T_remark := c.GetString("T_remark")
  559. Id, err := c.GetInt("Id")
  560. if err != nil {
  561. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  562. c.ServeJSON()
  563. return
  564. }
  565. r, is := Device.Read_DeviceClassList_ById(Id)
  566. if !is {
  567. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  568. c.ServeJSON()
  569. return
  570. }
  571. _, is = Device.Read_DeviceClass_ById(r.T_class)
  572. if !is {
  573. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class 错误!"}
  574. c.ServeJSON()
  575. return
  576. }
  577. _, is = Device.Read_DeviceClassList_T_class_T_id(r.T_class, T_id)
  578. if is && T_id != r.T_id {
  579. c.Data["json"] = lib.JSONS{Code: 202, Msg: T_id + "编号已存在!"}
  580. c.ServeJSON()
  581. return
  582. }
  583. if len(T_id) > 0 {
  584. r.T_id = T_id
  585. // 修改布局编号对应的证书
  586. var pdf Certificate.CertificatePdf
  587. pdfList, _ := Certificate.Read_CertificatePdf_T_layout_no(T_id, r.CreateTime.Format("2006-01-02"))
  588. if len(pdfList) > 0 {
  589. pdf = pdfList[0]
  590. }
  591. r.T_failure_time = pdf.T_failure_time
  592. r.T_pdf = pdf.T_pdf
  593. r.T_Certificate_sn = pdf.T_Certificate_sn
  594. }
  595. if len(T_remark) > 0 {
  596. r.T_remark = T_remark
  597. }
  598. if !Device.Update_DeviceClassList(r, "T_id", "T_remark", "T_failure_time", "T_pdf", "T_Certificate_sn") {
  599. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  600. c.ServeJSON()
  601. return
  602. }
  603. System.Add_UserLogs_T(User_r.T_uuid, "分类设备管理", "修改", r)
  604. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  605. c.ServeJSON()
  606. return
  607. }
  608. // 修改终端
  609. func (c *DeviceClassController) List_Up_terminal() {
  610. // 验证登录 User_is, User_r
  611. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  612. if !User_is {
  613. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  614. c.ServeJSON()
  615. return
  616. }
  617. T_terminal, _ := c.GetInt("T_terminal")
  618. T_task_id := c.GetString("T_task_id")
  619. T_id := c.GetString("T_id")
  620. task, is := Task.Read_Task(T_task_id)
  621. if !is {
  622. c.Data["json"] = lib.JSONS{Code: 202, Msg: "获取任务失败!"}
  623. c.ServeJSON()
  624. return
  625. }
  626. r, is := Device.Read_DeviceClassList_T_class_T_id(task.T_class, T_id)
  627. if !is {
  628. c.Data["json"] = lib.JSONS{Code: 202, Msg: "获取设备失败!"}
  629. c.ServeJSON()
  630. return
  631. }
  632. if T_terminal > 0 {
  633. r.T_terminal = T_terminal
  634. }
  635. if !Device.Update_DeviceClassList(r, "T_terminal") {
  636. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  637. c.ServeJSON()
  638. return
  639. }
  640. System.Add_UserLogs_T(User_r.T_uuid, "分类设备管理", "修改终端标识", r)
  641. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  642. c.ServeJSON()
  643. return
  644. }
  645. // 删除-
  646. func (c *DeviceClassController) List_Del() {
  647. // 验证登录 User_is, User_r
  648. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  649. if !User_is {
  650. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  651. c.ServeJSON()
  652. return
  653. }
  654. Id, err := c.GetInt("Id")
  655. if err != nil {
  656. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  657. c.ServeJSON()
  658. return
  659. }
  660. if r, is := Device.Read_DeviceClassList_ById(Id); is {
  661. _, is = Device.Read_DeviceClass_ById(r.T_class)
  662. if !is {
  663. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class 错误!"}
  664. c.ServeJSON()
  665. return
  666. }
  667. if !Device.Delete_DeviceClassList_(r) {
  668. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  669. c.ServeJSON()
  670. return
  671. }
  672. System.Add_UserLogs_T(User_r.T_uuid, "分类设备管理", "删除", r)
  673. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  674. c.ServeJSON()
  675. return
  676. }
  677. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  678. c.ServeJSON()
  679. return
  680. }
  681. // 添加设备列表。模版下载
  682. func (c *DeviceClassController) List_Template_Download() {
  683. // 返回生成的 Excel 文件
  684. c.Ctx.Output.Download("static/添加设备列表模版.xlsx")
  685. }
  686. func (c *DeviceClassController) List_Del_Duplication() {
  687. // 验证登录 User_is, User_r
  688. _, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  689. if !User_is {
  690. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  691. c.ServeJSON()
  692. return
  693. }
  694. T_task_id := c.GetString("T_task_id")
  695. r, is := Task.Read_Task(T_task_id)
  696. if !is {
  697. c.Data["json"] = lib.JSONS{Code: 202, Msg: "任务id 错误!"}
  698. c.ServeJSON()
  699. return
  700. }
  701. Device.Del_DeviceClassList_Duplication(r.T_class)
  702. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  703. c.ServeJSON()
  704. return
  705. }
  706. // 同步证书到设备列表
  707. func (c *DeviceClassController) Sync_CertificatePdf_ToList() {
  708. // 验证登录 User_is, User_r
  709. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  710. if !User_is {
  711. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  712. c.ServeJSON()
  713. return
  714. }
  715. CreateTime := c.GetString("CreateTime")
  716. list := Device.Read_DeviceClassList_List_ByT_Certificate_sn_null(CreateTime)
  717. for _, v := range list {
  718. var pdf Certificate.CertificatePdf
  719. pdfList, _ := Certificate.Read_CertificatePdf_T_layout_no(v.T_id, v.CreateTime.Format("2006-01-02"))
  720. if len(pdfList) > 0 {
  721. pdf = pdfList[0]
  722. } else {
  723. continue
  724. }
  725. v.T_Certificate_sn = pdf.T_Certificate_sn
  726. v.T_failure_time = pdf.T_failure_time
  727. v.T_pdf = pdf.T_pdf
  728. if !Device.Update_DeviceClassList(v, "T_failure_time", "T_pdf", "T_Certificate_sn") {
  729. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  730. c.ServeJSON()
  731. return
  732. }
  733. }
  734. System.Add_UserLogs_T(User_r.T_uuid, "分类设备管理", "同步证书到设备列表", CreateTime)
  735. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  736. c.ServeJSON()
  737. return
  738. }
  739. // 自动填写设备备注
  740. func (c *DeviceClassController) Auto_fill_Remark() {
  741. // 验证登录 User_is, User_r
  742. User_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
  743. if !User_is {
  744. c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
  745. c.ServeJSON()
  746. return
  747. }
  748. T_task_id := c.GetString("T_task_id")
  749. task, is := Task.Read_Task(T_task_id)
  750. if !is {
  751. c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
  752. c.ServeJSON()
  753. return
  754. }
  755. verifyTemplate, is := VerifyTemplate.Read_VerifyTemplate(task.T_VerifyTemplate_id)
  756. verifyTemplate_R := VerifyTemplate.VerifyTemplateToVerifyTemplate_R(verifyTemplate)
  757. T_deploy_list := verifyTemplate_R.T_deploy_list
  758. // 循环查询布点
  759. deviceClassRemarkMap := make(map[int][]string)
  760. deviceClassList := Device.Read_DeviceClassList_List_id_By_Terminal(task.T_class, false)
  761. for _, deploy := range T_deploy_list {
  762. if len(deploy.T_scope) > 0 {
  763. dcl := FilterByRange(deviceClassList, deploy.T_scope)
  764. for _, dc := range dcl {
  765. deviceClassRemarkMap[dc.Id] = append(deviceClassRemarkMap[dc.Id], deploy.T_name)
  766. }
  767. }
  768. }
  769. for _, deviceClass := range deviceClassList {
  770. if remark, ok := deviceClassRemarkMap[deviceClass.Id]; ok {
  771. deviceClass.T_remark = strings.Join(remark, "|")
  772. if !Device.Update_DeviceClassList(deviceClass, "T_remark") {
  773. c.Data["json"] = lib.JSONS{Code: 200, Msg: "修改备注失败!"}
  774. c.ServeJSON()
  775. return
  776. }
  777. }
  778. }
  779. System.Add_UserLogs_T(User_r.T_uuid, "设备备注", "自动填写", T_task_id)
  780. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
  781. c.ServeJSON()
  782. return
  783. }
  784. func FilterByRange(data []Device.DeviceClassList, condition string) []Device.DeviceClassList {
  785. var result []Device.DeviceClassList
  786. parts := strings.Split(condition, ",")
  787. for _, part := range parts {
  788. if strings.Contains(part, "-") {
  789. // 处理范围 如1-16
  790. rangeParts := strings.Split(part, "-")
  791. if len(rangeParts) != 2 {
  792. continue
  793. }
  794. start, err1 := strconv.Atoi(rangeParts[0])
  795. end, err2 := strconv.Atoi(rangeParts[1])
  796. if err1 != nil || err2 != nil || start > end {
  797. continue
  798. }
  799. // 转换为0-based索引
  800. startIdx := start - 1
  801. endIdx := end - 1
  802. // 确保索引在有效范围内
  803. if startIdx < 0 {
  804. startIdx = 0
  805. }
  806. if endIdx >= len(data) {
  807. endIdx = len(data) - 1
  808. }
  809. for i := startIdx; i <= endIdx; i++ {
  810. result = append(result, data[i])
  811. }
  812. } else {
  813. // 处理单个数字 如2,5
  814. num, err := strconv.Atoi(part)
  815. if err != nil {
  816. continue
  817. }
  818. // 转换为0-based索引
  819. idx := num - 1
  820. // 确保索引在有效范围内
  821. if idx >= 0 && idx < len(data) {
  822. result = append(result, data[idx])
  823. }
  824. }
  825. }
  826. return result
  827. }