Validation.go 13 KB

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