DeviceClass.go 29 KB

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