Validation.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. package controllers
  2. import (
  3. "ERP_storage/conf"
  4. "ERP_storage/logs"
  5. "ERP_storage/models/Account"
  6. "ERP_storage/models/Basic"
  7. "ERP_storage/models/Stock"
  8. "ERP_storage/models/validationtool"
  9. "encoding/json"
  10. "errors"
  11. "fmt"
  12. "github.com/beego/beego/v2/adapter/orm"
  13. beego "github.com/beego/beego/v2/server/web"
  14. "github.com/xuri/excelize/v2"
  15. userlibs "gogs.baozhida.cn/zoie/ERP_libs/User"
  16. "gogs.baozhida.cn/zoie/ERP_libs/lib"
  17. "math"
  18. "net/url"
  19. "os"
  20. "strconv"
  21. "strings"
  22. "time"
  23. )
  24. type ValidationController struct {
  25. beego.Controller
  26. User userlibs.User
  27. }
  28. func (c *ValidationController) Prepare() {
  29. c.User = *Account.User_r
  30. }
  31. // AddValidation 查询设备是否存在在库存中,如果存在则修改设备状态为待使用,否则直接添加设备
  32. //
  33. // func (c *ValidationController) AddValidation() {
  34. // var ValidationList []validationtool.AddValidationTool
  35. // err := json.Unmarshal(c.Ctx.Input.RequestBody, &ValidationList)
  36. // if err != nil {
  37. // c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil}
  38. // c.ServeJSON()
  39. // return
  40. // }
  41. // vali := validationtool.NewValidationTool(orm.NewOrm())
  42. // for _, tool := range ValidationList {
  43. // if len(tool.T_sn) <= 0 {
  44. // c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
  45. // c.ServeJSON()
  46. // return
  47. // }
  48. // r, err := vali.ReadValidationBytSn(tool.T_sn)
  49. // if err != nil {
  50. // if errors.Is(err, orm.ErrNoRows) {
  51. // var validataiontool validationtool.ValidationTool
  52. // atoi, _ := strconv.Atoi(tool.T_class)
  53. // user := Stock.Read_MqttUser(tool.T_sn)
  54. // validataiontool.T_iccid = user.Iccid
  55. // validataiontool.T_imei = user.Imei
  56. // validataiontool.T_uuid = c.User.T_uuid
  57. // validataiontool.Validationnumber = tool.Validationnumber
  58. // validataiontool.T_sn = tool.T_sn
  59. // validataiontool.T_remark = tool.T_remark
  60. // validataiontool.T_state = 2
  61. // validataiontool.T_class = atoi
  62. // validataiontool.UpdateTime = time.Now()
  63. // _, err := vali.ADDValidationTool(validataiontool)
  64. // if err != nil {
  65. // c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil}
  66. // c.ServeJSON()
  67. // return
  68. // }
  69. // }
  70. // } else {
  71. // //修改设备
  72. // con := make(map[string]string)
  73. // if len(tool.Validationnumber) != 0 {
  74. // con["validationnumber"] = tool.Validationnumber
  75. // }
  76. // if r.T_state != 2 {
  77. // con["t_state"] = "2" // 待使用
  78. // }
  79. // con["t_remark"] = tool.T_remark
  80. // con["t_project"] = ""
  81. // con["lend_user"] = ""
  82. // err = vali.UpdateValidationTool(r.T_sn, con)
  83. // if err != nil {
  84. // c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil}
  85. // c.ServeJSON()
  86. // return
  87. // }
  88. // }
  89. // }
  90. // c.Data["json"] = lib.JSONS{Code: 200, Msg: "入库成功!", Data: nil}
  91. // c.ServeJSON()
  92. // return
  93. // }
  94. func (c *ValidationController) AddValidation() {
  95. var ValidationList []validationtool.AddValidationTool
  96. err := json.Unmarshal(c.Ctx.Input.RequestBody, &ValidationList)
  97. if err != nil {
  98. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil}
  99. c.ServeJSON()
  100. return
  101. }
  102. o := orm.NewOrm()
  103. vali := validationtool.NewValidationTool(o)
  104. o.Begin() // 开始事务
  105. for _, tool := range ValidationList {
  106. if len(tool.T_sn) <= 0 {
  107. o.Rollback() // 回滚事务
  108. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
  109. c.ServeJSON()
  110. return
  111. }
  112. r, err := vali.ReadValidationBytSn(tool.T_sn)
  113. if err != nil {
  114. if errors.Is(err, orm.ErrNoRows) {
  115. var validataiontool validationtool.ValidationTool
  116. atoi, _ := strconv.Atoi(tool.T_class)
  117. user := Stock.Read_MqttUser(tool.T_sn)
  118. validataiontool.T_iccid = user.Iccid
  119. validataiontool.T_imei = user.Imei
  120. validataiontool.T_uuid = c.User.T_uuid
  121. validataiontool.Validationnumber = tool.Validationnumber
  122. validataiontool.T_sn = tool.T_sn
  123. validataiontool.T_remark = tool.T_remark
  124. validataiontool.T_state = 2
  125. validataiontool.T_class = atoi
  126. validataiontool.UpdateTime = time.Now()
  127. _, err := vali.ADDValidationTool(validataiontool)
  128. if err != nil {
  129. o.Rollback() // 回滚事务
  130. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil}
  131. c.ServeJSON()
  132. return
  133. }
  134. } else {
  135. o.Rollback() // 回滚事务
  136. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "查询失败!", Data: nil}
  137. c.ServeJSON()
  138. return
  139. }
  140. } else {
  141. // 修改设备
  142. con := make(map[string]string)
  143. if len(tool.Validationnumber) != 0 {
  144. con["validationnumber"] = tool.Validationnumber
  145. }
  146. if r.T_state != 2 {
  147. con["t_state"] = "2" // 待使用
  148. }
  149. con["t_remark"] = tool.T_remark
  150. con["t_project"] = ""
  151. con["lend_user"] = ""
  152. err = vali.UpdateValidationTool(r.T_sn, con)
  153. if err != nil {
  154. o.Rollback() // 回滚事务
  155. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil}
  156. c.ServeJSON()
  157. return
  158. }
  159. }
  160. }
  161. err = o.Commit() // 提交事务
  162. if err != nil {
  163. o.Rollback() // 回滚事务
  164. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
  165. c.ServeJSON()
  166. return
  167. }
  168. c.Data["json"] = lib.JSONS{Code: 200, Msg: "入库成功!", Data: nil}
  169. c.ServeJSON()
  170. return
  171. }
  172. func (c *ValidationController) ValidationList() {
  173. // 分页参数 初始化
  174. page, _ := c.GetInt("page")
  175. if page < 1 {
  176. page = 1
  177. }
  178. page_z, _ := c.GetInt("page_z")
  179. if page_z < 1 {
  180. page_z = conf.Page_size
  181. }
  182. T_state := c.GetString("T_state")
  183. validationnumber := c.GetString("Validationnumber")
  184. T_sn := c.GetString("T_sn")
  185. t_iccid := c.GetString("t_iccid")
  186. t_imei := c.GetString("t_imei")
  187. LendUser := c.GetString("LendUser")
  188. T_project := c.GetString("T_project")
  189. T_class := c.GetString("T_class")
  190. vali := validationtool.NewValidationTool(orm.NewOrm())
  191. R_List, R_cnt := vali.Read_Validation_List(validationnumber, T_sn, t_iccid, t_imei, T_state, LendUser, T_project, T_class, page, page_z)
  192. var r_jsons lib.R_JSONS
  193. r_jsons.Num = R_cnt
  194. r_jsons.Data = R_List
  195. r_jsons.Page = page
  196. r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
  197. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  198. c.ServeJSON()
  199. return
  200. }
  201. func (c *ValidationController) DeleteValidationTool() {
  202. id := c.GetString("t_sn")
  203. if len(id) <= 0 {
  204. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "t_sn不能为空!", Data: nil}
  205. c.ServeJSON()
  206. return
  207. }
  208. vali := validationtool.NewValidationTool(orm.NewOrm())
  209. err := vali.DeleteValidationTool(id)
  210. if err != nil {
  211. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "删除失败!", Data: nil}
  212. c.ServeJSON()
  213. return
  214. }
  215. c.Data["json"] = lib.JSONS{Code: 200, Msg: "删除成功!", Data: nil}
  216. c.ServeJSON()
  217. }
  218. func (c *ValidationController) UpdateValidationTool() {
  219. var lendValidationList []validationtool.LendValidationTool
  220. err := json.Unmarshal(c.Ctx.Input.RequestBody, &lendValidationList)
  221. if err != nil {
  222. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil}
  223. c.ServeJSON()
  224. return
  225. }
  226. vali := validationtool.NewValidationTool(orm.NewOrm())
  227. o := orm.NewOrm()
  228. o.Begin()
  229. for _, tool := range lendValidationList {
  230. if len(tool.T_sn) <= 0 {
  231. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
  232. c.ServeJSON()
  233. return
  234. }
  235. r, err := vali.ReadValidationBytSn(tool.T_sn)
  236. sprintf := fmt.Sprintf("当前sn:%v 未入库", tool.T_sn)
  237. if err != nil || r.T_state != 2 {
  238. o.Rollback()
  239. c.Data["json"] = lib.JSONS{Code: 1201, Msg: sprintf, Data: nil}
  240. c.ServeJSON()
  241. return
  242. }
  243. //修改设备状态
  244. con := make(map[string]string)
  245. if len(tool.T_remark) != 0 {
  246. con["t_remark"] = tool.T_remark
  247. }
  248. if len(tool.Validationnumber) != 0 {
  249. con["validationnumber"] = tool.Validationnumber
  250. }
  251. con["t_state"] = "1"
  252. if len(tool.LendUser) != 0 {
  253. con["lend_user"] = tool.LendUser
  254. }
  255. if len(tool.T_project) != 0 {
  256. con["t_project"] = tool.T_project
  257. }
  258. con["update_time"] = time.Now().Format("2006-01-02 15:04:05")
  259. err = vali.UpdateValidationTool(tool.T_sn, con)
  260. if err != nil {
  261. o.Rollback()
  262. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
  263. c.ServeJSON()
  264. return
  265. }
  266. }
  267. err = o.Commit() // 提交事务
  268. if err != nil {
  269. o.Rollback() // 回滚事务
  270. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
  271. c.ServeJSON()
  272. return
  273. }
  274. c.Data["json"] = lib.JSONS{Code: 200, Msg: "修改成功!", Data: nil}
  275. c.ServeJSON()
  276. return
  277. }
  278. // GetValidationToolBySn 根据sn获取设备信息
  279. func (c *ValidationController) GetValidationToolBySn() {
  280. sn := c.GetString("sn")
  281. if len(sn) <= 0 {
  282. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "sn不能为空!", Data: nil}
  283. c.ServeJSON()
  284. return
  285. }
  286. vali := validationtool.NewValidationTool(orm.NewOrm())
  287. r, err := vali.ReadValidationBytSn(sn)
  288. if err != nil {
  289. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "当前设备不存在!", Data: nil}
  290. c.ServeJSON()
  291. return
  292. }
  293. c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功!", Data: r}
  294. c.ServeJSON()
  295. }
  296. // UpdateValidationToolBySn 根据sn修改设备信息
  297. func (c *ValidationController) UpdateValidationToolBySn() {
  298. sn := c.GetString("T_sn")
  299. Id := c.GetString("Id")
  300. Validationnumber := c.GetString("Validationnumber")
  301. T_remark := c.GetString("T_remark")
  302. T_state := c.GetString("T_state")
  303. T_class := c.GetString("T_class")
  304. if len(sn) <= 0 {
  305. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "sn不能为空!", Data: nil}
  306. c.ServeJSON()
  307. return
  308. }
  309. if len(Id) <= 0 {
  310. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "Id不能为空!", Data: nil}
  311. c.ServeJSON()
  312. return
  313. }
  314. con := make(map[string]string)
  315. if len(Validationnumber) > 0 {
  316. con["validationnumber"] = Validationnumber
  317. }
  318. if len(T_remark) > 0 {
  319. con["t_remark"] = T_remark
  320. }
  321. if len(T_state) > 0 {
  322. con["t_state"] = T_state
  323. }
  324. if len(T_class) > 0 {
  325. con["t_class"] = T_class
  326. }
  327. con["update_time"] = time.Now().Format("2006-01-02 15:04:05")
  328. vali := validationtool.NewValidationTool(orm.NewOrm())
  329. r, err := vali.ReadValidationById(Id)
  330. if !strings.EqualFold(r.T_sn, sn) {
  331. con["t_sn"] = sn
  332. user := Stock.Read_MqttUser(sn)
  333. con["t_iccid"] = user.Iccid
  334. con["t_imei"] = user.Imei
  335. }
  336. err = vali.UpdateValidationToolById(Id, con)
  337. if err != nil {
  338. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "当前设备不存在!", Data: nil}
  339. c.ServeJSON()
  340. return
  341. }
  342. c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功!", Data: nil}
  343. c.ServeJSON()
  344. }
  345. func (c *ValidationController) ImportExecl() {
  346. // 获取上传的文件
  347. vali := validationtool.NewValidationTool(orm.NewOrm())
  348. f, _, err := c.GetFile("excelFile")
  349. if err != nil {
  350. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "读取文件失败!", Data: nil}
  351. c.ServeJSON()
  352. return
  353. }
  354. defer f.Close()
  355. // 读取 Excel 文件
  356. reader, err := excelize.OpenReader(f)
  357. if err != nil {
  358. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "打开文件失败!", Data: nil}
  359. c.ServeJSON()
  360. return
  361. }
  362. defer func() {
  363. if err := reader.Close(); err != nil {
  364. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "关闭文件失败!", Data: nil}
  365. c.ServeJSON()
  366. return
  367. }
  368. }()
  369. // 读取工作表中的数据
  370. rows, err := reader.GetRows("Sheet1")
  371. if err != nil {
  372. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "读取文件失败!", Data: nil}
  373. c.ServeJSON()
  374. return
  375. }
  376. for i, row := range rows {
  377. if i == 0 {
  378. continue // 忽略第一排
  379. }
  380. if len(row) >= 4 {
  381. atoi, _ := strconv.Atoi(row[2])
  382. isout, _ := strconv.Atoi(row[3])
  383. user := Stock.Read_MqttUser(row[0])
  384. tool := validationtool.ValidationTool{
  385. T_sn: row[0],
  386. T_class: atoi,
  387. Validationnumber: row[1],
  388. T_uuid: c.User.T_uuid,
  389. T_state: isout,
  390. T_iccid: user.Iccid,
  391. T_imei: user.Imei,
  392. }
  393. _, err := vali.ADDValidationTool(tool)
  394. if err != nil {
  395. sprintf := fmt.Sprintf("设备sn添加失败%v", row[0])
  396. c.Data["json"] = lib.JSONS{Code: 1201, Msg: sprintf, Data: nil}
  397. c.ServeJSON()
  398. return
  399. }
  400. }
  401. }
  402. c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功!", Data: nil}
  403. c.ServeJSON()
  404. }
  405. func (c *ValidationController) ExportValidationListExecl() {
  406. // 分页参数 初始化
  407. page, _ := c.GetInt("page")
  408. if page < 1 {
  409. page = 1
  410. }
  411. page_z, _ := c.GetInt("page_z")
  412. if page_z < 1 {
  413. page_z = 9999
  414. }
  415. T_state := c.GetString("T_state")
  416. validationnumber := c.GetString("validationnumber")
  417. T_sn := c.GetString("T_sn")
  418. t_iccid := c.GetString("t_iccid")
  419. t_imei := c.GetString("t_imei")
  420. LendUser := c.GetString("LendUser")
  421. T_project := c.GetString("T_project")
  422. T_class := c.GetString("T_class")
  423. vali := validationtool.NewValidationTool(orm.NewOrm())
  424. R_List, _ := vali.Read_Validation_List(validationnumber, T_sn, t_iccid, t_imei, T_state, LendUser, T_project, T_class, page, page_z)
  425. f := excelize.NewFile() //设置单元格值
  426. // 这里设置表头ÒÒ
  427. f.SetCellValue("Sheet1", "A1", "序号")
  428. f.SetCellValue("Sheet1", "B1", "SN")
  429. f.SetCellValue("Sheet1", "C1", "编号")
  430. f.SetCellValue("Sheet1", "D1", "模组imei")
  431. f.SetCellValue("Sheet1", "E1", "物联网卡号")
  432. f.SetCellValue("Sheet1", "F1", "设备类型")
  433. f.SetCellValue("Sheet1", "G1", "借出人")
  434. f.SetCellValue("Sheet1", "H1", "借出项目")
  435. f.SetCellValue("Sheet1", "I1", "备注")
  436. // 设置列宽
  437. f.SetColWidth("Sheet1", "A", "A", 6)
  438. f.SetColWidth("Sheet1", "B", "B", 20)
  439. f.SetColWidth("Sheet1", "C", "C", 15)
  440. f.SetColWidth("Sheet1", "D", "D", 15)
  441. f.SetColWidth("Sheet1", "E", "E", 30)
  442. f.SetColWidth("Sheet1", "F", "F", 15)
  443. f.SetColWidth("Sheet1", "G", "G", 15)
  444. f.SetColWidth("Sheet1", "H", "H", 30)
  445. f.SetColWidth("Sheet1", "I", "J", 15)
  446. line := 1
  447. for i, v := range R_List {
  448. line++
  449. r, _ := Basic.Read_ProductClass_ById(v.T_class)
  450. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), i+1)
  451. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_sn)
  452. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.Validationnumber)
  453. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_imei)
  454. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_iccid)
  455. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), r.T_name)
  456. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.LendUser)
  457. f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.T_project)
  458. f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.T_remark)
  459. }
  460. timeStr := time.Now().Format("20060102150405")
  461. fileName := fmt.Sprintf("验证工具记录表%v.xlsx", timeStr)
  462. filePath := "ofile/" + "验证工具记录表" + timeStr + ".xlsx"
  463. // 保存文件
  464. if err := f.SaveAs(filePath); err != nil {
  465. logs.Error("文件失败:", err)
  466. }
  467. defer func() {
  468. os.Remove(filePath)
  469. }()
  470. c.Ctx.Output.Header("Content-Type", "application/vnd.ms-excel;charset=utf8")
  471. c.Ctx.Output.Header("Content-Disposition", "attachment; filename="+url.PathEscape(fileName))
  472. c.Ctx.Output.Header("Content-Transfer-Encoding", "binary")
  473. c.Ctx.Output.Download(filePath, fileName)
  474. }