Validation.go 12 KB

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