Validation.go 41 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385
  1. package controllers
  2. import (
  3. "ERP_storage/Nats/NatsServer"
  4. "ERP_storage/conf"
  5. "ERP_storage/dto"
  6. "ERP_storage/logs"
  7. "ERP_storage/models/Account"
  8. "ERP_storage/models/Basic"
  9. "ERP_storage/models/Stock"
  10. "ERP_storage/models/validationtool"
  11. "encoding/json"
  12. "errors"
  13. "fmt"
  14. "github.com/beego/beego/v2/adapter/orm"
  15. beego "github.com/beego/beego/v2/server/web"
  16. "github.com/xuri/excelize/v2"
  17. userlibs "gogs.baozhida.cn/zoie/ERP_libs/User"
  18. "gogs.baozhida.cn/zoie/ERP_libs/lib"
  19. "math"
  20. "net/url"
  21. "os"
  22. "strconv"
  23. "strings"
  24. "time"
  25. )
  26. type ValidationController struct {
  27. beego.Controller
  28. User userlibs.User
  29. }
  30. func (c *ValidationController) Prepare() {
  31. c.User = *Account.User_r
  32. }
  33. func (c *ValidationController) AddValidation() {
  34. var ValidationList []validationtool.AddValidationTool
  35. errs := json.Unmarshal(c.Ctx.Input.RequestBody, &ValidationList)
  36. if errs != nil {
  37. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil}
  38. c.ServeJSON()
  39. return
  40. }
  41. o := orm.NewOrm()
  42. o.Begin() // 开始事务
  43. vali := validationtool.NewValidationTool(o)
  44. valiRecord := validationtool.NewValidationToolRecord(o)
  45. BatchNumber := time.Now().Format("2006-01-02 15:04:05")
  46. for _, tool := range ValidationList {
  47. if len(tool.T_sn) == 0 {
  48. o.Rollback() // 回滚事务
  49. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
  50. c.ServeJSON()
  51. return
  52. }
  53. validation, err := vali.ReadValidationBytSn(tool.T_sn)
  54. if err != nil && !errors.Is(err, orm.ErrNoRows) {
  55. o.Rollback() // 回滚事务
  56. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "查询失败!", Data: nil}
  57. c.ServeJSON()
  58. return
  59. } else if errors.Is(err, orm.ErrNoRows) {
  60. var validataiontool validationtool.ValidationTool
  61. user := Stock.Read_MqttUser(tool.T_sn)
  62. validataiontool.T_iccid = user.Iccid
  63. validataiontool.T_imei = user.Imei
  64. validataiontool.T_uuid = c.User.T_uuid
  65. validataiontool.Validationnumber = tool.Validationnumber
  66. validataiontool.T_sn = tool.T_sn
  67. validataiontool.T_remark = tool.T_remark
  68. validataiontool.T_state = validationtool.ValidationToolStateStockIn
  69. validataiontool.T_class = tool.T_class
  70. validataiontool.UpdateTime = time.Now()
  71. _, err = vali.ADDValidationTool(validataiontool)
  72. if err != nil {
  73. o.Rollback() // 回滚事务
  74. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil}
  75. c.ServeJSON()
  76. return
  77. }
  78. _, err = valiRecord.ADD(validataiontool, BatchNumber)
  79. if err != nil {
  80. o.Rollback() // 回滚事务
  81. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
  82. c.ServeJSON()
  83. return
  84. }
  85. }
  86. //修改设备状态
  87. validation.T_state = validationtool.ValidationToolStateStockIn
  88. cols := []string{"T_state"}
  89. if len(tool.T_remark) != 0 {
  90. validation.T_remark = tool.T_remark
  91. cols = append(cols, "T_remark")
  92. } else {
  93. validation.T_remark = ""
  94. cols = append(cols, "T_remark")
  95. }
  96. if len(tool.Validationnumber) != 0 {
  97. validation.Validationnumber = tool.Validationnumber
  98. cols = append(cols, "validationnumber")
  99. }
  100. _, err = valiRecord.ADD(validation, BatchNumber)
  101. if err != nil {
  102. o.Rollback() // 回滚事务
  103. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
  104. c.ServeJSON()
  105. return
  106. }
  107. validation.LendUser = ""
  108. cols = append(cols, "LendUser")
  109. validation.T_project = ""
  110. cols = append(cols, "T_project")
  111. err = vali.UpdateValidationTool(validation, cols...)
  112. if err != nil {
  113. o.Rollback() // 回滚事务
  114. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil}
  115. c.ServeJSON()
  116. return
  117. }
  118. }
  119. o.Commit() // 提交事务
  120. NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "添加", ValidationList)
  121. c.Data["json"] = lib.JSONS{Code: 200, Msg: "入库成功!", Data: nil}
  122. c.ServeJSON()
  123. return
  124. }
  125. func (c *ValidationController) ValidationList() {
  126. // 分页参数 初始化
  127. page, _ := c.GetInt("page")
  128. if page < 1 {
  129. page = 1
  130. }
  131. page_z, _ := c.GetInt("page_z")
  132. if page_z < 1 {
  133. page_z = conf.Page_size
  134. }
  135. T_state := c.GetString("T_state")
  136. validationnumber := c.GetString("Validationnumber")
  137. T_sn := c.GetString("T_sn")
  138. t_iccid := c.GetString("t_iccid")
  139. t_imei := c.GetString("t_imei")
  140. LendUser := c.GetString("LendUser")
  141. T_project := c.GetString("T_project")
  142. T_class := c.GetString("T_class")
  143. vali := validationtool.NewValidationTool(orm.NewOrm())
  144. 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)
  145. var r_jsons lib.R_JSONS
  146. r_jsons.Num = R_cnt
  147. r_jsons.Data = R_List
  148. r_jsons.Page = page
  149. r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
  150. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  151. c.ServeJSON()
  152. return
  153. }
  154. func (c *ValidationController) DeleteValidationTool() {
  155. id := c.GetString("t_sn")
  156. if len(id) <= 0 {
  157. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "t_sn不能为空!", Data: nil}
  158. c.ServeJSON()
  159. return
  160. }
  161. vali := validationtool.NewValidationTool(orm.NewOrm())
  162. err := vali.DeleteValidationTool(id)
  163. if err != nil {
  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. }
  171. // 出库
  172. func (c *ValidationController) UpdateValidationTool() {
  173. var lendValidationList []validationtool.LendValidationTool
  174. err := json.Unmarshal(c.Ctx.Input.RequestBody, &lendValidationList)
  175. if err != nil {
  176. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil}
  177. c.ServeJSON()
  178. return
  179. }
  180. o := orm.NewOrm()
  181. o.Begin()
  182. vali := validationtool.NewValidationTool(o)
  183. valiRecord := validationtool.NewValidationToolRecord(o)
  184. BatchNumber := time.Now().Format("2006-01-02 15:04:05")
  185. for _, tool := range lendValidationList {
  186. if len(tool.T_sn) <= 0 {
  187. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
  188. c.ServeJSON()
  189. return
  190. }
  191. validation, err2 := vali.ReadValidationBytSn(tool.T_sn)
  192. sprintf := fmt.Sprintf("当前sn:%v 未入库", tool.T_sn)
  193. if err2 != nil || validation.T_state != validationtool.ValidationToolStateStockIn {
  194. o.Rollback()
  195. c.Data["json"] = lib.JSONS{Code: 1201, Msg: sprintf, Data: nil}
  196. c.ServeJSON()
  197. return
  198. }
  199. if validation.T_state == validationtool.ValidationToolStateStockOut {
  200. continue
  201. }
  202. //修改设备状态
  203. validation.T_state = validationtool.ValidationToolStateStockOut
  204. cols := []string{"t_state"}
  205. if len(tool.T_remark) != 0 {
  206. validation.T_remark = tool.T_remark
  207. cols = append(cols, "T_remark")
  208. }
  209. if len(tool.Validationnumber) != 0 {
  210. validation.Validationnumber = tool.Validationnumber
  211. cols = append(cols, "validationnumber")
  212. }
  213. if len(tool.LendUser) != 0 {
  214. validation.LendUser = tool.LendUser
  215. cols = append(cols, "LendUser")
  216. }
  217. if len(tool.T_project) != 0 {
  218. validation.T_project = tool.T_project
  219. cols = append(cols, "T_project")
  220. }
  221. err = vali.UpdateValidationTool(validation, cols...)
  222. if err != nil {
  223. o.Rollback()
  224. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
  225. c.ServeJSON()
  226. return
  227. }
  228. _, err = valiRecord.ADD(validation, BatchNumber)
  229. if err != nil {
  230. o.Rollback() // 回滚事务
  231. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
  232. c.ServeJSON()
  233. return
  234. }
  235. }
  236. err = o.Commit() // 提交事务
  237. if err != nil {
  238. o.Rollback() // 回滚事务
  239. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
  240. c.ServeJSON()
  241. return
  242. }
  243. NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "出库", lendValidationList)
  244. c.Data["json"] = lib.JSONS{Code: 200, Msg: "修改成功!", Data: nil}
  245. c.ServeJSON()
  246. return
  247. }
  248. // 报废
  249. func (c *ValidationController) ScrapValidationTool() {
  250. var lendValidationList []validationtool.LendValidationTool
  251. err := json.Unmarshal(c.Ctx.Input.RequestBody, &lendValidationList)
  252. if err != nil {
  253. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil}
  254. c.ServeJSON()
  255. return
  256. }
  257. o := orm.NewOrm()
  258. vali := validationtool.NewValidationTool(o)
  259. valiRecord := validationtool.NewValidationToolRecord(o)
  260. BatchNumber := time.Now().Format("2006-01-02 15:04:05")
  261. o.Begin()
  262. for _, tool := range lendValidationList {
  263. if len(tool.T_sn) <= 0 {
  264. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
  265. c.ServeJSON()
  266. return
  267. }
  268. validation, errs := vali.ReadValidationBytSn(tool.T_sn)
  269. if errs != nil {
  270. o.Rollback()
  271. if errs.Error() == orm.ErrNoRows.Error() {
  272. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 未入库", tool.T_sn), Data: nil}
  273. c.ServeJSON()
  274. return
  275. } else {
  276. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("查询sn:%v 失败", tool.T_sn), Data: nil}
  277. c.ServeJSON()
  278. return
  279. }
  280. }
  281. //修改设备状态
  282. validation.T_state = validationtool.ValidationToolStateStockScrap
  283. cols := []string{"t_state"}
  284. if len(tool.T_remark) != 0 {
  285. validation.T_remark = tool.T_remark
  286. cols = append(cols, "T_remark")
  287. }
  288. if len(tool.Validationnumber) != 0 {
  289. validation.Validationnumber = tool.Validationnumber
  290. cols = append(cols, "validationnumber")
  291. }
  292. if len(tool.LendUser) != 0 {
  293. validation.LendUser = tool.LendUser
  294. cols = append(cols, "LendUser")
  295. }
  296. if len(tool.T_project) != 0 {
  297. validation.T_project = tool.T_project
  298. cols = append(cols, "T_project")
  299. }
  300. err = vali.UpdateValidationTool(validation, cols...)
  301. if err != nil {
  302. o.Rollback()
  303. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
  304. c.ServeJSON()
  305. return
  306. }
  307. _, err = valiRecord.ADD(validation, BatchNumber)
  308. if err != nil {
  309. o.Rollback() // 回滚事务
  310. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
  311. c.ServeJSON()
  312. return
  313. }
  314. }
  315. err = o.Commit() // 提交事务
  316. if err != nil {
  317. o.Rollback() // 回滚事务
  318. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
  319. c.ServeJSON()
  320. return
  321. }
  322. NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "报废", lendValidationList)
  323. c.Data["json"] = lib.JSONS{Code: 200, Msg: "提交成功!", Data: nil}
  324. c.ServeJSON()
  325. return
  326. }
  327. // 维修
  328. func (c *ValidationController) RepairValidationTool() {
  329. var lendValidationList []validationtool.LendValidationTool
  330. err := json.Unmarshal(c.Ctx.Input.RequestBody, &lendValidationList)
  331. if err != nil {
  332. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil}
  333. c.ServeJSON()
  334. return
  335. }
  336. o := orm.NewOrm()
  337. o.Begin()
  338. vali := validationtool.NewValidationTool(o)
  339. valiRecord := validationtool.NewValidationToolRecord(o)
  340. BatchNumber := time.Now().Format("2006-01-02 15:04:05")
  341. for _, tool := range lendValidationList {
  342. if len(tool.T_sn) <= 0 {
  343. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
  344. c.ServeJSON()
  345. return
  346. }
  347. validation, errs := vali.ReadValidationBytSn(tool.T_sn)
  348. if errs != nil {
  349. o.Rollback()
  350. if errs.Error() == orm.ErrNoRows.Error() {
  351. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 未入库", tool.T_sn), Data: nil}
  352. c.ServeJSON()
  353. return
  354. } else {
  355. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("查询sn:%v 失败", tool.T_sn), Data: nil}
  356. c.ServeJSON()
  357. return
  358. }
  359. }
  360. //修改设备状态
  361. validation.T_state = validationtool.ValidationToolStateStockRepair
  362. cols := []string{"t_state"}
  363. if len(tool.T_remark) != 0 {
  364. validation.T_remark = tool.T_remark
  365. cols = append(cols, "T_remark")
  366. }
  367. if len(tool.Validationnumber) != 0 {
  368. validation.Validationnumber = tool.Validationnumber
  369. cols = append(cols, "validationnumber")
  370. }
  371. if len(tool.LendUser) != 0 {
  372. validation.LendUser = tool.LendUser
  373. cols = append(cols, "LendUser")
  374. }
  375. if len(tool.T_project) != 0 {
  376. validation.T_project = tool.T_project
  377. cols = append(cols, "T_project")
  378. }
  379. err = vali.UpdateValidationTool(validation, cols...)
  380. if err != nil {
  381. o.Rollback()
  382. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
  383. c.ServeJSON()
  384. return
  385. }
  386. _, err = valiRecord.ADD(validation, BatchNumber)
  387. if err != nil {
  388. o.Rollback() // 回滚事务
  389. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
  390. c.ServeJSON()
  391. return
  392. }
  393. }
  394. err = o.Commit() // 提交事务
  395. if err != nil {
  396. o.Rollback() // 回滚事务
  397. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
  398. c.ServeJSON()
  399. return
  400. }
  401. NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "维修", lendValidationList)
  402. c.Data["json"] = lib.JSONS{Code: 200, Msg: "提交成功!", Data: nil}
  403. c.ServeJSON()
  404. return
  405. }
  406. // GetValidationToolBySn 根据sn获取设备信息
  407. func (c *ValidationController) GetValidationToolBySn() {
  408. sn := c.GetString("sn")
  409. if len(sn) <= 0 {
  410. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "sn不能为空!", Data: nil}
  411. c.ServeJSON()
  412. return
  413. }
  414. vali := validationtool.NewValidationTool(orm.NewOrm())
  415. r, err := vali.ReadValidationBytSn(sn)
  416. if err != nil {
  417. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "当前设备不存在!", Data: nil}
  418. c.ServeJSON()
  419. return
  420. }
  421. c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功!", Data: r}
  422. c.ServeJSON()
  423. }
  424. // UpdateValidationToolBySn 根据sn修改设备信息
  425. func (c *ValidationController) UpdateValidationToolBySn() {
  426. sn := c.GetString("T_sn")
  427. Id := c.GetString("Id")
  428. Validationnumber := c.GetString("Validationnumber")
  429. T_remark := c.GetString("T_remark")
  430. T_state, _ := c.GetInt("T_state")
  431. T_class, _ := c.GetInt("T_class")
  432. if len(sn) <= 0 {
  433. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "sn不能为空!", Data: nil}
  434. c.ServeJSON()
  435. return
  436. }
  437. if len(Id) <= 0 {
  438. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "Id不能为空!", Data: nil}
  439. c.ServeJSON()
  440. return
  441. }
  442. vali := validationtool.NewValidationTool(orm.NewOrm())
  443. valiRecord := validationtool.NewValidationToolRecord(orm.NewOrm())
  444. r, err := vali.ReadValidationById(Id)
  445. if err != nil {
  446. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "当前设备不存在!", Data: nil}
  447. c.ServeJSON()
  448. return
  449. }
  450. cols := []string{}
  451. if len(Validationnumber) > 0 {
  452. r.Validationnumber = Validationnumber
  453. cols = append(cols, "Validationnumber")
  454. }
  455. if len(T_remark) > 0 {
  456. r.T_remark = T_remark
  457. cols = append(cols, "T_remark")
  458. }
  459. if T_state > 0 {
  460. r.T_state = T_state
  461. cols = append(cols, "T_state")
  462. }
  463. if T_class > 0 {
  464. r.T_class = T_class
  465. cols = append(cols, "T_class")
  466. }
  467. if !strings.EqualFold(r.T_sn, sn) {
  468. r.T_sn = sn
  469. user := Stock.Read_MqttUser(sn)
  470. r.T_iccid = user.Iccid
  471. r.T_imei = user.Imei
  472. cols = append(cols, "T_sn", "T_iccid", "T_imei")
  473. }
  474. err = vali.UpdateValidationTool(r, cols...)
  475. if err != nil {
  476. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "当前设备不存在!", Data: nil}
  477. c.ServeJSON()
  478. return
  479. }
  480. BatchNumber := time.Now().Format("2006-01-02 15:04:05")
  481. _, err = valiRecord.ADD(r, BatchNumber)
  482. if err != nil {
  483. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
  484. c.ServeJSON()
  485. return
  486. }
  487. NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "通过sn修改验证工具", r)
  488. c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功!", Data: nil}
  489. c.ServeJSON()
  490. }
  491. func (c *ValidationController) ImportExcel() {
  492. // 获取上传的文件
  493. vali := validationtool.NewValidationTool(orm.NewOrm())
  494. f, _, err := c.GetFile("excelFile")
  495. if err != nil {
  496. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "读取文件失败!", Data: nil}
  497. c.ServeJSON()
  498. return
  499. }
  500. defer f.Close()
  501. // 读取 Excel 文件
  502. reader, err := excelize.OpenReader(f)
  503. if err != nil {
  504. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "打开文件失败!", Data: nil}
  505. c.ServeJSON()
  506. return
  507. }
  508. defer func() {
  509. if err := reader.Close(); err != nil {
  510. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "关闭文件失败!", Data: nil}
  511. c.ServeJSON()
  512. return
  513. }
  514. }()
  515. // 读取工作表中的数据
  516. rows, err := reader.GetRows("Sheet1")
  517. if err != nil {
  518. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "读取文件失败!", Data: nil}
  519. c.ServeJSON()
  520. return
  521. }
  522. for i, row := range rows {
  523. if i == 0 {
  524. continue // 忽略第一排
  525. }
  526. if len(row) >= 4 {
  527. atoi, _ := strconv.Atoi(row[2])
  528. isout, _ := strconv.Atoi(row[3])
  529. user := Stock.Read_MqttUser(row[0])
  530. tool := validationtool.ValidationTool{
  531. T_sn: row[0],
  532. T_class: atoi,
  533. Validationnumber: row[1],
  534. T_uuid: c.User.T_uuid,
  535. T_state: isout,
  536. T_iccid: user.Iccid,
  537. T_imei: user.Imei,
  538. }
  539. _, err := vali.ADDValidationTool(tool)
  540. if err != nil {
  541. sprintf := fmt.Sprintf("设备sn添加失败%v", row[0])
  542. c.Data["json"] = lib.JSONS{Code: 1201, Msg: sprintf, Data: nil}
  543. c.ServeJSON()
  544. return
  545. }
  546. }
  547. }
  548. c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功!", Data: nil}
  549. c.ServeJSON()
  550. }
  551. func (c *ValidationController) ExportValidationListExcel() {
  552. // 分页参数 初始化
  553. page, _ := c.GetInt("page")
  554. if page < 1 {
  555. page = 1
  556. }
  557. page_z, _ := c.GetInt("page_z")
  558. if page_z < 1 {
  559. page_z = 9999
  560. }
  561. T_state := c.GetString("T_state")
  562. validationnumber := c.GetString("validationnumber")
  563. T_sn := c.GetString("T_sn")
  564. t_iccid := c.GetString("t_iccid")
  565. t_imei := c.GetString("t_imei")
  566. LendUser := c.GetString("LendUser")
  567. T_project := c.GetString("T_project")
  568. T_class := c.GetString("T_class")
  569. vali := validationtool.NewValidationTool(orm.NewOrm())
  570. R_List, _ := vali.Read_Validation_List(validationnumber, T_sn, t_iccid, t_imei, T_state, LendUser, T_project, T_class, page, page_z)
  571. f := excelize.NewFile() //设置单元格值
  572. // 这里设置表头ÒÒ
  573. f.SetCellValue("Sheet1", "A1", "序号")
  574. f.SetCellValue("Sheet1", "B1", "SN")
  575. f.SetCellValue("Sheet1", "C1", "编号")
  576. f.SetCellValue("Sheet1", "D1", "模组imei")
  577. f.SetCellValue("Sheet1", "E1", "物联网卡号")
  578. f.SetCellValue("Sheet1", "F1", "设备类型")
  579. f.SetCellValue("Sheet1", "G1", "借出人")
  580. f.SetCellValue("Sheet1", "H1", "借出项目")
  581. f.SetCellValue("Sheet1", "I1", "备注")
  582. // 设置列宽
  583. f.SetColWidth("Sheet1", "A", "A", 6)
  584. f.SetColWidth("Sheet1", "B", "B", 20)
  585. f.SetColWidth("Sheet1", "C", "C", 15)
  586. f.SetColWidth("Sheet1", "D", "D", 15)
  587. f.SetColWidth("Sheet1", "E", "E", 30)
  588. f.SetColWidth("Sheet1", "F", "F", 15)
  589. f.SetColWidth("Sheet1", "G", "G", 15)
  590. f.SetColWidth("Sheet1", "H", "H", 30)
  591. f.SetColWidth("Sheet1", "I", "J", 15)
  592. line := 1
  593. for i, v := range R_List {
  594. line++
  595. r, _ := Basic.Read_ProductClass_ById(v.T_class)
  596. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), i+1)
  597. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_sn)
  598. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), v.Validationnumber)
  599. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.T_imei)
  600. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_iccid)
  601. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), r.T_name)
  602. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.LendUser)
  603. f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.T_project)
  604. f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.T_remark)
  605. }
  606. timeStr := time.Now().Format("20060102150405")
  607. fileName := fmt.Sprintf("验证工具记录表%v.xlsx", timeStr)
  608. filePath := "ofile/" + "验证工具记录表" + timeStr + ".xlsx"
  609. // 保存文件
  610. if err := f.SaveAs(filePath); err != nil {
  611. logs.Error("文件失败:", err)
  612. }
  613. defer func() {
  614. os.Remove(filePath)
  615. }()
  616. c.Ctx.Output.Header("Content-Type", "application/vnd.ms-excel;charset=utf8")
  617. c.Ctx.Output.Header("Content-Disposition", "attachment; filename="+url.PathEscape(fileName))
  618. c.Ctx.Output.Header("Content-Transfer-Encoding", "binary")
  619. c.Ctx.Output.Download(filePath, fileName)
  620. }
  621. func (c *ValidationController) Read_ValidationClass_List() {
  622. // 分页参数 初始化
  623. page, _ := c.GetInt("page")
  624. if page < 1 {
  625. page = 1
  626. }
  627. page_z, _ := c.GetInt("page_z")
  628. if page_z < 1 {
  629. page_z = conf.Page_size
  630. }
  631. // 查询
  632. T_name := c.GetString("T_name")
  633. R_List, R_cnt := validationtool.Read_ValidationToolClass_List(T_name, page, page_z)
  634. var r_jsons lib.R_JSONS
  635. r_jsons.Num = R_cnt
  636. r_jsons.Data = R_List
  637. r_jsons.Page = page
  638. r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
  639. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  640. c.ServeJSON()
  641. return
  642. }
  643. // 统计验证工具
  644. func (c *ValidationController) Validation_stat() {
  645. // 分页参数 初始化
  646. page, _ := c.GetInt("page")
  647. if page < 1 {
  648. page = 1
  649. }
  650. page_z, _ := c.GetInt("page_z")
  651. if page_z < 1 {
  652. page_z = conf.Page_size
  653. }
  654. LendUser := c.GetString("LendUser")
  655. T_project := c.GetString("T_project")
  656. vali := validationtool.NewValidationTool(orm.NewOrm())
  657. R_List, R_cnt := vali.Validation_stat(LendUser, T_project, page, page_z)
  658. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: lib.R_JSONS{Data: R_List, Num: R_cnt}}
  659. c.ServeJSON()
  660. return
  661. }
  662. func (c *ValidationController) User_List() {
  663. var r_jsons lib.R_JSONS
  664. // 分页参数 初始化
  665. page, _ := c.GetInt("page")
  666. if page < 1 {
  667. page = 1
  668. }
  669. page_z, _ := c.GetInt("page_z")
  670. if page_z < 1 {
  671. page_z = conf.Page_size
  672. }
  673. T_name := c.GetString("T_name")
  674. vali := validationtool.NewValidationTool(orm.NewOrm())
  675. R_List, R_cnt := vali.Read_lend_user_List(T_name, page, page_z)
  676. for i := 0; i < len(R_List); i++ {
  677. if R_List[i].LendUser == "" {
  678. R_List[i].LendUser = "未出库"
  679. }
  680. }
  681. r_jsons.Num = R_cnt
  682. r_jsons.Data = R_List
  683. r_jsons.Page = page
  684. r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
  685. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  686. c.ServeJSON()
  687. return
  688. }
  689. func (c *ValidationController) Record_List() {
  690. // 分页参数 初始化
  691. page, _ := c.GetInt("page")
  692. if page < 1 {
  693. page = 1
  694. }
  695. page_z, _ := c.GetInt("page_z")
  696. if page_z < 1 {
  697. page_z = conf.Page_size
  698. }
  699. T_state := c.GetString("T_state")
  700. validationnumber := c.GetString("Validationnumber")
  701. T_sn := c.GetString("T_sn")
  702. t_iccid := c.GetString("t_iccid")
  703. t_imei := c.GetString("t_imei")
  704. LendUser := c.GetString("LendUser")
  705. T_project := c.GetString("T_project")
  706. T_class := c.GetString("T_class")
  707. valiRecord := validationtool.NewValidationToolRecord(orm.NewOrm())
  708. R_List, R_cnt := valiRecord.Read_Validation_List(validationnumber, T_sn, t_iccid, t_imei, T_state, LendUser, T_project, T_class, page, page_z)
  709. var r_jsons lib.R_JSONS
  710. r_jsons.Num = R_cnt
  711. r_jsons.Data = R_List
  712. r_jsons.Page = page
  713. r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
  714. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  715. c.ServeJSON()
  716. return
  717. }
  718. func (c *ValidationController) Operation_List() {
  719. // 分页参数 初始化
  720. page, _ := c.GetInt("page")
  721. if page < 1 {
  722. page = 1
  723. }
  724. page_z, _ := c.GetInt("page_z")
  725. if page_z < 1 {
  726. page_z = conf.Page_size
  727. }
  728. T_state := c.GetString("T_state")
  729. T_sn := c.GetString("T_sn")
  730. LendUser := c.GetString("LendUser")
  731. T_project := c.GetString("T_project")
  732. valiRecord := validationtool.NewValidationToolRecord(orm.NewOrm())
  733. R_List, R_cnt := valiRecord.Read_Operation_List(T_sn, T_state, LendUser, T_project, page, page_z)
  734. var r_jsons lib.R_JSONS
  735. r_jsons.Num = R_cnt
  736. r_jsons.Data = R_List
  737. r_jsons.Page = page
  738. r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
  739. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  740. c.ServeJSON()
  741. return
  742. }
  743. // 下载操作记录
  744. func (c *ValidationController) Operation_Excel() {
  745. T_state := c.GetString("T_state")
  746. T_sn := c.GetString("T_sn")
  747. LendUser := c.GetString("LendUser")
  748. T_project := c.GetString("T_project")
  749. valiRecord := validationtool.NewValidationToolRecord(orm.NewOrm())
  750. R_List, _ := valiRecord.Read_Operation_List(T_sn, T_state, LendUser, T_project, 0, 9999)
  751. f := excelize.NewFile() //设置单元格值
  752. // 这里设置表头ÒÒ
  753. Style2, _ := f.NewStyle(
  754. &excelize.Style{
  755. Font: &excelize.Font{Bold: true, Size: 12, Family: "宋体"},
  756. Alignment: &excelize.Alignment{Horizontal: "center", Vertical: "center", WrapText: true},
  757. Border: []excelize.Border{
  758. {Type: "left", Color: "000000", Style: 1},
  759. {Type: "top", Color: "000000", Style: 1},
  760. {Type: "bottom", Color: "000000", Style: 1},
  761. {Type: "right", Color: "000000", Style: 1},
  762. },
  763. })
  764. Style4, _ := f.NewStyle(
  765. &excelize.Style{
  766. Font: &excelize.Font{Size: 10, Family: "宋体"},
  767. Alignment: &excelize.Alignment{Horizontal: "center", Vertical: "center", WrapText: true},
  768. Border: []excelize.Border{
  769. {Type: "left", Color: "000000", Style: 1},
  770. {Type: "top", Color: "000000", Style: 1},
  771. {Type: "bottom", Color: "000000", Style: 1},
  772. {Type: "right", Color: "000000", Style: 1},
  773. },
  774. })
  775. f.SetCellValue("Sheet1", "A1", "序号")
  776. f.SetCellValue("Sheet1", "B1", "操作时间")
  777. f.SetCellValue("Sheet1", "C1", "操作")
  778. f.SetCellValue("Sheet1", "D1", "借出(归还)人")
  779. f.SetCellValue("Sheet1", "E1", "关联项目")
  780. f.SetCellValue("Sheet1", "F1", "备注")
  781. f.SetCellValue("Sheet1", "G1", "设备数量")
  782. f.SetCellValue("Sheet1", "H1", "SN关联项目")
  783. f.SetCellValue("Sheet1", "I1", "SN数量")
  784. f.SetCellValue("Sheet1", "J1", "SN")
  785. // 这里设置表头
  786. f.SetCellStyle("Sheet1", "A1", "J1", Style2)
  787. f.SetRowHeight("Sheet1", 2, 20)
  788. // 设置列宽
  789. f.SetColWidth("Sheet1", "A", "A", 6)
  790. f.SetColWidth("Sheet1", "B", "B", 20)
  791. f.SetColWidth("Sheet1", "C", "C", 15)
  792. f.SetColWidth("Sheet1", "D", "D", 15)
  793. f.SetColWidth("Sheet1", "E", "E", 20)
  794. f.SetColWidth("Sheet1", "F", "F", 20)
  795. f.SetColWidth("Sheet1", "G", "G", 12)
  796. f.SetColWidth("Sheet1", "H", "H", 20)
  797. f.SetColWidth("Sheet1", "I", "I", 15)
  798. f.SetColWidth("Sheet1", "J", "J", 15)
  799. line := 1
  800. for i, v := range R_List {
  801. startRow := line + 1
  802. for _, sn := range v.T_sn_List {
  803. startRow2 := line + 1
  804. for _, v2 := range sn.T_sn {
  805. line++
  806. f.SetCellValue("Sheet1", fmt.Sprintf("J%d", line), v2)
  807. }
  808. f.MergeCell("Sheet1", fmt.Sprintf("H%d", startRow2), fmt.Sprintf("H%d", line))
  809. f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), sn.T_project)
  810. f.MergeCell("Sheet1", fmt.Sprintf("I%d", startRow2), fmt.Sprintf("I%d", line))
  811. f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), len(sn.T_sn))
  812. }
  813. f.MergeCell("Sheet1", fmt.Sprintf("A%d", startRow), fmt.Sprintf("A%d", line))
  814. f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), i+1)
  815. f.MergeCell("Sheet1", fmt.Sprintf("B%d", startRow), fmt.Sprintf("B%d", line))
  816. f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.BatchNumber)
  817. var state string
  818. switch v.T_state {
  819. case 1:
  820. state = "出库"
  821. case 2:
  822. state = "入库"
  823. case 3:
  824. state = "维修"
  825. case 4:
  826. state = "报废"
  827. case 5:
  828. state = "损坏"
  829. }
  830. f.MergeCell("Sheet1", fmt.Sprintf("C%d", startRow), fmt.Sprintf("C%d", line))
  831. f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), state)
  832. f.MergeCell("Sheet1", fmt.Sprintf("D%d", startRow), fmt.Sprintf("D%d", line))
  833. f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), v.LendUser)
  834. f.MergeCell("Sheet1", fmt.Sprintf("E%d", startRow), fmt.Sprintf("E%d", line))
  835. f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), strings.Join(v.T_project, "\r\n"))
  836. f.MergeCell("Sheet1", fmt.Sprintf("F%d", startRow), fmt.Sprintf("F%d", line))
  837. f.SetCellValue("Sheet1", fmt.Sprintf("F%d", line), v.T_remark)
  838. f.MergeCell("Sheet1", fmt.Sprintf("G%d", startRow), fmt.Sprintf("G%d", line))
  839. f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_sn_quantity)
  840. }
  841. f.SetCellStyle("Sheet1", "A2", fmt.Sprintf("J%d", line), Style4)
  842. timeStr := time.Now().Format("20060102150405")
  843. fileName := fmt.Sprintf("验证工具操作记录表%v.xlsx", timeStr)
  844. filePath := "ofile/" + "验证工具操作记录表" + timeStr + ".xlsx"
  845. // 保存文件
  846. if err := f.SaveAs(filePath); err != nil {
  847. logs.Error("保存文件失败:", err)
  848. }
  849. defer func() {
  850. os.Remove(filePath)
  851. }()
  852. c.Ctx.Output.Header("Content-Type", "application/vnd.ms-excel;charset=utf8")
  853. c.Ctx.Output.Header("Content-Disposition", "attachment; filename="+url.PathEscape(fileName))
  854. c.Ctx.Output.Header("Content-Transfer-Encoding", "binary")
  855. c.Ctx.Output.Download(filePath, fileName)
  856. }
  857. // 检查所有转移结果是否都失败
  858. func allSuccess(results []dto.TransferResult) bool {
  859. for _, r := range results {
  860. if !r.Success {
  861. return false
  862. }
  863. }
  864. return true
  865. }
  866. // 设备转移请求
  867. func (c *ValidationController) Transfer() {
  868. request := dto.TransferValidationToolReq{}
  869. if err := c.ParseForm(&request); err != nil {
  870. c.Data["json"] = lib.JSONS{Code: 202, Msg: "参数错误"}
  871. c.ServeJSON()
  872. return
  873. }
  874. if err := json.Unmarshal([]byte(request.T_sn), &request.T_sn_List); err != nil {
  875. c.Data["json"] = lib.JSONS{Code: 202, Msg: "sn 参数错误"}
  876. c.ServeJSON()
  877. return
  878. }
  879. if err := Validate(&request); err != nil {
  880. c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()}
  881. c.ServeJSON()
  882. return
  883. }
  884. if c.User.T_name == request.AcceptedUser {
  885. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "调用人不能与接收人相同!", Data: nil}
  886. c.ServeJSON()
  887. return
  888. }
  889. o := orm.NewOrm()
  890. o.Begin()
  891. vali := validationtool.NewValidationTool(o)
  892. valiRecord := validationtool.NewValidationToolRecord(o)
  893. BatchNumber := time.Now().Format("2006-01-02 15:04:05")
  894. var results []dto.TransferResult
  895. // 遍历所有SN进行检查和更新
  896. for _, sn := range request.T_sn_List {
  897. result := dto.TransferResult{T_sn: sn, Success: false, Status: "failed"}
  898. validation, err2 := vali.ReadValidationBytSn(sn)
  899. if err2 != nil {
  900. if err2.Error() == orm.ErrNoRows.Error() {
  901. result.Message = fmt.Sprintf("当前sn:%v 未入库", sn)
  902. } else {
  903. result.Message = fmt.Sprintf("查询sn:%v 失败", sn)
  904. }
  905. results = append(results, result)
  906. continue
  907. }
  908. // 检查设备当前状态是否为已出库或已损坏状态
  909. if validation.T_state != validationtool.ValidationToolStateStockOut && validation.T_state != validationtool.ValidationToolStateStockDamage {
  910. result.Message = fmt.Sprintf("当前sn:%v 未出库,无法进行转移", sn)
  911. results = append(results, result)
  912. continue
  913. }
  914. // 检查当前借出用户是否匹配
  915. if validation.LendUser != c.User.T_name {
  916. result.Message = fmt.Sprintf("当前sn:%v 的借出用户与请求不符", sn)
  917. results = append(results, result)
  918. continue
  919. }
  920. // 检查设备是否已经在转移中
  921. if validation.T_state == validationtool.ValidationToolStateTransferring {
  922. result.Message = fmt.Sprintf("当前sn:%v 正在转移中,请等待对方确认或取消当前转移[%s->%s]", sn, c.User.T_name, request.AcceptedUser)
  923. results = append(results, result)
  924. continue
  925. }
  926. // 设置转移中的状态
  927. validation.T_state = validationtool.ValidationToolStateTransferring
  928. validation.T_remark = request.Remark
  929. cols := []string{"T_remark", "T_state", "T_remark"}
  930. err := vali.UpdateValidationTool(validation, cols...)
  931. if err != nil {
  932. result.Message = fmt.Sprintf("更新设备sn:%v 状态失败", sn)
  933. results = append(results, result)
  934. continue
  935. }
  936. var separator string
  937. if len(request.Remark) > 0 {
  938. separator = " "
  939. }
  940. validation.T_remark = request.Remark + fmt.Sprintf("%s正在转移[%s->%s]", separator, c.User.T_name, request.AcceptedUser)
  941. _, err = valiRecord.ADD(validation, BatchNumber)
  942. if err != nil {
  943. result.Message = fmt.Sprintf("保存sn:%v 历史记录失败", sn)
  944. results = append(results, result)
  945. continue
  946. }
  947. result.Success = true
  948. result.Status = validationtool.TransferPending
  949. result.Message = fmt.Sprintf("sn:%v 转移请求已发送", sn)
  950. results = append(results, result)
  951. }
  952. // 任意一个不成功都回滚
  953. if !allSuccess(results) {
  954. o.Rollback() // 如果没有一个成功,则回滚所有操作
  955. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "转移失败!", Data: results}
  956. c.ServeJSON()
  957. return
  958. }
  959. transferRecord := validationtool.ValidationToolTransfer{
  960. TransferSn: request.T_sn,
  961. TransferUser: c.User.T_name,
  962. TransferUserUid: c.User.T_uuid,
  963. AcceptedUser: request.AcceptedUser,
  964. AcceptedUserUid: request.AcceptedUserUid,
  965. Status: validationtool.TransferPending,
  966. TransferRemark: request.Remark,
  967. }
  968. transferTool := validationtool.NewValidationToolTransfer(o)
  969. _, err := transferTool.Add(&transferRecord)
  970. if err != nil {
  971. o.Rollback()
  972. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "创建转移记录失败!", Data: nil}
  973. c.ServeJSON()
  974. return
  975. }
  976. err = o.Commit() // 提交事务
  977. if err != nil {
  978. o.Rollback() // 回滚事务
  979. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
  980. c.ServeJSON()
  981. return
  982. }
  983. NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "发起转移", request.T_sn)
  984. c.Data["json"] = lib.JSONS{Code: 200, Msg: "发起转移成功", Data: results}
  985. c.ServeJSON()
  986. return
  987. }
  988. // 确认接收设备
  989. func (c *ValidationController) ConfirmAccepted() {
  990. var request dto.ConfirmTransferValidationToolReq
  991. if err := c.ParseForm(&request); err != nil {
  992. c.Data["json"] = lib.JSONS{Code: 202, Msg: "参数错误"}
  993. c.ServeJSON()
  994. return
  995. }
  996. //if err := json.Unmarshal([]byte(request.T_sn), &request.T_sn_List); err != nil {
  997. // c.Data["json"] = lib.JSONS{Code: 202, Msg: "sn 参数错误"}
  998. // c.ServeJSON()
  999. // return
  1000. //}
  1001. if err := Validate(&request); err != nil {
  1002. c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()}
  1003. c.ServeJSON()
  1004. return
  1005. }
  1006. o := orm.NewOrm()
  1007. o.Begin()
  1008. vali := validationtool.NewValidationTool(o)
  1009. valiRecord := validationtool.NewValidationToolRecord(o)
  1010. BatchNumber := time.Now().Format("2006-01-02 15:04:05")
  1011. transfer := validationtool.NewValidationToolTransfer(o)
  1012. // 查询待处理的转移记录
  1013. transferRecord, err := transfer.GetPendingTransferById(request.TransferId)
  1014. if err != nil {
  1015. o.Rollback()
  1016. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 没有待确认的转移请求", request.T_sn), Data: nil}
  1017. c.ServeJSON()
  1018. return
  1019. }
  1020. // 检查确认用户是否为目标用户
  1021. if transferRecord.AcceptedUser != c.User.T_name {
  1022. o.Rollback()
  1023. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "您不是当前调用单的目标接收用户", Data: nil}
  1024. c.ServeJSON()
  1025. return
  1026. }
  1027. transferRecord_R := validationtool.ValidationToolTransferTo_R(transferRecord)
  1028. // 遍历所有SN进行检查和更新
  1029. for _, sn := range transferRecord_R.TransferSn {
  1030. // 查询设备信息
  1031. validation, err2 := vali.ReadValidationBytSn(sn)
  1032. if err2 != nil {
  1033. o.Rollback()
  1034. if err2.Error() == orm.ErrNoRows.Error() {
  1035. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 未入库", sn), Data: nil}
  1036. c.ServeJSON()
  1037. return
  1038. } else {
  1039. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("查询sn:%v 失败", sn), Data: nil}
  1040. c.ServeJSON()
  1041. return
  1042. }
  1043. }
  1044. // 检查设备是否在转移中
  1045. if validation.T_state != validationtool.ValidationToolStateTransferring {
  1046. o.Rollback()
  1047. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 不在转移状态", sn), Data: nil}
  1048. c.ServeJSON()
  1049. return
  1050. }
  1051. // 更新借出用户
  1052. validation.LendUser = c.User.T_name
  1053. // 将状态改回已出库
  1054. validation.T_state = validationtool.ValidationToolStateStockOut
  1055. validation.T_project = request.Project
  1056. validation.T_remark = request.Remark
  1057. cols := []string{"LendUser", "T_project", "T_state", "T_remark"}
  1058. err = vali.UpdateValidationTool(validation, cols...)
  1059. if err != nil {
  1060. o.Rollback()
  1061. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
  1062. c.ServeJSON()
  1063. return
  1064. }
  1065. var separator string
  1066. if len(request.Remark) > 0 {
  1067. separator = " "
  1068. }
  1069. validation.T_remark = request.Remark + fmt.Sprintf("%s确认已接收[%s->%s]", separator, transferRecord.TransferUser, c.User.T_name)
  1070. validation.T_state = validationtool.ValidationToolStateAccepted
  1071. _, err = valiRecord.ADD(validation, BatchNumber)
  1072. if err != nil {
  1073. o.Rollback() // 回滚事务
  1074. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
  1075. c.ServeJSON()
  1076. return
  1077. }
  1078. }
  1079. transferRecord.Status = validationtool.TransferCompleted
  1080. transferRecord.AcceptedNumber = request.Number
  1081. transferRecord.AcceptedRemark = request.Remark
  1082. transferRecord.AcceptedTime = time.Now()
  1083. transferTool := validationtool.NewValidationToolTransfer(o)
  1084. err = transferTool.Update(transferRecord, "Status", "AcceptedRemark", "AcceptedNumber", "AcceptedTime")
  1085. if err != nil {
  1086. o.Rollback()
  1087. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "更新转移记录失败!", Data: nil}
  1088. c.ServeJSON()
  1089. return
  1090. }
  1091. err = o.Commit() // 提交事务
  1092. if err != nil {
  1093. o.Rollback() // 回滚事务
  1094. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
  1095. c.ServeJSON()
  1096. return
  1097. }
  1098. NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "确认转移", request.TransferId)
  1099. c.Data["json"] = lib.JSONS{Code: 200, Msg: "设备转移确认成功!", Data: request.TransferId}
  1100. c.ServeJSON()
  1101. return
  1102. }
  1103. // 取消调用
  1104. func (c *ValidationController) CancelTransfer() {
  1105. TransferId, _ := c.GetInt("TransferId")
  1106. o := orm.NewOrm()
  1107. o.Begin()
  1108. vali := validationtool.NewValidationTool(o)
  1109. valiRecord := validationtool.NewValidationToolRecord(o)
  1110. BatchNumber := time.Now().Format("2006-01-02 15:04:05")
  1111. transfer := validationtool.NewValidationToolTransfer(o)
  1112. // 查询待处理的转移记录
  1113. transferRecord, err := transfer.GetPendingTransferById(TransferId)
  1114. if err != nil {
  1115. o.Rollback()
  1116. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "查询调用记录失败", Data: nil}
  1117. c.ServeJSON()
  1118. return
  1119. }
  1120. // 检查确认用户是否为目标用户
  1121. if transferRecord.TransferUser != c.User.T_name {
  1122. o.Rollback()
  1123. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "您不是当前转移单的发起用户", Data: nil}
  1124. c.ServeJSON()
  1125. return
  1126. }
  1127. transferRecord_R := validationtool.ValidationToolTransferTo_R(transferRecord)
  1128. // 遍历所有SN进行检查和更新
  1129. for _, sn := range transferRecord_R.TransferSn {
  1130. // 查询设备信息
  1131. validation, err2 := vali.ReadValidationBytSn(sn)
  1132. if err2 != nil {
  1133. o.Rollback()
  1134. if err2.Error() == orm.ErrNoRows.Error() {
  1135. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 未入库", sn), Data: nil}
  1136. c.ServeJSON()
  1137. return
  1138. } else {
  1139. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("查询sn:%v 失败", sn), Data: nil}
  1140. c.ServeJSON()
  1141. return
  1142. }
  1143. }
  1144. // 检查设备是否在转移中
  1145. if validation.T_state != validationtool.ValidationToolStateTransferring {
  1146. o.Rollback()
  1147. c.Data["json"] = lib.JSONS{Code: 1201, Msg: fmt.Sprintf("当前sn:%v 不在转移状态", sn), Data: nil}
  1148. c.ServeJSON()
  1149. return
  1150. }
  1151. // 更新借出用户
  1152. validation.LendUser = c.User.T_name
  1153. // 将状态改回已出库
  1154. validation.T_state = validationtool.ValidationToolStateStockOut
  1155. cols := []string{"LendUser", "T_state"}
  1156. err = vali.UpdateValidationTool(validation, cols...)
  1157. if err != nil {
  1158. o.Rollback()
  1159. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
  1160. c.ServeJSON()
  1161. return
  1162. }
  1163. validation.T_remark = "取消转移"
  1164. validation.T_state = validationtool.ValidationToolStateCancelTransfer
  1165. _, err = valiRecord.ADD(validation, BatchNumber)
  1166. if err != nil {
  1167. o.Rollback() // 回滚事务
  1168. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
  1169. c.ServeJSON()
  1170. return
  1171. }
  1172. }
  1173. transferRecord.Status = validationtool.TransferCanceled
  1174. transferTool := validationtool.NewValidationToolTransfer(o)
  1175. err = transferTool.Update(transferRecord, "Status")
  1176. if err != nil {
  1177. o.Rollback()
  1178. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "更新转移记录失败!", Data: nil}
  1179. c.ServeJSON()
  1180. return
  1181. }
  1182. err = o.Commit() // 提交事务
  1183. if err != nil {
  1184. o.Rollback() // 回滚事务
  1185. c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
  1186. c.ServeJSON()
  1187. return
  1188. }
  1189. NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "取消转移", TransferId)
  1190. c.Data["json"] = lib.JSONS{Code: 200, Msg: "设备取消转移成功!", Data: TransferId}
  1191. c.ServeJSON()
  1192. return
  1193. }
  1194. // GetTransferRecords 获取转移人的转移记录
  1195. // @router /transfer/records [get]
  1196. func (c *ValidationController) TransferRecords_List() {
  1197. // 分页参数 初始化
  1198. page, _ := c.GetInt("page")
  1199. if page < 1 {
  1200. page = 1
  1201. }
  1202. page_z, _ := c.GetInt("page_z")
  1203. if page_z < 1 {
  1204. page_z = conf.Page_size
  1205. }
  1206. status := c.GetString("status")
  1207. // 查询转移记录
  1208. o := orm.NewOrm()
  1209. vali := validationtool.NewValidationToolTransfer(o)
  1210. R_List, R_cnt := vali.GetTransferRecordsByUser(c.User.T_uuid, status, page, page_z)
  1211. var r_jsons lib.R_JSONS
  1212. r_jsons.Num = R_cnt
  1213. r_jsons.Data = R_List
  1214. r_jsons.Page = page
  1215. r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
  1216. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  1217. c.ServeJSON()
  1218. return
  1219. }
  1220. // GetPendingRecords 获取接收人的待接收记录
  1221. // @router /transfer/pending [get]
  1222. func (c *ValidationController) AcceptedRecords_List() {
  1223. // 分页参数 初始化
  1224. page, _ := c.GetInt("page")
  1225. if page < 1 {
  1226. page = 1
  1227. }
  1228. page_z, _ := c.GetInt("page_z")
  1229. if page_z < 1 {
  1230. page_z = conf.Page_size
  1231. }
  1232. status := c.GetString("status")
  1233. // 查询待接收记录
  1234. o := orm.NewOrm()
  1235. vali := validationtool.NewValidationToolTransfer(o)
  1236. R_List, R_cnt := vali.GetAcceptedRecordsByUser(c.User.T_uuid, status, page, page_z)
  1237. var r_jsons lib.R_JSONS
  1238. r_jsons.Num = R_cnt
  1239. r_jsons.Data = R_List
  1240. r_jsons.Page = page
  1241. r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
  1242. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  1243. c.ServeJSON()
  1244. return
  1245. }