123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- package bo
- import (
- "fmt"
- "io/fs"
- "os"
- "scd_check_tools/logger"
- "scd_check_tools/models/enum"
- "scd_check_tools/tools"
- "strconv"
- "strings"
- "github.com/astaxie/beego/orm"
- )
- //检测任务报告模型
- type T_data_task_report struct {
- Id int `orm:"pk"`
- Name string // '报告名称' ,
- Code string // '报告编号' ,
- TaskId int // '所属检测任务' ,
- State int // '生成状态;1 生成中 2生成结束' ,
- Doc string //'下载路径' ,
- Cr int // '创建人' ,
- Ct string // '创建时间' ,
- Ur int // '更新人' ,
- Ut string // '更新时间'
- }
- //检测任务管理对象
- type TaskReportMgr struct {
- Model T_data_task_report
- DeviceBaseModel
- }
- var modelDesc3 = "检测报告"
- func init() {
- orm.RegisterModel(new(T_data_task_report))
- }
- //生成报告
- func (c *TaskReportMgr) Make() (reprid int, err error) {
- taskMgr := new(TaskMgr)
- taskMgr.Model = T_data_task{Id: c.Model.TaskId}
- taskinfo, e := taskMgr.One()
- if e != nil {
- return 0, e
- }
- dblog := new(SystemLog)
- dblog.SetUserInfo(c.GetUserInfo())
- dblog.Audittype = enum.AuditType_check_task
- dblog.Logtype = enum.LogType_Insert
- dblog.Eventtype = enum.OptEventType_Bus
- dblog.Eventlevel = enum.OptEventLevel_Hight
- db := orm.NewOrm()
- c.Model.Name = taskinfo.Name
- c.Model.Code = taskinfo.Code
- if c.Model.Id == 0 {
- c.Model.Cr, _ = strconv.Atoi(c.GetUserId())
- newid, err2 := db.Insert(&c.Model)
- err = err2
- c.Model.Id = int(newid)
- } else {
- c.Model.Ur, _ = strconv.Atoi(c.GetUserId())
- _, err = db.Update(&c.Model)
- }
- if err != nil {
- logger.Logger.Error(err)
- dblog.Description = fmt.Sprintf("生成%s失败:%s,操作数据:%+v", modelDesc3, err.Error(), c.Model)
- dblog.Fail2()
- } else {
- //根据模板生成报告
- wordpath, err := c.ToWord(taskinfo.ReportId)
- if err != nil {
- c.Delete()
- return 0, err
- }
- c.Model.Doc = wordpath
- c.Model.State = 2
- _, err = db.Update(&c.Model)
- dblog.Description = fmt.Sprintf("生成%s成功,操作数据:%+v", modelDesc3, c.Model)
- dblog.Success2()
- }
- return c.Model.Id, err
- }
- func (c *TaskReportMgr) List(pageno, pagesize int) ([]orm.Params, int, error) {
- o := orm.NewOrm()
- rowset := []orm.Params{}
- sqlParams := []interface{}{}
- sql := "select * from t_data_task_report where 1=1 "
- if c.Model.TaskId > 0 {
- sql = sql + " and task_id=?"
- sqlParams = append(sqlParams, c.Model.TaskId)
- }
- if c.Model.Name != "" {
- sql = sql + " and name like ?"
- sqlParams = append(sqlParams, "%"+c.Model.Name+"%")
- }
- if c.Model.Code != "" {
- sql = sql + " and code like ?"
- sqlParams = append(sqlParams, "%"+c.Model.Code+"%")
- }
- limit := fmt.Sprintf(" order by ct desc limit %d,%d", (pageno-1)*pagesize, pagesize)
- _, err := o.Raw(sql+limit, sqlParams).Values(&rowset)
- total := []orm.Params{}
- _, err = o.Raw(strings.Replace(sql, "*", "count(1) cnt", 1), sqlParams).Values(&total)
- if err != nil {
- logger.Logger.Error(err)
- return nil, 0, err
- }
- totalCnt := 0
- if len(total) > 0 {
- totalCnt, _ = strconv.Atoi(tools.IsEmpty(total[0]["cnt"]))
- }
- return rowset, totalCnt, err
- }
- func (c *TaskReportMgr) One(taskid int) (T_data_task_report, error) {
- o := orm.NewOrm()
- tmp := T_data_task_report{}
- rowset := []orm.Params{}
- o.Raw("select * from t_data_task_report where task_id=?", taskid).Values(&rowset)
- if len(rowset) == 0 {
- return tmp, nil
- }
- tmp.Id, _ = strconv.Atoi(tools.IsEmpty(rowset[0]["id"]))
- tmp.Code = tools.IsEmpty(rowset[0]["code"])
- tmp.Name = tools.IsEmpty(rowset[0]["name"])
- tmp.TaskId = taskid
- tmp.Doc = tools.IsEmpty(rowset[0]["doc"])
- tmp.State, _ = strconv.Atoi(tools.IsEmpty(rowset[0]["state"]))
- return tmp, nil
- }
- //根据model中指定的id删除检测任务报告
- func (c *TaskReportMgr) Delete() (err error) {
- dblog := new(SystemLog)
- dblog.SetUserInfo(c.GetUserInfo())
- dblog.Audittype = enum.AuditType_check_task
- dblog.Logtype = enum.LogType_Delete
- dblog.Eventtype = enum.OptEventType_Bus
- dblog.Eventlevel = enum.OptEventLevel_Hight
- db := orm.NewOrm()
- if c.Model.Id > 0 {
- db.Read(&c.Model)
- _, err = db.Delete(&c.Model)
- }
- if c.Model.TaskId > 0 {
- _, err = db.Raw("delete from t_data_task_report where task_id=?", c.Model.TaskId).Exec()
- }
- if err != nil {
- logger.Logger.Error(err)
- dblog.Description = fmt.Sprintf("删除%s%d失败:%s", modelDesc3, c.Model.TaskId, err.Error())
- dblog.Fail2()
- } else {
- dblog.Description = fmt.Sprintf("删除%s%d成功", modelDesc3, c.Model.TaskId)
- dblog.Success2()
- }
- return err
- }
- func (c *TaskReportMgr) ToWord(tplid int) (path string, err error) {
- fileMgr := new(AttachmentMgr)
- fileMgr.Model = T_sys_attachment{Id: int32(tplid)}
- fileinfo, err := fileMgr.One()
- if err != nil {
- return "", err
- }
- reportPath := strings.Join([]string{".", "static", "download", "report"}, string(os.PathSeparator))
- os.MkdirAll(reportPath, fs.ModePerm)
- reportFN := reportPath + string(os.PathSeparator) + fmt.Sprintf("%s.%s", c.Model.Code, strings.Split(fileinfo.SavePath, ".")[0])
- err = os.Rename(fileinfo.SavePath, reportFN)
- if err != nil {
- return "", err
- }
- //生成报告数据
- return reportFN[1:], err
- }
|