DeviceClass.go 24 KB

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