task_report.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. package bo
  2. import (
  3. "fmt"
  4. "io/fs"
  5. "os"
  6. "scd_check_tools/logger"
  7. "scd_check_tools/models/enum"
  8. "scd_check_tools/tools"
  9. "strconv"
  10. "strings"
  11. "github.com/astaxie/beego/orm"
  12. )
  13. //检测任务报告模型
  14. type T_data_task_report struct {
  15. Id int `orm:"pk"`
  16. Name string // '报告名称' ,
  17. Code string // '报告编号' ,
  18. TaskId int // '所属检测任务' ,
  19. State int // '生成状态;1 生成中 2生成结束' ,
  20. Doc string //'下载路径' ,
  21. Cr int // '创建人' ,
  22. Ct string // '创建时间' ,
  23. Ur int // '更新人' ,
  24. Ut string // '更新时间'
  25. }
  26. //检测任务管理对象
  27. type TaskReportMgr struct {
  28. Model T_data_task_report
  29. DeviceBaseModel
  30. }
  31. var modelDesc3 = "检测报告"
  32. func init() {
  33. orm.RegisterModel(new(T_data_task_report))
  34. }
  35. //生成报告
  36. func (c *TaskReportMgr) Make() (reprid int, err error) {
  37. taskMgr := new(TaskMgr)
  38. taskMgr.Model = T_data_task{Id: c.Model.TaskId}
  39. taskinfo, e := taskMgr.One()
  40. if e != nil {
  41. return 0, e
  42. }
  43. dblog := new(SystemLog)
  44. dblog.SetUserInfo(c.GetUserInfo())
  45. dblog.Audittype = enum.AuditType_check_task
  46. dblog.Logtype = enum.LogType_Insert
  47. dblog.Eventtype = enum.OptEventType_Bus
  48. dblog.Eventlevel = enum.OptEventLevel_Hight
  49. db := orm.NewOrm()
  50. c.Model.Name = taskinfo.Name
  51. c.Model.Code = taskinfo.Code
  52. if c.Model.Id == 0 {
  53. c.Model.Cr, _ = strconv.Atoi(c.GetUserId())
  54. newid, err2 := db.Insert(&c.Model)
  55. err = err2
  56. c.Model.Id = int(newid)
  57. } else {
  58. c.Model.Ur, _ = strconv.Atoi(c.GetUserId())
  59. _, err = db.Update(&c.Model)
  60. }
  61. if err != nil {
  62. logger.Logger.Error(err)
  63. dblog.Description = fmt.Sprintf("生成%s失败:%s,操作数据:%+v", modelDesc3, err.Error(), c.Model)
  64. dblog.Fail2()
  65. } else {
  66. //根据模板生成报告
  67. wordpath, err := c.ToWord(taskinfo.ReportId)
  68. if err != nil {
  69. c.Delete()
  70. return 0, err
  71. }
  72. c.Model.Doc = wordpath
  73. c.Model.State = 2
  74. _, err = db.Update(&c.Model)
  75. dblog.Description = fmt.Sprintf("生成%s成功,操作数据:%+v", modelDesc3, c.Model)
  76. dblog.Success2()
  77. }
  78. return c.Model.Id, err
  79. }
  80. func (c *TaskReportMgr) List(pageno, pagesize int) ([]orm.Params, int, error) {
  81. o := orm.NewOrm()
  82. rowset := []orm.Params{}
  83. sqlParams := []interface{}{}
  84. sql := "select * from t_data_task_report where 1=1 "
  85. if c.Model.TaskId > 0 {
  86. sql = sql + " and task_id=?"
  87. sqlParams = append(sqlParams, c.Model.TaskId)
  88. }
  89. if c.Model.Name != "" {
  90. sql = sql + " and name like ?"
  91. sqlParams = append(sqlParams, "%"+c.Model.Name+"%")
  92. }
  93. if c.Model.Code != "" {
  94. sql = sql + " and code like ?"
  95. sqlParams = append(sqlParams, "%"+c.Model.Code+"%")
  96. }
  97. limit := fmt.Sprintf(" order by ct desc limit %d,%d", (pageno-1)*pagesize, pagesize)
  98. _, err := o.Raw(sql+limit, sqlParams).Values(&rowset)
  99. total := []orm.Params{}
  100. _, err = o.Raw(strings.Replace(sql, "*", "count(1) cnt", 1), sqlParams).Values(&total)
  101. if err != nil {
  102. logger.Logger.Error(err)
  103. return nil, 0, err
  104. }
  105. totalCnt := 0
  106. if len(total) > 0 {
  107. totalCnt, _ = strconv.Atoi(tools.IsEmpty(total[0]["cnt"]))
  108. }
  109. return rowset, totalCnt, err
  110. }
  111. func (c *TaskReportMgr) One(taskid int) (T_data_task_report, error) {
  112. o := orm.NewOrm()
  113. tmp := T_data_task_report{}
  114. rowset := []orm.Params{}
  115. o.Raw("select * from t_data_task_report where task_id=?", taskid).Values(&rowset)
  116. if len(rowset) == 0 {
  117. return tmp, nil
  118. }
  119. tmp.Id, _ = strconv.Atoi(tools.IsEmpty(rowset[0]["id"]))
  120. tmp.Code = tools.IsEmpty(rowset[0]["code"])
  121. tmp.Name = tools.IsEmpty(rowset[0]["name"])
  122. tmp.TaskId = taskid
  123. tmp.Doc = tools.IsEmpty(rowset[0]["doc"])
  124. tmp.State, _ = strconv.Atoi(tools.IsEmpty(rowset[0]["state"]))
  125. return tmp, nil
  126. }
  127. //根据model中指定的id删除检测任务报告
  128. func (c *TaskReportMgr) Delete() (err error) {
  129. dblog := new(SystemLog)
  130. dblog.SetUserInfo(c.GetUserInfo())
  131. dblog.Audittype = enum.AuditType_check_task
  132. dblog.Logtype = enum.LogType_Delete
  133. dblog.Eventtype = enum.OptEventType_Bus
  134. dblog.Eventlevel = enum.OptEventLevel_Hight
  135. db := orm.NewOrm()
  136. if c.Model.Id > 0 {
  137. db.Read(&c.Model)
  138. _, err = db.Delete(&c.Model)
  139. }
  140. if c.Model.TaskId > 0 {
  141. _, err = db.Raw("delete from t_data_task_report where task_id=?", c.Model.TaskId).Exec()
  142. }
  143. if err != nil {
  144. logger.Logger.Error(err)
  145. dblog.Description = fmt.Sprintf("删除%s%d失败:%s", modelDesc3, c.Model.TaskId, err.Error())
  146. dblog.Fail2()
  147. } else {
  148. dblog.Description = fmt.Sprintf("删除%s%d成功", modelDesc3, c.Model.TaskId)
  149. dblog.Success2()
  150. }
  151. return err
  152. }
  153. func (c *TaskReportMgr) ToWord(tplid int) (path string, err error) {
  154. fileMgr := new(AttachmentMgr)
  155. fileMgr.Model = T_sys_attachment{Id: int32(tplid)}
  156. fileinfo, err := fileMgr.One()
  157. if err != nil {
  158. return "", err
  159. }
  160. reportPath := strings.Join([]string{".", "static", "download", "report"}, string(os.PathSeparator))
  161. os.MkdirAll(reportPath, fs.ModePerm)
  162. reportFN := reportPath + string(os.PathSeparator) + fmt.Sprintf("%s.%s", c.Model.Code, strings.Split(fileinfo.SavePath, ".")[0])
  163. err = os.Rename(fileinfo.SavePath, reportFN)
  164. if err != nil {
  165. return "", err
  166. }
  167. //生成报告数据
  168. return reportFN[1:], err
  169. }